Ë
    êmxi¾à ã                   ó<	  — 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.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 d dl:Z:d dl;Z;d dl<Z<d dl=Z=d dl>Z?d dl@Z@d dlAmBZB d dlCZCd dlDZDd dlEZEd dlFZFd dlGZGd dlHZHd dlIZId dlJZKd„ ZL G d„ de«      ZM G d„ deM«      ZN G d„ de'«      ZO G d„ de'«      ZP G d„ deIj¢                  «      ZR G d„ deIj¢                  «      ZS G d„ d eM«      ZT G d!„ d"eM«      ZU G d#„ d$e'«      ZV G d%„ d&eM«      ZW G d'„ d(e'«      ZX G d)„ d*eM«      ZY G d+„ d,e'«      ZZ G d-„ d.eM«      Z[ G d/„ d0e'«      Z\ G d1„ d2e'«      Z] G d3„ d4e'«      Z^ G d5„ d6e'«      Z_ G d7„ d8e'«      Z` G d9„ d:e'«      Za G d;„ d<e'«      Z) G d=„ d>e'«      Zb G d?„ d@e'«      Zc G dA„ dBe'«      Zd G dC„ dDe'«      Ze G dE„ dFe'«      Zf G dG„ dHeM«      Zg G dI„ dJeM«      Zh G dK„ dLeM«      Zi G dM„ dNeM«      Zj G dO„ dPeM«      Zk G dQ„ dReM«      Zl G dS„ dTeM«      Zm G dU„ dVeM«      Zn G dW„ dXeM«      Zo G dY„ dZeM«      Zp G d[„ d\eM«      Zq G d]„ d^eN«      Zr G d_„ d`eN«      Zs G da„ dbeN«      Zt G dc„ ddeN«      Zu G de„ dfeN«      Zv G dg„ dheN«      Zw G di„ djeM«      Zx G dk„ dleN«      Zy G dm„ dneM«      Zz G do„ dpeN«      Z{ G dq„ dre|«      Z} G ds„ dteN«      Z~ G du„ dveN«      Z G dw„ dxeN«      Z€ G dy„ dzeN«      Z� G d{„ d|eN«      Z‚ G d}„ d~eM«      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ˆ G d‰„ dŠeM«      Z‰ G d‹„ dŒeM«      ZŠ G d�„ dŽeM«      Z‹ G d�„ d�eM«      ZŒ G d‘„ d’eM«      Z�e6 G d“„ d”e'«      «       ZŽ G d•„ d–«      Z� G d—„ d˜e�eM«      Z� G d™„ dše�eM«      Z‘ G d›„ dœeN«      Z’ G d�„ džeN«      Z“ G dŸ„ d eIj¢                  «      Z” G d¡„ d¢eN«      Z• G d£„ d¤eN«      Z– G d¥„ d¦eN«      Z— G d§„ d¨eN«      Z˜ G d©„ dªeM«      Z™ G d«„ d¬eM«      Zš G d­„ d®eN«      Z› G d¯„ d°eIj¢                  «      Zœ G d±„ d²e«      Z� G d³„ d´eIj¢                  «      Zž G dµ„ d¶eM«      ZŸ G d·„ d¸eM«      Z y)¹é    )Ú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ÚGZipContentEncodingN)ÚBytesIOc                  ó„   — t        j                  j                  t         j                  j                  t        «      g| ¢­Ž S ©N)ÚosÚpathÚjoinÚdirnameÚ__file__)Úas    úL/home/htdocs/ttos/venv/lib/python3.12/site-packages/tornado/test/web_test.pyÚrelpathr:   =   s'   € Ü�7‰7�<‰<œŸ™Ÿ™¬Ó1Ð6°AÒ6Ð6ó    c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)Ú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   — t        | j                  «       fi | j                  «       ¤Ž| _        | j                  S r2   )r   Úget_handlersÚget_app_kwargsÚapp©Úselfs    r9   Úget_appzWebTestCase.get_appH   s.   € Ü˜t×0Ñ0Ó2ÑL°d×6IÑ6IÓ6KÑLˆŒØ�x‰xˆr;   c                 ó   — t        «       ‚r2   ©ÚNotImplementedErrorrB   s    r9   r?   zWebTestCase.get_handlersL   s   € Ü!Ó#Ð#r;   c                 ó   — i S r2   © rB   s    r9   r@   zWebTestCase.get_app_kwargsO   ó   € Øˆ	r;   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rD   r?   r@   rI   r;   r9   r=   r=   A   s   „ ñòò$ór;   r=   c                   ó   — e Zd ZdZdZd„ Zy)Ú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‘lÐ#Ð$Ð$r;   )rK   rL   rM   rN   rT   r?   rI   r;   r9   rP   rP   S   s   „ ñð
 €Gó%r;   rP   c                   ó   — e Zd Zd„ Zy)ÚHelloHandlerc                 ó&   — | j                  d«       y ©NÚhello©ÚwriterB   s    r9   ÚgetzHelloHandler.get`   s   € Ø�
‰
�7Õr;   N©rK   rL   rM   r\   rI   r;   r9   rV   rV   _   s   „ ór;   rV   c                   ó"   — e Zd Zdd„Zd„ Zdd„Zy)ÚCookieTestRequestHandlerNc                 ó†   — i | _         |€t        t        |¬«      ¬«      | _        y t        t        ||¬«      ¬«      | _        y )N)Úcookie_secret)Úsettings©ra   Úkey_version)Ú_cookiesr   ÚdictÚapplication)rC   ra   rd   s      r9   Ú__init__z!CookieTestRequestHandler.__init__f   s=   € àˆŒØÐÜ)Ü¨MÔ:ô ˆDÕô  *Ü¨MÀ{ÔSô ˆDÕr;   c                 ó8   — | j                   j                  |«      S r2   )re   r\   )rC   Únames     r9   Ú
get_cookiez#CookieTestRequestHandler.get_cookier   s   € Ø�}‰}× Ñ  Ó&Ð&r;   c                 ó"   — || j                   |<   y r2   )re   )rC   rj   ÚvalueÚexpires_dayss       r9   Ú
set_cookiez#CookieTestRequestHandler.set_cookieu   s   € Ø#ˆ�‰�dÒr;   )Ú
0123456789Nr2   )rK   rL   rM   rh   rk   ro   rI   r;   r9   r_   r_   d   s   „ ó
ò'ô$r;   r_   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚSecureCookieV1Testc                 ó†   — t        «       }|j                  ddd¬«       | j                  |j                  dd¬«      d«       y )NÚfooó   baré   ©Úversion©Úmin_version©r_   Úset_signed_cookieÚassertEqualÚget_signed_cookie©rC   Úhandlers     r9   Útest_round_tripz"SecureCookieV1Test.test_round_trip{   ó?   € Ü*Ó,ˆØ×!Ñ! %¨¸Ð!Ô;Ø×Ñ˜×2Ñ2°5ÀaÐ2ÓHÈ&ÕQr;   c           	      óæ  — t        «       }|j                  dt        j                  d«      d¬«       |j                  d   }t        j                  d|«      }| j                  |«       |€J ‚|j                  d«      }|j                  d«      }| j                  t        |j                  j                  d   dd|«      |«       | j                  t        |j                  j                  d   dd	d
|z   «      |«       t        dt        |«      › dt        |«      › �«      |j                  d<   t        t         d«      5  | j#                  |j%                  dd¬«      «       d d d «       y # 1 sw Y   y xY w)Nrt   s   d76df8e7aefcrv   rw   s   12345678\|([0-9]+)\|([0-9a-f]+)é   ra   Ú12345678Ú1234s   5678z	1234|5678ú|zCookie timestamp in futurery   )r_   r|   ÚbinasciiÚa2b_hexre   ÚreÚmatchÚassertIsNotNoneÚgroupr}   r&   rg   rb   r   r
   r   r   ÚassertIsNoner~   )rC   r€   Úcookier‹   Ú	timestampÚsigs         r9   Ú&test_cookie_tampering_future_timestampz9SecureCookieV1Test.test_cookie_tampering_future_timestamp€   sn  € Ü*Ó,ˆà×!Ñ! %¬×)9Ñ)9¸/Ó)JÐTUÐ!ÔVØ×!Ñ! %Ñ(ˆÜ—‘Ð<¸fÓEˆØ×Ñ˜UÔ#ØÐ Ð Ð Ø—K‘K “Nˆ	Ø�k‰k˜!‹nˆØ×ÑÜ Ø×#Ñ#×,Ñ,¨_Ñ=ØØØó	ð ô	
ð 	×ÑÜ Ø×#Ñ#×,Ñ,¨_Ñ=ØØØ˜)Ñ#ó	ð ô	
ô #'Øœ iÓ0Ð1°´=ÀÓ3EÐ2FÐGó#
ˆ×Ñ˜Ñô ”wÐ <Ó=ñ 	OØ×Ñ˜g×7Ñ7¸È1Ð7ÓMÔN÷	O÷ 	Oñ 	Oús   Ä;#E'Å'E0c                 ó†   — t        «       }|j                  ddd¬«       | j                  |j                  dd¬«      d«       y )Nrt   ó   érv   rw   ry   r{   r   s     r9   Útest_arbitrary_bytesz'SecureCookieV1Test.test_arbitrary_bytes§   sA   € ô +Ó,ˆØ×!Ñ! %¨¸!Ð!Ô<Ø×Ñ˜×2Ñ2°5ÀaÐ2ÓHÈ'ÕRr;   N)rK   rL   rM   r�   r’   r•   rI   r;   r9   rr   rr   z   s   „ òRò
%OóNSr;   rr   c                   ó4   — e Zd ZdddœZd„ Zd„ Zd„ Zd„ Zd„ Zy	)
ÚSecureCookieV2TestÚajklasdf0ojaisdfÚaslkjasaolwkjsdf)r   rv   c                 ó†   — t        «       }|j                  ddd¬«       | j                  |j                  dd¬«      d«       y )Nrt   ru   r„   rw   ry   r{   r   s     r9   r�   z"SecureCookieV2Test.test_round_trip³   r‚   r;   c                 ó˜   — t        | j                  d¬«      }|j                  dd«       | j                  |j	                  d«      d«       y )Nr   rc   rt   ru   ©r_   ÚKEY_VERSIONSr|   r}   r~   r   s     r9   Útest_key_version_roundtripz-SecureCookieV2Test.test_key_version_roundtrip¸   óD   € Ü*Ø×+Ñ+¸ô
ˆð 	×!Ñ! %¨Ô0Ø×Ñ˜×2Ñ2°5Ó9¸6ÕBr;   c                 ó˜   — t        | j                  d¬«      }|j                  dd«       | j                  |j	                  d«      d«       y )Nrv   rc   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¬«      }|j                  dd«       t        | j                  d¬«      }|j                  |_        | j	                  |j                  d«      d«       y ©Nr   rc   rt   ru   rv   )r_   r�   r|   re   r}   r~   )rC   r€   Únew_handlers      r9   Ú"test_key_version_increment_versionz5SecureCookieV2Test.test_key_version_increment_versionÆ   si   € Ü*Ø×+Ñ+¸ô
ˆð 	×!Ñ! %¨Ô0Ü.Ø×+Ñ+¸ô
ˆð  '×/Ñ/ˆÔØ×Ñ˜×6Ñ6°uÓ=¸vÕFr;   c                 ó*  — t        | j                  d¬«      }|j                  dd«       | j                  j                  «       }|j	                  d«       t        |d¬«      }|j
                  |_        | j                  |j                  d«      d «       y r£   )r_   r�   r|   ÚcopyÚpopre   r}   r~   )rC   r€   Únew_key_versionsr¤   s       r9   Ú#test_key_version_invalidate_versionz6SecureCookieV2Test.test_key_version_invalidate_versionÑ   s†   € Ü*Ø×+Ñ+¸ô
ˆð 	×!Ñ! %¨Ô0Ø×,Ñ,×1Ñ1Ó3ÐØ×Ñ˜QÔÜ.Ø*¸ô
ˆð  '×/Ñ/ˆÔØ×Ñ˜×6Ñ6°uÓ=¸tÕDr;   N)	rK   rL   rM   r�   r�   rž   r¡   r¥   rª   rI   r;   r9   r—   r—   °   s+   „ Ø)Ð.@ÑA€LòRò
CòCò	GóEr;   r—   c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚFinalReturnTestNc                 ó\   ‡— | Š G ˆfd„dt         «      } G ˆfd„dt         «      }d|fd|fgS )Nc                   ó^   •— e Zd Zej                  ˆ fd„«       Zej                  ˆ fd„«       Zy)ú3FinalReturnTest.get_handlers.<locals>.FinishHandlerc              3   óT   •K  — | j                  «       ‰_        ‰j                  –— y ­wr2   )ÚfinishÚfinal_return©rC   Útests    €r9   r\   z7FinalReturnTest.get_handlers.<locals>.FinishHandler.getæ   s!   øè ø€ à$(§K¡K£M�Ô!Ø×'Ñ'Ó'ùs   ƒ%(c              3   óœ   •K  — | j                  d«       | j                  «       –— | j                  d«      ‰_        ‰j                  –— y ­w)Nzhello,Úworld)r[   Úflushr±   r²   r³   s    €r9   Úpostz8FinalReturnTest.get_handlers.<locals>.FinishHandler.postë   s<   øè ø€ à—
‘
˜8Ô$Ø—j‘j“lÒ"Ø$(§K¡K°Ó$8�Ô!Ø×'Ñ'Ó'ùs   ƒA	AN)rK   rL   rM   r   Ú	coroutiner\   r¸   ©r´   s   €r9   ÚFinishHandlerr¯   å   s1   ø„ Ø�]‰]ó(ó ð(ð �]‰]ó(ó ñ(r;   r»   c                   ó<   •— e Zd Zd„ Zej
                  ˆ fd„«       Zy)ú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Ð5r;   c                 ó2   •— | j                  d«      ‰_        y ©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½   ò   s    ø„ ò6ð �]‰]ó<ó ñ<r;   rÆ   ú/finishú/render©r   )rC   r»   rÆ   r´   s      @r9   r?   zFinalReturnTest.get_handlersâ   s7   ø€ Øˆö	(œNô 	(ö	<œNô 	<ð ˜MÐ*¨Y¸Ð,FÐGÐGr;   c                 ó   — t        d¬«      S )Nr¬   )Útemplate_path©rf   rB   s    r9   r@   zFinalReturnTest.get_app_kwargsü   s   € ÜÐ"3Ô4Ð4r;   c                 ó  — | j                  | j                  d«      «      }| j                  |j                  d«       | j	                  | j
                  t        «       | j                  | j
                  j                  «       «       | j                  | j                  d«      dd¬«      }| j                  |j                  d«       | j	                  | j
                  t        «       | j                  | j
                  j                  «       «       y )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Ó6ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜d×/Ñ/´Ô8Ø�‰˜×)Ñ)×.Ñ.Ó0Ô1à—:‘:˜dŸl™l¨9Ó5¸fÈ3�:ÓOˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜d×/Ñ/´Ô8Ø�‰˜×)Ñ)×.Ñ.Ó0Õ1r;   c                 ó¼   — | j                  | j                  d«      «      }| j                  |j                  d«       | j	                  | j
                  t        «       y )NrÈ   rÎ   )rÓ   rÔ   r}   rÕ   rÖ   r²   r   rÙ   s     r9   Ú test_render_method_return_futurez0FinalReturnTest.test_render_method_return_future
  sC   € Ø—:‘:˜dŸl™l¨9Ó5Ó6ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜d×/Ñ/´Õ8r;   )rK   rL   rM   r²   r?   r@   rÛ   rÝ   rI   r;   r9   r¬   r¬   ß   s   „ Ø€LòHò45ò	2ó9r;   r¬   c                   óH   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zy)Ú
CookieTestc           
      óJ  —  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g	S )Nc                   ó   — e Zd Zd„ Zy)ú1CookieTest.get_handlers.<locals>.SetCookieHandlerc                 óp   — | j                  dd«       | j                  dd«       | j                  dd«       y )NÚstrÚasdfÚunicodeÚqwerÚbytess   zxcv©ro   rB   s    r9   r\   z5CookieTest.get_handlers.<locals>.SetCookieHandler.get  s.   € ð —‘  vÔ.Ø—‘ 	¨6Ô2Ø—‘ ¨Õ1r;   Nr]   rI   r;   r9   ÚSetCookieHandlerrâ     s   „ ó2r;   rê   c                   ó   — e Zd Zd„ Zy)ú1CookieTest.get_handlers.<locals>.GetCookieHandlerc                 óR   — | j                  dd«      }|€J ‚| j                  |«       y )Nrt   Údefault)rk   r[   )rC   r�   s     r9   r\   z5CookieTest.get_handlers.<locals>.GetCookieHandler.get  s*   € ØŸ™¨°	Ó:�ØÐ)Ð)Ð)Ø—
‘
˜6Õ"r;   Nr]   rI   r;   r9   ÚGetCookieHandlerrì     s   „ ó#r;   rï   c                   ó   — e Zd Zd„ Zy)ú7CookieTest.get_handlers.<locals>.SetCookieDomainHandlerc                 ó.   — | j                  dddd¬«       y )NÚunicode_argsÚblahzfoo.comú/foo)Údomainr4   ré   rB   s    r9   r\   z;CookieTest.get_handlers.<locals>.SetCookieDomainHandler.get!  s   € ð —‘ °¸yÈv�ÕVr;   Nr]   rI   r;   r9   ÚSetCookieDomainHandlerrñ      s   „ óWr;   r÷   c                   ó   — e Zd Zd„ Zy)ú<CookieTest.get_handlers.<locals>.SetCookieSpecialCharHandlerc                 óp   — | j                  dd«       | j                  dd«       | j                  dd«       y )NÚequalsúa=bÚ	semicolonúa;bÚquoteúa"bré   rB   s    r9   r\   z@CookieTest.get_handlers.<locals>.SetCookieSpecialCharHandler.get'  s,   € Ø—‘ ¨%Ô0Ø—‘ ¨UÔ3Ø—‘ ¨Õ/r;   Nr]   rI   r;   r9   ÚSetCookieSpecialCharHandlerrù   &  s   „ ó0r;   r  c                   ó   — e Zd Zd„ Zy)ú:CookieTest.get_handlers.<locals>.SetCookieOverwriteHandlerc                 óx   — | j                  ddd¬«       | j                  ddd¬«       | j                  dd«       y )Nr8   Úbzexample.com)rö   ÚcÚdÚeré   rB   s    r9   r\   z>CookieTest.get_handlers.<locals>.SetCookieOverwriteHandler.get-  s6   € Ø—‘  S°�Ô?Ø—‘  S°�Ô?ð —‘  SÕ)r;   Nr]   rI   r;   r9   ÚSetCookieOverwriteHandlerr  ,  s   „ ó*r;   r	  c                   ó   — e Zd Zd„ Zy)ú7CookieTest.get_handlers.<locals>.SetCookieMaxAgeHandlerc                 ó,   — | j                  ddd¬«       y )Nrt   Úbaré
   )Úmax_ageré   rB   s    r9   r\   z;CookieTest.get_handlers.<locals>.SetCookieMaxAgeHandler.get5  s   € Ø—‘  u°b�Õ9r;   Nr]   rI   r;   r9   ÚSetCookieMaxAgeHandlerr  4  s   „ ó:r;   r  c                   ó   — e Zd Zd„ Zy)ú<CookieTest.get_handlers.<locals>.SetCookieExpiresDaysHandlerc                 ó,   — | j                  ddd¬«       y )Nrt   r  r  )rn   ré   rB   s    r9   r\   z@CookieTest.get_handlers.<locals>.SetCookieExpiresDaysHandler.get9  s   € Ø—‘  u¸2�Õ>r;   Nr]   rI   r;   r9   ÚSetCookieExpiresDaysHandlerr  8  s   „ ó?r;   r  c                   ó   — e Zd Zd„ Zy)ú4CookieTest.get_handlers.<locals>.SetCookieFalsyFlagsc                 ó¤   — | j                  ddd¬«       | j                  ddd¬«       | j                  ddd¬«       | j                  d	dd¬«       y )
Nr8   Ú1T)Úsecurer  Fr  )Úhttponlyr  ré   rB   s    r9   r\   z8CookieTest.get_handlers.<locals>.SetCookieFalsyFlags.get=  sJ   € Ø—‘  S°�Ô6Ø—‘  S°�Ô7Ø—‘  S°4�Ô8Ø—‘  S°5�Õ9r;   Nr]   rI   r;   r9   ÚSetCookieFalsyFlagsr  <  s   „ ó:r;   r  c                   ó   — e Zd Zd„ Zy)ú8CookieTest.get_handlers.<locals>.SetCookieDeprecatedArgsc                 ó.   — | j                  dddd¬«       y )Nr8   r  Trõ   )ÚHttpOnlyÚpATHré   rB   s    r9   r\   z<CookieTest.get_handlers.<locals>.SetCookieDeprecatedArgs.getD  s   € à—‘  S°4¸f�ÕEr;   Nr]   rI   r;   r9   ÚSetCookieDeprecatedArgsr  C  s   „ óFr;   r!  ú/setú/getú/set_domainú/special_charú/set_overwriteú/set_max_ageú/set_expires_daysú/set_falsy_flagsú/set_deprecatedrÉ   )
rC   rê   rï   r÷   r  r	  r  r  r  r!  s
             r9   r?   zCookieTest.get_handlers  sÏ   € ô	2œ~ô 	2ô	#œ~ô 	#ô	W¤^ô 	Wô	0¬.ô 	0ô	*¬ô 	*ô	:¤^ô 	:ô	?¬.ô 	?ô	:¤.ô 	:ô	F¤nô 	Fð Ð%Ð&ØÐ%Ð&ØÐ2Ð3ØÐ9Ð:ØÐ8Ð9ØÐ3Ð4Ø Ð"=Ð>ØÐ!4Ð5ØÐ 7Ð8ð

ð 
	
r;   c                 ó’   — | j                  d«      }| j                  t        |j                  j	                  d«      «      g d¢«       y )Nr"  ú
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_cookieT  s:   € Ø—:‘:˜fÓ%ˆØ×ÑÜ�8×#Ñ#×,Ñ,¨\Ó:Ó;ÚNõ	
r;   c                 ó*  — | j                  dddi¬«      }| j                  |j                  d«       | j                  dddi¬«      }| j                  |j                  d«       | j                  dddi¬«      }| j                  |j                  d«       y )	Nr#  ÚCookieúfoo=bar©r.  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ˆØ×Ñ˜Ÿ™¨Ô/à—:‘:˜f¨x¸Ð.E�:ÓFˆØ×Ñ˜Ÿ™¨Ô/à—:‘:˜f¨x¸Ð.H�:ÓIˆØ×Ñ˜Ÿ™¨
Õ3r;   c                 ó~   — | j                  d«      }| j                  |j                  j                  d«      dg«       y )Nr$  r,  z,unicode_args=blah; Domain=foo.com; Path=/foo©rÓ   r}   r.  r/  rÙ   s     r9   Útest_set_cookie_domainz!CookieTest.test_set_cookie_domaine  s8   € Ø—:‘:˜mÓ,ˆØ×ÑØ×Ñ×%Ñ% lÓ3Ø;Ð<õ	
r;   c                 óæ  — | j                  d«      }t        |j                  j                  d«      «      }| j	                  t        |«      d«       | j	                  |d   d«       | j	                  |d   d«       | j                  |d   d	|d   «       g d
¢}|D ]U  \  }}t        j                  d|«       | j                  dd|i¬«      }| j	                  |j                  t        |«      «       ŒW y )Nr%  r,  é   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 %rr#  r2  r4  )rÓ   r-  r.  r/  r}   ÚlenÚassertInÚloggingÚdebugrÒ   r   )rC   rÚ   r.  ÚdataÚheaderÚexpecteds         r9   Útest_cookie_special_charz#CookieTest.test_cookie_special_charl  sà   € Ø—:‘:˜oÓ.ˆÜ˜×)Ñ)×2Ñ2°<Ó@ÓAˆØ×Ñœ˜W› qÔ)Ø×Ñ˜ ™Ð%;Ô<Ø×Ñ˜ ™Ð%<Ô=à�‰Ø�A‰JØFØ�A‰Jô	
ò
ˆð !%ò 	<ÑˆF�HÜ�M‰M˜+ vÔ.Ø—z‘z &°8¸VÐ2D�zÓEˆHØ×Ñ˜XŸ]™]¬D°«NÕ;ñ	<r;   c                 ó–   — | j                  d«      }|j                  j                  d«      }| j                  t	        |«      ddg«       y )Nr&  r,  za=e; Path=/zc=d; Domain=example.com; Path=/©rÓ   r.  r/  r}   r-  ©rC   rÚ   r.  s      r9   Útest_set_cookie_overwritez$CookieTest.test_set_cookie_overwrite†  sD   € Ø—:‘:Ð.Ó/ˆØ×"Ñ"×+Ñ+¨LÓ9ˆØ×ÑÜ�7‹O˜mÐ-NÐOõ	
r;   c                 ó”   — | j                  d«      }|j                  j                  d«      }| j                  t	        |«      dg«       y )Nr'  r,  zfoo=bar; Max-Age=10; Path=/rF  rG  s      r9   Útest_set_cookie_max_agez"CookieTest.test_set_cookie_max_age�  s>   € Ø—:‘:˜nÓ-ˆØ×"Ñ"×+Ñ+¨LÓ9ˆØ×Ñœ ›Ð+HÐ*IÕJr;   c                 ó0  — | j                  d«      }|j                  j                  d«      }| j                  |«       |€J ‚t	        j
                  d|«      }| j                  |«       |€J ‚t        j                  j                  t        j                  j                  «      t        j                  d¬«      z   }t        j                  j                  |j                  «       d   «      }| j                  t!        ||z
  j#                  «       «      d«       y )Nr(  r,  z(foo=bar; expires=(?P<expires>.+); Path=/r  ©ÚdaysÚexpires)rÓ   r.  r\   rŒ   rŠ   r‹   ÚdatetimeÚnowÚtimezoneÚutcÚ	timedeltaÚemailÚutilsÚparsedate_to_datetimeÚ	groupdictÚ
assertLessÚabsÚtotal_seconds©rC   rÚ   rB  r‹   rN  Úheader_expiress         r9   Útest_set_cookie_expires_daysz'CookieTest.test_set_cookie_expires_days’  sç   € Ø—:‘:Ð1Ó2ˆØ×!Ñ!×%Ñ% lÓ3ˆØ×Ñ˜VÔ$ØÐ!Ð!Ð!Ü—‘ÐCÀVÓLˆØ×Ñ˜UÔ#ØÐ Ð Ð ä×#Ñ#×'Ñ'¬×(9Ñ(9×(=Ñ(=Ó>Ä×ASÑASØôB
ñ 
ˆô Ÿ™×:Ñ:¸5¿?¹?Ó;LÈYÑ;WÓXˆØ�‰œ˜W ~Ñ5×DÑDÓFÓGÈÕLr;   c                 ó  — | j                  d«      }t        |j                  j                  d«      «      }| j	                  |d   d«       | j	                  |d   d«       | j	                  |d   d«       | j	                  |d	   d
«       y )Nr)  r,  r   za=1; Path=/; Securerv   zb=1; Path=/r„   zc=1; HttpOnly; Path=/r<  zd=1; Path=/)rÓ   r-  r.  r/  r}   rG  s      r9   Útest_set_cookie_false_flagsz&CookieTest.test_set_cookie_false_flags¡  s~   € Ø—:‘:Ð0Ó1ˆÜ˜×)Ñ)×2Ñ2°<Ó@ÓAˆØ×Ñ˜ ™Ð%:Ô;Ø×Ñ˜ ™ ]Ô3Ø×Ñ˜ ™Ð%<Ô=Ø×Ñ˜ ™ ]Õ3r;   c                 ó¾   — t        «       5  | j                  d«      }d d d «       j                  j                  d«      }| j	                  |d«       y # 1 sw Y   Œ7xY w)Nr*  r,  za=b; HttpOnly; Path=/foo)r   rÓ   r.  r\   r}   )rC   rÚ   rB  s      r9   Útest_set_cookie_deprecatedz%CookieTest.test_set_cookie_deprecated©  sS   € ÜÓ!ñ 	5Ø—z‘zÐ"3Ó4ˆH÷	5à×!Ñ!×%Ñ% lÓ3ˆØ×Ñ˜Ð!;Õ<÷	5ð 	5ús   ‹AÁAN)rK   rL   rM   r?   r0  r7  r:  rD  rH  rJ  r]  r_  ra  rI   r;   r9   rß   rß     s8   „ òA
òF
ò4ò
ò<ò4
òKò
Mò4ó=r;   rß   c                   ó(   — e Zd Zd„ Zd„ Zed„ «       Zy)ÚAuthRedirectRequestHandlerc                 ó   — || _         y r2   ©Ú	login_url)rC   rf  s     r9   Ú
initializez%AuthRedirectRequestHandler.initialize±  s	   € Ø"ˆ�r;   c                 ó   — | j                   S r2   re  rB   s    r9   Úget_login_urlz(AuthRedirectRequestHandler.get_login_url´  s   € Ø�~‰~Ðr;   c                 ó&   — | j                  d«       y )Néô  )Ú
send_errorrB   s    r9   r\   zAuthRedirectRequestHandler.get·  s   € ð 	�‰˜Õr;   N)rK   rL   rM   rg  ri  r$   r\   rI   r;   r9   rc  rc  °  s    „ ò#òð ñó ñr;   rc  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚAuthRedirectTestc                 óN   — dt         t        d¬«      fdt         t        d¬«      fgS )Nú	/relativez/loginre  ú	/absolutezhttp://example.com/login)rc  rf   rB   s    r9   r?   zAuthRedirectTest.get_handlers¾  s0   € àÔ4´dÀXÔ6NÐOàÜ*ÜÐ9Ô:ðð
ð 	
r;   c                 ó¾   — | j                  | j                  d«      d¬«      }| j                  |j                  d«       | j                  |j                  d   d«       y )Nrp  F©Úfollow_redirectsé.  ÚLocationz/login?next=%2Frelative)rÓ   rÔ   r}   rÕ   r.  rÙ   s     r9   Útest_relative_auth_redirectz,AuthRedirectTest.test_relative_auth_redirectÈ  sM   € Ø—:‘:˜dŸl™l¨;Ó7È%�:ÓPˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Ñ5Ð7PÕQr;   c                 ó   — | j                  | j                  d«      d¬«      }| j                  |j                  d«       | j	                  t        j                  d|j                  d   «      |j                  d   «       y )Nrq  Frs  ru  zIhttp://example.com/login\?next=http%3A%2F%2F127.0.0.1%3A[0-9]+%2Fabsoluterv  )rÓ   rÔ   r}   rÕ   r×   rŠ   r‹   r.  rÙ   s     r9   Útest_absolute_auth_redirectz,AuthRedirectTest.test_absolute_auth_redirectÍ  sj   € Ø—:‘:˜dŸl™l¨;Ó7È%�:ÓPˆØ×Ñ˜Ÿ™¨Ô,Ø�‰Ü�H‰HØ\Ø× Ñ  Ñ,óð ×Ñ˜ZÑ(õ	
r;   N)rK   rL   rM   r?   rw  ry  rI   r;   r9   rn  rn  ½  s   „ ò
òRó
	
r;   rn  c                   ó<   — e Zd Zd„ Zej
                  d„ «       Zd„ Zy)ÚConnectionCloseHandlerc                 ó   — || _         y r2   rº   r³   s     r9   rg  z!ConnectionCloseHandler.initializeÚ  s	   € Øˆ�	r;   c              #   óŒ   K  — | j                   j                  «        | j                   j                  j                  «       –— y ­wr2   )r´   Úon_handler_waitingÚcleanup_eventÚwaitrB   s    r9   r\   zConnectionCloseHandler.getÝ  s/   è ø€ à�	‰	×$Ñ$Ô&Ø�i‰i×%Ñ%×*Ñ*Ó,Ó,ùó   ‚AAc                 ó8   — | j                   j                  «        y r2   )r´   Úon_connection_closerB   s    r9   rƒ  z*ConnectionCloseHandler.on_connection_closeâ  s   € Ø�	‰	×%Ñ%Õ'r;   N)rK   rL   rM   rg  r   r¹   r\   rƒ  rI   r;   r9   r{  r{  Ù  s$   „ òð 	‡]�]ñ-ó ð-ó(r;   r{  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚConnectionCloseTestc                 óH   — t        «       | _        dt        t        | ¬«      fgS )NrR   rº   )r   r  r{  rf   rB   s    r9   r?   z ConnectionCloseTest.get_handlersç  s!   € Ü"›WˆÔØÔ,¬d¸¬oÐ>Ð?Ð?r;   c                 óŽ  — t        j                   t         j                  t         j                  d«      }|j                  d| j	                  «       f«       t        |«      | _        | j                  j                  d«       | j                  «        | j                  j                  «        | j                  j                  d„ «       y )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>ó  s   € ¤c§i¡i°£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‰Mœ&Ÿ.™.¬&×*<Ñ*<¸aÓ@ˆØ	�	‰	�; × 2Ñ 2Ó 4Ð5Ô6Ü˜q“kˆŒØ�‰×ÑÐ3Ô4Ø�	‰	Œà×Ñ×ÑÔ Ø�‰×ÑÑ2Õ3r;   c                 ób   — t        j                  d«       | j                  j                  «        y )Nzhandler waiting)r?  r@  r’  ÚcloserB   s    r9   r~  z&ConnectionCloseTest.on_handler_waitingõ  s   € Ü�‰Ð'Ô(Ø�‰×ÑÕr;   c                 óN   — t        j                  d«       | j                  «        y )Nzconnection closed)r?  r@  ÚstoprB   s    r9   rƒ  z'ConnectionCloseTest.on_connection_closeù  s   € Ü�‰Ð)Ô*Ø�	‰	�r;   N)rK   rL   rM   r?   r—  r~  rƒ  rI   r;   r9   r…  r…  æ  s   „ ò@ò4òór;   r…  c                   ó   — e Zd Zd„ Zy)ÚEchoHandlerc           	      óŒ  — | j                   j                  D ]®  }t        |«      t        urt	        dt        |«      z  «      ‚| j                   j                  |   D ]*  }t        |«      t
        usŒt	        dt        |«      z  «      ‚ | j                  |«      D ]*  }t        |«      t        usŒt	        dt        |«      z  «      ‚ Œ° |D ]*  }t        |«      t        usŒt	        dt        |«      z  «      ‚ | j                  t        | j                   j                  |t        | j                   j                  «      ¬«      «       y )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[   rf   r4   r   )rC   r   ÚkeyÚbvalueÚsvalueÚargs         r9   r\   zEchoHandler.getÿ  s,  € ð
 —<‘<×)Ñ)ò 	SˆCÜ�C‹y¤Ñ#ÜÐ <¼tÀC»yÑ HÓIÐIØŸ,™,×0Ñ0°Ñ5ò S�Ü˜“<¤uÒ,Ü#Ð$BÄTÈ&Ã\Ñ$QÓRÐRðSð ×,Ñ,¨SÓ1ò S�Ü˜“<¤|Ò3Ü#Ð$BÄTÈ&Ã\Ñ$QÓRÐRñSð	Sð ò 	OˆCÜ�C‹y¤Ò,ÜÐ AÄDÈÃIÑ MÓNÐNð	Oð 	�
‰
ÜØ—\‘\×&Ñ&Ø#Ü& t§|¡|×'=Ñ'=Ó>ôõ	
r;   Nr]   rI   r;   r9   r�  r�  þ  s   „ ó
r;   r�  c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú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                 óJ   — t        | j                  |«      j                  «      S r2   )r   rÓ   rÒ   rÁ   s     r9   Ú
fetch_jsonzRequestEncodingTest.fetch_json  s   € Ü˜4Ÿ:™: dÓ+×0Ñ0Ó1Ð1r;   c           	      óÂ   — | j                  | j                  d«      t        ddgi ¬«      «       | j                  | j                  d«      t        ddgddgi¬«      «       y )Nz
/group/%3Fú?rŸ  z/group/%3F?%3F=%3F©r}   r¯  rf   rB   s    r9   Útest_group_question_markz,RequestEncodingTest.test_group_question_mark   s[   € à×ÑØ�O‰O˜LÓ)Ü�l¨s¨e¸"Ô=ô	
ð 	×ÑØ�O‰OÐ0Ó1Ü�l¨s¨e¸3ÀÀ¸,ÔGõ	
r;   c                 óV   — | j                  | j                  d«      ddgddgidœ«       y )Nz/group/%C3%A9?arg=%C3%A9z/group/%C3%A9õ   Ã©rª  rŸ  ©r}   r¯  rB   s    r9   Útest_group_encodingz'RequestEncodingTest.test_group_encoding+  s4   € à×ÑØ�O‰OÐ6Ó7à'Ø&˜ZØ  
Ð+ñõ	
r;   c                 óÀ   — | j                  | j                  d«      t        dddgi ¬«      «       | j                  | j                  d«      t        dddgi ¬«      «       y )Nz/slashes/foo/barrt   r  rŸ  z/slashes/a%2Fb/c%2Fdza/bzc/dr²  rB   s    r9   Útest_slashesz RequestEncodingTest.test_slashes6  s^   € ð 	×ÑØ�O‰OÐ.Ó/ÜÐ(°U¸E°NÈÔLô	
ð 	×ÑØ�O‰OÐ2Ó3ÜÐ,¸À¸ÈRÔPõ	
r;   c                 óp   — t        t        d«      5  | j                  d«       d d d «       y # 1 sw Y   y xY w)Nz.*Invalid unicodez/group/?arg=%25%e9)r   r   rÓ   rB   s    r9   Ú
test_errorzRequestEncodingTest.test_errorB  s1   € ô ”wÐ 3Ó4ñ 	-Ø�J‰JÐ+Ô,÷	-÷ 	-ñ 	-úó   ‘,¬5N)	rK   rL   rM   r?   r¯  r³  r·  r¹  r»  rI   r;   r9   r¬  r¬    s!   „ òYò2ò	
ò	
ò

ó-r;   r¬  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚTypeCheckHandlerc                 óþ  — i | _         | j                  d| j                  «       t        «       | j                  d| j	                  d«      t
        «       | j                  dt        | j                  j                  «       «      d   t        «       | j                  dt        | j                  j                  «       «      d   j                  t        «       t        | j                  j                  «       «      dgk7  r&t        d| j                  j                  «       z  «      ‚| j                  d	| j                  d«      t        «       | j                  d
| j                  d«      t        «       | j                  d| j                   t        «       | j                  d| j#                  «       t        «       | j                  d| j%                  dd«      t        «       | j                  d| j'                  «       t        «       y )NÚstatusÚargumentrt   Ú
cookie_keyr   Úcookie_valuerå   z%unexpected values for cookie keys: %rr~   rk   Ú
xsrf_tokenÚxsrf_form_htmlÚreverse_urlÚ	typecheckÚrequest_summary)ÚerrorsÚ
check_typeÚ
get_statusÚintÚget_argumentr   ÚlistÚcookiesÚkeysrä   Úvaluesrm   r¥  r~   rè   rk   rÄ  rÅ  rÆ  Ú_request_summaryrB   s    r9   ÚpreparezTypeCheckHandler.prepareJ  sm  € ØˆŒà�‰˜ $§/¡/Ó"3´SÔ9ð 	�‰˜
 D×$5Ñ$5°eÓ$<¼lÔKØ�‰˜¤d¨4¯<©<×+<Ñ+<Ó+>Ó&?ÀÑ&BÄCÔHØ�‰˜¬¨T¯\©\×-@Ñ-@Ó-BÓ(CÀAÑ(F×(LÑ(LÌcÔRô �—‘×!Ñ!Ó#Ó$¨¨Ò0ÜØ7¸$¿,¹,×:KÑ:KÓ:MÑMóð ð 	�‰Ð+¨T×-CÑ-CÀFÓ-KÌUÔSØ�‰˜ d§o¡o°fÓ&=¼sÔCà�‰˜ d§o¡o´uÔ=Ø�‰Ð(¨$×*=Ñ*=Ó*?ÄÔEà�‰˜ t×'7Ñ'7¸ÀUÓ'KÌSÔQà�‰Ð)¨4×+@Ñ+@Ó+BÄCÕHr;   c                 óh   — | j                  d|t        «       | j                  | j                  «       y ©NÚpath_component©rÊ  r   r[   rÉ  ©rC   rÖ  s     r9   r\   zTypeCheckHandler.gete  s%   € ð 	�‰Ð(¨.¼,ÔGØ�
‰
�4—;‘;Õr;   c                 óh   — | j                  d|t        «       | j                  | j                  «       y rÕ  r×  rØ  s     r9   r¸   zTypeCheckHandler.postk  s#   € Ø�‰Ð(¨.¼,ÔGØ�
‰
�4—;‘;Õr;   c                 óP   — t        |«      }||k7  rd|› d|› �| j                  |<   y y )Nz	expected z, got )r¤  rÉ  )rC   rj   ÚobjÚexpected_typeÚactual_types        r9   rÊ  zTypeCheckHandler.check_typeo  s3   € Ü˜3“iˆØ˜KÒ'Ø"+¨M¨?¸&ÀÀÐ NˆD�K‰K˜Òð (r;   N)rK   rL   rM   rÓ  r\   r¸   rÊ  rI   r;   r9   r¾  r¾  I  s   „ òIò6 ò óOr;   r¾  c                   ó   — e Zd Zdd„Zd„ Zy)ÚDecodeArgHandlerNc                 óî   — t        |«      t        urt        dt        |«      z  «      ‚d| j                  j                  v r4|j                  t        | j                  j                  d   d   «      «      S |S )Nzunexpected type for value: %rÚencodingr   )r¤  rè   r¥  r¢  r£  Údecoder   )rC   rm   rj   s      r9   Údecode_argumentz DecodeArgHandler.decode_argumentv  sb   € Ü�‹;œeÑ#ÜÐ;¼dÀ5»kÑIÓJÐJà˜Ÿ™×/Ñ/Ñ/Ø—<‘<¤
¨4¯<©<×+AÑ+AÀ*Ñ+MÈaÑ+PÓ QÓRÐRàˆLr;   c                 óh   — d„ }| j                   ||«       || j                  d«      «      dœ«       y )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€  sJ   € Ü�A‹wœ%ÑØ¤¬H×,<Ñ,<¸QÓ,?Ó!@ÐAÐAÜ�a“œLÑ(Ø! 1�~Ð%Ü˜NÓ+Ð+r;   rt   ©r4   Úquery)r[   rÍ  )rC   rª  rç  s      r9   r\   zDecodeArgHandler.get  s.   € ò	,ð 	�
‰
™H S›M±H¸T×=NÑ=NÈuÓ=UÓ4VÑWÕXr;   r2   )rK   rL   rM   rã  r\   rI   r;   r9   rß  rß  u  s   „ óóYr;   rß  c                   ó   — e Zd Zd„ Zy)ÚLinkifyHandlerc                 ó*   — | j                  dd¬«       y )Núlinkify.htmlzhttp://example.com)Úmessage©rÅ   rB   s    r9   r\   zLinkifyHandler.get‹  s   € Ø�‰�NÐ,@ˆÕAr;   Nr]   rI   r;   r9   rë  rë  Š  s   „ óBr;   rë  c                   ó   — e Zd Zd„ Zy)ÚUIModuleResourceHandlerc                 ó.   — | j                  dddg¬«       y )Nú	page.htmlrv   r„   )Úentriesrï  rB   s    r9   r\   zUIModuleResourceHandler.get�  s   € Ø�‰�K¨!¨Q¨ˆÕ0r;   Nr]   rI   r;   r9   rñ  rñ  �  s   „ ó1r;   rñ  c                   ó   — e Zd Zd„ Zy)ÚOptionalPathHandlerc                 ó*   — | j                  d|i«       y )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y)ÚMultiHeaderHandlerc                 ó”   — | j                  dd«       | j                  dd«       | j                  dd«       | j                  dd«       y )	Núx-overwriter  zX-Overwriter„   úx-multir<  zX-MultiÚ4)Ú
set_headerÚ
add_headerrB   s    r9   r\   zMultiHeaderHandler.getš  s:   € Ø�‰˜ sÔ+Ø�‰˜ qÔ)Ø�‰˜	 1Ô%Ø�‰˜	 3Õ'r;   Nr]   rI   r;   r9   rù  rù  ™  s   „ ó(r;   rù  c                   ó   — e Zd Zd„ Zy)r    c           
      ó"  — | j                  dd «      �5| j                  dt        t        | j                  d«      «      «      ¬«       y | j                  dd «      �,| j                  dt        | j                  d«      «      ¬«       y 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¢  sy   € Ø×Ñ˜[¨$Ó/Ð;Ø�M‰M˜#¬¬c°$×2CÑ2CÀKÓ2PÓ.QÓ)RˆMÕSØ×Ñ˜x¨Ó.Ð:Ø�M‰M˜#¤c¨$×*;Ñ*;¸HÓ*EÓ&FˆMÕGäÐFÓGÐGr;   Nr]   rI   r;   r9   r    r    ¡  s   „ óHr;   r    c                   ó0   — e Zd Zej                  d„ «       Zy)ÚEmptyFlushCallbackHandlerc              #   óà   K  — | j                  «       –— | j                  «       –— | j                  d«       | j                  «       –— | j                  «       –— | j                  d«       y ­w)NÚoÚk)r·   r[   r±   rB   s    r9   r\   zEmptyFlushCallbackHandler.get¬  sO   è ø€ ð
 �j‰j‹lÒØ�j‰j‹lÒØ�
‰
�3ŒØ�j‰j‹lÒØ�j‰j‹lÒØ�‰�CÕùs   ‚A,A.N)rK   rL   rM   r   r¹   r\   rI   r;   r9   r  r  «  s   „ Ø‡]�]ñ	ó ñ	r;   r  c                   ó   — e Zd Zd„ Zy)ÚHeaderInjectionHandlerc                 óª   — 	 | j                  dd«       t        d«      ‚# t        $ r*}dt        |«      v r| j	                  d«       n‚ Y d }~y 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º  sR   € ð	Ø�O‰O˜GÐ%8Ô9ÜÐ;Ó<Ð<øÜò 	Ø$¬¨A«Ñ.Ø—‘˜EÕ"àô #ûð	ús   ‚ Ÿ	A¨ AÁANr]   rI   r;   r9   r  r  ¹  s   „ ór;   r  c                   ó   — e Zd Zd„ Zy)ÚSetHeaderHandlerc                 óŠ  — t        dd«      D �cg c]  }t        |«      ‘Œ }}|j                  t        d«      «       |j                  d«       |D ]%  }	 | j	                  dd|z   dz   «       t        d«      ‚ | j	                  dd
«       | j                  d«       y c c}w # t        $ r}d	t        |«      vr‚ Y d }~Œmd }~ww xY w)Nr   é    é   ú	r  rt   r  r  r  Ú r  )	ÚrangeÚchrÚappendÚremoverþ  r¥  r  rä   r±   )rC   r  Úillegal_charsÚcharr  s        r9   r\   zSetHeaderHandler.getÆ  s½   € ä).¨q°$«Ö8 Aœ˜Q�Ð8ˆÐ8Ø×ÑœS ›YÔ'Ø×Ñ˜TÔ"Ø!ò 	ˆDðØ—‘ ¨°©¸Ñ)=Ô>ÜÐ ?Ó@Ð@ð	ð 	�‰˜ Ô$à�‰�EÕùò 9øô ò Ø(´°A³Ñ6Øô 7ûðús   �BÁ#B!Â!	CÂ*B=Â=CNr]   rI   r;   r9   r  r  Å  s   „ ór;   r  c                   ó   — e Zd Zd„ Zy)ÚGetArgumentHandlerc                 óÔ   — | j                  dd «      dk(  r| j                  }n.| j                  dd «      dk(  r| j                  }n| j                   }| j                   |dd«      «       y )NÚsourceré  rÒ   rt   rî   )rÍ  Úget_query_argumentÚget_body_argumentr±   ©rC   rÑ   s     r9   rÓ  zGetArgumentHandler.prepareÚ  s`   € Ø×Ñ˜X tÓ,°Ò7Ø×,Ñ,‰FØ×Ñ˜x¨Ó.°&Ò8Ø×+Ñ+‰Fà×&Ñ&ˆFØ�‰‘F˜5 )Ó,Õ-r;   N©rK   rL   rM   rÓ  rI   r;   r9   r!  r!  Ù  s   „ ó.r;   r!  c                   ó   — e Zd Zd„ Zy)ÚGetArgumentsHandlerc           	      ó˜   — | j                  t        | j                  d«      | j                  d«      | j	                  d«      ¬«      «       y )Nrt   ©rî   ré  rÒ   )r±   rf   r¦  Úget_query_argumentsÚget_body_argumentsrB   s    r9   rÓ  zGetArgumentsHandler.prepareå  s@   € Ø�‰ÜØ×*Ñ*¨5Ó1Ø×.Ñ.¨uÓ5Ø×,Ñ,¨UÓ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                 óP   — 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Ú
autoescapera   )r   rf   ÚCOOKIE_SECRET)rC   Úloaders     r9   r@   zWSGISafeWebTest.get_app_kwargsó  s<   € Üà ?ðð ñó
ˆô& Ø"Ø%Ø×,Ñ,ô
ð 	
r;   c                 ó^   •— t         ‰| �  «        t        j                  j	                  «        y r2   ©ÚsuperÚtearDownr   Ú_template_loadersÚclear©rC   Ú	__class__s    €r9   r9  zWSGISafeWebTest.tearDown  ó    ø€ Ü‰ÑÔÜ×(Ñ(×.Ñ.Õ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Ç  )rj   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  r!  r)  r  )rC   Úurlss     r9   r?   zWSGISafeWebTest.get_handlers  sç   € äÐ!Ô#3¸+ÔFÜÐ"Ô$4¸<ÔHÜÐ,Ô.>Ó?Ü�
œNÓ+ÜÐ%Ô'>Ó?ÜÐ&Ô(;Ó<Ü�Ô!3Ó4Ü�œ_Ó-ÜØ)Ü"ØÐ/Ð0óô
 ØÜ"Ø/¸eÑDóô
 Ø-Ü"ØÐ/Ð0óô
 Ð#Ô%;Ó<Ü�Ô!3Ó4ÜÐ Ô"5Ó6Ü�Ô/Ó0ð7
ˆð: ˆr;   c                 óp   —  | j                   |i |¤Ž}|j                  «        t        |j                  «      S r2   )rÓ   Úrethrowr   rÒ   )rC   r¡  ÚkwargsrÚ   s       r9   r¯  zWSGISafeWebTest.fetch_json1  s2   € Ø�4—:‘:˜tÐ. vÑ.ˆØ×ÑÔÜ˜8Ÿ=™=Ó)Ð)r;   c                 óö   — t        t        | j                  dd«      «      }| j                  ddd|z   i¬«      }t	        |j
                  «      }| j                  |i «       | j                  dddd|z   id¬	«      }y )
Nrå   rç   z/typecheck/asdf?foo=barr2  zasdf=r4  rÏ   r3  ©rÑ   r.  rÒ   )r   r'   r4  rÓ   r   rÒ   r}   )rC   rÃ  rÚ   rA  s       r9   Ú
test_typeszWSGISafeWebTest.test_types6  s‹   € Ü!Ü × 2Ñ 2°F¸FÓCó
ˆð —:‘:Ø%°¸'ÀLÑ:PÐ/Qð ó 
ˆô ˜8Ÿ=™=Ó)ˆØ×Ñ˜˜rÔ"à—:‘:Ø%ØØ˜w¨Ñ5Ð6Øð	 ó 
‰r;   c                 óV  — g d¢}|D ]Q  }| j                  |«      }|j                  «        t        |j                  «      }| j	                  |ddgddgdœ«       ŒS | j                  d«      }|j                  «        t        |j                  «      }| j	                  |ddgddgdœ«       y )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Ó   rN  r   rÒ   r}   ©rC   rL  Úreq_urlrÚ   rA  s        r9   Útest_decode_argumentz$WSGISafeWebTest.test_decode_argumentG  s¯   € ò
ˆð
 ò 	ˆGØ—z‘z 'Ó*ˆHØ×ÑÔÜ˜xŸ}™}Ó-ˆDØ×ÑØØ# XÐ.¸)ÀXÐ9NÑOõð		ð —:‘:Ð=Ó>ˆØ×ÑÔÜ˜8Ÿ=™=Ó)ˆØ×Ñ˜¨°&Ð(9ÀWÈfÐDUÑVÕWr;   c                 ó  — t        t        d«      5  | j                  d«      }| j                  |j                  d«       | j                  d«      }| j                  |j                  d«       d d d «       y # 1 sw Y   y xY w)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\  sh   € ä”wÐ 5Ó6ñ 	1Ø—z‘zÐ"9Ó:ˆHØ×Ñ˜XŸ]™]¨CÔ0Ø—z‘zÐ">Ó?ˆHØ×Ñ˜XŸ]™]¨CÔ0÷		1÷ 	1ñ 	1ús   ‘AA5Á5A>c                 ó¸   — ddg}|D ]Q  }| j                  |«      }|j                  «        t        |j                  «      }| j	                  |ddgddgdœ«       ŒS y )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è  rU  rV  s        r9   Útest_decode_argument_plusz)WSGISafeWebTest.test_decode_argument_plusd  sn   € ð EØ>ð
ˆð ò 	ˆGØ—z‘z 'Ó*ˆHØ×ÑÔÜ˜xŸ}™}Ó-ˆDØ×ÑØØ# WÐ-¸ÀGÐ8LÑMõñ		r;   c                 ó¼  — | j                  | j                  j                  dd«      d«       | j                  | j                  j                  dd«      d«       | j                  | j                  j                  dd«      d«       | j                  | j                  j                  dd«      d	«       | j                  | j                  j                  dd
«      d«       y )Nr@  rt   z/decode_arg/fooé*   z/decode_arg/42r”   z/decode_arg/%E9rµ  z/decode_arg/%C3%A9r^  z/decode_arg/1%20%2B%201)r}   rA   rÆ  rB   s    r9   Útest_reverse_urlz WSGISafeWebTest.test_reverse_urls  s´   € Ø×Ñ˜Ÿ™×-Ñ-¨l¸EÓBÐDUÔVØ×Ñ˜Ÿ™×-Ñ-¨l¸BÓ?ÐAQÔRØ×Ñ˜Ÿ™×-Ñ-¨l¸GÓDÐFWÔXØ×ÑØ�H‰H× Ñ  ¨xÓ8Ð:Nô	
ð 	×ÑØ�H‰H× Ñ  ¨wÓ7Ð9Rõ	
r;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )NrA  s3   <a href="http://example.com">http://example.com</a>r6  rÙ   s     r9   Útest_uimodule_unescapedz'WSGISafeWebTest.test_uimodule_unescaped~  s(   € Ø—:‘:˜jÓ)ˆØ×ÑØ�M‰MÐQõ	
r;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )NrB  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>r6  rÙ   s     r9   Útest_uimodule_resourcesz'WSGISafeWebTest.test_uimodule_resources„  s+   € Ø—:‘:Ð3Ó4ˆØ×ÑØ�M‰Mðõ	
r;   c                 ó�   — | j                  | j                  d«      ddi«       | j                  | j                  d«      dd i«       y )Nz/optional_path/foor4   rt   z/optional_path/r¶  rB   s    r9   Útest_optional_pathz"WSGISafeWebTest.test_optional_path   s>   € Ø×Ñ˜Ÿ™Ð)=Ó>ÀÈÀÔPØ×Ñ˜Ÿ™Ð):Ó;¸fÀd¸^ÕLr;   c                 ó¾   — | j                  d«      }| j                  |j                  d   d«       | j                  |j                  j                  d«      ddg«       y )NrC  rû  Ú2rü  Ú3rý  r9  rÙ   s     r9   Útest_multi_headerz!WSGISafeWebTest.test_multi_header¤  sP   € Ø—:‘:˜oÓ.ˆØ×Ñ˜×)Ñ)¨-Ñ8¸#Ô>Ø×Ñ˜×)Ñ)×2Ñ2°9Ó=ÀÀS¸zÕJr;   c                 ó  — | j                  dd¬«      }| j                  |j                  d«       | j                  dd¬«      }| j                  |j                  d«       | j                  dd¬«      }| j                  |j                  d«       y )	Nz/redirect?permanent=1Frs  é-  z/redirect?permanent=0ru  z/redirect?status=307i3  ©rÓ   r}   rÕ   rÙ   s     r9   Útest_redirectzWSGISafeWebTest.test_redirect©  sw   € Ø—:‘:Ð5È�:ÓNˆØ×Ñ˜Ÿ™¨Ô,Ø—:‘:Ð5È�:ÓNˆØ×Ñ˜Ÿ™¨Ô,Ø—:‘:Ð4Àu�:ÓMˆØ×Ñ˜Ÿ™¨Õ,r;   c                 ó<  — | j                  dd¬«      }| j                  |j                  d«       | j                  |j                  d   d«       | j                  dd¬«      }| j                  |j                  d«       | j                  |j                  d   d«       y )	NrD  Frs  rn  rv  rE  rF  ru  ©rÓ   r}   rÕ   r.  rÙ   s     r9   Útest_web_redirectz!WSGISafeWebTest.test_web_redirect±  s‡   € Ø—:‘:Ð7È%�:ÓPˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Ñ5Ð7NÔOØ—:‘:˜oÀ�:ÓFˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Ñ5Ð7NÕOr;   c                 ó    — | j                  dd¬«      }| j                  |j                  d«       | j                  |j                  d   d«       y )NrG  Frs  rn  rv  rE  rr  rÙ   s     r9   Útest_web_redirect_double_slashz.WSGISafeWebTest.test_web_redirect_double_slash¹  sE   € Ø—:‘:Ð;Èe�:ÓTˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Ñ5Ð7NÕOr;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )NrH  r  r6  rÙ   s     r9   Útest_header_injectionz%WSGISafeWebTest.test_header_injection¾  s%   € Ø—:‘:Ð1Ó2ˆØ×Ñ˜Ÿ™¨Õ.r;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )NrJ  r  r6  rÙ   s     r9   Útest_set_headerzWSGISafeWebTest.test_set_headerÂ  s$   € Ø—:‘:˜mÓ,ˆØ×Ñ˜Ÿ™¨Õ.r;   c                 óV  — | j                  d«      }| j                  |j                  d«       | j                  d«      }| j                  |j                  d«       | j                  d«      }| j                  |j                  d«       t        j                  j                  t        d¬«      «      }| j                  dd	|¬
«      }| j                  |j                  d«       | j                  dd	|¬
«      }| j                  t        |j                  «      t        ddgdgdg¬«      «       y )Nz/get_argument?foo=barru   z/get_argument?foo=r;   rI  r5  rY   ©rt   rÏ   rÐ   ó   helloz/get_arguments?foo=barr  r+  )rÓ   r}   rÒ   ÚurllibÚparseÚ	urlencoderf   r   )rC   rÚ   rÒ   s      r9   Útest_get_argumentz!WSGISafeWebTest.test_get_argumentÆ  sò   € Ø—:‘:Ð5Ó6ˆØ×Ñ˜Ÿ™¨Ô/Ø—:‘:Ð2Ó3ˆØ×Ñ˜Ÿ™¨Ô,Ø—:‘:˜oÓ.ˆØ×Ñ˜Ÿ™¨
Ô3ô �|‰|×%Ñ%¤d¨wÔ&7Ó8ˆØ—:‘:Ð5¸fÈ4�:ÓPˆØ×Ñ˜Ÿ™¨Ô1à—:‘:Ð6¸vÈD�:ÓQˆØ×ÑÜ˜Ÿ™Ó&Ü˜% Ð)°%°À¸yÔIõ	
r;   c                 óv  — t         j                  j                  t        d¬«      «      }| j	                  dd|¬«      }| j                  |j                  d«       | j	                  dd|¬«      }| j                  |j                  d«       | j	                  d	d|¬«      }| j                  |j                  d
«       y )NrY   r{  z"/get_argument?source=query&foo=barrÏ   rÐ   ru   z/get_argument?source=query&foo=r;   z/get_argument?source=queryr5  ©r}  r~  r  rf   rÓ   r}   rÒ   ©rC   rÒ   rÚ   s      r9   Útest_get_query_argumentsz(WSGISafeWebTest.test_get_query_argumentsÚ  s§   € ô �|‰|×%Ñ%¤d¨wÔ&7Ó8ˆØ—:‘:Ø0¸Àdð ó 
ˆð 	×Ñ˜Ÿ™¨Ô/Ø—:‘:Ø-°fÀ4ð ó 
ˆð 	×Ñ˜Ÿ™¨Ô,Ø—:‘:Ð:À6ÐPT�:ÓUˆØ×Ñ˜Ÿ™¨
Õ3r;   c                 ó  — t         j                  j                  t        d¬«      «      }| j	                  dd|¬«      }| j                  |j                  d«       t         j                  j                  t        d¬«      «      }| j	                  dd|¬«      }| j                  |j                  d«       t         j                  j                  t        «       «      }| j	                  dd|¬«      }| j                  |j                  d	«       y )
Nr  r{  z#/get_argument?source=body&foo=hellorÏ   rÐ   ru   r  r;   r5  r‚  rƒ  s      r9   Útest_get_body_argumentsz'WSGISafeWebTest.test_get_body_argumentsé  sØ   € Ü�|‰|×%Ñ%¤d¨u¤oÓ6ˆØ—:‘:Ø1¸&Àtð ó 
ˆð 	×Ñ˜Ÿ™¨Ô/ä�|‰|×%Ñ%¤d¨r¤lÓ3ˆØ—:‘:Ø1¸&Àtð ó 
ˆð 	×Ñ˜Ÿ™¨Ô,ä�|‰|×%Ñ%¤d£fÓ-ˆØ—:‘:Ø1¸&Àtð ó 
ˆð 	×Ñ˜Ÿ™¨
Õ3r;   c                 óÖ   — | j                  d«      }| j                  d|j                  j                  dd«      «       | j                  d|j                  j                  dd«      «       y )NrI  úAccept-EncodingÚVaryr  ÚgzipúContent-Encoding)rÓ   ÚassertNotInr.  r\   rÙ   s     r9   Útest_no_gzipzWSGISafeWebTest.test_no_gzipü  sX   € Ø—:‘:˜oÓ.ˆØ×ÑÐ*¨H×,<Ñ,<×,@Ñ,@ÀÈÓ,LÔMØ×Ñ˜ ×!1Ñ!1×!5Ñ!5Ð6HÈ"Ó!MÕNr;   )rK   rL   rM   r4  r@   r9  r?   r¯  rR  rX  r\  r_  rb  rd  rf  rh  rl  rp  rs  ru  rw  ry  r€  r„  r†  r�  Ú__classcell__©r=  s   @r9   r/  r/  ð  s}   ø„ Ø+€Mò
ô41òò@*ò

ò"Xò*1òò	
ò
ò
ò8MòKò
-òPòPò
/ò/ò
ò(4ò4ö&Or;   r/  c                   ó   — e Zd Zd„ Zd„ Zy)ÚNonWSGIWebTestsc                 ó   — dt         fgS )Nú/empty_flush)r  rB   s    r9   r?   zNonWSGIWebTests.get_handlers  s   € ØÔ!:Ð;Ð<Ð<r;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )Nr“  r  r6  rÙ   s     r9   Útest_empty_flushz NonWSGIWebTests.test_empty_flush  s$   € Ø—:‘:˜nÓ-ˆØ×Ñ˜Ÿ™¨Õ.r;   N)rK   rL   rM   r?   r•  rI   r;   r9   r‘  r‘    s   „ ò=ó/r;   r‘  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)Ú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y)ú6ErrorResponseTest.get_handlers.<locals>.DefaultHandlerc                 óx   — | j                  dd «      r#t        t        | j                  d«      «      «      ‚ddz   y ©NrÀ  rv   r   )rÍ  r!   rÌ  rB   s    r9   r\   z:ErrorResponseTest.get_handlers.<locals>.DefaultHandler.get  s4   € Ø×$Ñ$ X¨tÔ4Ü#¤C¨×(9Ñ(9¸(Ó(CÓ$DÓEÐEØ�A“r;   Nr]   rI   r;   r9   ÚDefaultHandlerrš    s   „ ór;   r�  c                   ó   — e Zd Zd„ Zd„ Zy)ú9ErrorResponseTest.get_handlers.<locals>.WriteErrorHandlerc                 ó†   — | j                  dd «      r*| j                  t        | j                  d«      «      «       y ddz   y rœ  )rÍ  rl  rÌ  rB   s    r9   r\   z=ErrorResponseTest.get_handlers.<locals>.WriteErrorHandler.get  s5   € Ø×$Ñ$ X¨tÔ4Ø—O‘O¤C¨×(9Ñ(9¸(Ó(CÓ$DÕEà˜“Er;   c                 ó¢   — | j                  dd«       d|v r%| j                  d|d   d   j                  z  «       y | j                  d|z  «       y )NúContent-Typeú
text/plainÚexc_infozException: %sr   z
Status: %d)rþ  r[   rK   ©rC   Ústatus_coderO  s      r9   Úwrite_errorzEErrorResponseTest.get_handlers.<locals>.WriteErrorHandler.write_error  sJ   € Ø—‘ °Ô=Ø Ñ'Ø—J‘J˜°¸
Ñ1CÀAÑ1F×1OÑ1OÑOÕPà—J‘J˜|¨kÑ9Õ:r;   N©rK   rL   rM   r\   r§  rI   r;   r9   ÚWriteErrorHandlerrŸ    s   „ òó;r;   r©  c                   ó   — e Zd Zd„ Zd„ Zy)ú?ErrorResponseTest.get_handlers.<locals>.FailedWriteErrorHandlerc                 ó   — ddz   y ©Nrv   r   rI   rB   s    r9   r\   zCErrorResponseTest.get_handlers.<locals>.FailedWriteErrorHandler.get"  s	   € Ø�A“r;   c                 ó   — t        d«      ‚)Nzexception in write_error©r¥  r¥  s      r9   r§  zKErrorResponseTest.get_handlers.<locals>.FailedWriteErrorHandler.write_error%  s   € ÜÐ :Ó;Ð;r;   Nr¨  rI   r;   r9   ÚFailedWriteErrorHandlerr«  !  s   „ òó<r;   r°  ú/defaultú/write_errorú/failed_write_error)r   r%   )rC   r�  r©  r°  s       r9   r?   zErrorResponseTest.get_handlers  sS   € ô	œ^ô 	ô	;¤ô 	;ô	<¤nô 	<ô �
˜NÓ+Ü�Ð 1Ó2ÜÐ%Ð'>Ó?ð
ð 	
r;   c                 ó  — t        t        d«      5  | j                  d«      }| j                  |j                  d«       | j                  d|j                  «       | j                  d«      }| j                  |j                  d«       | j                  d|j                  «       | j                  d«      }| j                  |j                  d	«       | j                  d
|j                  «       d d d «       y # 1 sw Y   y xY w)NúUncaught exceptionr±  rk  s   500: Internal Server Errorz/default?status=503é÷  s   503: Service Unavailablez/default?status=435i³  s   435: Unknown)r   r   rÓ   r}   rÕ   r>  rÒ   rÙ   s     r9   Útest_defaultzErrorResponseTest.test_default.  sÂ   € Ü”wÐ 4Ó5ñ 	:Ø—z‘z *Ó-ˆHØ×Ñ˜XŸ]™]¨CÔ0Ø�M‰MÐ7¸¿¹ÔGà—z‘zÐ"7Ó8ˆHØ×Ñ˜XŸ]™]¨CÔ0Ø�M‰MÐ5°x·}±}ÔEà—z‘zÐ"7Ó8ˆHØ×Ñ˜XŸ]™]¨CÔ0Ø�M‰M˜/¨8¯=©=Ô9÷	:÷ 	:ñ 	:ús   ‘CC6Ã6C?c                 ór  — t        t        d«      5  | j                  d«      }| j                  |j                  d«       | j                  d|j
                  «       | j                  d«      }| j                  |j                  d«       | j                  d|j
                  «       d d d «       y # 1 sw Y   y xY w)Nrµ  r²  rk  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ñ 	<Ø—z‘z .Ó1ˆHØ×Ñ˜XŸ]™]¨CÔ0Ø×ÑÐ<¸h¿m¹mÔLà—z‘zÐ";Ó<ˆHØ×Ñ˜XŸ]™]¨CÔ0Ø×Ñ˜^¨X¯]©]Ô;÷	<÷ 	<ñ 	<ús   ‘BB-Â-B6c                 óà   — t        t        d«      5  | j                  d«      }| j                  |j                  d«       | j                  d|j
                  «       d d d «       y # 1 sw Y   y xY w)Nrµ  r³  rk  r;   r¹  rÙ   s     r9   Útest_failed_write_errorz)ErrorResponseTest.test_failed_write_errorF  sY   € Ü”wÐ 4Ó5ñ 	1Ø—z‘zÐ"7Ó8ˆHØ×Ñ˜XŸ]™]¨CÔ0Ø×Ñ˜S (§-¡-Ô0÷	1÷ 	1ñ 	1ús   ‘A
A$Á$A-N)rK   rL   rM   r?   r·  rº  r¼  rI   r;   r9   r—  r—    s   „ ò 
òD:ò<ó1r;   r—  c                   ó˜  — e Zd ZdZej
                  j                  ej
                  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&k7  d'«      d(„ «       Z0y))*Ú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y)ú5StaticFileTest.get_handlers.<locals>.StaticUrlHandlerc                 ó~   — t        | j                  dd«      «      }| j                  | j                  ||¬«      «       y )NÚinclude_versionr  )rÄ  )rÌ  rÍ  r[   Ú
static_url)rC   r4   Úwith_vs      r9   r\   z9StaticFileTest.get_handlers.<locals>.StaticUrlHandler.getX  s3   € Ü˜T×.Ñ.Ð/@À#ÓFÓG�Ø—
‘
˜4Ÿ?™?¨4À˜?ÓHÕIr;   Nr]   rI   r;   r9   ÚStaticUrlHandlerrÂ  W  s   „ óJr;   rÇ  c                   ó   — e Zd ZdZy)ú=StaticFileTest.get_handlers.<locals>.AbsoluteStaticUrlHandlerTN)rK   rL   rM   Úinclude_hostrI   r;   r9   ÚAbsoluteStaticUrlHandlerrÉ  \  s   „ Ø‰Lr;   rË  c                   ó   — e Zd Zd„ Zy)ú=StaticFileTest.get_handlers.<locals>.OverrideStaticUrlHandlerc                 óÌ  — t        | j                  d«      «      }| | _        | j                  |«      }| j                  ||¬«      }||k(  r| j	                  t        d«      «      S | j                  j                  dz   }t        |«      }|j                  |d|«      }|j                  |d|«      }|r|dk(  xr |dk(  }	n|dk(  xr |dk(  }	| j	                  t        |	«      «       y )NrÊ  )rÊ  Fz://r   éÿÿÿÿ)
r  rÍ  rÊ  rÅ  r[   rä   r¢  Úprotocolr=  Ú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ÓD�
Ø(2 N�Ô!à"Ÿo™o¨dÓ3�Ø#Ÿ™¨tÀ*˜ÓM�Ø ;Ò.ØŸ:™:¤c¨%£jÓ1Ð1àŸ<™<×0Ñ0°5Ñ8�Ü"% h£-�Ø +× 0Ñ 0°¸1¸oÓ N�Ø!-×!2Ñ!2°8¸QÀÓ!P�áØ+¨qÑ0ÒH°]ÀbÑ5H‘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   )r4   )r   r   rf   )rC   rÇ  rË  rÙ  s       r9   r?   zStaticFileTest.get_handlersV  s_   € ô	Jœ~ô 	Jô
	 Ð'7ô 	 ô	(¤~ô 	(ð,  Ð!1Ð2Ø#Ð%=Ð>Ø(Ð*BÐCØ Ô"3´T¸s´^ÐDð	
ð 	
r;   c                 ó,   — t        t        d«      ¬«      S )Nr¿  )Ústatic_path©rf   r:   rB   s    r9   r@   zStaticFileTest.get_app_kwargs{  s   € Ü¤¨Ó 1Ô2Ð2r;   c                 ó  — | j                  d«      }| j                  d|j                  «       | j                  d«      }| j                  d|j                  «       | j                  |j                  j                  d«      d«       y )Nú/robots.txtó   Disallow: /ú/static/robots.txtr¢  r£  )rÓ   r>  rÒ   r}   r.  r\   rÙ   s     r9   Útest_static_filesz StaticFileTest.test_static_files~  sd   € Ø—:‘:˜mÓ,ˆØ�‰�n h§m¡mÔ4à—:‘:Ð2Ó3ˆØ�‰�n h§m¡mÔ4Ø×Ñ˜×)Ñ)×-Ñ-¨nÓ=¸|ÕLr;   c                 óÎ   — | j                  d«      }| j                  d|j                  «       | j                  d|j                  «       | j                  d|j                  «       y )Nz/robots.txt?v=12345rà  zCache-ControlÚExpires)rÓ   r>  rÒ   r.  rÙ   s     r9   Útest_static_files_cacheablez*StaticFileTest.test_static_files_cacheable†  sM   € ð —:‘:Ð3Ó4ˆØ�‰�n h§m¡mÔ4Ø�‰�o x×'7Ñ'7Ô8Ø�‰�i ×!1Ñ!1Õ2r;   c                 óp  — | j                  d«      }| j                  |j                  j                  d«      d«       | j                  d«      }| j                  |j                  j                  d«      d«       | j                  d«      }| j	                  |j                  j                  d«      ddh«       y )	Nz/static/sample.xml.gzr¢  zapplication/gzipz/static/sample.xml.bz2zapplication/octet-streamz/static/sample.xmlztext/xmlzapplication/xml)rÓ   r}   r.  r\   r>  rÙ   s     r9   Útest_static_compressed_filesz+StaticFileTest.test_static_compressed_files�  s    € Ø—:‘:Ð5Ó6ˆØ×Ñ˜×)Ñ)×-Ñ-¨nÓ=Ð?QÔRØ—:‘:Ð6Ó7ˆØ×ÑØ×Ñ× Ñ  Ó0Ð2Lô	
ð —:‘:Ð2Ó3ˆØ�‰Ø×Ñ× Ñ  Ó0°:Ð?PÐ2Qõ	
r;   c                 óx   — | j                  d«      }| j                  |j                  d| j                  z   «       y )Nz/static_url/robots.txts   /static/robots.txt?v=)rÓ   r}   rÒ   Úrobots_txt_hashrÙ   s     r9   Útest_static_urlzStaticFileTest.test_static_urlœ  s1   € Ø—:‘:Ð6Ó7ˆØ×Ñ˜Ÿ™Ð(@À4×CWÑCWÑ(WÕXr;   c                 ó®   — | j                  d«      }| j                  |j                  t        | j	                  d«      «      dz   | j
                  z   «       y )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   sH   € Ø—:‘:Ð:Ó;ˆØ×ÑØ�M‰MÜ�$—,‘,˜sÓ#Ó$Ð'>Ñ>À×AUÑAUÑUõ	
r;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )Nz(/static_url/robots.txt?include_version=0s   /static/robots.txtr6  rÙ   s     r9   Útest_relative_version_exclusionz.StaticFileTest.test_relative_version_exclusion§  s&   € Ø—:‘:ÐHÓIˆØ×Ñ˜Ÿ™Ð(=Õ>r;   c                 ó”   — | j                  d«      }| j                  |j                  t        | j	                  d«      dz   «      «       y )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«  s9   € Ø—:‘:ÐLÓMˆØ×Ñ˜Ÿ™¬¨T¯\©\¸#Ó->ÐATÑ-TÓ(UÕVr;   c                 óH   — | j                  d«       | j                  d«       y )NFT)Ú_trigger_include_host_checkrB   s    r9   Útest_include_host_overridez)StaticFileTest.test_include_host_override¯  s   € Ø×(Ñ(¨Ô/Ø×(Ñ(¨Õ.r;   c                 óž   — d}| j                  |t        |«      z  «      }| j                  |j                  t	        t        d«      «      «       y )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³  s;   € Ø@ˆØ—:‘:˜d¤S¨Ó%6Ñ6Ó7ˆØ×Ñ˜Ÿ™¬¬S°«Y«Õ8r;   c                 ó  —  | j                   |ddi|¤Ž} | j                   |ddi|¤Ž}t        «       }t        j                  |j                  |j                  «      D ]%  }|j                  d«      sŒ|j                  |«       Œ' |D ]‚  }| j                  |j                  j                  |«      |j                  j                  |«      |›d|j                  j                  |«      ›d|j                  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Úchainr.  Ú
startswithÚaddr}   r\   )rC   r¡  rO  Úhead_responseÚget_responseÚcontent_headersÚhs          r9   Úget_and_headzStaticFileTest.get_and_head¸  sý   € ð #˜Ÿ
™
 DÐB°ÐB¸6ÑBˆØ!�t—z‘z 4Ð@°Ð@¸Ñ@ˆÜ›%ˆÜ—‘ ×!6Ñ!6¸×8LÑ8LÓMò 	'ˆAØ�|‰|˜JÕ'Ø×#Ñ# AÕ&ð	'ð !ò 	ˆAØ×ÑØ×%Ñ%×)Ñ)¨!Ó,Ø×$Ñ$×(Ñ(¨Ó+â�m×+Ñ+×/Ñ/°Õ2°L×4HÑ4H×4LÑ4LÈQÕ4OðQõð	ð Ðr;   c                 óÚ   — | j                  d«      }| j                  dd|j                  d   i¬«      }| j                  |j                  d«       | j	                  d|j                  «       y )Nrá  úIf-Modified-SinceúLast-Modifiedr4  é0  úContent-Length)r  r.  r}   rÕ   rŒ  ©rC   Ú	response1Ú	response2s      r9   Ú!test_static_304_if_modified_sincez0StaticFileTest.test_static_304_if_modified_sinceÍ  sk   € Ø×%Ñ%Ð&:Ó;ˆ	Ø×%Ñ%Ø Ø(¨)×*;Ñ*;¸OÑ*LÐMð &ó 
ˆ	ð 	×Ñ˜Ÿ™¨Ô-Ø×ÑÐ)¨9×+<Ñ+<Õ=r;   c                 ó¢   — | j                  d«      }| j                  dd|j                  d   i¬«      }| j                  |j                  d«       y )Nrá  úIf-None-MatchÚEtagr4  r  ©r  r.  r}   rÕ   r  s      r9   Útest_static_304_if_none_matchz,StaticFileTest.test_static_304_if_none_matchÖ  sS   € Ø×%Ñ%Ð&:Ó;ˆ	Ø×%Ñ%Ø ¨?¸I×<MÑ<MÈfÑ<UÐ*Vð &ó 
ˆ	ð 	×Ñ˜Ÿ™¨Õ-r;   c                 ó¤   — | j                  d«      }| j                  dd|j                  d   dœ¬«      }| j                  |j                  d«       y )Nrá  z
"MISMATCH"r  )r  r  r4  rÎ   r  r  s      r9   Ú!test_static_304_etag_modified_bugz0StaticFileTest.test_static_304_etag_modified_bugÝ  sW   € Ø×%Ñ%Ð&:Ó;ˆ	Ø×%Ñ%Ø à!-Ø%.×%6Ñ%6°Ñ%Gñð &ó 
ˆ	ð 	×Ñ˜Ÿ™¨Õ-r;   c                 óf   — | j                  dddi¬«      }| j                  |j                  d«       y )Nrá  r  z!nv@l!dr4  rÎ   ©r  r}   rÕ   rÙ   s     r9   Ú)test_static_304_if_modified_since_invalidz8StaticFileTest.test_static_304_if_modified_since_invalidè  s8   € Ø×$Ñ$Ø Ø(¨)Ð4ð %ó 
ˆð 	×Ñ˜Ÿ™¨Õ,r;   c                 óf   — | j                  dddi¬«      }| j                  |j                  d«       y )Nrá  r  zFri, 01 Jan 1960 00:00:00 GMTr4  rÎ   r  rÙ   s     r9   Ú'test_static_if_modified_since_pre_epochz6StaticFileTest.test_static_if_modified_since_pre_epochï  s;   € ð ×$Ñ$Ø Ø(Ð*IÐJð %ó 
ˆð 	×Ñ˜Ÿ™¨Õ,r;   c                 ó\  — t        j                  t        d«      «      }| j                  ddt	        |j
                  dz
  «      i¬«      }| j                  |j                  d«       | j                  ddt	        |j
                  dz   «      i¬«      }| j                  |j                  d«       y )Nrð  rá  r  rv   r4  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”wÐ2Ó3Ó4ˆà×$Ñ$Ø Ø(Ô*:¸4¿=¹=È1Ñ;LÓ*MÐNð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô,Ø×$Ñ$Ø Ø(Ô*:¸4¿=¹=È1Ñ;LÓ*MÐNð %ó 
ˆð 	×Ñ˜Ÿ™¨Õ,r;   c                 ó®   — | j                  d«      }| j                  t        |j                  j	                  d«      «      d| j
                  z   dz   «       y )Nrá  r  ó   ")r  r}   r   r.  r\   ré  rÙ   s     r9   Útest_static_etagzStaticFileTest.test_static_etag  sL   € Ø×$Ñ$Ð%9Ó:ˆØ×ÑÜ�×!Ñ!×%Ñ% fÓ-Ó.°°t×7KÑ7KÑ0KÈdÑ0Rõ	
r;   c                 óÒ  — | j                  dddi¬«      }| j                  |j                  d«       | j                  |j                  d«       | j                  t	        |j
                  j                  d«      «      d| j                  z   dz   «       | j                  |j
                  j                  d	«      d
«       | j                  |j
                  j                  d«      d«       y )Nrá  ÚRangez	bytes=0-9r4  éÎ   s
   User-agentr  r  r  Ú10úContent-Rangezbytes 0-9/26)r  r}   rÕ   rÒ   r   r.  r\   ré  rÙ   s     r9   Útest_static_with_rangez%StaticFileTest.test_static_with_range  sÉ   € Ø×$Ñ$Ø ¨7°KÐ*@ð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨Ô6Ø×ÑÜ�×!Ñ!×%Ñ% fÓ-Ó.°°t×7KÑ7KÑ0KÈdÑ0Rô	
ð 	×Ñ˜×)Ñ)×-Ñ-Ð.>Ó?ÀÔFØ×Ñ˜×)Ñ)×-Ñ-¨oÓ>ÀÕOr;   c                 ó  — | j                  dddi¬«      }| j                  |j                  d«       t        j                  j                  | j                  d«      }t        |d¬«      5 }| j                  |j                  t        |j                  «       «      «       d d d «       | j                  |j                  j                  d	«      d
«       | j                  |j                  j                  d«      «       y # 1 sw Y   Œ_xY w)Nrá  r   zbytes=0-r4  rÎ   ú
robots.txtúutf-8©rá  r  Ú26r#  ©r  r}   rÕ   r3   r4   r5   Ú
static_dirÚopenrÒ   r   Úreadr.  r\   rŽ   ©rC   rÚ   Úrobots_file_pathÚfs       r9   Ú test_static_with_range_full_filez/StaticFileTest.test_static_with_range_full_file  sÑ   € Ø×$Ñ$Ø ¨7°JÐ*?ð %ó 
ˆð
 	×Ñ˜Ÿ™¨Ô,ÜŸ7™7Ÿ<™<¨¯©¸ÓFÐÜÐ"¨WÔ5ð 	<¸Ø×Ñ˜XŸ]™]¬D°·±³«NÔ;÷	<à×Ñ˜×)Ñ)×-Ñ-Ð.>Ó?ÀÔFØ×Ñ˜(×*Ñ*×.Ñ.¨Ó?Õ@÷	<ð 	<úó   Á)4C;Ã;Dc                 ó  — | j                  dddi¬«      }| j                  |j                  d«       t        j                  j                  | j                  d«      }t        |d¬«      5 }| j                  |j                  t        |j                  «       «      «       d d d «       | j                  |j                  j                  d	«      d
«       | j                  |j                  j                  d«      «       y # 1 sw Y   Œ_xY w)Nrá  r   zbytes=0-10000000r4  rÎ   r&  r'  r(  r  r)  r#  r*  r.  s       r9   Ú$test_static_with_range_full_past_endz3StaticFileTest.test_static_with_range_full_past_end*  sÒ   € Ø×$Ñ$Ø ¨7Ð4FÐ*Gð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô,ÜŸ7™7Ÿ<™<¨¯©¸ÓFÐÜÐ"¨WÔ5ð 	<¸Ø×Ñ˜XŸ]™]¬D°·±³«NÔ;÷	<à×Ñ˜×)Ñ)×-Ñ-Ð.>Ó?ÀÔFØ×Ñ˜(×*Ñ*×.Ñ.¨Ó?Õ@÷	<ð 	<úr2  c           	      ó  — | j                  dddi¬«      }| j                  |j                  d«       t        j                  j                  | j                  d«      }t        |d¬«      5 }| j                  |j                  t        |j                  «       d	d  «      «       d d d «       | j                  |j                  j                  d
«      d«       | j                  |j                  j                  d«      d«       y # 1 sw Y   Œ`xY w)Nrá  r   zbytes=1-10000000r4  r!  r&  r'  r(  rv   r  Ú25r#  zbytes 1-25/26)r  r}   rÕ   r3   r4   r5   r+  r,  rÒ   r   r-  r.  r\   r.  s       r9   Ú'test_static_with_range_partial_past_endz6StaticFileTest.test_static_with_range_partial_past_end5  sß   € Ø×$Ñ$Ø ¨7Ð4FÐ*Gð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô,ÜŸ7™7Ÿ<™<¨¯©¸ÓFÐÜÐ"¨WÔ5ð 	@¸Ø×Ñ˜XŸ]™]¬D°·±³¸!¸"°Ó,>Ô?÷	@à×Ñ˜×)Ñ)×-Ñ-Ð.>Ó?ÀÔFØ×Ñ˜×)Ñ)×-Ñ-¨oÓ>ÀÕP÷	@ð 	@ús   Á)7C?Ã?Dc                 ó  — | j                  dddi¬«      }| j                  |j                  d«       | j                  |j                  j	                  d«      d«       | j                  |j                  j	                  d«      d	«       y )
Nrá  r   z	bytes=22-r4  ó   : /
r  rý  r#  úbytes 22-25/26©r  r}   rÒ   r.  r\   rÙ   s     r9   Útest_static_with_range_end_edgez.StaticFileTest.test_static_with_range_end_edge@  s{   € Ø×$Ñ$Ø ¨7°KÐ*@ð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô1Ø×Ñ˜×)Ñ)×-Ñ-Ð.>Ó?ÀÔEØ×Ñ˜×)Ñ)×-Ñ-¨oÓ>Ð@PÕQr;   c                 ó  — | j                  dddi¬«      }| j                  |j                  d«       | j                  |j                  j	                  d«      d«       | j                  |j                  j	                  d«      d	«       y )
Nrá  r   zbytes=-4r4  r9  r  rý  r#  r:  r;  rÙ   s     r9   Útest_static_with_range_neg_endz-StaticFileTest.test_static_with_range_neg_endH  s{   € Ø×$Ñ$Ø ¨7°JÐ*?ð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô1Ø×Ñ˜×)Ñ)×-Ñ-Ð.>Ó?ÀÔEØ×Ñ˜×)Ñ)×-Ñ-¨oÓ>Ð@PÕQr;   c                 ó  — | j                  dddi¬«      }| j                  |j                  d«       t        j                  j                  | j                  d«      }t        |d¬«      5 }| j                  |j                  t        |j                  «       «      «       d d d «       | j                  |j                  j                  d	«      d
«       | j                  |j                  j                  d«      «       y # 1 sw Y   Œ_xY w)Nrá  r   zbytes=-1000000r4  rÎ   r&  r'  r(  r  r)  r#  r*  r.  s       r9   Ú%test_static_with_range_neg_past_startz4StaticFileTest.test_static_with_range_neg_past_startP  sÒ   € Ø×$Ñ$Ø ¨7Ð4DÐ*Eð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô,ÜŸ7™7Ÿ<™<¨¯©¸ÓFÐÜÐ"¨WÔ5ð 	<¸Ø×Ñ˜XŸ]™]¬D°·±³«NÔ;÷	<à×Ñ˜×)Ñ)×-Ñ-Ð.>Ó?ÀÔFØ×Ñ˜(×*Ñ*×.Ñ.¨Ó?Õ@÷	<ð 	<úr2  c                 óf   — | j                  dddi¬«      }| j                  |j                  d«       y )Nrá  r   rå   r4  rÎ   r  rÙ   s     r9   Útest_static_invalid_rangez(StaticFileTest.test_static_invalid_range[  s1   € Ø×$Ñ$Ð%9ÀGÈVÐCTÐ$ÓUˆØ×Ñ˜Ÿ™¨Õ,r;   c                 ó¼   — | j                  dddi¬«      }| j                  |j                  j                  d«      d«       | j                  |j                  d«       y )Nrá  r   zbytes=-0r4  r#  ú
bytes */26é   )r  r}   r.  r\   rÕ   rÙ   s     r9   Ú+test_static_unsatisfiable_range_zero_suffixz:StaticFileTest.test_static_unsatisfiable_range_zero_suffix_  sX   € Ø×$Ñ$Ø ¨7°JÐ*?ð %ó 
ˆð 	×Ñ˜×)Ñ)×-Ñ-¨oÓ>ÀÔMØ×Ñ˜Ÿ™¨Õ,r;   c                 ó¼   — | j                  dddi¬«      }| j                  |j                  d«       | j                  |j                  j	                  d«      d«       y )Nrá  r   zbytes=26r4  rE  r#  rD  ©r  r}   rÕ   r.  r\   rÙ   s     r9   Ú-test_static_unsatisfiable_range_invalid_startz<StaticFileTest.test_static_unsatisfiable_range_invalid_startf  sX   € Ø×$Ñ$Ø ¨7°JÐ*?ð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)×-Ñ-¨oÓ>ÀÕMr;   c                 ó¼   — | j                  dddi¬«      }| j                  |j                  d«       | j                  |j                  j	                  d«      d«       y )Nrá  r   z
bytes=10-3r4  rE  r#  rD  rH  rÙ   s     r9   Ú3test_static_unsatisfiable_range_end_less_than_startzBStaticFileTest.test_static_unsatisfiable_range_end_less_than_startm  sX   € Ø×$Ñ$Ø ¨7°LÐ*Að %ó 
ˆð 	×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)×-Ñ-¨oÓ>ÀÕMr;   c                 óH  — | j                  dd¬«      }| j                  |j                  d«       | j                  |j                  d«       | j                  |j                  d   d«       | j                  t        |j                  d   «      d	| j                  z   d	z   «       y )
Nrá  r÷  ©rÑ   rÎ   r;   r  r)  r  r  ©rÓ   r}   rÕ   rÒ   r.  r   ré  rÙ   s     r9   Útest_static_headzStaticFileTest.test_static_headt  sŒ   € Ø—:‘:Ð2¸6�:ÓBˆØ×Ñ˜Ÿ™¨Ô,à×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)Ð*:Ñ;¸TÔBØ×ÑÜ�×!Ñ! &Ñ)Ó*¨D°4×3GÑ3GÑ,GÈ$Ñ,Nõ	
r;   c                 óN  — | j                  ddddi¬«      }| j                  |j                  d«       | j                  |j                  d«       | j                  |j                  d   d	«       | j                  t        |j                  d
   «      d| j                  z   dz   «       y )Nrá  r÷  r   ú	bytes=1-4)rÑ   r.  r!  r;   r  rý  r  r  rN  rÙ   s     r9   Útest_static_head_rangez%StaticFileTest.test_static_head_range~  sš   € Ø—:‘:Ø ¨¸'À;Ð9Oð ó 
ˆð 	×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)Ð*:Ñ;¸SÔAØ×ÑÜ�×!Ñ! &Ñ)Ó*¨D°4×3GÑ3GÑ,GÈ$Ñ,Nõ	
r;   c                 óh  — | j                  ddd| j                  z   dz   dœ¬«      }| j                  |j                  d«       | j                  |j                  d«       | j                  d|j                  «       | j                  t        |j                  d	   «      d| j                  z   dz   «       y )
Nrá  rQ  r  )r   r  r4  r  r;   r  r  )r  ré  r}   rÕ   rÒ   rŒ  r.  r   rÙ   s     r9   Útest_static_range_if_none_matchz.StaticFileTest.test_static_range_if_none_match‰  s©   € Ø×$Ñ$Ø à$Ø!%¨×(<Ñ(<Ñ!<¸tÑ!Cñð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨Ô,Ø×ÑÐ)¨8×+;Ñ+;Ô<Ø×ÑÜ�×!Ñ! &Ñ)Ó*¨D°4×3GÑ3GÑ,GÈ$Ñ,Nõ	
r;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )Nz/static/blargé”  r  rÙ   s     r9   Útest_static_404zStaticFileTest.test_static_404˜  s&   € Ø×$Ñ$ _Ó5ˆØ×Ñ˜Ÿ™¨Õ,r;   c                 óú   — | j                   j                  «        t        «       | _         t        t        d«      5  | j                  d«      }d d d «       | j                  j                  d«       y # 1 sw Y   Œ&xY w)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œ  sl   € ð 	×Ñ×ÑÔ Ü0Ó2ˆÔÜ”wÐ @ÓAñ 	FØ×(Ñ(Ð)DÓEˆH÷	Fð 	×Ñ˜Ÿ™¨Õ,÷	Fð 	Fús   ºA1Á1A:Úposixznon-posix OSc                 óZ  — t         j                  j                  t         j                  j                  t         j                  j	                  t
        «      «      d«      }| j                  dt        j                  j                  |«      z   «      }| j                  |j                  d«       y )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©  sp   € ô �w‰w�|‰|Ü�G‰G�O‰OœBŸG™GŸO™O¬HÓ5Ó6Ð8Kó
ˆð ×$Ñ$ ^´f·l±l×6HÑ6HÈÓ6NÑ%NÓ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  r  r$  r1  r4  r7  r<  r>  r@  rB  rF  rI  rK  rO  rR  rT  rW  r[  ÚunittestÚskipIfrj   r_  rI   r;   r9   r¾  r¾  M  s  „ ð	Lð ð —‘—‘˜bŸg™gŸo™o¨hÓ7¸ÓB€Jò#
òJ3òMò3ò
òYò
ò?òWò/ò9ò
ò*>ò.ò	.ò-ò-ò-ò$
ò
PòAò	Aò	QòRòRò	Aò-ò-òNòNò
ò	
ò
ò-ò-ð €X‡_�_�R—W‘W Ñ'¨Ó8ñ	-ó 9ñ	-r;   r¾  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚStaticDefaultFilenameTestc                 óB   — t        t        d«      t        d¬«      ¬«      S ©Nr¿  ú
index.html©Údefault_filename)rÜ  Ústatic_handler_argsrÝ  rB   s    r9   r@   z(StaticDefaultFilenameTest.get_app_kwargs·  ó   € ÜÜ Ó)Ü $°lÔ Cô
ð 	
r;   c                 ó   — g S r2   rI   rB   s    r9   r?   z&StaticDefaultFilenameTest.get_handlers½  rJ   r;   c                 óš   — | j                  dd¬«      }| j                  |j                  d«       | j                  d|j                  «       y )Nú/static/dir/Frs  rÎ   s   this is the index
©rÓ   r}   rÕ   rÒ   rÙ   s     r9   Útest_static_default_filenamez6StaticDefaultFilenameTest.test_static_default_filenameÀ  s=   € Ø—:‘:˜n¸u�:ÓEˆØ×Ñ˜Ÿ™¨Ô,Ø×ÑÐ/°·±Õ?r;   c                 ó¼   — | j                  dd¬«      }| j                  |j                  d«       | j                  |j                  d   j                  d«      «       y )Nú/static/dirFrs  rn  rv  rm  )rÓ   r}   rÕ   r×   r.  ÚendswithrÙ   s     r9   Útest_static_default_redirectz6StaticDefaultFilenameTest.test_static_default_redirectÅ  sJ   € Ø—:‘:˜m¸e�:ÓDˆØ×Ñ˜Ÿ™¨Ô,Ø�‰˜×(Ñ(¨Ñ4×=Ñ=¸nÓMÕNr;   N)rK   rL   rM   r@   r?   ro  rs  rI   r;   r9   rc  rc  ¶  s   „ ò
òò@ó
Or;   rc  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚStaticDefaultFilenameRootTestc                 ó~   — t        t        j                  j                  t	        d«      «      t        d¬«      d¬«      S )Nr¿  rf  rg  rR   )rÜ  ri  Ústatic_url_prefix)rf   r3   r4   r^  r:   rB   s    r9   r@   z,StaticDefaultFilenameRootTest.get_app_kwargsÌ  s/   € ÜÜŸ™Ÿ™¬°Ó(9Ó:Ü $°lÔ 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                  j                  t        «      }t         j                  j	                  |«      \  }}t         j
                  dk(  r| j                  ||«       n|}t        t        d«      5  | j                  d|› d�d¬«      }d d d «       | j                  j                  d«       y # 1 sw Y   Œ&xY w)Nr\  z/.*cannot redirect path with two initial slashesz//evil.com/../rq  Frs  rY  )r3   r4   r6   r7   Ú
splitdriverj   r}   r   r   rÓ   rÕ   )rC   Útest_dirÚdriveÚtailrÚ   s        r9   Útest_no_open_redirectz3StaticDefaultFilenameRootTest.test_no_open_redirectÛ  s§   € ô —7‘7—?‘?¤8Ó,ˆÜ—g‘g×(Ñ(¨Ó2‰ˆˆtÜ�7‰7�gÒØ×Ñ˜T 8Õ,àˆHÜ”wÐ QÓRñ 	Ø—z‘zØ   
¨+Ð6Ø!&ð "ó ˆH÷	ð
 	×Ñ˜Ÿ™¨Õ,÷	ð 	ús   Á>B;Â;CN)rK   rL   rM   r@   r?   rz  r€  rI   r;   r9   ru  ru  Ë  s   „ ò
òò'ó
-r;   ru  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚStaticFileWithPathTestc                 óB   — t        t        d«      t        d¬«      ¬«      S re  rÝ  rB   s    r9   r@   z%StaticFileWithPathTest.get_app_kwargsñ  rj  r;   c                 ó,   — dt         dt        d«      ifgS )Nz	/foo/(.*)r4   z
templates/)r   r:   rB   s    r9   r?   z#StaticFileWithPathTest.get_handlers÷  s   € ØÔ/°&¼'À,Ó:OÐ1PÐQÐRÐRr;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )Nz/foo/utf8.htmls   HÃ©llo
r6  rÙ   s     r9   Ú
test_servez!StaticFileWithPathTest.test_serveú  s&   € Ø—:‘:Ð.Ó/ˆØ×Ñ˜Ÿ™Ð(9Õ:r;   N)rK   rL   rM   r@   r?   r†  rI   r;   r9   r‚  r‚  ð  s   „ ò
òSó;r;   r‚  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚCustomStaticFileTestc                 óV   —  G d„ dt         «      } G d„ dt        «      }|| _        d|fgS )Nc                   óf   — 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y)ú>CustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandlerc                 óˆ   — | j                  ||«      }|j                  d«      }|d | }||dz   d  }dj                  |||«      S )Nú.rv   z/static/{}.{}.{})Úget_versionÚrindexÚformat)Úclsrb   r4   Úversion_hashÚextension_indexÚbefore_versionÚafter_versions          r9   Úmake_static_urlzNCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.make_static_url  s[   € à"Ÿ™¨x¸Ó>�Ø"&§+¡+¨cÓ"2�Ø!%Ð&6 Ð!7�Ø $ o¸Ñ&9Ð%<Ð =�Ø)×0Ñ0Ø"Ø Ø!óð r;   c                 ób   — |j                  d«      }|j                  dd|«      }|d | › ||d  › �S )Nr�  r   )r�  )rC   Úurl_pathr“  Úversion_indexs       r9   Úparse_url_pathzMCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.parse_url_path  sB   € Ø"*§/¡/°#Ó"6�Ø (§¡°°Q¸Ó H�Ø" > MÐ2Ð3°H¸_Ð=MÐ4NÐ3OÐPÐPr;   c                 ó   — d|z   S )NzCustomStaticFileTest:rI   ©r‘  rb   r4   s      r9   Úget_absolute_pathzPCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_absolute_path  s   € à.°Ñ5Ð5r;   c                 ó   — |S r2   rI   )rC   ÚrootÚabsolute_paths      r9   Úvalidate_absolute_pathzUCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.validate_absolute_path  s   € Ø$Ð$r;   Nc                 ó6   — |€|�J ‚|dk(  ryt        d|z  «      ‚)NúCustomStaticFileTest:foo.txtru   úunexpected path %rr¯  )rC   r4   ÚstartÚends       r9   Úget_contentzJCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_content  s.   € à�}¨¨Ð4Ð4ØÐ9Ò9Ø!ÜÐ 4°tÑ ;Ó<Ð<r;   c                 óR   — | j                   dk(  ryt        d| j                   z  «      ‚)Nr£  r<  r¤  )r   r¥  rB   s    r9   Úget_content_sizezOCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_content_size!  s+   € Ø×%Ñ%Ð)GÒGØÜÐ 4°t×7IÑ7IÑ IÓJÐJr;   c                  ó   — y r2   rI   rB   s    r9   Úget_modified_timezPCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_modified_time&  s   € Ør;   c                  ó   — y)NÚ42rI   rœ  s      r9   rŽ  zJCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_version)  s   € àr;   ©NN)rK   rL   rM   Úclassmethodr–  rš  r�  r¡  r§  r©  r«  rŽ  rI   r;   r9   ÚMyStaticFileHandlerr‹    sf   „ Øñ	ó ð	òQð
 ñ6ó ð6ò%ð ò=ó ð=òKò
ð ñó ñr;   r°  c                   ó   — e Zd Zd„ Zy)ú;CustomStaticFileTest.get_handlers.<locals>.StaticUrlHandlerc                 óD   — | j                  | j                  |«      «       y r2   )r[   rÅ  rÁ   s     r9   r\   z?CustomStaticFileTest.get_handlers.<locals>.StaticUrlHandler.get.  s   € Ø—
‘
˜4Ÿ?™?¨4Ó0Õ1r;   Nr]   rI   r;   r9   rÇ  r²  -  s   „ ó2r;   rÇ  rÚ  )r   r   Ústatic_handler_class)rC   r°  rÇ  s      r9   r?   z!CustomStaticFileTest.get_handlers   s5   € ô*	Ô"3ô *	ôX	2œ~ô 	2ð %8ˆÔ!à#Ð%5Ð6Ð7Ð7r;   c                 ó0   — t        d| j                  ¬«      S )NÚdummy)rÜ  r´  )rf   r´  rB   s    r9   r@   z#CustomStaticFileTest.get_app_kwargs5  s   € Ü ¸d×>WÑ>WÔXÐXr;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )Nz/static/foo.42.txtru   r6  rÙ   s     r9   r†  zCustomStaticFileTest.test_serve8  s%   € Ø—:‘:Ð2Ó3ˆØ×Ñ˜Ÿ™¨Õ/r;   c                 ó¬   — t        t        dd¬«      5  | j                  d«      }| j                  |j                  d«       d d d «       y # 1 sw Y   y xY w)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<  sL   € Ü”wÐ <ÀuÔMñ 	CØ—z‘zÐ"7Ó8ˆHØ×Ñ˜XŸ]™]Ð,AÔB÷	C÷ 	Cñ 	Cús   “.A
Á
AN)rK   rL   rM   r?   r@   r†  rê  rI   r;   r9   rˆ  rˆ  ÿ  s   „ ò38òjYò0óCr;   rˆ  c                   ó.   — e Zd Z G d„ de«      Zd„ Zd„ Zy)ÚHostMatchingTestc                   ó   — e Zd Zd„ Zd„ Zy)úHostMatchingTest.Handlerc                 ó   — || _         y r2   )Úreply)rC   r¿  s     r9   rg  z#HostMatchingTest.Handler.initializeD  s	   € ØˆD�Jr;   c                 ó:   — | j                  | j                  «       y r2   )r[   r¿  rB   s    r9   r\   zHostMatchingTest.Handler.getG  s   € Ø�J‰J�t—z‘zÕ"r;   N)rK   rL   rM   rg  r\   rI   r;   r9   rT   r½  C  s   „ ò	ó	#r;   rT   c                 ó.   — dt         j                  ddifgS )Nrõ   r¿  Úwildcard)r»  rT   rB   s    r9   r?   zHostMatchingTest.get_handlersJ  s   € ØÔ)×1Ñ1°G¸ZÐ3HÐIÐJÐJr;   c                 ó  — | j                   j                  ddt        j                  ddifg«       | j                   j                  ddt        j                  ddifg«       | j                   j                  ddt        j                  dd	ifg«       | j                   j                  d
dt        j                  ddifg«       | j	                  d«      }| j                  |j                  d«       | j	                  d«      }| j                  |j                  d«       | j	                  d«      }| j                  |j                  d«       | j	                  dddi¬«      }| j                  |j                  d«       | j	                  dddi¬«      }| j                  |j                  d«       | j	                  dddi¬«      }| j                  |j                  d«       | j	                  dddi¬«      }| j                  |j                  d«       y )Núwww.example.comrõ   r¿  ú[0]úwww\.example\.comú/barú[1]ú/bazú[2]zwww.e.*e.comz[3]s   wildcardrV  ÚHostr4  ó   [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_matchingM  sÔ  € Ø�‰×ÑØ Ô)9×)AÑ)AÀGÈUÐCSÐ TÐUô	
ð 	�‰×ÑØ  FÔ,<×,DÑ,DÀwÐPUÐFVÐ#WÐ"Xô	
ð 	�‰×ÑØ Ô)9×)AÑ)AÀGÈUÐCSÐ TÐUô	
ð 	�‰×ÑØ˜fÔ&6×&>Ñ&>ÀÈ%Ð@PÐQÐRô	
ð —:‘:˜fÓ%ˆØ×Ñ˜Ÿ™¨Ô4Ø—:‘:˜fÓ%ˆØ×Ñ˜Ÿ™¨Ô,Ø—:‘:˜fÓ%ˆØ×Ñ˜Ÿ™¨Ô,à—:‘:˜f¨vÐ7HÐ.I�:ÓJˆØ×Ñ˜Ÿ™¨Ô/Ø—:‘:˜f¨vÐ7HÐ.I�:ÓJˆØ×Ñ˜Ÿ™¨Ô/Ø—:‘:˜f¨vÐ7HÐ.I�:ÓJˆØ×Ñ˜Ÿ™¨Ô/Ø—:‘:˜f¨v°}Ð.E�:ÓFˆØ×Ñ˜Ÿ™¨Õ/r;   N)rK   rL   rM   r   rT   r?   rÐ  rI   r;   r9   r»  r»  B  s   „ ô#�.ô #òKó0r;   r»  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚDefaultHostMatchingTestc                 ó   — g S r2   rI   rB   s    r9   r?   z$DefaultHostMatchingTest.get_handlersm  rJ   r;   c                 ó
   — ddiS )NÚdefault_hostrÄ  rI   rB   s    r9   r@   z&DefaultHostMatchingTest.get_app_kwargsp  s   € ØÐ 1Ð2Ð2r;   c                 ó  — | j                   j                  ddt        j                  ddifg«       | j                   j                  ddt        j                  ddifg«       | j                   j                  dd	t        j                  dd
ifg«       | j	                  d«      }| j                  |j                  d«       | j	                  d«      }| j                  |j                  d«       | j	                  d	«      }| j                  |j                  d«       | j	                  dddi¬«      }| j                  |j                  d«       d| j                   _        | j	                  d	«      }| j                  |j                  d«       y )NrÄ  rõ   r¿  rÅ  rÆ  rÇ  rÈ  zwww.test.comrÉ  rÊ  rÌ  rÍ  rV  z	X-Real-Iprˆ  r4  rÎ  )	rA   rÏ  r»  rT   rÓ   r}   rÒ   rÕ   rÕ  rÙ   s     r9   Útest_default_host_matchingz2DefaultHostMatchingTest.test_default_host_matchings  sO  € Ø�‰×ÑØ Ô)9×)AÑ)AÀGÈUÐCSÐ TÐUô	
ð 	�‰×ÑØ  FÔ,<×,DÑ,DÀwÐPUÐFVÐ#WÐ"Xô	
ð 	�‰×ÑØ˜fÔ&6×&>Ñ&>ÀÈ%Ð@PÐQÐRô	
ð —:‘:˜fÓ%ˆØ×Ñ˜Ÿ™¨Ô/Ø—:‘:˜fÓ%ˆØ×Ñ˜Ÿ™¨Ô/Ø—:‘:˜fÓ%ˆØ×Ñ˜Ÿ™¨Ô,à—:‘:˜f¨{¸KÐ.H�:ÓIˆØ×Ñ˜Ÿ™¨Ô,à .ˆ�‰Ôà—:‘:˜fÓ%ˆØ×Ñ˜Ÿ™¨Õ/r;   N)rK   rL   rM   r?   r@   r×  rI   r;   r9   rÒ  rÒ  l  s   „ òò3ó0r;   rÒ  c                   ó   — e Zd Zd„ Zd„ Zy)ÚNamedURLSpecGroupsTestc                 ó0   —  G d„ dt         «      }d|fd|fgS )Nc                   ó   — e Zd Zd„ Zy)ú8NamedURLSpecGroupsTest.get_handlers.<locals>.EchoHandlerc                 ó&   — | j                  |«       y 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�  s*   € ô	!œ.ô 	!ð
 ! +Ð.Ø$ kÐ2ð
ð 	
r;   c                 ó¸   — | j                  d«      }| j                  |j                  d«       | j                  d«      }| j                  |j                  d«       y )Nz/str/foos   fooz/unicode/barru   r6  rÙ   s     r9   Útest_named_urlspec_groupsz0NamedURLSpecGroupsTest.test_named_urlspec_groups™  sF   € Ø—:‘:˜jÓ)ˆØ×Ñ˜Ÿ™¨Ô/à—:‘:˜nÓ-ˆØ×Ñ˜Ÿ™¨Õ/r;   N)rK   rL   rM   r?   rß  rI   r;   r9   rÙ  rÙ  Ž  s   „ ò
ó0r;   rÙ  c                   ó(   — e Zd Z G d„ de«      Zd„ Zy)ÚClearHeaderTestc                   ó   — e Zd Zd„ Zy)úClearHeaderTest.Handlerc                 ó�   — | j                  dd«       | j                  dd«       | j                  d«       | j                  d«       y )NÚh1rt   Úh2r  Únonexistent)rþ  Úclear_headerrB   s    r9   r\   zClearHeaderTest.Handler.get£  s:   € Ø�O‰O˜D %Ô(Ø�O‰O˜D %Ô(Ø×Ñ˜dÔ#Ø×Ñ˜mÕ,r;   Nr]   rI   r;   r9   rT   rã  ¢  s   „ ó	-r;   rT   c                 óœ   — | j                  d«      }| j                  d|j                  «       | j                  |j                  d   d«       y )NrR   rå  ræ  r  ©rÓ   rŒ  r.  r}   rÙ   s     r9   Útest_clear_headerz!ClearHeaderTest.test_clear_header©  s@   € Ø—:‘:˜c“?ˆØ×Ñ˜˜x×/Ñ/Ô0Ø×Ñ˜×)Ñ)¨$Ñ/°Õ7r;   N)rK   rL   rM   r   rT   rë  rI   r;   r9   rá  rá  ¡  s   „ ô-�.ô -ó8r;   rá  c                   ó(   — e Zd Z G d„ de«      Zd„ Zy)ÚHeader204Testc                   ó   — e Zd Zd„ Zy)úHeader204Test.Handlerc                 óF   — | j                  d«       | j                  «        y )NéÌ   )Ú
set_statusr±   rB   s    r9   r\   zHeader204Test.Handler.get±  s   € Ø�O‰O˜CÔ Ø�K‰K�Mr;   Nr]   rI   r;   r9   rT   rï  °  s   „ ó	r;   rT   c                 óÎ   — | j                  d«      }| j                  |j                  d«       | j                  d|j                  «       | j                  d|j                  «       y )NrR   rñ  r  úTransfer-Encoding)rÓ   r}   rÕ   rŒ  r.  rÙ   s     r9   Útest_204_headerszHeader204Test.test_204_headersµ  sQ   € Ø—:‘:˜c“?ˆØ×Ñ˜Ÿ™¨Ô,Ø×ÑÐ)¨8×+;Ñ+;Ô<Ø×ÑÐ,¨h×.>Ñ.>Õ?r;   N)rK   rL   rM   r   rT   rõ  rI   r;   r9   rí  rí  ¯  s   „ ô�.ô ó
@r;   rí  c                   ó(   — e Zd Z G d„ de«      Zd„ Zy)ÚHeader304Testc                   ó   — e Zd Zd„ Zy)úHeader304Test.Handlerc                 óJ   — | j                  dd«       | j                  d«       y )NúContent-LanguageÚen_USrY   )rþ  r[   rB   s    r9   r\   zHeader304Test.Handler.get¾  s   € Ø�O‰OÐ.°Ô8Ø�J‰J�wÕr;   Nr]   rI   r;   r9   rT   rù  ½  s   „ ó	 r;   rT   c                 óÆ  — | j                  d«      }| j                  |j                  d   d«       | j                  |j                  d   d«       | j                  dd|j                  d   i¬«      }| j                  |j                  d	«       | j	                  d|j                  «       | j	                  d|j                  «       | j	                  d
|j                  «       y )NrR   r  Ú5rû  rü  r  r  r4  r  rô  )rÓ   r}   r.  rÕ   rŒ  r  s      r9   Útest_304_headerszHeader304Test.test_304_headersÂ  sÊ   € Ø—J‘J˜s“Oˆ	Ø×Ñ˜×*Ñ*Ð+;Ñ<¸cÔBØ×Ñ˜×*Ñ*Ð+=Ñ>ÀÔHà—J‘JØ˜/¨9×+<Ñ+<¸VÑ+DÐEð ó 
ˆ	ð 	×Ñ˜Ÿ™¨Ô-Ø×ÑÐ)¨9×+<Ñ+<Ô=Ø×ÑÐ+¨Y×->Ñ->Ô?à×ÑÐ,¨i×.?Ñ.?Õ@r;   N)rK   rL   rM   r   rT   rÿ  rI   r;   r9   r÷  r÷  ¼  s   „ ô �.ô  ó
Ar;   r÷  c                   ó:   — e Zd Z G d„ de«      Zd„ Zd„ Zd„ Zd„ Zy)ÚStatusReasonTestc                   ó   — e Zd Zd„ Zy)úStatusReasonTest.Handlerc                 óÂ   — | j                   j                  j                  dg «      }t        t	        | j                  d«      «      |rt        |d   «      ¬«      ‚d ¬«      ‚)NÚreasonrÕ   r   ©r  )r¢  r£  r\   r!   rÌ  rÍ  r   )rC   r  s     r9   r\   zStatusReasonTest.Handler.getÓ  sY   € Ø—\‘\×+Ñ+×/Ñ/°¸"Ó=ˆFÜÜ�D×%Ñ% fÓ-Ó.Ù06”z &¨¡)Ó,ôð à<@ôð r;   Nr]   rI   r;   r9   rT   r  Ò  s   „ ó	r;   rT   c                 ó   — t        «       S r2   r   rB   s    r9   rz  z StatusReasonTest.get_http_clientÚ  ó   € ä$Ó&Ð&r;   c                 óL  — | j                  d«      }| j                  |j                  d«       | j                  |j                  d«       | j                  d«      }| j                  |j                  d«       | j                  |j                  d«       | j                  d«      }| j                  |j                  d«       | j                  |j                  d«       | j                  d	«      }| j                  |j                  d«       | j                  |j                  d
«       y )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Ø—:‘:Ð5Ó6ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨%Ô0Ø—:‘:Ð5Ó6ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨%Ô0Ø—:‘:˜lÓ+ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨)Õ4r;   c                 óÎ   — | j                  d«      }| j                  |j                  d«       | j                  |j                  d«       | j	                  d|j
                  «       y )Nz./?code=200&reason=OK%0D%0AX-Injection:injectedrÎ   r  zX-Injection)rÓ   r}   rÕ   r  rŒ  r.  rÙ   s     r9   rw  z&StatusReasonTest.test_header_injectionì  sO   € Ø—:‘:ÐNÓOˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨)Ô4Ø×Ñ˜¨×(8Ñ(8Õ9r;   c                 ó  — | j                  d«      }| j                  |j                  d«       | j                  |j                  d«       | j	                  d|j
                  «       | j                  d|j
                  «       y )Nz+/?code=400&reason=<script>alert(1)</script>rZ  r  s   scripts   Unknown)rÓ   r}   rÕ   r  rŒ  rÒ   r>  rÙ   s     r9   Útest_reason_xssz StatusReasonTest.test_reason_xssò  s_   € Ø—:‘:ÐKÓLˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨)Ô4Ø×Ñ˜ H§M¡MÔ2Ø�‰�j (§-¡-Õ0r;   N)	rK   rL   rM   r   rT   rz  r  rw  r  rI   r;   r9   r  r  Ñ  s"   „ ô�.ô ò'ò5ò:ó1r;   r  c                   ó(   — e Zd Z G d„ de«      Zd„ Zy)ÚDateHeaderTestc                   ó   — e Zd Zd„ Zy)úDateHeaderTest.Handlerc                 ó&   — | j                  d«       y rX   rZ   rB   s    r9   r\   zDateHeaderTest.Handler.getü  ó   € Ø�J‰J�wÕr;   Nr]   rI   r;   r9   rT   r  û  s   „ ó	 r;   rT   c                 ó:  — | j                  d«      }t        j                  j                  |j                  d   «      }| j                  |t        j                  j                  t        j                  j                  «      z
  t        j                  d¬«      «       y )NrR   ÚDater„   )Úseconds)rÓ   rT  rU  rV  r.  rX  rO  rP  rQ  rR  rS  )rC   rÚ   Úheader_dates      r9   Útest_date_headerzDateHeaderTest.test_date_headerÿ  sm   € Ø—:‘:˜c“?ˆÜ—k‘k×7Ñ7¸×8HÑ8HÈÑ8PÓQˆØ�‰Øœ(×+Ñ+×/Ñ/´×0AÑ0A×0EÑ0EÓFÑFÜ×Ñ qÔ)õ	
r;   N)rK   rL   rM   r   rT   r  rI   r;   r9   r  r  ú  s   „ ô �.ô  ó
r;   r  c                   ó:   — e Zd Z G d„ de«      Zd„ Zd„ Zd„ Zd„ Zy)ÚRaiseWithReasonTestc                   ó   — e Zd Zd„ Zy)úRaiseWithReasonTest.Handlerc                 ó   — t        dd¬«      ‚)Nr  r
  r  ©r!   rB   s    r9   r\   zRaiseWithReasonTest.Handler.get
  s   € Ü˜C¨Ô.Ð.r;   Nr]   rI   r;   r9   rT   r   	  s   „ ó	/r;   rT   c                 ó   — t        «       S r2   r   rB   s    r9   rz  z#RaiseWithReasonTest.get_http_client  r  r;   c                 óÎ   — | j                  d«      }| j                  |j                  d«       | j                  |j                  d«       | j	                  d|j
                  «       y )NrR   r  r
  s   682: Foo)rÓ   r}   rÕ   r  r>  rÒ   rÙ   s     r9   Útest_raise_with_reasonz*RaiseWithReasonTest.test_raise_with_reason  sI   € Ø—:‘:˜c“?ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨%Ô0Ø�‰�k 8§=¡=Õ1r;   c                 óP   — | j                  t        t        dd¬«      «      d«       y )Nr  r
  r  zHTTP 682: Foo©r}   rä   r!   rB   s    r9   Útest_httperror_strz&RaiseWithReasonTest.test_httperror_str  s   € Ø×ÑœœY s°5Ô9Ó:¸OÕLr;   c                 óL   — | j                  t        t        d«      «      d«       y )Nr  zHTTP 682: Unknownr'  rB   s    r9   Ú test_httperror_str_from_httputilz4RaiseWithReasonTest.test_httperror_str_from_httputil  s   € Ø×ÑœœY s›^Ó,Ð.AÕBr;   N)	rK   rL   rM   r   rT   rz  r%  r(  r*  rI   r;   r9   r  r    s$   „ ô/�.ô /ò'ò2òMóCr;   r  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚErrorHandlerXSRFTestc                 ó*   — dt         t        d¬«      fgS )Nú/erroré¡  ©r¦  )r#   rf   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_kwargs%  ó   € Ü Ô&Ð&r;   c                 ód   — | j                  ddd¬«      }| j                  |j                  d«       y )Nr.  rÏ   r  rÐ   r/  ro  rÙ   s     r9   Útest_error_xsrfz$ErrorHandlerXSRFTest.test_error_xsrf(  s*   € Ø—:‘:˜h¨v¸B�:Ó?ˆØ×Ñ˜Ÿ™¨Õ,r;   c                 ód   — | j                  ddd¬«      }| j                  |j                  d«       y )Nz/404rÏ   r  rÐ   rV  ro  rÙ   s     r9   Útest_404_xsrfz"ErrorHandlerXSRFTest.test_404_xsrf,  s*   € Ø—:‘:˜f¨V¸"�:Ó=ˆØ×Ñ˜Ÿ™¨Õ,r;   N)rK   rL   rM   r?   r@   r6  r8  rI   r;   r9   r,  r,    s   „ òAò'ò-ó-r;   r,  c                   óL   — e Zd Z G d„ de«      Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)ÚGzipTestCasec                   ó   — e Zd Zd„ Zy)úGzipTestCase.Handlerc                 óž   — | j                  d«      D ]  }| j                  d|«       Œ | j                  ddt        j                  z  z   «       y )NÚvaryr‰  zhello worldú!)r¦  rÿ  r[   r/   Ú
MIN_LENGTH)rC   Úvs     r9   r\   zGzipTestCase.Handler.get3  sI   € Ø×'Ñ'¨Ó/ò +�Ø—‘ ¨Õ*ð+ð �J‰J�}¨Ô.A×.LÑ.LÑ(LÑMÕNr;   Nr]   rI   r;   r9   rT   r<  2  s   „ ó	Or;   rT   c                 óš   — t        dt        j                  j                  t        j                  j	                  t
        «      d«      ¬«      S )NTr¿  )rŠ  rÜ  )rf   r3   r4   r5   r6   r7   rB   s    r9   r@   zGzipTestCase.get_app_kwargs9  s0   € ÜØ¤2§7¡7§<¡<´·±·±ÄÓ0IÈ8Ó#Tô
ð 	
r;   c                 óŽ   — | j                  |j                  j                  d|j                  j                  d«      «      d«       y )Nr‹  zX-Consumed-Content-EncodingrŠ  )r}   r.  r\   rÙ   s     r9   Úassert_compressedzGzipTestCase.assert_compressed>  sB   € ð 	×ÑØ×Ñ× Ñ Ø" H×$4Ñ$4×$8Ñ$8Ð9VÓ$Wóð õ		
r;   c                 ó†   — | j                  d«      }| j                  |«       | j                  |j                  d   d«       y )NrR   r‰  rˆ  ©rÓ   rD  r}   r.  rÙ   s     r9   Ú	test_gzipzGzipTestCase.test_gzipH  s9   € Ø—:‘:˜c“?ˆØ×Ñ˜xÔ(Ø×Ñ˜×)Ñ)¨&Ñ1Ð3DÕEr;   c                 ó†   — | j                  d«      }| j                  |«       | j                  |j                  d   d«       y )Nrß  r‰  rˆ  rF  rÙ   s     r9   Útest_gzip_staticzGzipTestCase.test_gzip_staticM  s<   € ð —:‘:˜mÓ,ˆØ×Ñ˜xÔ(Ø×Ñ˜×)Ñ)¨&Ñ1Ð3DÕEr;   c                 ó    — | j                  dd¬«      }| j                  d|j                  «       | j                  |j                  d   d«       y )NrR   F)Úuse_gzipr‹  r‰  rˆ  rê  rÙ   s     r9   Útest_gzip_not_requestedz$GzipTestCase.test_gzip_not_requestedT  sG   € Ø—:‘:˜c¨E�:Ó2ˆØ×ÑÐ+¨X×-=Ñ-=Ô>Ø×Ñ˜×)Ñ)¨&Ñ1Ð3DÕEr;   c                 óê   — | j                  d«      }| j                  |«       | j                  |j                  d   j	                  d«      D �cg c]  }|j                  «       ‘Œ c}ddg«       y c c}w )Nz/?vary=Accept-Languager‰  ú,úAccept-Languagerˆ  ©rÓ   rD  r}   r.  ÚsplitÚstrip©rC   rÚ   r–  s      r9   Útest_vary_already_presentz&GzipTestCase.test_vary_already_presentY  sc   € Ø—:‘:Ð6Ó7ˆØ×Ñ˜xÔ(Ø×ÑØ (× 0Ñ 0°Ñ 8× >Ñ >¸sÓ CÖD˜1ˆQ�W‰W�YÒDØÐ 1Ð2õ	
ùÚDó   ÁA0c                 óê   — | j                  d«      }| j                  |«       | j                  |j                  d   j	                  d«      D �cg c]  }|j                  «       ‘Œ c}g d¢«       y c c}w )Nz"/?vary=Accept-Language&vary=Cookier‰  rN  )rO  r2  rˆ  rP  rS  s      r9   Ú"test_vary_already_present_multiplez/GzipTestCase.test_vary_already_present_multiplea  s]   € à—:‘:ÐBÓCˆØ×Ñ˜xÔ(Ø×ÑØ (× 0Ñ 0°Ñ 8× >Ñ >¸sÓ CÖD˜1ˆQ�W‰W�YÒDÚ<õ	
ùÚDrU  N)rK   rL   rM   r   rT   r@   rD  rG  rI  rL  rT  rW  rI   r;   r9   r:  r:  1  s6   „ ôO�.ô Oò
ò

òFò
FòFò

ó
r;   r:  c                   ó4   — e Zd Z G d„ de«      Zd„ Zd„ Zd„ Zy)ÚPathArgsInPrepareTestc                   ó   — e Zd Zd„ Zd„ Zy)úPathArgsInPrepareTest.Handlerc                 ód   — | j                  t        | j                  | j                  ¬«      «       y )N©r¡  rO  )r[   rf   r   Úpath_kwargsrB   s    r9   rÓ  z%PathArgsInPrepareTest.Handler.preparem  s   € Ø�J‰J”t §¡¸×8HÑ8HÔIÕJr;   c                 ó2   — |dk(  sJ ‚| j                  «        y )Nrt   ©r±   rÁ   s     r9   r\   z!PathArgsInPrepareTest.Handler.getp  s   € Ø˜5’=Ð �=Ø�K‰K�Mr;   N©rK   rL   rM   rÓ  r\   rI   r;   r9   rT   r[  l  s   „ ò	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_handlerst  s    € Ø˜dŸl™lÐ+Ð.@À$Ç,Á,Ð-OÐPÐPr;   c                 óœ   — | j                  d«      }|j                  «        t        |j                  «      }| j	                  |dgi dœ«       y )Nz/pos/foort   r]  rU  ©rC   rÚ   rA  s      r9   Útest_poszPathArgsInPrepareTest.test_posw  sA   € Ø—:‘:˜jÓ)ˆØ×ÑÔÜ˜8Ÿ=™=Ó)ˆØ×Ñ˜¨¨¸2Ñ>Õ?r;   c                 óž   — | j                  d«      }|j                  «        t        |j                  «      }| j	                  |g ddidœ«       y )Nz/kw/foor4   rt   r]  rU  rd  s      r9   Útest_kwzPathArgsInPrepareTest.test_kw}  sC   € Ø—:‘:˜iÓ(ˆØ×ÑÔÜ˜8Ÿ=™=Ó)ˆØ×Ñ˜¨°v¸u°oÑFÕGr;   N)rK   rL   rM   r   rT   r?   re  rg  rI   r;   r9   rY  rY  k  s    „ ô�.ô òQò@óHr;   rY  c                   ó(   — e Zd Z G d„ de«      Zd„ Zy)ÚClearAllCookiesTestc                   ó   — e Zd Zd„ Zy)úClearAllCookiesTest.Handlerc                 óF   — | j                  «        | j                  d«       y ©NÚok)Úclear_all_cookiesr[   rB   s    r9   r\   zClearAllCookiesTest.Handler.get†  s   € Ø×"Ñ"Ô$Ø�J‰J�tÕr;   Nr]   rI   r;   r9   rT   rk  …  s   „ ó	r;   rT   c                 ó  — | j                  dddi¬«      }t        |j                  j                  d«      «      }| j	                  |d   j                  d«      «       | j	                  |d   j                  d	«      «       y )
NrR   r2  zfoo=bar; baz=xyzzyr4  r,  r   zbaz="";rv   zfoo="";)rÓ   r-  r.  r/  r×   rü  )rC   rÚ   Úset_cookiess      r9   Útest_clear_all_cookiesz*ClearAllCookiesTest.test_clear_all_cookiesŠ  sk   € Ø—:‘:˜c¨HÐ6JÐ+K�:ÓLˆÜ˜X×-Ñ-×6Ñ6°|ÓDÓEˆà�‰˜ A™×1Ñ1°)Ó<Ô=Ø�‰˜ A™×1Ñ1°)Ó<Õ=r;   N)rK   rL   rM   r   rT   rr  rI   r;   r9   ri  ri  „  s   „ ô�.ô ó
>r;   ri  c                   ó   — e Zd Zy)ÚPermissionErrorN©rK   rL   rM   rI   r;   r9   rt  rt  ’  s   „ Ør;   rt  c                   ó4   — e Zd Z G d„ de«      Zd„ Zd„ Zd„ Zy)ÚExceptionHandlerTestc                   ó   — e Zd Zd„ Zd„ Zd„ Zy)úExceptionHandlerTest.Handlerc                 ó~   — | j                  d«      }|dk(  rt        dd«      ‚|dk(  rddz   y |dk(  rt        d	«      ‚y )
NÚexcÚhttpéš  zno longer hereÚzerorv   r   Ú
permissionznot allowed)rÍ  r!   rt  )rC   r{  s     r9   r\   z ExceptionHandlerTest.Handler.get˜  sM   € Ø×#Ñ# EÓ*ˆCØ�fŠ}Ü Ð%5Ó6Ð6Ø˜’Ø�A“Ø˜Ò$Ü% mÓ4Ð4ð %r;   c                 ó²   — d|v r<|d   \  }}}t        |t        «      r#| j                  d«       | j                  d«       y t	        j
                  | |fi |¤Ž y )Nr¤  rY  rt  )Ú
isinstancert  rò  r[   r   r§  )rC   r¦  rO  Útyprm   Útbs         r9   r§  z(ExceptionHandlerTest.Handler.write_error¡  sU   € Ø˜VÑ#Ø!'¨
Ñ!3‘��U˜BÜ˜e¤_Ô5Ø—O‘O CÔ(Ø—J‘JÐ0Ô1ØÜ×&Ñ& t¨[ÑC¸FÓCr;   c                 óœ   — t        |t        «      r$t        j                  d|j                  d   «       y t        j                  | |||«       y )Nz&custom logging for PermissionError: %sr   )r�  rt  r   Úwarningr¡  r   Úlog_exception©rC   r‚  rm   rƒ  s       r9   r†  z*ExceptionHandlerTest.Handler.log_exceptionª  s8   € Ü˜%¤Ô1Ü—‘Ð HÈ%Ï*É*ÐUVÉ-ÕXä×,Ñ,¨T°3¸¸rÕBr;   N)rK   rL   rM   r\   r§  r†  rI   r;   r9   rT   ry  —  s   „ ò	5ò	Dó	Cr;   rT   c                 ó¨   — t        t        d«      5  | j                  d«      }| j                  |j                  d«       d d d «       y # 1 sw Y   y xY w)Nz.*no longer herez
/?exc=httpr}  r[  rÙ   s     r9   Útest_http_errorz$ExceptionHandlerTest.test_http_error°  sF   € ô ”wÐ 2Ó3ñ 	1Ø—z‘z ,Ó/ˆHØ×Ñ˜XŸ]™]¨CÔ0÷	1÷ 	1ñ 	1úó   ‘.AÁAc                 ó¨   — t        t        d«      5  | j                  d«      }| j                  |j                  d«       d d d «       y # 1 sw Y   y xY w)Nrµ  z
/?exc=zerork  ©r   r   rÓ   r}   rÕ   rÙ   s     r9   Útest_unknown_errorz'ExceptionHandlerTest.test_unknown_error·  sD   € ä”wÐ 4Ó5ñ 	1Ø—z‘z ,Ó/ˆHØ×Ñ˜XŸ]™]¨CÔ0÷	1÷ 	1ñ 	1úrŠ  c                 ó¨   — t        t        d«      5  | j                  d«      }| j                  |j                  d«       d d d «       y # 1 sw Y   y xY w)Nz/custom logging for PermissionError: not allowedz/?exc=permissionrY  rŒ  rÙ   s     r9   Útest_known_errorz%ExceptionHandlerTest.test_known_error½  sG   € ô ”wÐ QÓRñ 	1Ø—z‘zÐ"4Ó5ˆHØ×Ñ˜XŸ]™]¨CÔ0÷	1÷ 	1ñ 	1úrŠ  N)rK   rL   rM   r   rT   r‰  r�  r�  rI   r;   r9   rw  rw  –  s   „ ôC�.ô Cò21ò1ó1r;   rw  c                   ó(   — e Zd Z G d„ de«      Zd„ Zy)ÚBuggyLoggingTestc                   ó   — e Zd Zd„ Zd„ Zy)úBuggyLoggingTest.Handlerc                 ó   — ddz   y r­  rI   rB   s    r9   r\   zBuggyLoggingTest.Handler.getÇ  ó	   € Ø�‹Er;   c                 ó   — ddz   y r­  rI   r‡  s       r9   r†  z&BuggyLoggingTest.Handler.log_exceptionÊ  r•  r;   N)rK   rL   rM   r\   r†  rI   r;   r9   rT   r“  Æ  s   „ ò	ó	r;   rT   c                 óp   — t        t        d«      5  | j                  d«       d d d «       y # 1 sw Y   y xY w)Nz.*rR   )r   r   rÓ   rB   s    r9   Útest_buggy_log_exceptionz)BuggyLoggingTest.test_buggy_log_exceptionÍ  s.   € ô ”w Ó%ñ 	Ø�J‰J�sŒO÷	÷ 	ñ 	úr¼  N)rK   rL   rM   r   rT   r˜  rI   r;   r9   r‘  r‘  Å  s   „ ô�.ô ór;   r‘  c                   óD   ‡ — 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y)úUIMethodUIModuleTest.Handlerc                 ó&   — | j                  d«       y rÄ   rï  rB   s    r9   r\   z UIMethodUIModuleTest.Handler.getÚ  s   € Ø�K‰K˜
Õ#r;   c                 ó$   — | j                  d«      S )Nrm   )rÍ  rB   s    r9   rm   z"UIMethodUIModuleTest.Handler.valueÝ  s   € Ø×$Ñ$ WÓ-Ð-r;   N)rK   rL   rM   r\   rm   rI   r;   r9   rT   rœ  Ù  s   „ ò	$ó	.r;   rT   c                 ód   — d„ } G d„ dt         «      }t        ddi«      }t        |d|id|i¬«      S )Nc                 ó0   — d|› d| j                  «       › d�S )NzIn my_ui_method(z) with handler value r�  )rm   )r€   Úxs     r9   Úmy_ui_methodz9UIMethodUIModuleTest.get_app_kwargs.<locals>.my_ui_methodá  s   € Ø% a SÐ(=¸g¿m¹m»oÐ=NÈaÐPÐPr;   c                   ó   — e Zd Zd„ Zy)ú5UIMethodUIModuleTest.get_app_kwargs.<locals>.MyModulec                 óš   — dj                  |t        j                  t        j                  | j
                  «      j                  «       «      S )Nz&In MyModule({}) with handler value {}.)r�  ÚtypingÚcastrš  rT   r€   rm   )rC   r¡  s     r9   rÅ   z<UIMethodUIModuleTest.get_app_kwargs.<locals>.MyModule.renderå  s:   € Ø?×FÑFØÜ—K‘KÔ 4× <Ñ <¸d¿l¹lÓK×QÑQÓSóð r;   N©rK   rL   rM   rÅ   rI   r;   r9   ÚMyModuler¤  ä  s   „ ór;   r©  r¿   z1{{ my_ui_method(42) }} {% module MyModule(123) %}r¢  )r2  Ú
ui_methodsÚ
ui_modules©r*   r   rf   )rC   r¢  r©  r5  s       r9   r@   z#UIMethodUIModuleTest.get_app_kwargsà  sK   € ò	Qô	”xô 	ô ØÐLÐMó
ˆô Ø"Ø&¨Ð5Ø" HÐ-ô
ð 	
r;   c                 ó^   •— t         ‰| �  «        t        j                  j	                  «        y r2   r7  r<  s    €r9   r9  zUIMethodUIModuleTest.tearDownô  s    ø€ Ü‰ÑÔä×(Ñ(×.Ñ.Õ0r;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )Nz/?value=asdfsV   In my_ui_method(42) with handler value asdf. In MyModule(123) with handler value asdf.r6  rÙ   s     r9   Útest_ui_methodz#UIMethodUIModuleTest.test_ui_methodù  s*   € Ø—:‘:˜nÓ-ˆØ×ÑØ�M‰Mð9õ	
r;   )
rK   rL   rM   rN   r   rT   r@   r9  r¯  rŽ  r�  s   @r9   rš  rš  Ô  s#   ø„ ñô.�.ô .ò
ô(1ö

r;   rš  c                   ó(   — e Zd Z G d„ de«      Zd„ Zy)ÚGetArgumentErrorTestc                   ó   — e Zd Zd„ Zy)úGetArgumentErrorTest.Handlerc                 óÆ   — 	 | j                  d«       | j                  i «       y # t        $ r2}| j                  |j                  |j                  dœ«       Y d }~y d }~ww xY w)Nrt   ©Úarg_nameÚlog_message)rÍ  r[   r"   r¶  r·  r  s     r9   r\   z GetArgumentErrorTest.Handler.get  sO   € ðSØ×!Ñ! %Ô(Ø—
‘
˜2•øÜ'ò SØ—
‘
¨¯
©
À1Ç=Á=ÑQ×RÑRûðSús   ‚"% ¥	A ®(AÁA Nr]   rI   r;   r9   rT   r³    s   „ ó	Sr;   rT   c                 óv   — | j                  d«      }| j                  t        |j                  «      dddœ«       y )NrR   rt   zMissing argument foorµ  )rÓ   r}   r   rÒ   rÙ   s     r9   Útest_catch_errorz%GetArgumentErrorTest.test_catch_error  s2   € Ø—:‘:˜c“?ˆØ×ÑÜ˜Ÿ™Ó&ØÐ/EÑFõ	
r;   N)rK   rL   rM   r   rT   r¹  rI   r;   r9   r±  r±    s   „ ôS�.ô Só
r;   r±  c                   ó(   — e Zd Z G d„ de«      Zd„ Zy)ÚSetLazyPropertiesTestc                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)úSetLazyPropertiesTest.Handlerc                 óF   — d| _         t        j                  d«      | _        y )NÚBenrü  )Úcurrent_userr   r\   rB   s    r9   rÓ  z%SetLazyPropertiesTest.Handler.prepare  s   € Ø %ˆDÔÜ Ÿ*™* WÓ-ˆD�Kr;   c                 ó   — t        «       ‚r2   rF   rB   s    r9   Úget_user_localez-SetLazyPropertiesTest.Handler.get_user_locale  ó   € Ü%Ó'Ð'r;   c                 ó   — t        «       ‚r2   rF   rB   s    r9   Úget_current_userz.SetLazyPropertiesTest.Handler.get_current_user  rÃ  r;   c                 óp   — | j                  d| j                  › d| j                  j                  › d�«       y )NzHello z (rù  )r[   rÀ  r   rÕ   rB   s    r9   r\   z!SetLazyPropertiesTest.Handler.get  s/   € Ø�J‰J˜ × 1Ñ 1Ð2°"°T·[±[×5EÑ5EÐ4FÀaÐHÕIr;   N)rK   rL   rM   rÓ  rÂ  rÅ  r\   rI   r;   r9   rT   r½    s   „ ò	.ò	(ò	(ó	Jr;   rT   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )NrR   s   Hello Ben (en_US)r6  rÙ   s     r9   Útest_set_propertiesz)SetLazyPropertiesTest.test_set_properties"  s&   € ð —:‘:˜c“?ˆØ×Ñ˜Ÿ™Ð(<Õ=r;   N)rK   rL   rM   r   rT   rÈ  rI   r;   r9   r»  r»    s   „ ôJ�.ô Jó>r;   r»  c                   ól   ‡ — 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y)ú<GetCurrentUserTest.get_app_kwargs.<locals>.WithoutUserModulec                  ó   — y)Nr  rI   rB   s    r9   rÅ   zCGetCurrentUserTest.get_app_kwargs.<locals>.WithoutUserModule.render,  s   € Ør;   Nr¨  rI   r;   r9   ÚWithoutUserModulerÍ  +  s   „ ór;   rÏ  c                   ó   — e Zd Zd„ Zy)ú9GetCurrentUserTest.get_app_kwargs.<locals>.WithUserModulec                 ó,   — t        | j                  «      S r2   )rä   rÀ  rB   s    r9   rÅ   z@GetCurrentUserTest.get_app_kwargs.<locals>.WithUserModule.render0  s   € Ü˜4×,Ñ,Ó-Ð-r;   Nr¨  rI   r;   r9   ÚWithUserModulerÑ  /  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Ï  )r2  r«  r¬  )rC   rÏ  rÓ  r5  s       r9   r@   z!GetCurrentUserTest.get_app_kwargs*  sT   € ô	¤ô 	ô	.œXô 	.ô à%'Ø"6Ø,NØ)Hñ	ó
ˆô Ø"à"0Ø%6ñô
ð 	
r;   c                 ó^   •— t         ‰| �  «        t        j                  j	                  «        y r2   r7  r<  s    €r9   r9  zGetCurrentUserTest.tearDownC  r>  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y)ú;GetCurrentUserTest.get_handlers.<locals>.CurrentUserHandlerc                 ó   — d| _         y )NF©Úhas_loaded_current_userrB   s    r9   rÓ  zCGetCurrentUserTest.get_handlers.<locals>.CurrentUserHandler.prepareI  s
   € Ø/4�Õ,r;   c                 ó   — d| _         y)NTr  rÝ  rB   s    r9   rÅ  zLGetCurrentUserTest.get_handlers.<locals>.CurrentUserHandler.get_current_userL  s   € Ø/3�Ô,Ør;   N)rK   rL   rM   rÓ  rÅ  rI   r;   r9   ÚCurrentUserHandlerrÛ  H  s   „ ò5ór;   rà  c                   ó   — e Zd Zd„ Zy)ú;GetCurrentUserTest.get_handlers.<locals>.WithoutUserHandlerc                 ón   — | j                  d«       | j                  t        | j                  «      «       y )NrÔ  ©Úrender_stringr±   rä   rÞ  rB   s    r9   r\   z?GetCurrentUserTest.get_handlers.<locals>.WithoutUserHandler.getQ  s(   € Ø×"Ñ"Ð#6Ô7Ø—‘œC × <Ñ <Ó=Õ>r;   Nr]   rI   r;   r9   ÚWithoutUserHandlerrâ  P  ó   „ ó?r;   ræ  c                   ó   — e Zd Zd„ Zy)ú8GetCurrentUserTest.get_handlers.<locals>.WithUserHandlerc                 ón   — | j                  d«       | j                  t        | j                  «      «       y )NrÕ  rä  rB   s    r9   r\   z<GetCurrentUserTest.get_handlers.<locals>.WithUserHandler.getV  s(   € Ø×"Ñ"Ð#3Ô4Ø—‘œC × <Ñ <Ó=Õ>r;   Nr]   rI   r;   r9   ÚWithUserHandlerré  U  rç  r;   rë  c                   ó   — e Zd Zd„ Zy)úAGetCurrentUserTest.get_handlers.<locals>.CurrentUserModuleHandlerc                 ó   — | j                   S r2   )ÚuirB   s    r9   Úget_template_namespacezXGetCurrentUserTest.get_handlers.<locals>.CurrentUserModuleHandler.get_template_namespace[  s   € ð —w‘w�r;   N)rK   rL   rM   rð  rI   r;   r9   ÚCurrentUserModuleHandlerrí  Z  s   „ ór;   rñ  c                   ó   — e Zd Zd„ Zy)úAGetCurrentUserTest.get_handlers.<locals>.WithoutUserModuleHandlerc                 ón   — | j                  d«       | j                  t        | j                  «      «       y )NrÖ  rä  rB   s    r9   r\   zEGetCurrentUserTest.get_handlers.<locals>.WithoutUserModuleHandler.getb  s(   € Ø×"Ñ"Ð#=Ô>Ø—‘œC × <Ñ <Ó=Õ>r;   Nr]   rI   r;   r9   ÚWithoutUserModuleHandlerró  a  rç  r;   rõ  c                   ó   — e Zd Zd„ Zy)ú>GetCurrentUserTest.get_handlers.<locals>.WithUserModuleHandlerc                 ón   — | j                  d«       | j                  t        | j                  «      «       y )Nr×  rä  rB   s    r9   r\   zBGetCurrentUserTest.get_handlers.<locals>.WithUserModuleHandler.getg  s(   € Ø×"Ñ"Ð#:Ô;Ø—‘œC × <Ñ <Ó=Õ>r;   Nr]   rI   r;   r9   ÚWithUserModuleHandlerr÷  f  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_handlersG  s~   € ô	¤ô 	ô	?Ð!3ô 	?ô
	?Ð0ô 	?ô
	Ð'9ô 	ô	?Ð'?ô 	?ô
	?Ð$<ô 	?ð Ð0Ð1Ø˜?Ð+Ø#Ð%=Ð>Ø Ð"7Ð8ð	
ð 	
r;   z	needs fixc                 ó^   — | j                  d«      }| j                  |j                  d«       y )Nrú  ó   Falser6  rÙ   s     r9   Útest_get_current_user_is_lazyz0GetCurrentUserTest.test_get_current_user_is_lazyr  s&   € ð —:‘:˜oÓ.ˆØ×Ñ˜Ÿ™¨Õ1r;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )Nrû  ó   Truer6  rÙ   s     r9   Útest_get_current_user_worksz.GetCurrentUserTest.test_get_current_user_worksx  s$   € Ø—:‘:˜lÓ+ˆØ×Ñ˜Ÿ™¨Õ0r;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )Nrü  rÿ  r6  rÙ   s     r9   Ú,test_get_current_user_from_ui_module_is_lazyz?GetCurrentUserTest.test_get_current_user_from_ui_module_is_lazy|  s%   € Ø—:‘:Ð4Ó5ˆØ×Ñ˜Ÿ™¨Õ1r;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )Nrý  r  r6  rÙ   s     r9   Ú*test_get_current_user_from_ui_module_worksz=GetCurrentUserTest.test_get_current_user_from_ui_module_works€  s%   € Ø—:‘:Ð1Ó2ˆØ×Ñ˜Ÿ™¨Õ0r;   )rK   rL   rM   r@   r9  r?   r`  Úskipr   r  r  r  rŽ  r�  s   @r9   rÊ  rÊ  )  sA   ø„ ò
ô21ò)
ðV €X‡]�]�;Óñ2ó  ð2ò
1ò2ö1r;   rÊ  c                   ó(   — e Zd Z G d„ de«      Zd„ Zy)ÚUnimplementedHTTPMethodsTestc                   ó   — e Zd Zy)ú$UnimplementedHTTPMethodsTest.HandlerNru  rI   r;   r9   rT   r  †  s   „ Ør;   rT   c                 óÞ   — dD ]1  }| j                  d|¬«      }| j                  |j                  d«       Œ3 dD ]2  }| j                  d|d¬«      }| j                  |j                  d«       Œ4 y )N)r÷  rø  ÚDELETEÚOPTIONSrR   rM  é•  ©rÏ   ÚPUTr;   rÐ   ro  )rC   rÑ   rÚ   s      r9   Ú#test_unimplemented_standard_methodsz@UnimplementedHTTPMethodsTest.test_unimplemented_standard_methods‰  sp   € Ø:ò 	1ˆFØ—z‘z #¨f�zÓ5ˆHØ×Ñ˜XŸ]™]¨CÕ0ð	1ð &ò 	1ˆFØ—z‘z #¨f¸3�zÓ?ˆHØ×Ñ˜XŸ]™]¨CÕ0ñ	1r;   N)rK   rL   rM   r   rT   r  rI   r;   r9   r
  r
  …  s   „ ô�.ô ó1r;   r
  c                   ó.   — e Zd Z G d„ de«      Zd„ Zd„ Zy)Ú#UnimplementedNonStandardMethodsTestc                   ó   — e Zd Zd„ Zy)ú+UnimplementedNonStandardMethodsTest.Handlerc                 ó&   — | j                  d«       y ©NÚotherrZ   rB   s    r9   r  z1UnimplementedNonStandardMethodsTest.Handler.other”  s   € ð �J‰J�wÕr;   N)rK   rL   rM   r  rI   r;   r9   rT   r  “  s   „ ó	 r;   rT   c                 ód   — | j                  ddd¬«      }| j                  |j                  d«       y )NrR   ÚPATCHr;   rÐ   r  ro  rÙ   s     r9   Útest_unimplemented_patchz<UnimplementedNonStandardMethodsTest.test_unimplemented_patch™  s,   € ð —:‘:˜c¨'¸�:Ó<ˆØ×Ñ˜Ÿ™¨Õ,r;   c                 ód   — | j                  ddd¬«      }| j                  |j                  d«       y )NrR   ÚOTHERT©rÑ   Úallow_nonstandard_methodsr  ro  rÙ   s     r9   Útest_unimplemented_otherz<UnimplementedNonStandardMethodsTest.test_unimplemented_otherŸ  s*   € Ø—:‘:˜c¨'ÈT�:ÓRˆØ×Ñ˜Ÿ™¨Õ,r;   N)rK   rL   rM   r   rT   r  r"  rI   r;   r9   r  r  ’  s   „ ô �.ô  ò-ó-r;   r  c                   ó(   — e Zd Z G d„ de«      Zd„ Zy)ÚAllHTTPMethodsTestc                   ó&   — e Zd Zd„ ZexZxZxZxZZy)úAllHTTPMethodsTest.Handlerc                 ó~   — | j                   j                  €J ‚| j                  | j                   j                  «       y r2   )r¢  rÑ   r[   rB   s    r9   rÑ   z!AllHTTPMethodsTest.Handler.method¦  s.   € Ø—<‘<×&Ñ&Ð2Ð2Ð2Ø�J‰J�t—|‘|×*Ñ*Õ+r;   N)	rK   rL   rM   rÑ   r\   ÚdeleteÚoptionsr¸   ÚputrI   r;   r9   rT   r&  ¥  s"   „ ò	,ð /5Ð4ˆÐ4ˆfÐ4�wÐ4 ©r;   rT   c                 ó`  — | j                  dd¬«      }| j                  |j                  d«       dD ]:  }| j                  d|¬«      }| j                  |j                  t        |«      «       Œ< dD ];  }| j                  d|d¬«      }| j                  |j                  t        |«      «       Œ= y )NrR   r÷  rM  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ˆØ×Ñ˜Ÿ™¨Ô,Ø2ò 	:ˆFØ—z‘z #¨f�zÓ5ˆHØ×Ñ˜XŸ]™]¬D°«LÕ9ð	:ð &ò 	:ˆFØ—z‘z #¨f¸3�zÓ?ˆHØ×Ñ˜XŸ]™]¬D°«LÕ9ñ	:r;   N)rK   rL   rM   r   rT   r,  rI   r;   r9   r$  r$  ¤  s   „ ô5�.ô 5ó:r;   r$  c                   ó.   — e Zd Z G d„ de«      Zd„ Zd„ Zy)ÚPatchMethodTestc                   ó6   — e Zd Zej                  dz   Zd„ Zd„ Zy)úPatchMethodTest.Handler)r  c                 ó&   — | j                  d«       y )NÚpatchrZ   rB   s    r9   r2  zPatchMethodTest.Handler.patch½  r  r;   c                 ó&   — | j                  d«       y r  rZ   rB   s    r9   r  zPatchMethodTest.Handler.otherÀ  r  r;   N)rK   rL   rM   r   ÚSUPPORTED_METHODSr2  r  rI   r;   r9   rT   r0  ¸  s#   „ Ø*×<Ñ<ð @
ñ 
Ðò	 ó	 r;   rT   c                 ód   — | j                  ddd¬«      }| j                  |j                  d«       y )NrR   r  r;   rÐ   s   patchr6  rÙ   s     r9   Ú
test_patchzPatchMethodTest.test_patchÃ  s*   € Ø—:‘:˜c¨'¸�:Ó<ˆØ×Ñ˜Ÿ™¨Õ1r;   c                 ód   — | j                  ddd¬«      }| j                  |j                  d«       y )NrR   r  Tr   s   otherr6  rÙ   s     r9   Ú
test_otherzPatchMethodTest.test_otherÇ  s*   € Ø—:‘:˜c¨'ÈT�:ÓRˆØ×Ñ˜Ÿ™¨Õ1r;   N)rK   rL   rM   r   rT   r6  r8  rI   r;   r9   r.  r.  ·  s   „ ô	 �.ô 	 ò2ó2r;   r.  c                   ó(   — e Zd Z G d„ de«      Zd„ Zy)ÚFinishInPrepareTestc                   ó   — e Zd Zd„ Zd„ Zy)úFinishInPrepareTest.Handlerc                 ó&   — | j                  d«       y )NrØ   r`  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;   Nra  rI   r;   r9   rT   r<  Í  s   „ ò	 ó	<r;   rT   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )NrR   s   doner6  rÙ   s     r9   Útest_finish_in_preparez*FinishInPrepareTest.test_finish_in_prepare×  s#   € Ø—:‘:˜c“?ˆØ×Ñ˜Ÿ™¨Õ0r;   N)rK   rL   rM   r   rT   r@  rI   r;   r9   r:  r:  Ì  s   „ ô<�.ô <ó1r;   r:  c                   ó   — e Zd Zd„ Zd„ Zy)ÚDefault404Testc                 ó   — dt         fgS ©Nrõ   rÉ   rB   s    r9   r?   zDefault404Test.get_handlersÝ  s   € àœÐ(Ð)Ð)r;   c                 ó–   — | j                  d«      }| j                  |j                  d«       | j                  |j                  d«       y )NrR   rV  sE   <html><title>404: Not Found</title><body>404: Not Found</body></html>rn  rÙ   s     r9   Útest_404zDefault404Test.test_404á  s=   € Ø—:‘:˜c“?ˆØ×Ñ˜Ÿ™¨Ô,Ø×ÑØ�M‰Mð2õ	
r;   N)rK   rL   rM   r?   rF  rI   r;   r9   rB  rB  Ü  s   „ ò*ó
r;   rB  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚCustom404Testc                 ó   — dt         fgS rD  rÉ   rB   s    r9   r?   zCustom404Test.get_handlersì  ó   € ØœÐ(Ð)Ð)r;   c                 ó8   —  G d„ dt         «      }t        |¬«      S )Nc                   ó   — e Zd Zd„ Zy)ú6Custom404Test.get_app_kwargs.<locals>.Custom404Handlerc                 óH   — | j                  d«       | j                  d«       y )NrV  zcustom 404 response)rò  r[   rB   s    r9   r\   z:Custom404Test.get_app_kwargs.<locals>.Custom404Handler.getñ  s   € Ø—‘ Ô$Ø—
‘
Ð0Õ1r;   Nr]   rI   r;   r9   ÚCustom404HandlerrM  ð  s   „ ó2r;   rO  )Údefault_handler_class)r   rf   )rC   rO  s     r9   r@   zCustom404Test.get_app_kwargsï  s   € ô	2œ~ô 	2ô
 Ð*:Ô;Ð;r;   c                 ó–   — | j                  d«      }| j                  |j                  d«       | j                  |j                  d«       y )NrR   rV  s   custom 404 responsern  rÙ   s     r9   rF  zCustom404Test.test_404÷  s8   € Ø—:‘:˜c“?ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™Ð(>Õ?r;   N)rK   rL   rM   r?   r@   rF  rI   r;   r9   rH  rH  ë  s   „ ò*ò<ó@r;   rH  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚDefaultHandlerArgumentsTestc                 ó   — dt         fgS rD  rÉ   rB   s    r9   r?   z(DefaultHandlerArgumentsTest.get_handlersþ  rJ  r;   c                 ó8   — t        t        t        d¬«      ¬«      S )NrY  r0  )rP  Údefault_handler_args)rf   r#   rB   s    r9   r@   z*DefaultHandlerArgumentsTest.get_app_kwargs	  s   € ÜÜ".Ü!%°#Ô!6ô
ð 	
r;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )NrR   rY  ro  rÙ   s     r9   Útest_403z$DefaultHandlerArgumentsTest.test_403	  s#   € Ø—:‘:˜c“?ˆØ×Ñ˜Ÿ™¨Õ,r;   N)rK   rL   rM   r?   r@   rX  rI   r;   r9   rS  rS  ý  s   „ ò*ò
ó-r;   rS  c                   ó   — e Zd Zd„ Zd„ Zy)ÚHandlerByNameTestc                 ó,   — dt         fdt        dd«      gS )Nú/hello1)ú/hello2ú"tornado.test.web_test.HelloHandlerú/hello3r^  )rV   r%   rB   s    r9   r?   zHandlerByNameTest.get_handlers	  s$   € ð œÐ%Ø=Ü�	Ð?Ó@ð
ð 	
r;   c                 ó  — | j                  d«      }| j                  |j                  d«       | j                  d«      }| j                  |j                  d«       | j                  d«      }| j                  |j                  d«       y )Nr\  r|  r]  r_  r6  ©rC   Úresps     r9   Útest_handler_by_namez&HandlerByNameTest.test_handler_by_name	  sh   € Ø�z‰z˜)Ó$ˆØ×Ñ˜Ÿ™ HÔ-Ø�z‰z˜)Ó$ˆØ×Ñ˜Ÿ™ HÔ-Ø�z‰z˜)Ó$ˆØ×Ñ˜Ÿ™ HÕ-r;   N)rK   rL   rM   r?   rc  rI   r;   r9   rZ  rZ  	  s   „ ò
ó.r;   rZ  c                   óX   — e Zd Zd„ Zd„ Zed„ «       Zed„ «       Zed„ «       Zed„ «       Z	y)Ú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y)úCStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandlerc                 ó   — || _         y r2   rº   r³   s     r9   rg  zNStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.initialize"	  ó	   € Ø �•	r;   c                 óN   — | j                   j                  j                  d «       y r2   )r´   ÚpreparedÚ
set_resultrB   s    r9   rÓ  zKStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.prepare%	  s   € Ø—	‘	×"Ñ"×-Ñ-¨dÕ3r;   c                 óN   — | j                   j                  j                  |«       y r2   )r´   rA  rm  ©rC   rA  s     r9   Údata_receivedzQStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.data_received(	  s   € Ø—	‘	—‘×)Ñ)¨$Õ/r;   c                 óp   — | j                   j                  j                  d «       | j                  i «       y r2   )r´   Úfinishedrm  r[   rB   s    r9   r\   zGStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.get+	  s%   € Ø—	‘	×"Ñ"×-Ñ-¨dÔ3Ø—
‘
˜2•r;   N)rK   rL   rM   rg  rÓ  rp  r\   rI   r;   r9   ÚStreamingBodyHandlerrh   	  s   „ ò!ò4ò0ór;   rs  c                   ó   — e Zd Zd„ Zy)úAStreamingRequestBodyTest.get_handlers.<locals>.EarlyReturnHandlerc                 ó   — t        d«      ‚)Né‘  r"  rB   s    r9   rÓ  zIStreamingRequestBodyTest.get_handlers.<locals>.EarlyReturnHandler.prepare1	  s   € ô   “nÐ$r;   Nr'  rI   r;   r9   ÚEarlyReturnHandlerru  /	  s   „ ó%r;   rx  c                   ó$   ‡ — e Zd Zd„ Zˆ fd„Zˆ xZS )úDStreamingRequestBodyTest.get_handlers.<locals>.CloseDetectionHandlerc                 ó   — || _         y r2   rº   r³   s     r9   rg  zOStreamingRequestBodyTest.get_handlers.<locals>.CloseDetectionHandler.initialize8	  rj  r;   c                 ól   •— t         ‰| �  «        | j                  j                  j	                  d «       y r2   )r8  rƒ  r´   Úclose_futurerm  r<  s    €r9   rƒ  zXStreamingRequestBodyTest.get_handlers.<locals>.CloseDetectionHandler.on_connection_close;	  s&   ø€ Ü‘Ñ+Ô-Ø—	‘	×&Ñ&×1Ñ1°$Õ7r;   )rK   rL   rM   rg  rƒ  rŽ  r�  s   @r9   ÚCloseDetectionHandlerrz  6	  s   ø„ ò!÷8ð 8r;   r~  z/stream_bodyrº   z/early_returnz/close_detection)r,   r   rf   )rC   rs  rx  r~  s       r9   r?   z%StreamingRequestBodyTest.get_handlers	  s„   € Ü	ô	¤>ó 	ó 
ð	ô 
ô	%¤ó 	%ó 
ð	%ô 
ô	8¤Nó 	8ó 
ð	8ð Ð1´4¸T´?ÐCØÐ0Ð1ØÐ!6¼À$¼ÐHð
ð 	
r;   c                 ó:  — t        j                   t         j                  t         j                  d«      }|j                  d| j	                  «       f«       t        |«      }|j                  d|z   dz   «       |r|j                  d«       |j                  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.connectE	  sy   € ä�M‰Mœ&Ÿ.™.¬&×*<Ñ*<¸aÓ@ˆØ	�	‰	�; × 2Ñ 2Ó 4Ð5Ô6Ü˜!“ˆØ�‰�W˜s‘]Ð%HÑHÔIÙØ�L‰LÐ1Ô2Ø�‰Ð:Ô;Øˆr;   c              #   óL  K  — t        «       | _        t        «       | _        t        «       | _        | j	                  dd¬«      }| j                  –— |j                  d«       | j                  –—}| j                  |d«       t        «       | _        |j                  d«       | j                  –—}| j                  |d«       |j                  d«       | j                  –— |j                  «       –—}| j                  |j                  d	«      «       |j                  «        y ­w)
Ns   /stream_bodyT©r€  ó	   4
asdf
s   asdfs	   4
qwer
s   qwers   0

s   {})r   rl  rA  rr  r�  r[   r}   Úread_until_closer×   rr  r™  ©rC   r’  rA  s      r9   Útest_streaming_bodyz,StreamingRequestBodyTest.test_streaming_bodyP	  sÛ   è ø€ ä›ˆŒÜ“HˆŒ	Ü›ˆŒà—‘˜oÀ�ÓEˆØ�m‰mÒØ�‰Ð%Ô&à—Y‘Y‰ˆØ×Ñ˜˜wÔ'Ü“HˆŒ	Ø�‰Ð%Ô&Ø—Y‘Y‰ˆØ×Ñ˜˜wÔ'Ø�‰�\Ô"Ø�m‰mÒØ×,Ñ,Ó.Ñ.ˆà�‰˜Ÿ™ eÓ,Ô-Ø�‰�ùs   ‚D"D$c              #   ó–   K  — | j                  dd¬«      }|j                  «       –—}| j                  |j                  d«      «       y ­w)Nó   /early_returnFr‚  ó   HTTP/1.1 401)r�  r„  r×   rü  r…  s      r9   Útest_early_returnz*StreamingRequestBodyTest.test_early_returng	  s?   è ø€ à—‘Ð.À�ÓGˆØ×,Ñ,Ó.Ñ.ˆØ�‰˜Ÿ™¨Ó8Õ9ùs   ‚AA	c              #   ó¸   K  — | j                  dd¬«      }|j                  d«       |j                  «       –—}| j                  |j	                  d«      «       y ­w)Nrˆ  Fr‚  rƒ  r‰  )r�  r[   r„  r×   rü  r…  s      r9   Útest_early_return_with_dataz4StreamingRequestBodyTest.test_early_return_with_datam	  sL   è ø€ à—‘Ð.À�ÓGˆØ�‰Ð%Ô&Ø×,Ñ,Ó.Ñ.ˆØ�‰˜Ÿ™¨Ó8Õ9ùs   ‚AAc              #   óŒ   K  — t        «       | _        | j                  dd¬«      }|j                  «        | j                  –— y ­w)Ns   /close_detectionFr‚  )r   r}  r�  r™  )rC   r’  s     r9   Útest_close_during_uploadz1StreamingRequestBodyTest.test_close_during_uploadt	  s8   è ø€ ä"›HˆÔØ—‘Ð1ÀE�ÓJˆØ�‰ŒØ×ÑÓùr�  N)
rK   rL   rM   r?   r�  r   r†  rŠ  rŒ  rŽ  rI   r;   r9   re  re  	  s]   „ ò$
òL	ð ñó ðð, ñ:ó ð:ð
 ñ:ó ð:ð ñ ó ñ r;   re  c                   ó~   — e Zd Zd„ Zej
                  d„ «       Zej                  d„ «       Z	ej                  d„ «       Z
y)ÚBaseFlowControlHandlerc                 ó.   — || _         d | _        g | _        y r2   )r´   rÑ   Úmethodsr³   s     r9   rg  z!BaseFlowControlHandler.initialize‚	  s   € ØˆŒ	ØˆŒØˆ�r;   c              #   óî   K  — | j                   �+| j                  j                  d|› d| j                   › �«       || _         | j                  j	                  |«       	 d –— d | _         y # d | _         w xY w­w)Nzentered method z
 while in )rÑ   r´   Úfailr’  r  r&  s     r9   Ú	in_methodz BaseFlowControlHandler.in_method‡	  s`   è ø€ à�;‰;Ð"Ø�I‰I�N‰N˜_¨V¨H°J¸t¿{¹{¸mÐLÔMØˆŒØ�‰×Ñ˜FÔ#ð	ÛàˆD�Kø˜$ˆD�Küs   ‚AA5ÁA) Á!A5Á)	A2Á2A5c              #   óf   K  — | j                   j                  d«       t        j                  –— y ­w)NrÓ  )r’  r  r   ÚmomentrB   s    r9   rÓ  zBaseFlowControlHandler.prepare’	  s$   è ø€ ð 	�‰×Ñ˜IÔ&Ü�j‰jÓùs   ‚/1c              #   óÆ   K  — | j                  d«      5  t        j                  –— d d d «       | j                  t	        | j
                  ¬«      «       y # 1 sw Y   Œ/xY w­w)Nr¸   ©r’  )r•  r   r—  r[   rf   r’  rB   s    r9   r¸   zBaseFlowControlHandler.post™	  sE   è ø€ à�^‰^˜FÓ#ñ 	Ü—*‘*Ò÷	à�
‰
”4 §¡Ô-Õ.÷	ð 	üs   ‚A!”A§.A!ÁAÁA!N)rK   rL   rM   rg  Ú
contextlibÚcontextmanagerr•  r   r¹   rÓ  r¸   rI   r;   r9   r�  r�  €	  sQ   „ òð
 ×Ññó ðð 	‡]�]ñó ðð 	‡]�]ñ/ó ñ/r;   r�  c                   óx   — 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	y)Ú#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   rz  z3BaseStreamingRequestFlowControlTest.get_http_client¦	  r  r;   rC   c                 ó®   — | j                  ddd¬«      }|j                  «        | j                  t        |j                  «      t        g d¢¬«      «       y )NrR   ÚabcdefghijklmnopqrstuvwxyzrÏ   )rÒ   rÑ   ©rÓ  rp  rp  rp  r¸   r™  )rÓ   rN  r}   r   rÒ   rf   rÙ   s     r9   Útest_flow_control_fixed_bodyz@BaseStreamingRequestFlowControlTest.test_flow_control_fixed_body«	  sJ   € Ø—:‘:˜cÐ(DÈV�:ÓTˆØ×ÑÔØ×ÑÜ˜Ÿ™Ó&Üòôõ	
r;   c                 óè   ‡— g d¢Št         j                  ˆfd„«       }| j                  d|d¬«      }|j                  «        | j	                  t        |j                  «      t        g d¢¬«      «       y )N)s   abcds   efghs   ijklc              3   ó0   •K  — ‰D ]  } | |«      –— Œ y ­wr2   rI   )r[   ÚiÚchunkss     €r9   Úbody_producerzYBaseStreamingRequestFlowControlTest.test_flow_control_chunked_body.<locals>.body_producer¾	  s   øè ø€ àò �Ù˜A“h“ñùs   ƒrR   rÏ   )r«  rÑ   r¥  r™  )r   r¹   rÓ   rN  r}   r   rÒ   rf   )rC   r«  rÚ   rª  s      @r9   Útest_flow_control_chunked_bodyzBBaseStreamingRequestFlowControlTest.test_flow_control_chunked_body»	  sg   ø€ Ú,ˆä	�‰ó	ó 
ð	ð —:‘:˜c°Àv�:ÓNˆØ×ÑÔØ×ÑÜ˜Ÿ™Ó&Üòôõ	
r;   c                 óX  — t        «       }t        j                  d|¬«      }|j                  d«       |j	                  «        |j                  «       }| j                  d|dddi¬«      }|j                  «        | j                  t        |j                  «      t        g d	¢¬
«      «       y )NÚw)ÚmodeÚfileobjs   abcdefghijklmnopqrstuvwxyzrR   rÏ   r‹  rŠ  )rÒ   rÑ   r.  r¥  r™  )r0   rŠ  ÚGzipFiler[   r™  ÚgetvaluerÓ   rN  r}   r   rÒ   rf   )rC   ÚbytesioÚ	gzip_fileÚcompressed_bodyrÚ   s        r9   Ú!test_flow_control_compressed_bodyzEBaseStreamingRequestFlowControlTest.test_flow_control_compressed_bodyÒ	  s—   € Ü“)ˆÜ—M‘M s°GÔ<ˆ	Ø�‰Ð5Ô6Ø�‰ÔØ!×*Ñ*Ó,ˆØ—:‘:ØØ ØØ'¨Ð0ð	 ó 
ˆð 	×ÑÔØ×ÑÜ˜Ÿ™Ó&Üòôõ	
r;   N)
rK   rL   rM   r¡  rz  r¦  ÚAnyr¦  r¬  r¶  rI   r;   r9   r�  r�   	  s<   „ ò<ò
'ð

¨6¯:©:ó 
ð 
¨V¯Z©Zó 
ð.
°·
±
ô 
r;   r�  c                   ó   — e Zd Zd„ Zy)Ú(DecoratedStreamingRequestFlowControlTestc                 ó@   —  G d„ dt         «      }d|t        | ¬«      fgS )Nc                   ó0   — e Zd Zej                  d„ «       Zy)úZDecoratedStreamingRequestFlowControlTest.get_handlers.<locals>.DecoratedFlowControlHandlerc              3   ó|   K  — | j                  d«      5  t        j                  –— d d d «       y # 1 sw Y   y xY w­w)Nrp  )r•  r   r—  ro  s     r9   rp  zhDecoratedStreamingRequestFlowControlTest.get_handlers.<locals>.DecoratedFlowControlHandler.data_receivedò	  s0   è ø€ à—^‘^ OÓ4ñ %ÜŸ*™*Ò$÷%÷ %ñ %üs   ‚<”0§	<°9µ<N)rK   rL   rM   r   r¹   rp  rI   r;   r9   ÚDecoratedFlowControlHandlerr¼  ñ	  s   „ Ø�]‰]ñ%ó ñ%r;   r¾  rR   rº   ©r�  rf   )rC   r¾  s     r9   r?   z5DecoratedStreamingRequestFlowControlTest.get_handlersð	  s&   € ô	%Ô*@ô 	%ð Ð1´4¸T´?ÐCÐDÐDr;   N©rK   rL   rM   r?   rI   r;   r9   r¹  r¹  í	  s   „ óEr;   r¹  c                   ó   — e Zd Zd„ Zy)Ú%NativeStreamingRequestFlowControlTestc                 ó@   —  G d„ dt         «      }d|t        | ¬«      fgS )Nc                   ó   — e Zd Zd„ Zy)úTNativeStreamingRequestFlowControlTest.get_handlers.<locals>.NativeFlowControlHandlerc              “   ó–   K  — | j                  d«      5  dd l}|j                  d«      ƒ d {  –—†  d d d «       y 7 Œ# 1 sw Y   y xY w­w)Nrp  r   )r•  Úasyncior‹  )rC   rA  rÇ  s      r9   rp  zbNativeStreamingRequestFlowControlTest.get_handlers.<locals>.NativeFlowControlHandler.data_receivedÿ	  sF   è ø€ Ø—^‘^ OÓ4ñ +Û"à!Ÿ-™-¨Ó*×*Ð*÷+ð +ð +ø÷+ð +üs%   ‚A	”=­;®=²	A	»=½AÁA	N)rK   rL   rM   rp  rI   r;   r9   ÚNativeFlowControlHandlerrÅ  þ	  s   „ ó+r;   rÈ  rR   rº   r¿  )rC   rÈ  s     r9   r?   z2NativeStreamingRequestFlowControlTest.get_handlersý	  s&   € ô	+Ô'=ô 	+ð Ð.´¸$´Ð@ÐAÐAr;   NrÀ  rI   r;   r9   rÂ  rÂ  ú	  s   „ óBr;   rÂ  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚIncorrectContentLengthTestc                 ój   ‡— | Š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y)ú8IncorrectContentLengthTest.get_handlers.<locals>.TooHighc                 ó€   •— | j                  dd«       	 | j                  d«       y # t        $ r}|‰_        ‚ d }~ww xY w)Nr  r­  rn  ©rþ  r±   r¥  Úserver_error©rC   r  r´   s     €r9   r\   z<IncorrectContentLengthTest.get_handlers.<locals>.TooHigh.get
  s>   ø€ Ø—‘Ð 0°$Ô7ðØ—K‘K Õ%øÜ ò Ø()�DÔ%Øûðúó   •' §	=°8¸=Nr]   rº   s   €r9   ÚTooHighrÍ  
  ó   ø„ õr;   rÓ  c                   ó   •— e Zd Zˆ fd„Zy)ú7IncorrectContentLengthTest.get_handlers.<locals>.TooLowc                 ó€   •— | j                  dd«       	 | j                  d«       y # t        $ r}|‰_        ‚ d }~ww xY w)Nr  rj  rY   rÏ  rÑ  s     €r9   r\   z;IncorrectContentLengthTest.get_handlers.<locals>.TooLow.get
  s>   ø€ Ø—‘Ð 0°#Ô6ðØ—K‘K Õ(øÜ ò Ø()�DÔ%ØûðúrÒ  Nr]   rº   s   €r9   ÚTooLowrÖ  
  rÔ  r;   rØ  ú/highú/low)rÐ  r   )rC   rÓ  rØ  r´   s      @r9   r?   z'IncorrectContentLengthTest.get_handlers	
  s?   ø€ ØˆØ ˆÔö	”nô 	ö	”^ô 	ð ˜'Ð" V¨VÐ$4Ð5Ð5r;   c                 ó\  — t        t        d«      5  t        t        d«      5  | j                  t        «      5  | j                  dd¬«       d d d «       d d d «       d d d «       | j                  t        | j                  «      d«       y # 1 sw Y   Œ?xY w# 1 sw Y   ŒCxY w# 1 sw Y   ŒGxY w)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_high"
  sŸ   € ô ”wÐ LÓMñ 	:ÜÜð5óñ :ð
 ×&Ñ&¤Ó7ñ :Ø—J‘J˜w°D�JÔ9÷:÷:÷	:ð 	×ÑÜ�×!Ñ!Ó"Ð$Võ	
÷:ð :ú÷:ð :ú÷	:ð 	:úó9   ‘B"¢B¸B
ÁBÁB"Â
BÂBÂB	ÂB"Â"B+c                 ó\  — t        t        d«      5  t        t        d«      5  | j                  t        «      5  | j                  dd¬«       d d d «       d d d «       d d d «       | j                  t        | j                  «      d«       y # 1 sw Y   Œ?xY w# 1 sw Y   ŒCxY w# 1 sw Y   ŒGxY w)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_low2
  sŸ   € ô ”wÐ LÓMñ 	9ÜÜð5óñ 9ð
 ×&Ñ&¤Ó7ñ 9Ø—J‘J˜v°4�JÔ8÷9÷9÷	9ð 	×ÑÜ�×!Ñ!Ó"Ð$Rõ	
÷9ð 9ú÷9ð 9ú÷	9ð 	9úrã  N)rK   rL   rM   r?   râ  rå  rI   r;   r9   rÊ  rÊ  
  s   „ ò6ò2
ó 
r;   rÊ  c                   ó(   — e Zd Z G d„ de«      Zd„ Zy)ÚClientCloseTestc                   ó   — e Zd Zd„ Zy)úClientCloseTest.Handlerc                 óð   — | j                   j                  j                  d«      r@| j                   j                  j                  j                  «        | j                  d«       y | j                  d«       y )NzHTTP/1rY   úrequires HTTP/1.x)r¢  rx   rü  Ú
connectionr’  r™  r[   rB   s    r9   r\   zClientCloseTest.Handler.getE
  sS   € Ø�|‰|×#Ñ#×.Ñ.¨xÔ8ð —‘×'Ñ'×.Ñ.×4Ñ4Ô6Ø—
‘
˜7Õ#ð —
‘
Ð.Õ/r;   Nr]   rI   r;   r9   rT   ré  D
  s   „ ó	0r;   rT   c                 ó  — | j                  t        t        j                  f«      5  | j	                  dd¬«      }|j
                  dk(  r| j                  d«       | j                  |j                  d«       d d d «       y # 1 sw Y   y xY w)NrR   TrÞ  s   requires HTTP/1.xrë  iW  )	rá  r   r`  ÚSkipTestrÓ   rÒ   ÚskipTestr}   rÕ   rÙ   s     r9   Útest_client_closez!ClientCloseTest.test_client_closeR
  sp   € Ø×Ñ¤´×1BÑ1BÐCÓDñ 	1Ø—z‘z #°4�zÓ8ˆHØ�}‰}Ð 4Ò4Ø—‘Ð1Ô2Ø×Ñ˜XŸ]™]¨CÔ0÷		1÷ 	1ñ 	1ús   ¦AA?Á?BN)rK   rL   rM   r   rT   rð  rI   r;   r9   rç  rç  C
  s   „ ô0�.ô 0ó1r;   rç  c                   ód   — 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y)ÚSignedValueTestzIt's a secret to everybodyÚ	asdfbasdfÚ12312312Ú2342342)r   rv   r„   c                 ó(   — | j                  «       dz
  S )Ni 0* )ÚpresentrB   s    r9   ÚpastzSignedValueTest.past^
  s   € Ø�|‰|‹~ 
Ñ*Ð*r;   c                  ó   — y)Ni m|MrI   rB   s    r9   r÷  zSignedValueTest.presenta
  s   € Ør;   c                 óF  — t        t        j                  ddd| j                  ¬«      }| j	                  |d«       t        t        j                  ddd| j                  ¬«      }| j	                  |d«       t        t        j                  dd| j                  ¬«      }| j	                  ||«       t        t        j                  d|d| j                  ¬	«      }| j	                  |d
«       t        t        j                  d|d| j                  ¬	«      }| j	                  |d
«       y )Nr§  rm   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_valuesd
  s  € Ü'Ü×"Ñ" E¨7¸AÀTÇ\Á\ô
ˆ	ð 	×ÑØÐVô	
ô (Ü×"Ñ" E¨7¸AÀTÇ\Á\ô
ˆ	ð 	×ÑØðPô	
ô -Ü×"Ñ" E¨7¸$¿,¹,ô
ˆð 	×Ñ˜¨Ô3ä(Ü×"Ñ" E¨9À!È4Ï<É<ô
ˆ
ð 	×Ñ˜ XÔ.ä(Ü×"Ñ" E¨9À!È4Ï<É<ô
ˆ
ð 	×Ñ˜ XÕ.r;   c                 ó€  — t        t        j                  dd| j                  ¬«      }t        t        j                  dd| j                  ¬«      }t	        t        j                  d|| j                  ¬«      }| j                  |«       t	        t        j                  d|| j                  ¬«      }| j                  |«       y )NÚkey1rm   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                 ó4  — t        t        j                  dd| j                  ¬«      }t	        t        j                  d|| j                  ¬«      }| j                  |d«       t	        t        j                  d|| j                  ¬«      }| j                  |«       y )Nr  rm   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¹9ô
ˆô +Ü×"Ñ" F¨F¸$¿)¹)ô
ˆð 	×Ñ˜ xÔ0Ü-Ü×"Ñ" F¨F¸$¿,¹,ô
ˆð 	×Ñ˜/Õ*r;   c                 óÐ   ‡ ‡— dŠˆ ˆfd„}‰ j                   |d«      «       ‰ j                   |d«      «       ‰ j                   |d«      «       ‰ j                   |d«      «       y )NÚ@3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e152c                 ó^   •— 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¦
  ó/   ø€ ØÔ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ÔJà×Ñ™Ð"IÓJÔKà×Ñ™Ð"HÓIÔJà×Ñ™Ð"JÓKÕLr;   c                 ó,  ‡ ‡— dŠˆˆ fd„}‰ j                   |d«      «       ‰ j                   |d«      «       ‰ j                   |d«      «       ‰ j                   |d«      «       ‰ j                   |d«      «       ‰ j                   |d«      «       y )	Nr  c                 ó^   •— 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ÚA3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e1538r  )rC   r  r  s   ` @r9   Útest_signature_tamperingz(SignedValueTest.test_signature_tampering³
  s�   ù€ Ø8ˆõ	ð
 	�‰ÙÐWÓXô	
ð 	×Ñ™ (Ó+Ô,à×ÑÙÐWÓXô	
ð 	×ÑÙÐWÓXô	
ð 	×ÑÙÐVÓWô	
ð 	×ÑÙØSóõ	
r;   c                 óÈ   — d}t        t        j                  d|| j                  ¬«      }t	        t        j                  d|| j                  ¬«      }| j                  ||«       y )Nr”   r§  rü  )r'   rò  rþ  r÷  r(   r}   ©rC   rm   r  Údecodeds       r9   Útest_non_asciizSignedValueTest.test_non_asciiÓ
  sU   € ØˆÜ$Ü×"Ñ" E¨5¸¿¹ô
ˆô &Ü×"Ñ" E¨6¸¿¹ô
ˆð 	×Ñ˜ Õ(r;   c                 óÊ   — d}t        t        j                  d|| j                  d¬«      }t	        t        j                  d|| j                  ¬«      }| j                  ||«       y ©Nr”   r§  r   ©rû  rd   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Ý
  óX   € ØˆÜ$Ü×'Ñ'¨°¸T¿\¹\ÐWXô
ˆô &Ü×'Ñ'¨°¸d¿l¹lô
ˆð 	×Ñ˜ Õ(r;   c                 óÊ   — d}t        t        j                  d|| j                  d¬«      }t	        t        j                  d|| j                  ¬«      }| j                  ||«       y )Nr”   r§  rv   r,  rü  r-  r'  s       r9   Ú.test_key_versioning_read_write_non_default_keyz>SignedValueTest.test_key_versioning_read_write_non_default_keyç
  r0  r;   c                 ó
  — d}t        t        j                  d|| j                  d¬«      }t        j                  j	                  «       }|j                  d«       t        |d|| j                  ¬«      }| j                  |«       y r+  )r'   rò  r.  r÷  r§   r¨   r(   rŽ   )rC   rm   r  Únewkeysr(  s        r9   Útest_key_versioning_invalid_keyz/SignedValueTest.test_key_versioning_invalid_keyñ
  sj   € ØˆÜ$Ü×'Ñ'¨°¸T¿\¹\ÐWXô
ˆô "×-Ñ-×2Ñ2Ó4ˆØ�‰�AŒÜ% g¨u°fÀDÇLÁLÔQˆØ×Ñ˜'Õ"r;   c                 ó’   — d}t        t        j                  d|| j                  d¬«      }t	        |«      }| j                  d|«       y )Nr”   r§  rv   r,  )r'   rò  r.  r÷  r)   r}   )rC   rm   r  rd   s       r9   Útest_key_version_retrievalz*SignedValueTest.test_key_version_retrievalû
  sC   € ØˆÜ$Ü×'Ñ'¨°¸T¿\¹\ÐWXô
ˆô 0°Ó7ˆØ×Ñ˜˜KÕ(r;   N)rK   rL   rM   rþ  r.  rø  r÷  r  r  r  r  r%  r)  r/  r2  r5  r7  rI   r;   r9   rò  rò  Z
  sR   „ Ø)€FØ! j°YÑ?€Kò+òò/ò@$ò"+ò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y)úXSRFTest.Handlerc                 óŽ   — t        | j                  dd«      «      }|| j                  d<   | j                  | j                  «       y )Nrx   rj  Úxsrf_cookie_version)rÌ  rÍ  rb   r[   rÄ  )rC   rx   s     r9   r\   zXSRFTest.Handler.get  s:   € Ü˜$×+Ñ+¨I°sÓ;Ó<ˆGð 4;ˆD�M‰MÐ/Ñ0Ø�J‰J�t—‘Õ'r;   c                 ó&   — | j                  d«       y rm  rZ   rB   s    r9   r¸   zXSRFTest.Handler.post  ó   € Ø�J‰J�tÕr;   N©rK   rL   rM   r\   r¸   rI   r;   r9   rT   r;    s   „ ò	(ó	r;   rT   c                 ó   — t        d¬«      S r2  rÌ   rB   s    r9   r@   zXSRFTest.get_app_kwargs  r4  r;   c                 óL   •— t         ‰| �  «        | j                  «       | _        y r2   ©r8  ÚsetUpÚ	get_tokenrÄ  r<  s    €r9   rD  zXSRFTest.setUp  ó   ø€ Ü‰‰ŒØŸ.™.Ó*ˆ�r;   c                 ó¬   — |�| j                  |«      }nd }| j                  |€dnd|z  |¬«      }|j                  «        t        |j                  «      S )NrR   z/?version=%dr4  ©Úcookie_headersrÓ   rN  r	   rÒ   )rC   Ú	old_tokenrx   r.  rÚ   s        r9   rE  zXSRFTest.get_token  s]   € ØÐ Ø×)Ñ)¨)Ó4‰GàˆGØ—:‘:Ø�?‰C¨¸'Ñ)AÈGð ó 
ˆð 	×ÑÔÜ˜(Ÿ-™-Ó(Ð(r;   c                 ó,   — |€| j                   }dd|z   iS )Nr2  z_xsrf=©rÄ  ©rC   Útokens     r9   rI  zXSRFTest.cookie_headers"  s    € Øˆ=Ø—O‘OˆEØ˜( UÑ*Ð+Ð+r;   c                 ó®   — t        t        d«      5  | j                  ddd¬«      }d d d «       | j                  j                  d«       y # 1 sw Y   Œ&xY w©Nú.*'_xsrf' argument missingrR   rÏ   r;   rÐ   rY  r[  rÙ   s     r9   Útest_xsrf_fail_no_tokenz XSRFTest.test_xsrf_fail_no_token'  óN   € Ü”wÐ <Ó=ñ 	@Ø—z‘z #¨f¸3�zÓ?ˆH÷	@à×Ñ˜Ÿ™¨Õ,÷	@ð 	@úó   ‘AÁAc           
      ó  — t        t        d«      5  | j                  ddt        j                  j                  t        | j                  ¬«      «      ¬«      }d d d «       | j                  j                  d«       y # 1 sw Y   Œ&xY w©Nú!.*XSRF cookie does not match POSTrR   rÏ   ©Ú_xsrfrÐ   rY  ©
r   r   rÓ   r}  r~  r  rf   rÄ  r}   rÕ   rÙ   s     r9   Útest_xsrf_fail_body_no_cookiez&XSRFTest.test_xsrf_fail_body_no_cookie,  ól   € Ü”wÐ CÓDñ 	Ø—z‘zØØÜ—\‘\×+Ñ+¬D°t·±Ô,GÓHð "ó ˆH÷	ð 	×Ñ˜Ÿ™¨Õ,÷	ð 	úó   ‘AA<Á<Bc                 ó  — t        t        d«      5  | j                  dd| j                  «       t        j
                  j                  t        d¬«      «      ¬«      }d d d «       | j                  j                  d«       y # 1 sw Y   Œ&xY w)Nz%.*'_xsrf' argument has invalid formatrR   rÏ   ú3|rX  rQ  rY  )
r   r   rÓ   rI  r}  r~  r  rf   r}   rÕ   rÙ   s     r9   Ú&test_xsrf_fail_argument_invalid_formatz/XSRFTest.test_xsrf_fail_argument_invalid_format5  st   € Ü”wÐ GÓHñ 	Ø—z‘zØØØ×+Ñ+Ó-Ü—\‘\×+Ñ+¬D°tÔ,<Ó=ð	 "ó ˆH÷	ð 	×Ñ˜Ÿ™¨Õ,÷	ð 	ús   ‘ABÂB
c                 ó2  — t        t        d«      5  | j                  dd| j                  d¬«      t        j
                  j                  t        | j                  ¬«      «      ¬«      }d d d «       | j                  j                  d«       y # 1 sw Y   Œ&xY w)	NrW  rR   rÏ   r_  ©rN  rX  rQ  rY  )r   r   rÓ   rI  r}  r~  r  rf   rÄ  r}   rÕ   rÙ   s     r9   Ú$test_xsrf_fail_cookie_invalid_formatz-XSRFTest.test_xsrf_fail_cookie_invalid_format?  s}   € Ü”wÐ CÓDñ 	Ø—z‘zØØØ×+Ñ+°$Ð+Ó7Ü—\‘\×+Ñ+¬D°t·±Ô,GÓHð	 "ó ˆH÷	ð 	×Ñ˜Ÿ™¨Õ,÷	ð 	ús   ‘ABÂBc                 óÌ   — t        t        d«      5  | j                  ddd| j                  «       ¬«      }d d d «       | j	                  j
                  d«       y # 1 sw Y   Œ&xY w)NrQ  rR   rÏ   r;   ©rÑ   rÒ   r.  rY  )r   r   rÓ   rI  r}   rÕ   rÙ   s     r9   Útest_xsrf_fail_cookie_no_bodyz&XSRFTest.test_xsrf_fail_cookie_no_bodyI  s]   € Ü”wÐ <Ó=ñ 	Ø—z‘zØ˜F¨°d×6IÑ6IÓ6Kð "ó ˆH÷	ð 	×Ñ˜Ÿ™¨Õ,÷		ð 	ús   ‘$AÁA#c           	      óÔ   — | j                  ddt        j                  j                  t	        d¬«      «      | j                  d¬«      ¬«      }| j                  |j                  d«       y )NrR   rÏ   ÚdeadbeefrX  rb  re  rÎ   ©rÓ   r}  r~  r  rf   rI  r}   rÕ   rÙ   s     r9   Útest_xsrf_success_short_tokenz&XSRFTest.test_xsrf_success_short_tokenP  sY   € Ø—:‘:ØØÜ—‘×'Ñ'¬°:Ô(>Ó?Ø×'Ñ'¨jÐ'Ó9ð	 ó 
ˆð 	×Ñ˜Ÿ™¨Õ,r;   c           	      óÔ   — | j                  ddt        j                  j                  t	        d¬«      «      | j                  d¬«      ¬«      }| j                  |j                  d«       y )NrR   rÏ   ÚxoxorX  rb  re  rÎ   ri  rÙ   s     r9   Útest_xsrf_success_non_hex_tokenz(XSRFTest.test_xsrf_success_non_hex_tokenY  sY   € Ø—:‘:ØØÜ—‘×'Ñ'¬°6Ô(:Ó;Ø×'Ñ'¨fÐ'Ó5ð	 ó 
ˆð 	×Ñ˜Ÿ™¨Õ,r;   c           	      óä   — | j                  ddt        j                  j                  t	        | j
                  ¬«      «      | j                  «       ¬«      }| j                  |j                  d«       y ©NrR   rÏ   rX  re  rÎ   ©	rÓ   r}  r~  r  rf   rÄ  rI  r}   rÕ   rÙ   s     r9   Útest_xsrf_success_post_bodyz$XSRFTest.test_xsrf_success_post_bodyb  sX   € Ø—:‘:ØØÜ—‘×'Ñ'¬°4·?±?Ô(CÓDØ×'Ñ'Ó)ð	 ó 
ˆð 	×Ñ˜Ÿ™¨Õ,r;   c                 óê   — | j                  dt        j                  j                  t	        | j
                  ¬«      «      z   dd| j                  «       ¬«      }| j                  |j                  d«       y )Nz/?rX  rÏ   r;   re  rÎ   rp  rÙ   s     r9   Útest_xsrf_success_query_stringz'XSRFTest.test_xsrf_success_query_stringk  s]   € Ø—:‘:Ø”6—<‘<×)Ñ)¬$°T·_±_Ô*EÓFÑFØØØ×'Ñ'Ó)ð	 ó 
ˆð 	×Ñ˜Ÿ™¨Õ,r;   c                 ó®   — | j                  dddt        d| j                  ifi | j                  «       ¤Ž¬«      }| j	                  |j
                  d«       y )NrR   rÏ   r;   zX-Xsrftokenre  rÎ   )rÓ   rf   rÄ  rI  r}   rÕ   rÙ   s     r9   Útest_xsrf_success_headerz!XSRFTest.test_xsrf_success_headert  sY   € Ø—:‘:ØØØÜØ §¡Ð0ñà×%Ñ%Ó'ñð	 ó 
ˆð 	×Ñ˜Ÿ™¨Õ,r;   c                 ó°   — d}t        «       }t        |«      D ]!  }|j                  | j                  «       «       Œ# | j	                  t        |«      |«       y )Nr  )r“  r  rý  rE  r}   r=  )rC   Ú
NUM_TOKENSÚtokensr©  s       r9   Útest_distinct_tokenszXSRFTest.test_distinct_tokens€  sI   € àˆ
Ü“ˆÜ�zÓ"ò 	)ˆAØ�J‰J�t—~‘~Ó'Õ(ð	)à×Ñœ˜V› jÕ1r;   c                 óx  — | j                  «       }| j                  |fD ]i  }| j                  ddt        j                  j                  t        |¬«      «      | j                  |«      ¬«      }| j                  |j                  d«       Œk | j                  |f|| j                  ffD ]…  \  }}t        t        d«      5  | j                  ddt        j                  j                  t        |¬«      «      | j                  |«      ¬«      }d d d «       | j                  j                  d«       Œ‡ y # 1 sw Y   Œ(xY w)NrR   rÏ   rX  re  rÎ   rW  rY  )rE  rÄ  rÓ   r}  r~  r  rf   rI  r}   rÕ   r   r   )rC   Útoken2rN  rÚ   Úcookie_tokenÚ
body_tokens         r9   Útest_cross_userzXSRFTest.test_cross_userˆ  s   € Ø—‘Ó!ˆà—o‘o vÐ.ò 	1ˆEØ—z‘zØØÜ—\‘\×+Ñ+¬D°uÔ,=Ó>Ø×+Ñ+¨EÓ2ð	 "ó ˆHð ×Ñ˜XŸ]™]¨CÕ0ð	1ð �_‰_˜fÐ%Ø�T—_‘_Ð%ð)
ò 	1Ñ$ˆL˜*ô œ7Ð$GÓHñ ØŸ:™:ØØ!ÜŸ™×/Ñ/´¸:Ô0FÓGØ ×/Ñ/°Ó=ð	 &ó �÷ð ×Ñ˜XŸ]™]¨CÕ0ñ	1÷ð ús   Â=AD0Ä0D9	c           
      óž  — | j                   }|h}t        d«      D ]•  }| j                  |«      }|j                  |«       | j	                  ddt
        j                  j                  t        | j                   ¬«      «      | j                  |«      ¬«      }| j                  |j                  d«       Œ— | j                  t        |«      d«       y )Né   rR   rÏ   rX  re  rÎ   é   )rÄ  r  rE  rý  rÓ   r}  r~  r  rf   rI  r}   rÕ   r=  )rC   rN  Útokens_seenr©  rÚ   s        r9   Útest_refresh_tokenzXSRFTest.test_refresh_token¡  s°   € Ø—‘ˆØ�gˆô
 �q“ò 
	1ˆAØ—N‘N 5Ó)ˆEà�O‰O˜EÔ"Ø—z‘zØØÜ—\‘\×+Ñ+¬D°t·±Ô,GÓHØ×+Ñ+¨EÓ2ð	 "ó ˆHð ×Ñ˜XŸ]™]¨CÕ0ð
	1ð 	×Ñœ˜[Ó)¨1Õ-r;   c           
      óh  — | j                  | j                  d¬«      | j                  d¬«      «       | j                  d¬«      }t        d«      D ]%  }| j                  | j                  |d¬«      |«       Œ' | j                  |«      }| j                  ||«       | j                  || j                  |«      «       ||f||ffD ]l  \  }}| j	                  ddt
        j                  j                  t        |¬«      «      | j                  |«      ¬«      }| j                  |j                  d«       Œn y )	Nrv   rw   r€  rR   rÏ   rX  re  rÎ   )ÚassertNotEqualrE  r  r}   rÓ   r}  r~  r  rf   rI  rÕ   )rC   Úv1_tokenr©  Úv2_tokenr|  r}  rÚ   s          r9   Útest_versioningzXSRFTest.test_versioningµ  s  € à×Ñ˜DŸN™N°1˜NÓ5°t·~±~Èa°~Ó7PÔQð —>‘>¨!�>Ó,ˆÜ�q“ò 	LˆAØ×Ñ˜TŸ^™^¨H¸a˜^Ó@À(ÕKð	Lð —>‘> (Ó+ˆØ×Ñ˜H hÔ/à×Ñ˜H d§n¡n°XÓ&>Ô?ð +3°HÐ)=ÀÈ(Ð?SÐ(Tò 	1Ñ$ˆL˜*Ø—z‘zØØÜ—\‘\×+Ñ+¬D°zÔ,BÓCØ×+Ñ+¨LÓ9ð	 "ó ˆHð ×Ñ˜XŸ]™]¨CÕ0ñ	1r;   r®  r2   )rK   rL   rM   r   rT   r@   rD  rE  rI  rR  r[  r`  rc  rf  rj  rm  rq  rs  ru  ry  r~  rƒ  rˆ  rŽ  r�  s   @r9   r9  r9    si   ø„ ô	�.ô 	ò'ô+ó	)ó,ò
-ò
-ò-ò-ò-ò-ò-ò-ò-ò
-ò2ò1ò2.ö(1r;   r9  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ˆ xZS )ÚXSRFCookieNameTestc                   ó   — e Zd Zd„ Zd„ Zy)úXSRFCookieNameTest.Handlerc                 ó:   — | j                  | j                  «       y r2   ©r[   rÄ  rB   s    r9   r\   zXSRFCookieNameTest.Handler.getÒ  ó   € Ø�J‰J�t—‘Õ'r;   c                 ó&   — | j                  d«       y rm  rZ   rB   s    r9   r¸   zXSRFCookieNameTest.Handler.postÕ  r?  r;   Nr@  rI   r;   r9   rT   rŒ  Ñ  s   „ ò	(ó	r;   rT   c                 ó"   — t        ddddi¬«      S )NTz__Host-xsrfr  )r3  Úxsrf_cookie_nameÚxsrf_cookie_kwargsrÌ   rB   s    r9   r@   z!XSRFCookieNameTest.get_app_kwargsØ  s   € ÜØØ*Ø (¨$Ð/ô
ð 	
r;   c                 óL   •— t         ‰| �  «        | j                  «       | _        y r2   rC  r<  s    €r9   rD  zXSRFCookieNameTest.setUpß  rF  r;   c                 óž   — |�| j                  |«      }nd }| j                  d|¬«      }|j                  «        t        |j                  «      S )NrR   r4  rH  )rC   rJ  r.  rÚ   s       r9   rE  zXSRFCookieNameTest.get_tokenã  sJ   € ØÐ Ø×)Ñ)¨)Ó4‰GàˆGØ—:‘:˜c¨7�:Ó3ˆØ×ÑÔÜ˜(Ÿ-™-Ó(Ð(r;   c                 ó,   — |€| j                   }dd|z   iS )Nr2  z__Host-xsrf=rL  rM  s     r9   rI  z!XSRFCookieNameTest.cookie_headersì  s    € Øˆ=Ø—O‘OˆEØ˜.¨5Ñ0Ð1Ð1r;   c                 ó®   — t        t        d«      5  | j                  ddd¬«      }d d d «       | j                  j                  d«       y # 1 sw Y   Œ&xY wrP  r[  rÙ   s     r9   rR  z*XSRFCookieNameTest.test_xsrf_fail_no_tokenñ  rS  rT  c           
      ó  — t        t        d«      5  | j                  ddt        j                  j                  t        | j                  ¬«      «      ¬«      }d d d «       | j                  j                  d«       y # 1 sw Y   Œ&xY wrV  rZ  rÙ   s     r9   r[  z0XSRFCookieNameTest.test_xsrf_fail_body_no_cookieö  r\  r]  c           	      óä   — | j                  ddt        j                  j                  t	        | j
                  ¬«      «      | j                  «       ¬«      }| j                  |j                  d«       y ro  rp  rÙ   s     r9   rq  z.XSRFCookieNameTest.test_xsrf_success_post_bodyÿ  sX   € Ø—:‘:ØØä—‘×'Ñ'¬°4·?±?Ô(CÓDØ×'Ñ'Ó)ð ó 
ˆð 	×Ñ˜Ÿ™¨Õ,r;   r2   )rK   rL   rM   r   rT   r@   rD  rE  rI  rR  r[  rq  rŽ  r�  s   @r9   rŠ  rŠ  Ð  s2   ø„ ô�.ô ò
ô+ó)ó2ò
-ò
-ö-r;   rŠ  c                   ó.   — e Zd Z G d„ de«      Zd„ Zd„ Zy)ÚXSRFCookieKwargsTestc                   ó   — e Zd Zd„ Zy)úXSRFCookieKwargsTest.Handlerc                 ó:   — | j                  | j                  «       y r2   rŽ  rB   s    r9   r\   z XSRFCookieKwargsTest.Handler.get  r�  r;   Nr]   rI   r;   r9   rT   r�    s   „ ó	(r;   rT   c                 ó2   — t        dt        dd¬«      ¬«      S )NTr„   )r  rn   )r3  r“  rÌ   rB   s    r9   r@   z#XSRFCookieKwargsTest.get_app_kwargs  s   € ÜØ´$ÀÐSTÔ2Uô
ð 	
r;   c                 ó  — | j                  d«      }| j                  d|j                  d   j                  «       «       | j                  d|j                  d   j                  «       «       |j                  j	                  d«      }|€J ‚t        j                  d|«      }|€J ‚t        j                  j                  t        j                  j                  «      t        j                  d¬«      z   }t        j                  j                  |j                  «       d   «      }|j                   €*|j#                  t        j                  j                  ¬	«      }| j%                  t'        ||z
  j)                  «       «      d
k  «       y )NrR   z	httponly;r,  zexpires=z.*; expires=(?P<expires>.+);.*r„   rL  rN  )Útzinfor  )rÓ   r>  r.  Úlowerr\   rŠ   r‹   rO  rP  rQ  rR  rS  rT  rU  rV  rW  r¡  Úreplacer×   rY  rZ  r[  s         r9   Útest_xsrf_httponlyz'XSRFCookieKwargsTest.test_xsrf_httponly  s;  € Ø—:‘:˜c“?ˆØ�‰�k 8×#3Ñ#3°LÑ#A×#GÑ#GÓ#IÔJØ�‰�j (×"2Ñ"2°<Ñ"@×"FÑ"FÓ"HÔIØ×!Ñ!×%Ñ% lÓ3ˆØÐ!Ð!Ð!Ü—‘Ð9¸6ÓBˆØÐ Ð Ð ä×#Ñ#×'Ñ'¬×(9Ñ(9×(=Ñ(=Ó>Ä×ASÑASØôB
ñ 
ˆô Ÿ™×:Ñ:¸5¿?¹?Ó;LÈYÑ;WÓXˆØ× Ñ Ð(Ø+×3Ñ3¼8×;LÑ;L×;PÑ;PÐ3ÓQˆNØ�‰œ˜W ~Ñ5×DÑDÓFÓGÈ"ÑLÕMr;   N)rK   rL   rM   r   rT   r@   r¤  rI   r;   r9   r›  r›  
  s   „ ô(�.ô (ò
ó
Nr;   r›  c                   ó(   — e Zd Z G d„ de«      Zd„ Zy)ÚFinishExceptionTestc                   ó   — e Zd Zd„ Zy)úFinishExceptionTest.Handlerc                 ó¸   — | j                  d«       | j                  dd«       | j                  dd«      rt        d«      ‚| j	                  d«       t        «       ‚)Nrw  úWWW-AuthenticateúBasic realm="something"Úfinish_valuer  zauthentication required)rò  rþ  rÍ  r+   r[   rB   s    r9   r\   zFinishExceptionTest.Handler.get(  sN   € Ø�O‰O˜CÔ Ø�O‰OÐ.Ð0IÔJØ× Ñ  °Ô4ÜÐ6Ó7Ð7à—
‘
Ð4Ô5Ü“h�r;   Nr]   rI   r;   r9   rT   r¨  '  s   „ ó	r;   rT   c                 óú   — dD ]v  }| j                  |«      }| j                  |j                  d«       | j                  d|j                  j	                  d«      «       | j                  d|j
                  «       Œx y )N)rR   z/?finish_value=1rw  r«  rª  s   authentication required)rÓ   r}   rÕ   r.  r\   rÒ   )rC   ÚurÚ   s      r9   Útest_finish_exceptionz)FinishExceptionTest.test_finish_exception1  sp   € Ø*ò 	HˆAØ—z‘z !“}ˆHØ×Ñ˜XŸ]™]¨CÔ0Ø×ÑØ)¨8×+;Ñ+;×+?Ñ+?Ð@RÓ+Sôð ×ÑÐ7¸¿¹ÕGñ	Hr;   N)rK   rL   rM   r   rT   r¯  rI   r;   r9   r¦  r¦  &  s   „ ô�.ô óHr;   r¦  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚDecoratorTestc                 óN   —  G d„ dt         «      } G d„ dt         «      }d|fd|fgS )Nc                   ó   — e Zd Zed„ «       Zy)ú6DecoratorTest.get_handlers.<locals>.RemoveSlashHandlerc                  ó   — y 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y)ú3DecoratorTest.get_handlers.<locals>.AddSlashHandlerc                  ó   — y r2   rI   rB   s    r9   r\   z7DecoratorTest.get_handlers.<locals>.AddSlashHandler.getC  r¶  r;   N)rK   rL   rM   r.   r\   rI   r;   r9   ÚAddSlashHandlerr¹  B  s   „ Øñó ñr;   r»  ú/removeslash/ú	/addslashrÉ   )rC   r·  r»  s      r9   r?   zDecoratorTest.get_handlers<  s2   € ô	¤ô 	ô
	œnô 	ð
 !Ð"4Ð5¸À_Ð7UÐVÐVr;   c                 ó<  — | j                  dd¬«      }| j                  |j                  d«       | j                  |j                  d   d«       | j                  dd¬«      }| j                  |j                  d«       | j                  |j                  d   d«       y )	Nr¼  Frs  rn  rv  z/removeslashz/removeslash/?foo=barz/removeslash?foo=barrr  rÙ   s     r9   Útest_removeslashzDecoratorTest.test_removeslashI  s†   € Ø—:‘:˜oÀ�:ÓFˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Ñ5°~ÔFà—:‘:Ð5È�:ÓNˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Ñ5Ð7MÕNr;   c                 ó<  — | j                  dd¬«      }| j                  |j                  d«       | j                  |j                  d   d«       | j                  dd¬«      }| j                  |j                  d«       | j                  |j                  d   d«       y )	Nr½  Frs  rn  rv  z
/addslash/z/addslash?foo=barz/addslash/?foo=barrr  rÙ   s     r9   Útest_addslashzDecoratorTest.test_addslashR  s†   € Ø—:‘:˜k¸E�:ÓBˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Ñ5°|ÔDà—:‘:Ð1ÀE�:ÓJˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Ñ5Ð7KÕLr;   N)rK   rL   rM   r?   r¿  rÁ  rI   r;   r9   r±  r±  ;  s   „ òWòOóMr;   r±  c                   óN   — 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y)Ú	CacheTestc                 ó*   —  G d„ dt         «      }d|fgS )Nc                   ó   — e Zd Zd„ Zd„ Zy)ú+CacheTest.get_handlers.<locals>.EtagHandlerc                 ó&   — | j                  |«       y 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_etagb  s   € Ø×)Ñ)¨!Ñ,Ð,r;   N)rK   rL   rM   r\   rË  rI   r;   r9   ÚEtagHandlerrÆ  ^  s   „ ò*ó-r;   rÌ  z
/etag/(.*)rÉ   )rC   rÌ  s     r9   r?   zCacheTest.get_handlers]  s   € ô	-œ.ô 	-ð ˜{Ð+Ð,Ð,r;   c                 ó2   — d}d}| j                  ||d«       y )Nú"xyzzy"Ú*r  ©Ú
_test_etag©rC   rÈ  Úetagss      r9   Útest_wildcard_etagzCacheTest.test_wildcard_etagg  s   € Ø!ˆØˆØ�‰˜ u¨cÕ2r;   c                 ó2   — d}d}| j                  ||d«       y )NrÎ  r  rÐ  rÒ  s      r9   Útest_strong_etag_matchz CacheTest.test_strong_etag_matchl  s   € Ø!ˆØˆØ�‰˜ u¨cÕ2r;   c                 ó2   — d}d}| j                  ||d«       y )Nú"xyzzy1"ú"xyzzy1", "xyzzy2"r  rÐ  rÒ  s      r9   Útest_multiple_strong_etag_matchz)CacheTest.test_multiple_strong_etag_matchq  s   € Ø"ˆØ$ˆØ�‰˜ u¨cÕ2r;   c                 ó2   — d}d}| j                  ||d«       y )NrÎ  rØ  rÎ   rÐ  rÒ  s      r9   Útest_strong_etag_not_matchz$CacheTest.test_strong_etag_not_matchv  s   € Ø!ˆØˆØ�‰˜ u¨cÕ2r;   c                 ó2   — d}d}| j                  ||d«       y )NrÎ  rÙ  rÎ   rÐ  rÒ  s      r9   Ú#test_multiple_strong_etag_not_matchz-CacheTest.test_multiple_strong_etag_not_match{  s   € Ø!ˆØ$ˆØ�‰˜ u¨cÕ2r;   c                 ó2   — d}d}| j                  ||d«       y )NrØ  ú
W/"xyzzy1"r  rÐ  rÒ  s      r9   Útest_weak_etag_matchzCacheTest.test_weak_etag_match€  ó   € Ø"ˆØˆØ�‰˜ u¨cÕ2r;   c                 ó2   — d}d}| j                  ||d«       y )Nú"xyzzy2"úW/"xyzzy1", W/"xyzzy2"r  rÐ  rÒ  s      r9   Útest_multiple_weak_etag_matchz'CacheTest.test_multiple_weak_etag_match…  ó   € Ø"ˆØ(ˆØ�‰˜ u¨cÕ2r;   c                 ó2   — d}d}| j                  ||d«       y )Nrä  rà  rÎ   rÐ  rÒ  s      r9   Útest_weak_etag_not_matchz"CacheTest.test_weak_etag_not_matchŠ  râ  r;   c                 ó2   — d}d}| j                  ||d«       y )Nz"xyzzy3"rå  rÎ   rÐ  rÒ  s      r9   Ú!test_multiple_weak_etag_not_matchz+CacheTest.test_multiple_weak_etag_not_match�  rç  r;   c                 ól   — | j                  d|z   d|i¬«      }| j                  |j                  |«       y )Nz/etag/r  r4  ro  )rC   rÈ  rÓ  r¦  rÚ   s        r9   rÑ  zCacheTest._test_etag”  s:   € Ø—:‘:Ø�}Ñ$¨ÀÐ.Fð ó 
ˆð 	×Ñ˜Ÿ™¨Õ4r;   N)rK   rL   rM   r?   rÔ  rÖ  rÚ  rÜ  rÞ  rá  ræ  ré  rë  rÑ  rI   r;   r9   rÃ  rÃ  \  s9   „ ò-ò3ò
3ò
3ò
3ò
3ò
3ò
3ò
3ò
3ó
5r;   rÃ  c                   ó(   — e Zd Z G d„ de«      Zd„ Zy)ÚRequestSummaryTestc                   ó   — e Zd Zd„ Zy)úRequestSummaryTest.Handlerc                 ód   — d | j                   _        | j                  | j                  «       «       y r2   )r¢  Ú	remote_ipr±   rÒ  rB   s    r9   r\   zRequestSummaryTest.Handler.get�  s%   € ð &*ˆD�L‰LÔ"Ø�K‰K˜×-Ñ-Ó/Õ0r;   Nr]   rI   r;   r9   rT   rð  œ  s   „ ó	1r;   rT   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )NrR   s   GET / (None)r6  ra  s     r9   Útest_missing_remote_ipz)RequestSummaryTest.test_missing_remote_ip¤  s#   € Ø�z‰z˜#‹ˆØ×Ñ˜Ÿ™ OÕ4r;   N)rK   rL   rM   r   rT   rô  rI   r;   r9   rî  rî  ›  s   „ ô1�.ô 1ó5r;   rî  c                   ó   — e Zd Zd„ Zy)ÚHTTPErrorTestc                 ó  — t        dd¬«      }t        j                  |«      }| j                  ||«       | j                  |j                  |j                  «       | j                  |j
                  |j
                  «       y )NrY  zGo awayr  )r!   r§   ÚassertIsNotr}   r¦  r  )rC   r  Úe2s      r9   Ú	test_copyzHTTPErrorTest.test_copyª  s[   € Ü�c )Ô,ˆÜ�Y‰Y�q‹\ˆØ×Ñ˜˜BÔØ×Ñ˜Ÿ™¨¯©Ô7Ø×Ñ˜Ÿ™ 2§9¡9Õ-r;   N)rK   rL   rM   rú  rI   r;   r9   rö  rö  ©  s   „ ó.r;   rö  c                   ó   — e Zd Zd„ Zy)ÚApplicationTestc                 ó`   — t        g «      }|j                  dd¬«      }|j                  «        y )Nr   rˆ  )Úaddress)r   Úlistenr›  )rC   rA   Úservers      r9   Útest_listenzApplicationTest.test_listen³  s&   € Ü˜"‹oˆØ—‘˜A {�Ó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y)ÚURLSpecReverseTestc                 ó¬   — | j                  dt        dd «      j                  «       «       | j                  dt        dd «      j                  «       «       y )Nz/favicon.icoz/favicon\.icoz^/favicon\.ico$©r}   r%   ÚreverserB   s    r9   Útest_reversezURLSpecReverseTest.test_reverseº  sD   € Ø×Ñ˜¬Ð-=¸tÓ)D×)LÑ)LÓ)NÔOØ×Ñ˜¬Ð-?ÀÓ)F×)NÑ)NÓ)PÕQr;   c                 óž   — dg}|D ]6  }t        |d «      }	 |j                  «       }| j                  d|›d|›�«       Œ8 y # t        $ r Y ŒEw xY w)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¾  sc   € ð
 *Ð*ˆØò 
	ˆDä˜4 “ˆHðØ!×)Ñ)Ó+�Ø—	’	â$(©&ð2õñ
	øô ò Ùðús   –'A Á 	AÁAc                 ó°   — | j                  dt        dd «      j                  d«      «       | j                  dt        dd «      j                  d«      «       y )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Ð  sQ   € Ø×ÑØœsÐ#9¸4Ó@×HÑHÈÓOô	
ð 	×ÑØ$ÜÐ2°DÓ9×AÑAÀ!ÓDõ	
r;   N)rK   rL   rM   r  r  r  rI   r;   r9   r  r  ¹  s   „ òRòó$
r;   r  c                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚRedirectHandlerTestc                 óB   — 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})rK  rB   s    r9   r?   z RedirectHandlerTest.get_handlersÛ  s;   € àÔ'¨%°¨Ð9ØÔ(¨5°/Ð*BÐCØ!Ô#5¸¸~Ð7NÐOð
ð 	
r;   c                 ó    — | j                  dd¬«      }| j                  |j                  d«       | j                  |j                  d   d«       y )Nr  Frs  rn  rv  r  rr  rÙ   s     r9   Útest_basic_redirectz'RedirectHandlerTest.test_basic_redirectâ  sC   € Ø—:‘:˜f°u�:Ó=ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Ñ5°vÕ>r;   c                 ó    — | j                  dd¬«      }| j                  |j                  d«       | j                  |j                  d   d«       y )Nz/src?foo=barFrs  rn  rv  z/dst?foo=barrr  rÙ   s     r9   Útest_redirect_with_argumentz/RedirectHandlerTest.test_redirect_with_argumentç  sC   € Ø—:‘:˜n¸u�:ÓEˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Ñ5°~ÕFr;   c                 ó    — | j                  dd¬«      }| j                  |j                  d«       | j                  |j                  d   d«       y )Nz/src2?foo2=bar2Frs  rn  rv  z/dst2?foo=bar&foo2=bar2rr  rÙ   s     r9   Ú%test_redirect_with_appending_argumentz9RedirectHandlerTest.test_redirect_with_appending_argumentì  sE   € Ø—:‘:Ð/À%�:ÓHˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Ñ5Ð7PÕQr;   c                 ó    — | j                  dd¬«      }| j                  |j                  d«       | j                  |j                  d   d«       y )Nz/a/b/cFrs  rn  rv  z/b/a/crr  rÙ   s     r9   Útest_redirect_patternz)RedirectHandlerTest.test_redirect_patternñ  sC   € Ø—:‘:˜h¸�:Ó?ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Ñ5°xÕ@r;   N)rK   rL   rM   r?   r  r  r  r  rI   r;   r9   r  r  Ú  s   „ ò
ò?ò
Gò
Ró
Ar;   r  c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚAcceptLanguageTestz)Test evaluation of Accept-Language headerc                 óÔ   — t        j                  t        j                  j	                  t        j                  j                  t        «      d«      d«        G d„ dt        «      }d|fgS )NÚgettext_translationsÚtornado_testc                   ó   — e Zd Zd„ Zy)ú>AcceptLanguageTest.get_handlers.<locals>.AcceptLanguageHandlerc                 óš   — | j                  d| j                  «       j                  j                  dd«      «       | j	                  d«       y )Nrû  Ú_ú-r;   )rþ  Úget_browser_localerÕ   r£  r±   rB   s    r9   r\   zBAcceptLanguageTest.get_handlers.<locals>.AcceptLanguageHandler.get  s>   € Ø—‘Ø&¨×(?Ñ(?Ó(A×(FÑ(F×(NÑ(NÈsÐTWÓ(Xôð —‘˜CÕ r;   Nr]   rI   r;   r9   ÚAcceptLanguageHandlerr!     s   „ ó!r;   r&  rR   )r   Úload_gettext_translationsr3   r4   r5   r6   r7   r   )rC   r&  s     r9   r?   zAcceptLanguageTest.get_handlersú  sT   € Ü×(Ñ(Ü�G‰G�L‰LœŸ™Ÿ™¬Ó2Ð4JÓKØô	
ô
	!¤Nô 	!ð Ð'Ð(ð
ð 	
r;   c                 óÔ   — | j                  dddi¬«      }| j                  |j                  d   d«       | j                  dddi¬«      }| j                  |j                  d   d«       y )NrR   rO  zfr-FR;q=0.9r4  rû  zfr-FRzfr-FR; q=0.9©rÓ   r}   r.  rÙ   s     r9   Útest_accept_languagez'AcceptLanguageTest.test_accept_language  sj   € Ø—:‘:˜cÐ,=¸}Ð+M�:ÓNˆØ×Ñ˜×)Ñ)Ð*<Ñ=¸wÔGà—:‘:˜cÐ,=¸~Ð+N�:ÓOˆØ×Ñ˜×)Ñ)Ð*<Ñ=¸wÕGr;   c                 ól   — | j                  dddi¬«      }| j                  |j                  d   d«       y )NrR   rO  z	fr-FR;q=0r4  rû  úen-USr)  rÙ   s     r9   Útest_accept_language_ignorez.AcceptLanguageTest.test_accept_language_ignore  s6   € Ø—:‘:˜cÐ,=¸{Ð+K�:ÓLˆØ×Ñ˜×)Ñ)Ð*<Ñ=¸wÕGr;   c                 ól   — | j                  dddi¬«      }| j                  |j                  d   d«       y )NrR   rO  z
fr-FR;q=-1r4  rû  r,  r)  rÙ   s     r9   Útest_accept_language_invalidz/AcceptLanguageTest.test_accept_language_invalid  s6   € Ø—:‘:˜cÐ,=¸|Ð+L�:ÓMˆØ×Ñ˜×)Ñ)Ð*<Ñ=¸wÕGr;   N)rK   rL   rM   rN   r?   r*  r-  r/  rI   r;   r9   r  r  ÷  s   „ Ù3ò
ò"HòHóHr;   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    rK  r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   rˆ   rš  r§   rO  Úemail.utilsrT  rŠ  Úior0   rú  r?  r3   rŠ   r�  r¦  r`  Úurllib.parser}  r:   r=   rP   rV   r_   ÚTestCaserr   r—   r¬   rß   rc  rn  r{  r…  r�  r¬  r¾  rß  rë  rñ  rö  rù  r  r  r  r!  r)  r/  r‘  r—  r¾  rc  ru  r‚  rˆ  r»  rÒ  rÙ  rá  rí  r÷  r  r  r  r,  r:  rY  ri  r¥  rt  rw  r‘  rš  r±  r»  rÊ  r
  r  r$  r.  r:  rB  rH  rS  rZ  re  r�  r�  r¹  rÂ  rÊ  rç  rò  r9  rŠ  r›  r¦  r±  rÃ  rî  rö  rü  r  r  r  rI   r;   r9   ú<module>rB     s  ðÝ %Ý ÷÷ õ /Ý -Ý %Ý Ý ß (Ý ;Ý 'ß QÓ QÝ 0ß 1÷÷ ÷ ÷ ÷ ñ ó, Û Û Û Û Û Ý Û Û Û 	Û 	Û Û Û Û ò7ôÐ#ô ô$	%˜Kô 	%ô�>ô ô
$˜~ô $ô,2S˜×*Ñ*ô 2Sôl,E˜×*Ñ*ô ,Eô^.9�kô .9ôb]=�ô ]=ô@
 ô 
ô
�{ô 
ô8
(˜^ô 
(ô˜+ô ô0
�.ô 
ô6--˜+ô --ô`)O�~ô )OôXY�~ô Yô*B�^ô Bô
1˜nô 1ô
#˜.ô #ô
(˜ô (ôH�nô Hô ô ô	˜^ô 	ô�~ô ô(.˜ô .ô
˜.ô 
ôOO�kô OOôd/�kô /ô?1˜ô ?1ôDf-�[ô f-ôRO ô Oô*"- Kô "-ôJ;˜[ô ;ô@C˜;ô @CôF'0�{ô '0ôT0˜kô 0ôD0˜[ô 0ô&8Ð+ô 8ô
@Ð)ô 
@ôAÐ)ô Aô*&1Ð,ô &1ôR
Ð*ô 
ôCÐ/ô Cô,-˜;ô -ô&7
Ð(ô 7
ôtH˜Kô Hô2>Ð/ô >ô	�iô 	ô,1Ð0ô ,1ô^Ð,ô ô+
Ð0ô +
ô\
Ð0ô 
ô">Ð1ô >ô,Y1˜ô Y1ôx
1Ð#8ô 
1ô-Ð*?ô -ô$:Ð.ô :ô&2Ð+ô 2ô*1Ð/ô 1ô 
�[ô 
ô@�Kô @ô$- +ô -ô.˜ô .ô$[ ˜{ô [ ðD ô/˜^ó /ó ð/÷>J
ñ J
ôZ
EØ'¨ô
EôBØ'¨ôBô8
Ð!6ô 8
ôv1Ð+ô 1ô.g)�h×'Ñ'ô g)ôTH1Ð$ô H1ôX7-Ð.ô 7-ôtNÐ0ô Nô8HÐ/ô Hô*M�Kô MôB<5�ô <5ô~5Ð.ô 5ô.�H×%Ñ%ô .ô�mô ô
˜×*Ñ*ô 
ôBA˜+ô Aô:!H˜õ !Hr;   