Ë
    %¹šjnï ã                   óD	  — d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZ d dlmZ d dlmZ d dlmZmZmZm Z  d dl!m"Z" d dl#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: d dl;Z;d dl<Z<d dl=Z=d dl>Z>d dl?Z@d dlAZAd dlBmCZC d dlDZDd dlEZEd dlFZFd dlGZGd dlHZHd dlIZId dlJZJd dlKZLd„ ZM G d„ de«      ZN G d„ deN«      ZO G d„ de(«      ZP G d„ de(«      ZQ G d„ deJj¤                  «      ZS G d„ deJj¤                  «      ZT G d„ d eN«      ZU G d!„ d"eN«      ZV G d#„ d$e(«      ZW G d%„ d&eN«      ZX G d'„ d(e(«      ZY G d)„ d*eN«      ZZ G d+„ d,e(«      Z[ G d-„ d.eN«      Z\ G d/„ d0e(«      Z] G d1„ d2e(«      Z^ G d3„ d4e(«      Z_ G d5„ d6e(«      Z` G d7„ d8e(«      Za G d9„ d:e(«      Zb G d;„ d<e(«      Z* G d=„ d>e(«      Zc G d?„ d@e(«      Zd G dA„ dBe(«      Ze G dC„ dDe(«      Zf G dE„ dFe(«      Zg G dG„ dHeN«      Zh G dI„ dJeN«      Zi G dK„ dLeN«      Zj G dM„ dNeN«      Zk G dO„ dPeN«      Zl G dQ„ dReN«      Zm G dS„ dTeN«      Zn G dU„ dVeN«      Zo G dW„ dXeN«      Zp G dY„ dZeN«      Zq G d[„ d\eN«      Zr G d]„ d^eO«      Zs G d_„ d`eO«      Zt G da„ dbeO«      Zu G dc„ ddeO«      Zv G de„ dfeO«      Zw G dg„ dheO«      Zx G di„ djeN«      Zy G dk„ dleO«      Zz G dm„ dneN«      Z{ G do„ dpeO«      Z| G dq„ dre}«      Z~ G ds„ dteO«      Z G du„ dveO«      Z€ G dw„ dxeO«      Z� G dy„ dzeO«      Z‚ G d{„ d|eO«      Zƒ G d}„ d~eN«      Z„ G d„ d€eO«      Z… G d�„ d‚eO«      Z† G dƒ„ d„eO«      Z‡ G d…„ d†eO«      Zˆ G d‡„ dˆeO«      Z‰ G d‰„ dŠeN«      ZŠ G d‹„ dŒeN«      Z‹ G d�„ dŽeN«      ZŒ G d�„ d�eN«      Z� G d‘„ d’eN«      ZŽe7 G d“„ d”e(«      «       Z� G d•„ d–«      Z� G d—„ d˜e�eN«      Z‘ G d™„ dše�eN«      Z’ G d›„ dœeO«      Z“ G d�„ džeO«      Z” G dŸ„ d eJj¤                  «      Z• G d¡„ d¢eO«      Z– G d£„ d¤eO«      Z— G d¥„ d¦eO«      Z˜ G d§„ d¨eO«      Z™ G d©„ dªeN«      Zš G d«„ d¬eN«      Z› G d­„ d®eO«      Zœ G d¯„ d°eJj¤                  «      Z� G d±„ d²e«      Zž G d³„ d´eJj¤                  «      ZŸ G dµ„ d¶eN«      Z  G d·„ d¸eN«      Z¡y)¹é    N)ÚFuture)Úgen)Újson_decodeÚutf8Ú
to_unicodeÚrecursive_unicodeÚ
native_strÚto_basestring)ÚHTTPClientError)Úformat_timestamp)ÚIOStream)Úlocale)ÚEvent)Úapp_logÚgen_log©ÚSimpleAsyncHTTPClient©Ú
DictLoader)ÚAsyncHTTPTestCaseÚAsyncTestCaseÚ	ExpectLogÚgen_test)Úignore_deprecation)Ú
ObjectDictÚunicode_type)ÚApplicationÚRequestHandlerÚStaticFileHandlerÚRedirectHandlerÚ	HTTPErrorÚMissingArgumentErrorÚErrorHandlerÚauthenticatedÚurlÚ_create_signature_v1Úcreate_signed_valueÚdecode_signed_valueÚget_signature_key_versionÚUIModuleÚFinishÚstream_request_bodyÚremoveslashÚaddslashÚGZipContentEncoding)ÚBytesIOc                  ó„   — t        j                  j                  t         j                  j                  t        «      g| ¢­Ž S ©N)ÚosÚpathÚjoinÚdirnameÚ__file__)Úas    ú5lib/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_appJ   s.   € Ü˜t×0Ñ0Ó2ÑL°d×6IÑ6IÓ6KÑLˆŒØ�x‰xˆr;   c                 ó   — t        «       ‚r2   ©ÚNotImplementedErrorrB   s    r9   r?   zWebTestCase.get_handlersN   s   € Ü!Ó#Ð#r;   c                 ó   — i S r2   © rB   s    r9   r@   zWebTestCase.get_app_kwargsQ   ó   € Øˆ	r;   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rD   r?   r@   rI   r;   r9   r=   r=   C   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   U   s   „ ñð
 €Gó%r;   rP   c                   ó   — e Zd Zd„ Zy)ÚHelloHandlerc                 ó&   — | j                  d«       y ©NÚhello©ÚwriterB   s    r9   ÚgetzHelloHandler.getb   s   € Ø�
‰
�7Õr;   N©rK   rL   rM   r\   rI   r;   r9   rV   rV   a   s   „ ór;   rV   c                   ó"   — e Zd Zdd„Zd„ Zdd„Z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__h   s=   € àˆŒØÐÜ)Ü¨MÔ:ô ˆDÕô  *Ü¨MÀ{ÔSô ˆDÕr;   c                 ó8   — | j                   j                  |«      S r2   )re   r\   )rC   Únames     r9   Ú
get_cookiez#CookieTestRequestHandler.get_cookiet   s   € Ø�}‰}× Ñ  Ó&Ð&r;   c                 ó"   — || j                   |<   y r2   )re   )rC   rj   ÚvalueÚexpires_dayss       r9   Ú
set_cookiez#CookieTestRequestHandler.set_cookiew   s   € Ø#ˆ�‰�dÒr;   )Ú
0123456789Nr2   )rK   rL   rM   rh   rk   ro   rI   r;   r9   r_   r_   f   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‚   sa  € Ü*Ó,ˆà×!Ñ! %¬×)9Ñ)9¸/Ó)JÐTUÐ!ÔVØ×!Ñ! %Ñ(ˆÜ—‘Ð<¸fÓEˆØ×Ñ˜UÔ#ØÐ Ð Ð Ø—K‘K “Nˆ	Ø�k‰k˜!‹nˆØ×ÑÜ Ø×#Ñ#×,Ñ,¨_Ñ=ØØØó	ð ô	
ð 	×ÑÜ Ø×#Ñ#×,Ñ,¨_Ñ=ØØØ˜)Ñ#ó	ð ô	
ô #'Øœ iÓ0Ð1°´=ÀÓ3EÐ2FÐGó#
ˆ×Ñ˜Ñô ”wÐ <Õ=Ø×Ñ˜g×7Ñ7¸È1Ð7ÓMÔN÷ >×=Ñ=ú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   |   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                   ó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)Ú
CookieTestc                 ón  —  G d„ dt         «      } G d„ dt         «      } G d„ dt         «      } G d„ dt         «      } G d	„ d
t         «      } G d„ dt         «      } G d„ dt         «      } G d„ dt         «      } G d„ dt         «      }	 G d„ dt         «      }
d|fd|fd|fd|fd|fd|fd|fd|fd|	fd|
fg
S )Nc                   ó   — e Zd Zd„ Z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>.SetCookieForbiddenCharHandlerc           	      óN  — t        t        t        t        d«      «      «      t        d«      dgz   D ]â  }	 | j	                  d|z   d«       | j                  d|z  «       	 | j	                  ddd|z   dz   ¬«       | j                  d|z  «       	 | j	                  ddd|z   dz   ¬«       | j                  d|z  «       	 | j	                  ddd|z   ¬«       | j                  d|z  «       	 | j	                  ddd|z   ¬«       | j                  d|z  «       Œä y # t        j                  j                  $ r0}dt        |«      vr| j                  d|›d	|›d
�«       Y d }~�Œd }~ww xY w# t        j                  j                  $ r0}dt        |«      vr| j                  d|›d|›d
�«       Y d }~�Œ"d }~ww xY w# t        j                  j                  $ r0}dt        |«      vr| j                  d|›d|›d
�«       Y d }~�ŒCd }~ww xY w# t        j                  j                  $ r0}dt        |«      vr| j                  d|›d|›d
�«       Y d }~�Œgd }~ww xY w# t        j                  j                  $ r0}dt        |«      vr| j                  d|›d|›d
�«       Y d }~�Œnd }~ww xY w)Né    é   Ú;rt   Úbarz2Didn't get expected exception for char %r in name
zInvalid cookie attribute namezunexpected exception for char z
 in name: Ú
Úexamplez.com©rö   z4Didn't get expected exception for char %r in domain
zInvalid cookie attribute domainz in domain: )ÚDoMaInz4Didn't get expected exception for char %r in DoMaIn
zInvalid cookie attribute DoMaInz in DoMaIn: rR   ©r4   z2Didn't get expected exception for char %r in path
zInvalid cookie attribute pathz
 in path: r8   )Úsamesitez6Didn't get expected exception for char %r in samesite
z!Invalid cookie attribute samesitez in samesite: )
ÚlistÚmapÚchrÚrangero   r[   ÚhttpÚcookiesÚCookieErrorrä   )rC   ÚcharÚes      r9   r\   zBCookieTest.get_handlers.<locals>.SetCookieForbiddenCharHandler.get0  se  € ô !¤¤S¬%°«+Ó!6Ó7¼3¸t»9ÀcÐ:JÔJ�Dð
ØŸ™¨°©°eÔ<ØŸ
™
ØQÐTXÑXôðØŸ™¨¨u¸YÈÑ=MÐPVÑ=V˜ÔWØŸ
™
ØSØ"ñ#ôðØŸ™¨¨u¸YÈÑ=MÐPVÑ=V˜ÔWØŸ
™
ØSØ"ñ#ôð
ØŸ™¨¨u¸3À¹:˜ÔFØŸ
™
ØQÐTXÑXôðØŸ™¨¨u¸sÀT¹z˜ÔJØŸ
™
ØUØ"ñ#õñi Køô  Ÿ<™<×3Ñ3ò Ø:Ä#ÀaÃ&ÑHØ ŸJšJâ#'ªð!,ôÿùðûô  Ÿ<™<×3Ñ3ò Ø<ÄCÈÃFÑJØ ŸJšJâ#'ªð!,ôÿùðûô  Ÿ<™<×3Ñ3ò Ø<ÄCÈÃFÑJØ ŸJšJâ#'ªð!,ôÿùðûô  Ÿ<™<×3Ñ3ò Ø:Ä#ÀaÃ&ÑHØ ŸJšJâ#'ªð!,ôÿùðûô  Ÿ<™<×3Ñ3ò Ø>ÄcÈ!ÃfÑLØ ŸJšJâ#'ªð!,ôÿùðúsw   µ)DÁ.E'Â.F7Â=+HÃ)+IÄE$Ä4%EÅE$Å'F4Æ%F/Æ/F4Æ7HÇ%G?Ç?HÈIÈ$%IÉIÉJ$É4%JÊJ$Nr]   rI   r;   r9   ÚSetCookieForbiddenCharHandlerr  /  s   „ ó@r;   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.comr  ÚcÚdr  ré   rB   s    r9   r\   z>CookieTest.get_handlers.<locals>.SetCookieOverwriteHandler.gets  s6   € Ø—‘  S°�Ô?Ø—‘  S°�Ô?ð —‘  SÕ)r;   Nr]   rI   r;   r9   ÚSetCookieOverwriteHandlerr  r  s   „ ó*r;   r  c                   ó   — e Zd Zd„ Zy)ú7CookieTest.get_handlers.<locals>.SetCookieMaxAgeHandlerc                 ó,   — | j                  ddd¬«       y )Nrt   r  é
   )Úmax_ageré   rB   s    r9   r\   z;CookieTest.get_handlers.<locals>.SetCookieMaxAgeHandler.get{  s   € Ø—‘  u°b�Õ9r;   Nr]   rI   r;   r9   ÚSetCookieMaxAgeHandlerr!  z  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.get  s   € Ø—‘  u¸2�Õ>r;   Nr]   rI   r;   r9   ÚSetCookieExpiresDaysHandlerr'  ~  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;   r0  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.getŠ  s   € à—‘  S°4¸f�ÕEr;   Nr]   rI   r;   r9   ÚSetCookieDeprecatedArgsr2  ‰  s   „ óFr;   r6  ú/setú/getú/set_domainú/special_charú/forbidden_charú/set_overwriteú/set_max_ageú/set_expires_daysú/set_falsy_flagsú/set_deprecatedrÉ   )rC   rê   rï   r÷   r  r  r  r%  r)  r0  r6  s              r9   r?   zCookieTest.get_handlers  sç   € ô	2œ~ô 	2ô	#œ~ô 	#ô	W¤^ô 	Wô	0¬.ô 	0ôA	¬Nô A	ôF	*¬ô 	*ô	:¤^ô 	:ô	?¬.ô 	?ô	:¤.ô 	:ô	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 )Nr7  ú
Set-Cookie)zbytes=zxcv; Path=/zstr=asdf; Path=/zunicode=qwer; Path=/)rÓ   r}   ÚsortedÚheadersÚget_listrÙ   s     r9   Útest_set_cookiezCookieTest.test_set_cookie›  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 )	Nr8  ÚCookieúfoo=bar©rD  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 )Nr9  rB  z,unicode_args=blah; Domain=foo.com; Path=/foo©rÓ   r}   rD  rE  rÙ   s     r9   Útest_set_cookie_domainz!CookieTest.test_set_cookie_domain¬  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:  rB  é   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 %rr8  rH  rJ  )rÓ   rC  rD  rE  r}   ÚlenÚassertInÚloggingÚdebugrÒ   r   )rC   rÚ   rD  ÚdataÚheaderÚexpecteds         r9   Útest_cookie_special_charz#CookieTest.test_cookie_special_char³  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«       d| _        | j	                  t        |j                  «      d«       y )Nr;  rÎ   i'  Ú )rÓ   r}   rÕ   ÚmaxDiffÚassertMultiLineEqualr   rÒ   rÙ   s     r9   Útest_set_cookie_forbidden_charz)CookieTest.test_set_cookie_forbidden_charÍ  sE   € Ø—:‘:Ð/Ó0ˆØ×Ñ˜Ÿ™¨Ô,ØˆŒØ×!Ñ!¤*¨X¯]©]Ó";¸RÕ@r;   c                 ó–   — | j                  d«      }|j                  j                  d«      }| j                  t	        |«      ddg«       y )Nr<  rB  za=e; Path=/zc=d; Domain=example.com; Path=/©rÓ   rD  rE  r}   rC  ©rC   rÚ   rD  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=  rB  zfoo=bar; Max-Age=10; Path=/ra  rb  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>  rB  z(foo=bar; expires=(?P<expires>.+); Path=/r#  ©ÚdaysÚexpires)rÓ   rD  r\   rŒ   rŠ   r‹   ÚdatetimeÚnowÚtimezoneÚutcÚ	timedeltaÚemailÚutilsÚparsedate_to_datetimeÚ	groupdictÚ
assertLessÚabsÚtotal_seconds©rC   rÚ   rX  r‹   ri  Ú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?  rB  r   za=1; Path=/; Securerv   zb=1; Path=/r„   zc=1; HttpOnly; Path=/rR  zd=1; Path=/)rÓ   rC  rD  rE  r}   rb  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@  rB  za=b; HttpOnly; Path=/foo)r   rÓ   rD  r\   r}   )rC   rÚ   rX  s      r9   Útest_set_cookie_deprecatedz%CookieTest.test_set_cookie_deprecatedö  sL   € ÜÕ!Ø—z‘zÐ"3Ó4ˆH÷ "à×!Ñ!×%Ñ% lÓ3ˆØ×Ñ˜Ð!;Õ<÷ "Ð!ús   ‹AÁAN)rK   rL   rM   r?   rF  rM  rP  rZ  r_  rc  re  rx  rz  r|  rI   r;   r9   rß   rß     s>   „ òF
òP
ò4ò
ò<ò4Aò
òKò
Mò4ó=r;   rß   c                   ó(   — e Zd Zd„ Zd„ Zed„ «       Zy)ÚAuthRedirectRequestHandlerc                 ó   — || _         y r2   ©Ú	login_url)rC   r�  s     r9   Ú
initializez%AuthRedirectRequestHandler.initializeþ  s	   € Ø"ˆ�r;   c                 ó   — | j                   S r2   r€  rB   s    r9   Úget_login_urlz(AuthRedirectRequestHandler.get_login_url  s   € Ø�~‰~Ðr;   c                 ó&   — | j                  d«       y )Néô  )Ú
send_errorrB   s    r9   r\   zAuthRedirectRequestHandler.get  s   € ð 	�‰˜Õr;   N)rK   rL   rM   r‚  r„  r$   r\   rI   r;   r9   r~  r~  ý  s    „ ò#òð ñó ñr;   r~  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/loginr€  ú	/absolutezhttp://example.com/login)r~  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 )Nr‹  F©Úfollow_redirectsé.  ÚLocationz/login?next=%2Frelative)rÓ   rÔ   r}   rÕ   rD  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 )NrŒ  FrŽ  r�  zIhttp://example.com/login\?next=http%3A%2F%2F127.0.0.1%3A[0-9]+%2Fabsoluter‘  )rÓ   rÔ   r}   rÕ   r×   rŠ   r‹   rD  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?   r’  r”  rI   r;   r9   r‰  r‰  
  s   „ ò
òRó
	
r;   r‰  c                   ó<   — e Zd Zd„ Zej
                  d„ «       Zd„ Zy)ÚConnectionCloseHandlerc                 ó   — || _         y r2   rº   r³   s     r9   r‚  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   r‚  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_handlers4  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°¤lr;   )Ú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_close8  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)rU  rV  r­  ÚcloserB   s    r9   r™  z&ConnectionCloseTest.on_handler_waitingB  s   € Ü�‰Ð'Ô(Ø�‰×ÑÕr;   c                 óN   — t        j                  d«       | j                  «        y )Nzconnection closed)rU  rV  ÚstoprB   s    r9   rž  z'ConnectionCloseTest.on_connection_closeF  s   € Ü�‰Ð)Ô*Ø�	‰	�r;   N)rK   rL   rM   r?   r²  r™  rž  rI   r;   r9   r   r   3  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.getL  s  € ð
 —<‘<×)Ô)ˆCÜ�C‹y¤Ñ#ÜÐ <¼tÀC»yÑ HÓIÐIØŸ,™,×0Ñ0°Ô5�Ü˜“<¤uÒ,Ü#Ð$BÄTÈ&Ã\Ñ$QÓRÐRð 6ð ×,Ñ,¨SÖ1�Ü˜“<¤|Ò3Ü#Ð$BÄTÈ&Ã\Ñ$QÓRÐRñ 2ð *ó ˆCÜ�C‹y¤Ò,ÜÐ AÄDÈÃIÑ MÓNÐNð ð 	�
‰
ÜØ—\‘\×&Ñ&Ø#Ü& t§|¡|×'=Ñ'=Ó>ôõ	
r;   Nr]   rI   r;   r9   r¸  r¸  K  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_handlersg  s   € Ø¤Ð,Ð/IÌ;Ð.WÐXÐXr;   c                 óJ   — t        | j                  |«      j                  «      S r2   )r   rÓ   rÒ   rÁ   s     r9   Ú
fetch_jsonzRequestEncodingTest.fetch_jsonj  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_markm  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_encodingx  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_slashesƒ  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_error�  s(   € ô ”wÐ 3Õ4Ø�J‰JÐ+Ô,÷ 5×4Ñ4úó   ‘,¬5N)	rK   rL   rM   r?   rÊ  rÎ  rÒ  rÔ  rÖ  rI   r;   r9   rÇ  rÇ  f  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   r  r  Úkeysrä   Úvaluesrm   rÀ  r~   rè   rk   rß  rà  rá  Ú_request_summaryrB   s    r9   ÚpreparezTypeCheckHandler.prepare—  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.get²  s%   € ð 	�‰Ð(¨.¼,ÔGØ�
‰
�4—;‘;Õr;   c                 óh   — | j                  d|t        «       | j                  | j                  «       y rî  rð  rñ  s     r9   r¸   zTypeCheckHandler.post¸  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_type¼  s3   € Ü˜3“iˆØ˜KÒ'Ø"+¨M¨?¸&ÀÀÐ NˆD�K‰K˜Òð (r;   N)rK   rL   rM   rì  r\   r¸   rå  rI   r;   r9   rÙ  rÙ  –  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_argumentÃ  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ø  Â  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-multirR  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  r  Ú	r&  rt   r  r'  r(  r\  r)  )	r  r  ÚappendÚremover  rÀ  r*  rä   r±   )rC   r!  Úillegal_charsr  r  s        r9   r\   zSetHeaderHandler.get  s¹   € ä).¨q°$¬Ó8© Aœ˜Q�¨ˆÐ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   r4  r4  &  s   „ ó.r;   r4  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.prepare2  s@   € Ø�‰ÜØ×*Ñ*¨5Ó1Ø×.Ñ.¨uÓ5Ø×,Ñ,¨UÓ3ôõ	
r;   Nr:  rI   r;   r9   r<  r<  1  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   rL  zWSGISafeWebTest.tearDownZ  ó    ø€ Ü‰ÑÔÜ×(Ñ(×.Ñ.Õ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$  r4  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_json~  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=barrH  zasdf=rJ  rÏ   rI  ©rÑ   rD  rÒ   )r   r'   rG  rÓ   r   rÒ   r}   )rC   rÞ  rÚ   rW  s       r9   Ú
test_typeszWSGISafeWebTest.test_typesƒ  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Ó   ra  r   rÒ   r}   ©rC   r_  Úreq_urlrÚ   rW  s        r9   Útest_decode_argumentz$WSGISafeWebTest.test_decode_argument”  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©  s_   € ä”wÐ 5Õ6Ø—z‘zÐ"9Ó:ˆHØ×Ñ˜XŸ]™]¨CÔ0Ø—z‘zÐ">Ó?ˆHØ×Ñ˜XŸ]™]¨CÔ0÷	 7×6Ñ6ú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  rh  ri  s        r9   Útest_decode_argument_plusz)WSGISafeWebTest.test_decode_argument_plus±  si   € ð 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 )NrS  rt   z/decode_arg/fooé*   z/decode_arg/42r”   z/decode_arg/%E9rÐ  z/decode_arg/%C3%A9rq  z/decode_arg/1%20%2B%201)r}   rA   rá  rB   s    r9   Útest_reverse_urlz WSGISafeWebTest.test_reverse_urlÀ  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 )NrT  s3   <a href="http://example.com">http://example.com</a>rL  rÙ   s     r9   Útest_uimodule_unescapedz'WSGISafeWebTest.test_uimodule_unescapedË  s(   € Ø—:‘:˜jÓ)ˆØ×ÑØ�M‰MÐQõ	
r;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )NrU  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>rL  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 )NrV  r  Ú2r  Ú3r  rO  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=1FrŽ  é-  z/redirect?permanent=0r�  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 )	NrW  FrŽ  r�  r‘  rX  rY  r�  ©rÓ   r}   rÕ   rD  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 )NrZ  FrŽ  r�  r‘  rX  r…  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 )Nr[  r)  rL  rÙ   s     r9   Útest_header_injectionz%WSGISafeWebTest.test_header_injection  s%   € Ø—:‘:Ð1Ó2ˆØ×Ñ˜Ÿ™¨Õ.r;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )Nr]  r)  rL  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;   r\  rK  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=queryrK  ©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;   rK  r•  r–  s      r9   Útest_get_body_argumentsz'WSGISafeWebTest.test_get_body_arguments6  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 )Nr\  úAccept-EncodingÚVaryr\  ÚgzipúContent-Encoding)rÓ   ÚassertNotInrD  r\   rÙ   s     r9   Útest_no_gzipzWSGISafeWebTest.test_no_gzipI  sX   € Ø—:‘:˜oÓ.ˆØ×ÑÐ*¨H×,<Ñ,<×,@Ñ,@ÀÈÓ,LÔMØ×Ñ˜ ×!1Ñ!1×!5Ñ!5Ð6HÈ"Ó!MÕNr;   )rK   rL   rM   rG  r@   rL  r?   rÊ  re  rk  ro  rr  ru  rw  ry  r{  r  rƒ  r†  rˆ  rŠ  rŒ  r“  r—  r™  r   Ú__classcell__©rP  s   @r9   rB  rB  =  s}   ø„ Ø+€Mò
ô41òò@*ò

ò"Xò*1òò	
ò
ò
ò8MòKò
-òPòPò
/ò/ò
ò(4ò4ö&Or;   rB  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_handlersP  s   € ØÔ!:Ð;Ð<Ð<r;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )Nr¦  r)  rL  rÙ   s     r9   Útest_empty_flushz NonWSGIWebTests.test_empty_flushS  s$   € Ø—:‘:˜nÓ-ˆØ×Ñ˜Ÿ™¨Õ.r;   N)rK   rL   rM   r?   r¨  rI   r;   r9   r¤  r¤  O  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­  Z  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è  r‡  rç  rB   s    r9   r\   z=ErrorResponseTest.get_handlers.<locals>.WriteErrorHandler.geta  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_coderb  s      r9   Úwrite_errorzEErrorResponseTest.get_handlers.<locals>.WriteErrorHandler.write_errorg  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.geto  s	   € Ø�A“r;   c                 ó   — t        d«      ‚)Nzexception in write_error©rÀ  r¸  s      r9   rº  zKErrorResponseTest.get_handlers.<locals>.FailedWriteErrorHandler.write_errorr  s   € ÜÐ :Ó;Ð;r;   Nr»  rI   r;   r9   ÚFailedWriteErrorHandlerr¾  n  s   „ òó<r;   rÃ  ú/defaultú/write_errorú/failed_write_error)r   r%   )rC   r°  r¼  rÃ  s       r9   r?   zErrorResponseTest.get_handlersY  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Ä  r†  s   500: Internal Server Errorz/default?status=503é÷  s   503: Service Unavailablez/default?status=435i³  s   435: Unknown)r   r   rÓ   r}   rÕ   rT  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÷ 6×5Ñ5ú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Å  r†  s   Exception: ZeroDivisionErrorz/write_error?status=503rÉ  s   Status: 503©r   r   rÓ   r}   rÕ   rÒ   rÙ   s     r9   Útest_write_errorz"ErrorResponseTest.test_write_error‰  s‡   € Ü”wÐ 4Õ5Ø—z‘z .Ó1ˆHØ×Ñ˜XŸ]™]¨CÔ0Ø×ÑÐ<¸h¿m¹mÔLà—z‘zÐ";Ó<ˆHØ×Ñ˜XŸ]™]¨CÔ0Ø×Ñ˜^¨X¯]©]Ô;÷ 6×5Ñ5ú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Æ  r†  r;   rÌ  rÙ   s     r9   Útest_failed_write_errorz)ErrorResponseTest.test_failed_write_error“  sP   € Ü”wÐ 4Õ5Ø—z‘zÐ"7Ó8ˆHØ×Ñ˜XŸ]™]¨CÔ0Ø×Ñ˜S (§-¡-Ô0÷ 6×5Ñ5ús   ‘A
A$Á$A-N)rK   rL   rM   r?   rÊ  rÍ  rÏ  rI   r;   r9   rª  rª  X  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.get¥  s3   € Ü˜T×.Ñ.Ð/@À#ÓFÓG�Ø—
‘
˜4Ÿ?™?¨4À˜?ÓHÕIr;   Nr]   rI   r;   r9   ÚStaticUrlHandlerrÕ  ¤  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½  ÚprotocolrS  Ú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   r  )r   r   rf   )rC   rÚ  rÞ  rì  s       r9   r?   zStaticFileTest.get_handlers£  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Ó   rT  rÒ   r}   rD  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Ó   rT  rÒ   rD  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}   rD  r\   rT  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.txtrL  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ÚchainrD  Ú
startswithÚaddr}   r\   )rC   r¼  rb  Ú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Õ&ð Nó !ˆ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-ModifiedrJ  é0  úContent-Length)r  rD  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ÚEtagrJ  r  ©r  rD  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  rJ  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!drJ  rÎ   ©r  r}   rÕ   rÙ   s     r9   Ú)test_static_304_if_modified_since_invalidz8StaticFileTest.test_static_304_if_modified_since_invalid5  s8   € Ø×$Ñ$Ø Ø(¨)Ð4ð %ó 
ˆð 	×Ñ˜Ÿ™¨Õ,r;   c                 óf   — | j                  dddi¬«      }| j                  |j                  d«       y )Nrô  r  zFri, 01 Jan 1960 00:00:00 GMTrJ  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   rJ  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_zoneF  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   rD  r\   rü  rÙ   s     r9   Útest_static_etagzStaticFileTest.test_static_etagX  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-9rJ  éÎ   s
   User-agentr!  r0  r  Ú10úContent-Rangezbytes 0-9/26)r  r}   rÕ   rÒ   r   rD  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ô  r3  zbytes=0-rJ  rÎ   ú
robots.txtúutf-8©rú  r  Ú26r6  ©r  r}   rÕ   r3   r4   r5   Ú
static_dirÚopenrÒ   r   ÚreadrD  r\   rŽ   ©rC   rÚ   Úrobots_file_pathÚfs       r9   Ú test_static_with_range_full_filez/StaticFileTest.test_static_with_range_full_filej  sÊ   € Ø×$Ñ$Ø ¨7°JÐ*?ð %ó 
ˆð
 	×Ñ˜Ÿ™¨Ô,ÜŸ7™7Ÿ<™<¨¯©¸ÓFÐÜÐ"¨WÕ5¸Ø×Ñ˜XŸ]™]¬D°·±³«NÔ;÷ 6à×Ñ˜×)Ñ)×-Ñ-Ð.>Ó?ÀÔFØ×Ñ˜(×*Ñ*×.Ñ.¨Ó?Õ@÷ 6Ð5úó   Á)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ô  r3  zbytes=0-10000000rJ  rÎ   r9  r:  r;  r  r<  r6  r=  rA  s       r9   Ú$test_static_with_range_full_past_endz3StaticFileTest.test_static_with_range_full_past_endw  sË   € Ø×$Ñ$Ø ¨7Ð4FÐ*Gð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô,ÜŸ7™7Ÿ<™<¨¯©¸ÓFÐÜÐ"¨WÕ5¸Ø×Ñ˜XŸ]™]¬D°·±³«NÔ;÷ 6à×Ñ˜×)Ñ)×-Ñ-Ð.>Ó?ÀÔFØ×Ñ˜(×*Ñ*×.Ñ.¨Ó?Õ@÷ 6Ð5úrE  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ô  r3  zbytes=1-10000000rJ  r4  r9  r:  r;  rv   r  Ú25r6  zbytes 1-25/26)r  r}   rÕ   r3   r4   r5   r>  r?  rÒ   r   r@  rD  r\   rA  s       r9   Ú'test_static_with_range_partial_past_endz6StaticFileTest.test_static_with_range_partial_past_end‚  sÔ   € Ø×$Ñ$Ø ¨7Ð4FÐ*Gð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô,ÜŸ7™7Ÿ<™<¨¯©¸ÓFÐÜÐ"¨WÕ5¸Ø×Ñ˜XŸ]™]¬D°·±³¸!¸"°Ó,>Ô?÷ 6à×Ñ˜×)Ñ)×-Ñ-Ð.>Ó?ÀÔFØ×Ñ˜×)Ñ)×-Ñ-¨oÓ>ÀÕP÷ 6Ð5ús   Á)7C?Ã?Dc                 ó  — | j                  dddi¬«      }| j                  |j                  d«       | j                  |j                  j	                  d«      d«       | j                  |j                  j	                  d«      d	«       y )
Nrô  r3  z	bytes=22-rJ  ó   : /
r  r  r6  úbytes 22-25/26©r  r}   rÒ   rD  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ô  r3  zbytes=-4rJ  rL  r  r  r6  rM  rN  rÙ   s     r9   Útest_static_with_range_neg_endz-StaticFileTest.test_static_with_range_neg_end•  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ô  r3  zbytes=-1000000rJ  rÎ   r9  r:  r;  r  r<  r6  r=  rA  s       r9   Ú%test_static_with_range_neg_past_startz4StaticFileTest.test_static_with_range_neg_past_start�  sË   € Ø×$Ñ$Ø ¨7Ð4DÐ*Eð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô,ÜŸ7™7Ÿ<™<¨¯©¸ÓFÐÜÐ"¨WÕ5¸Ø×Ñ˜XŸ]™]¬D°·±³«NÔ;÷ 6à×Ñ˜×)Ñ)×-Ñ-Ð.>Ó?ÀÔFØ×Ñ˜(×*Ñ*×.Ñ.¨Ó?Õ@÷ 6Ð5úrE  c                 óf   — | j                  dddi¬«      }| j                  |j                  d«       y )Nrô  r3  rå   rJ  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ô  r3  zbytes=-0rJ  r6  ú
bytes */26é   )r  r}   rD  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ô  r3  zbytes=26rJ  rX  r6  rW  ©r  r}   rÕ   rD  r\   rÙ   s     r9   Ú-test_static_unsatisfiable_range_invalid_startz<StaticFileTest.test_static_unsatisfiable_range_invalid_start³  sX   € Ø×$Ñ$Ø ¨7°JÐ*?ð %ó 
ˆð 	×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)×-Ñ-¨oÓ>ÀÕMr;   c                 ó¼   — | j                  dddi¬«      }| j                  |j                  d«       | j                  |j                  j	                  d«      d«       y )Nrô  r3  z
bytes=10-3rJ  rX  r6  rW  r[  rÙ   s     r9   Ú3test_static_unsatisfiable_range_end_less_than_startzBStaticFileTest.test_static_unsatisfiable_range_end_less_than_startº  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!  r0  ©rÓ   r}   rÕ   rÒ   rD  r   rü  rÙ   s     r9   Útest_static_headzStaticFileTest.test_static_headÁ  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
  r3  ú	bytes=1-4)rÑ   rD  r4  r;   r  r  r!  r0  ra  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ô  rd  r0  )r3  r   rJ  r  r;   r  r!  )r  rü  r}   rÕ   rÒ   rŸ  rD  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é  sc   € ð 	×Ñ×ÑÔ Ü0Ó2ˆÔÜ”wÐ @ÕAØ×(Ñ(Ð)DÓEˆH÷ Bð 	×Ñ˜Ÿ™¨Õ,÷ BÐAú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.  r1  r7  rD  rG  rJ  rO  rQ  rS  rU  rY  r\  r^  rb  re  rg  rj  rn  ÚunittestÚskipIfrj   rr  rI   r;   r9   rÑ  rÑ  š  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/FrŽ  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/dirFrŽ  r�  r‘  r€  )rÓ   r}   rÕ   r×   rD  Ú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?   r‚  r†  rI   r;   r9   rv  rv    s   „ ò
òò@ó
Or;   rv  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Ò  ry  rz  rR   )rï  r|  Ústatic_url_prefix)rf   r3   r4   rq  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)Nro  z/.*cannot redirect path with two initial slashesz//evil.com/../r„  FrŽ  rl  )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ð
 	×Ñ˜Ÿ™¨Õ,÷ SÐRús   Á>B;Â;CN)rK   rL   rM   r@   r?   r�  r“  rI   r;   r9   rˆ  rˆ    s   „ ò
òò'ó
-r;   rˆ  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚStaticFileWithPathTestc                 óB   — t        t        d«      t        d¬«      ¬«      S rx  rð  rB   s    r9   r@   z%StaticFileWithPathTest.get_app_kwargs>  r}  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_handlersD  s   € ØÔ/°&¼'À,Ó:OÐ1PÐQÐRÐRr;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )Nz/foo/utf8.htmls   HÃ©llo
rL  rÙ   s     r9   Ú
test_servez!StaticFileWithPathTest.test_serveG  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_urlO  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_pathd  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_contentg  s.   € à�}¨¨Ð4Ð4ØÐ9Ò9Ø!ÜÐ 4°tÑ ;Ó<Ð<r;   c                 óR   — | j                   dk(  ryt        d| j                   z  «      ‚)Nr¶  rR  r·  )r³  rÀ  rB   s    r9   Úget_content_sizezOCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_content_sizen  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_times  s   € Ør;   c                  ó   — y)NÚ42rI   r¯  s      r9   r¡  zJCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_versionv  s   € àr;   ©NN)rK   rL   rM   Úclassmethodr©  r­  r°  r´  rº  r¼  r¾  r¡  rI   r;   r9   ÚMyStaticFileHandlerrž  N  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Å  z  s   „ ó2r;   rÚ  rí  )r   r   Ústatic_handler_class)rC   rÃ  rÚ  s      r9   r?   z!CustomStaticFileTest.get_handlersM  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_kwargs‚  s   € Ü ¸d×>WÑ>WÔXÐXr;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )Nz/static/foo.42.txtru   rL  rÙ   s     r9   r™  zCustomStaticFileTest.test_serve…  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‰  s@   € Ü”wÐ <ÀuÖMØ—z‘zÐ"7Ó8ˆHØ×Ñ˜XŸ]™]Ð,AÔB÷ N×MÑMús   “.A
Á
AN)rK   rL   rM   r?   r@   r™  rý  rI   r;   r9   r›  r›  L  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   r‚  z#HostMatchingTest.Handler.initialize‘  s	   € ØˆD�Jr;   c                 ó:   — | j                  | j                  «       y r2   )r[   rÒ  rB   s    r9   r\   zHostMatchingTest.Handler.get”  s   € Ø�J‰J�t—z‘zÕ"r;   N)rK   rL   rM   r‚  r\   rI   r;   r9   rT   rÐ  �  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_handlers—  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   wildcardri  ÚHostrJ  ó   [0]ó   [1]ó   [2]zwww.exe.coms   [3])rA   Úadd_handlersrÎ  rT   rÓ   r}   rÒ   rÕ   rÙ   s     r9   Útest_host_matchingz#HostMatchingTest.test_host_matchingš  sÔ  € Ø�‰×ÑØ Ô)9×)AÑ)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Î  �  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_handlersº  rJ   r;   c                 ó
   — ddiS )NÚdefault_hostr×  rI   rB   s    r9   r@   z&DefaultHostMatchingTest.get_app_kwargs½  s   € ØÐ 1Ð2Ð2r;   c                 ó  — | j                   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à  ri  z	X-Real-Ipr£  rJ  rá  )	rA   râ  rÎ  rT   rÓ   r}   rÒ   rÕ   rè  rÙ   s     r9   Útest_default_host_matchingz2DefaultHostMatchingTest.test_default_host_matchingÀ  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å  ¹  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   rL  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Ÿ  rD  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Ÿ  rD  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!  rJ  r  r  )rÓ   r}   rD  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   r�  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Ÿ  rD  rÙ   s     r9   rŠ  z&StatusReasonTest.test_header_injection9  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>rm  r   s   scripts   Unknown)rÓ   r}   rÕ   r  rŸ  rÒ   rT  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   r�  r!  rŠ  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.getI  ó   € Ø�J‰J�wÕr;   Nr]   rI   r;   r9   rT   r(  H  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Ó   ro  rp  rq  rD  rs  rj  rk  rl  rm  rn  )rC   rÚ   Úheader_dates      r9   Útest_date_headerzDateHeaderTest.test_date_headerL  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&  G  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.getW  s   € Ü˜C¨Ô.Ð.r;   Nr]   rI   r;   r9   rT   r3  V  s   „ ó	/r;   rT   c                 ó   — t        «       S r2   r   rB   s    r9   r�  z#RaiseWithReasonTest.get_http_clientZ  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  rT  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_strd  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_httputilg  s   € Ø×ÑœœY s›^Ó,Ð.AÕBr;   N)	rK   rL   rM   r   rT   r�  r8  r;  r=  rI   r;   r9   r1  r1  U  s$   „ ô/�.ô /ò'ò2òMóCr;   r1  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_handlersl  s   € ð œ<¬¸#Ô)>Ð?Ð@Ð@r;   c                 ó   — t        d¬«      S ©NT)Úxsrf_cookiesrÌ   rB   s    r9   r@   z#ErrorHandlerXSRFTest.get_app_kwargsr  ó   € Ü Ô&Ð&r;   c                 ód   — | j                  ddd¬«      }| j                  |j                  d«       y )NrA  rÏ   r\  rÐ   rB  r‚  rÙ   s     r9   Útest_error_xsrfz$ErrorHandlerXSRFTest.test_error_xsrfu  s*   € Ø—:‘:˜h¨v¸B�:Ó?ˆØ×Ñ˜Ÿ™¨Õ,r;   c                 ód   — | j                  ddd¬«      }| j                  |j                  d«       y )Nz/404rÏ   r\  rÐ   ri  r‚  rÙ   s     r9   Útest_404_xsrfz"ErrorHandlerXSRFTest.test_404_xsrfy  s*   € Ø—:‘:˜f¨V¸"�:Ó=ˆØ×Ñ˜Ÿ™¨Õ,r;   N)rK   rL   rM   r?   r@   rI  rK  rI   r;   r9   r?  r?  k  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.get€  sD   € Ø×'Ñ'¨Ö/�Ø—‘ ¨Õ*ð 0ð �J‰J�}¨Ô.A×.LÑ.LÑ(LÑMÕNr;   Nr]   rI   r;   r9   rT   rO    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_kwargs†  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}   rD  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Ó   rW  r}   rD  rÙ   s     r9   Ú	test_gzipzGzipTestCase.test_gzip•  s9   € Ø—:‘:˜c“?ˆØ×Ñ˜xÔ(Ø×Ñ˜×)Ñ)¨&Ñ1Ð3DÕEr;   c                 ó†   — | j                  d«      }| j                  |«       | j                  |j                  d   d«       y )Nrò  rœ  r›  rY  rÙ   s     r9   Útest_gzip_staticzGzipTestCase.test_gzip_staticš  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_requested¡  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Ó   rW  r}   rD  ÚsplitÚstrip©rC   rÚ   r±  s      r9   Útest_vary_already_presentz&GzipTestCase.test_vary_already_present¦  si   € Ø—:‘:Ð6Ó7ˆØ×Ñ˜xÔ(Ø×ÑØ (× 0Ñ 0°Ñ 8× >Ñ >¸sÔ CÓDÑ C˜1ˆQ�W‰W�YÐ CÑ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œ  ra  )rb  rH  r›  rc  rf  s      r9   Ú"test_vary_already_present_multiplez/GzipTestCase.test_vary_already_present_multiple®  sc   € à—:‘:ÐBÓCˆØ×Ñ˜xÔ(Ø×ÑØ (× 0Ñ 0°Ñ 8× >Ñ >¸sÔ CÓDÑ C˜1ˆQ�W‰W�YÐ CÑDÚ<õ	
ùÚDrh  N)rK   rL   rM   r   rT   r@   rW  rZ  r\  r_  rg  rj  rI   r;   r9   rM  rM  ~  s6   „ ôO�.ô Oò
ò

òFò
FòFò

ó
r;   rM  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¼  rb  )r[   rf   r»  Úpath_kwargsrB   s    r9   rì  z%PathArgsInPrepareTest.Handler.prepareº  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.get½  s   € Ø˜5’=Ð �=Ø�K‰K�Mr;   N©rK   rL   rM   rì  r\   rI   r;   r9   rT   rn  ¹  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_handlersÁ  s    € Ø˜dŸl™lÐ+Ð.@À$Ç,Á,Ð-OÐPÐPr;   c                 óœ   — | j                  d«      }|j                  «        t        |j                  «      }| j	                  |dgi dœ«       y )Nz/pos/foort   rp  rh  ©rC   rÚ   rW  s      r9   Útest_poszPathArgsInPrepareTest.test_posÄ  sA   € Ø—:‘:˜jÓ)ˆØ×ÑÔÜ˜8Ÿ=™=Ó)ˆØ×Ñ˜¨¨¸2Ñ>Õ?r;   c                 óž   — | j                  d«      }|j                  «        t        |j                  «      }| j	                  |g ddidœ«       y )Nz/kw/foor4   rt   rp  rh  rw  s      r9   Útest_kwzPathArgsInPrepareTest.test_kwÊ  sC   € Ø—:‘:˜iÓ(ˆØ×ÑÔÜ˜8Ÿ=™=Ó)ˆØ×Ñ˜¨°v¸u°oÑFÕGr;   N)rK   rL   rM   r   rT   r?   rx  rz  rI   r;   r9   rl  rl  ¸  s    „ ô�.ô òQò@óHr;   rl  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   r~  Ò  s   „ ó	r;   rT   c                 ó  — | j                  dddi¬«      }t        |j                  j                  d«      «      }| j	                  |d   j                  d«      «       | j	                  |d   j                  d	«      «       y )
NrR   rH  zfoo=bar; baz=xyzzyrJ  rB  r   zbaz="";rv   zfoo="";)rÓ   rC  rD  rE  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   r…  rI   r;   r9   r|  r|  Ñ  s   „ ô�.ô ó
>r;   r|  c                   ó   — e Zd Zy)ÚPermissionErrorN©rK   rL   rM   rI   r;   r9   r‡  r‡  ß  s   „ Ør;   r‡  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Úexcr  éš  zno longer hereÚzerorv   r   Ú
permissionznot allowed)rè  r!   r‡  )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·  rl  r‡  )Ú
isinstancer‡  r  r[   r   rº  )rC   r¹  rb  Ú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“  r‡  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   rŒ  ä  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�  rn  rÙ   s     r9   Útest_http_errorz$ExceptionHandlerTest.test_http_errorý  s=   € ô ”wÐ 2Õ3Ø—z‘z ,Ó/ˆHØ×Ñ˜XŸ]™]¨CÔ0÷ 4×3Ñ3úó   ‘.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=zeror†  ©r   r   rÓ   r}   rÕ   rÙ   s     r9   Útest_unknown_errorz'ExceptionHandlerTest.test_unknown_error  s;   € ä”wÐ 4Õ5Ø—z‘z ,Ó/ˆHØ×Ñ˜XŸ]™]¨CÔ0÷ 6×5Ñ5ú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=permissionrl  rž  rÙ   s     r9   Útest_known_errorz%ExceptionHandlerTest.test_known_error
  s?   € ô ”wÐ QÕRØ—z‘zÐ"4Ó5ˆHØ×Ñ˜XŸ]™]¨CÔ0÷ S×RÑRúrœ  N)rK   rL   rM   r   rT   r›  rŸ  r¡  rI   r;   r9   rŠ  rŠ  ã  s   „ ôC�.ô Cò21ò1ó1r;   rŠ  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.render2  s:   € Ø?×FÑFØÜ—K‘KÔ 4× <Ñ <¸d¿l¹lÓK×QÑQÓSóð r;   N©rK   rL   rM   rÅ   rI   r;   r9   ÚMyModuler¶  1  s   „ ór;   r»  r¿   z1{{ my_ui_method(42) }} {% module MyModule(123) %}r´  )rE  Ú
ui_methodsÚ
ui_modules©r*   r   rf   )rC   r´  r»  rH  s       r9   r@   z#UIMethodUIModuleTest.get_app_kwargs-  sK   € ò	Qô	”xô 	ô ØÐLÐMó
ˆô Ø"Ø&¨Ð5Ø" HÐ-ô
ð 	
r;   c                 ó^   •— t         ‰| �  «        t        j                  j	                  «        y r2   rJ  rO  s    €r9   rL  zUIMethodUIModuleTest.tearDownA  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.rL  rÙ   s     r9   Útest_ui_methodz#UIMethodUIModuleTest.test_ui_methodF  s*   € Ø—:‘:˜nÓ-ˆØ×ÑØ�M‰Mð9õ	
r;   )
rK   rL   rM   rN   r   rT   r@   rL  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.getQ  sO   € ðSØ×!Ñ! %Ô(Ø—
‘
˜2•øÜ'ò SØ—
‘
¨¯
©
À1Ç=Á=ÑQ×RÑRûðSús   ‚"% ¥	A ®(AÁA Nr]   rI   r;   r9   rT   rÅ  P  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_errorX  s2   € Ø—:‘:˜c“?ˆØ×ÑÜ˜Ÿ™Ó&ØÐ/EÑFõ	
r;   N)rK   rL   rM   r   rT   rË  rI   r;   r9   rÃ  rÃ  O  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.prepareb  s   € Ø %ˆDÔÜ Ÿ*™* WÓ-ˆD�Kr;   c                 ó   — t        «       ‚r2   rF   rB   s    r9   Úget_user_localez-SetLazyPropertiesTest.Handler.get_user_localef  ó   € Ü%Ó'Ð'r;   c                 ó   — t        «       ‚r2   rF   rB   s    r9   Úget_current_userz.SetLazyPropertiesTest.Handler.get_current_useri  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.getl  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Ï  a  s   „ ò	.ò	(ò	(ó	Jr;   rT   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )NrR   s   Hello Ben (en_US)rL  rÙ   s     r9   Útest_set_propertiesz)SetLazyPropertiesTest.test_set_propertieso  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.rendery  s   € Ør;   Nrº  rI   r;   r9   ÚWithoutUserModulerß  x  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.render}  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á  )rE  r½  r¾  )rC   rá  rå  rH  s       r9   r@   z!GetCurrentUserTest.get_app_kwargsw  sT   € ô	¤ô 	ô	.œXô 	.ô à%'Ø"6Ø,NØ)Hñ	ó
ˆô Ø"à"0Ø%6ñô
ð 	
r;   c                 ó^   •— t         ‰| �  «        t        j                  j	                  «        y r2   rJ  rO  s    €r9   rL  zGetCurrentUserTest.tearDown�  rQ  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.prepare–  s
   € Ø/4�Õ,r;   c                 ó   — d| _         y)NTr\  rï  rB   s    r9   r×  zLGetCurrentUserTest.get_handlers.<locals>.CurrentUserHandler.get_current_user™  s   € Ø/3�Ô,Ør;   N)rK   rL   rM   rì  r×  rI   r;   r9   ÚCurrentUserHandlerrí  •  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.getž  s(   € Ø×"Ñ"Ð#6Ô7Ø—‘œC × <Ñ <Ó=Õ>r;   Nr]   rI   r;   r9   ÚWithoutUserHandlerrô  �  ó   „ ó?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.get£  s(   € Ø×"Ñ"Ð#3Ô4Ø—‘œC × <Ñ <Ó=Õ>r;   Nr]   rI   r;   r9   ÚWithUserHandlerrû  ¢  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ÿ  §  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.get¯  s(   € Ø×"Ñ"Ð#=Ô>Ø—‘œC × <Ñ <Ó=Õ>r;   Nr]   rI   r;   r9   ÚWithoutUserModuleHandlerr  ®  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.get´  s(   € Ø×"Ñ"Ð#:Ô;Ø—‘œC × <Ñ <Ó=Õ>r;   Nr]   rI   r;   r9   ÚWithUserModuleHandlerr	  ³  rù  r;   r  ú/without_userú
/with_userú/without_user_moduleú/with_user_modulerÉ   )rC   rò  rø  rý  r  r  r  s          r9   r?   zGetCurrentUserTest.get_handlers”  s~   € ô	¤ô 	ô	?Ð!3ô 	?ô
	?Ð0ô 	?ô
	Ð'9ô 	ô	?Ð'?ô 	?ô
	?Ð$<ô 	?ð Ð0Ð1Ø˜?Ð+Ø#Ð%=Ð>Ø Ð"7Ð8ð	
ð 	
r;   z	needs fixc                 ó^   — | j                  d«      }| j                  |j                  d«       y )Nr  ó   FalserL  rÙ   s     r9   Útest_get_current_user_is_lazyz0GetCurrentUserTest.test_get_current_user_is_lazy¿  s&   € ð —:‘:˜oÓ.ˆØ×Ñ˜Ÿ™¨Õ1r;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )Nr  ó   TruerL  rÙ   s     r9   Útest_get_current_user_worksz.GetCurrentUserTest.test_get_current_user_worksÅ  s$   € Ø—:‘:˜lÓ+ˆØ×Ñ˜Ÿ™¨Õ0r;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )Nr  r  rL  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  rL  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@   rL  r?   rs  Úskipr  r  r  r  r¡  r¢  s   @r9   rÜ  rÜ  v  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.HandlerNrˆ  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   r`  é•  ©rÏ   ÚPUTr;   rÐ   r‚  )rC   rÑ   rÚ   s      r9   Ú#test_unimplemented_standard_methodsz@UnimplementedHTTPMethodsTest.test_unimplemented_standard_methodsÖ  sf   € Û:ˆFØ—z‘z #¨f�zÓ5ˆHØ×Ñ˜XŸ]™]¨CÕ0ð ;ó &ˆFØ—z‘z #¨f¸3�zÓ?ˆHØ×Ñ˜XŸ]™]¨CÕ0ñ &r;   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"  r‚  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"  r‚  rÙ   s     r9   Útest_unimplemented_otherz<UnimplementedNonStandardMethodsTest.test_unimplemented_otherì  s*   € Ø—:‘:˜c¨'ÈT�:ÓRˆØ×Ñ˜Ÿ™¨Õ,r;   N)rK   rL   rM   r   rT   r/  r4  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   r8  ò  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
  r`  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ð 3ó &ˆFØ—z‘z #¨f¸3�zÓ?ˆHØ×Ñ˜XŸ]™]¬D°«LÕ9ñ &r;   N)rK   rL   rM   r   rT   r>  rI   r;   r9   r6  r6  ñ  s   „ ô5�.ô 5ó:r;   r6  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)r1  c                 ó&   — | j                  d«       y )NÚpatchrZ   rB   s    r9   rD  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_METHODSrD  r,  rI   r;   r9   rT   rB  	  s#   „ Ø*×<Ñ<ð @
ñ 
Ðò	 ó	 r;   rT   c                 ód   — | j                  ddd¬«      }| j                  |j                  d«       y )NrR   r.  r;   rÐ   s   patchrL  rÙ   s     r9   Ú
test_patchzPatchMethodTest.test_patch	  s*   € Ø—:‘:˜c¨'¸�:Ó<ˆØ×Ñ˜Ÿ™¨Õ1r;   c                 ód   — | j                  ddd¬«      }| j                  |j                  d«       y )NrR   r1  Tr2  s   otherrL  rÙ   s     r9   Ú
test_otherzPatchMethodTest.test_other	  s*   € Ø—:‘:˜c¨'ÈT�:ÓRˆØ×Ñ˜Ÿ™¨Õ1r;   N)rK   rL   rM   r   rT   rH  rJ  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Ø   rs  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;   Nrt  rI   r;   r9   rT   rN  	  s   „ ò	 ó	<r;   rT   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )NrR   s   donerL  rÙ   s     r9   Útest_finish_in_preparez*FinishInPrepareTest.test_finish_in_prepare$	  s#   € Ø—:‘:˜c“?ˆØ×Ñ˜Ÿ™¨Õ0r;   N)rK   rL   rM   r   rT   rR  rI   r;   r9   rL  rL  	  s   „ ô<�.ô <ó1r;   rL  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   ri  sE   <html><title>404: Not Found</title><body>404: Not Found</body></html>r�  rÙ   s     r9   Útest_404zDefault404Test.test_404.	  s=   € Ø—:‘:˜c“?ˆØ×Ñ˜Ÿ™¨Ô,Ø×ÑØ�M‰Mð2õ	
r;   N)rK   rL   rM   r?   rX  rI   r;   r9   rT  rT  )	  s   „ ò*ó
r;   rT  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚCustom404Testc                 ó   — dt         fgS rV  rÉ   rB   s    r9   r?   zCustom404Test.get_handlers9	  ó   € ØœÐ(Ð)Ð)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 )Nri  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   ÚCustom404Handlerr_  =	  s   „ ó2r;   ra  )Údefault_handler_class)r   rf   )rC   ra  s     r9   r@   zCustom404Test.get_app_kwargs<	  s   € ô	2œ~ô 	2ô
 Ð*:Ô;Ð;r;   c                 ó–   — | j                  d«      }| j                  |j                  d«       | j                  |j                  d«       y )NrR   ri  s   custom 404 responser�  rÙ   s     r9   rX  zCustom404Test.test_404D	  s8   € Ø—:‘:˜c“?ˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™Ð(>Õ?r;   N)rK   rL   rM   r?   r@   rX  rI   r;   r9   rZ  rZ  8	  s   „ ò*ò<ó@r;   rZ  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚDefaultHandlerArgumentsTestc                 ó   — dt         fgS rV  rÉ   rB   s    r9   r?   z(DefaultHandlerArgumentsTest.get_handlersK	  r\  r;   c                 ó8   — t        t        t        d¬«      ¬«      S )Nrl  rC  )rb  Údefault_handler_args)rf   r#   rB   s    r9   r@   z*DefaultHandlerArgumentsTest.get_app_kwargsN	  s   € ÜÜ".Ü!%°#Ô!6ô
ð 	
r;   c                 ó^   — | j                  d«      }| j                  |j                  d«       y )NrR   rl  r‚  rÙ   s     r9   Útest_403z$DefaultHandlerArgumentsTest.test_403T	  s#   € Ø—:‘:˜c“?ˆØ×Ñ˜Ÿ™¨Õ,r;   N)rK   rL   rM   r?   r@   rj  rI   r;   r9   re  re  J	  s   „ ò*ò
ó-r;   re  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ú/hello3rp  )rV   r%   rB   s    r9   r?   zHandlerByNameTest.get_handlersZ	  s$   € ð œÐ%Ø=Ü�	Ð?Ó@ð
ð 	
r;   c                 ó  — | j                  d«      }| j                  |j                  d«       | j                  d«      }| j                  |j                  d«       | j                  d«      }| j                  |j                  d«       y )Nrn  r�  ro  rq  rL  ©rC   Úresps     r9   Útest_handler_by_namez&HandlerByNameTest.test_handler_by_nameb	  sh   € Ø�z‰z˜)Ó$ˆØ×Ñ˜Ÿ™ HÔ-Ø�z‰z˜)Ó$ˆØ×Ñ˜Ÿ™ HÔ-Ø�z‰z˜)Ó$ˆØ×Ñ˜Ÿ™ HÕ-r;   N)rK   rL   rM   r?   ru  rI   r;   r9   rl  rl  Y	  s   „ ò
ó.r;   rl  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   r‚  zNStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.initializeo	  ó	   € Ø �•	r;   c                 óN   — | j                   j                  j                  d «       y r2   )r´   ÚpreparedÚ
set_resultrB   s    r9   rì  zKStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.preparer	  s   € Ø—	‘	×"Ñ"×-Ñ-¨dÕ3r;   c                 óN   — | j                   j                  j                  |«       y r2   )r´   rW  r  ©rC   rW  s     r9   Údata_receivedzQStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.data_receivedu	  s   € Ø—	‘	—‘×)Ñ)¨$Õ/r;   c                 óp   — | j                   j                  j                  d «       | j                  i «       y r2   )r´   Úfinishedr  r[   rB   s    r9   r\   zGStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.getx	  s%   € Ø—	‘	×"Ñ"×-Ñ-¨dÔ3Ø—
‘
˜2•r;   N)rK   rL   rM   r‚  rì  r‚  r\   rI   r;   r9   ÚStreamingBodyHandlerrz  m	  s   „ ò!ò4ò0ór;   r…  c                   ó   — e Zd Zd„ Zy)úAStreamingRequestBodyTest.get_handlers.<locals>.EarlyReturnHandlerc                 ó   — t        d«      ‚)Né‘  r5  rB   s    r9   rì  zIStreamingRequestBodyTest.get_handlers.<locals>.EarlyReturnHandler.prepare~	  s   € ô   “nÐ$r;   Nr:  rI   r;   r9   ÚEarlyReturnHandlerr‡  |	  s   „ ó%r;   rŠ  c                   ó$   ‡ — e Zd Zd„ Zˆ fd„Zˆ xZS )úDStreamingRequestBodyTest.get_handlers.<locals>.CloseDetectionHandlerc                 ó   — || _         y r2   rº   r³   s     r9   r‚  zOStreamingRequestBodyTest.get_handlers.<locals>.CloseDetectionHandler.initialize…	  r|  r;   c                 ól   •— t         ‰| �  «        | j                  j                  j	                  d «       y r2   )rK  rž  r´   Úclose_futurer  rO  s    €r9   rž  zXStreamingRequestBodyTest.get_handlers.<locals>.CloseDetectionHandler.on_connection_closeˆ	  s&   ø€ Ü‘Ñ+Ô-Ø—	‘	×&Ñ&×1Ñ1°$Õ7r;   )rK   rL   rM   r‚  rž  r¡  r¢  s   @r9   ÚCloseDetectionHandlerrŒ  ƒ	  s   ø„ ò!÷8ð 8r;   r�  z/stream_bodyrº   z/early_returnz/close_detection)r,   r   rf   )rC   r…  rŠ  r�  s       r9   r?   z%StreamingRequestBodyTest.get_handlersl	  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.connect’	  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   r~  rW  r„  r«  r[   r}   Úread_until_closer×   r…  r´  ©rC   r­  rW  s      r9   Útest_streaming_bodyz,StreamingRequestBodyTest.test_streaming_body�	  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_return´	  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_dataº	  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_uploadÁ	  s8   è ø€ ä"›HˆÔØ—‘Ð1ÀE�ÓJˆØ�‰ŒØ×ÑÓùrœ  N)
rK   rL   rM   r?   r«  r   r˜  rœ  rž  r   rI   r;   r9   rw  rw  k	  s]   „ ò$
òL	ð ñó ðð, ñ:ó ð:ð
 ñ:ó ð:ð ñ ó ñ r;   rw  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   r‚  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¤  r0  r9  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¤  r0  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æ	  s>   è ø€ à�^‰^˜FÕ#Ü—*‘*Ò÷ $à�
‰
”4 §¡Ô-Õ.÷ $Ð#üs   ‚A!”A§.A!ÁAÁA!N)rK   rL   rM   r‚  Ú
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   r�  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ì  r‚  r‚  r‚  r¸   r«  )rÓ   ra  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Ó   ra  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Ñ   rD  r·  r«  )r0   r�  ÚGzipFiler[   r´  ÚgetvaluerÓ   ra  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³  r�  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)Nr‚  )r§  r   r©  r�  s     r9   r‚  zhDecoratedStreamingRequestFlowControlTest.get_handlers.<locals>.DecoratedFlowControlHandler.data_received?
  s'   è ø€ à—^‘^ OÕ4ÜŸ*™*Ò$÷ 5×4Ñ4üs   ‚<”0§	<°9µ<N)rK   rL   rM   r   r¹   r‚  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)Nr‚  r   )r§  Úasyncior¦  )rC   rW  rÙ  s      r9   r‚  zbNativeStreamingRequestFlowControlTest.get_handlers.<locals>.NativeFlowControlHandler.data_receivedL
  s=   è ø€ Ø—^‘^ OÕ4Û"à!Ÿ-™-¨Ó*×*Ð*÷ 5Ð4ð +ø÷ 5Ð4üs%   ‚A	”=­;®=²	A	»=½AÁA	N)rK   rL   rM   r‚  rI   r;   r9   ÚNativeFlowControlHandlerr×  K
  s   „ ó+r;   rÚ  rR   rº   rÑ  )rC   rÚ  s     r9   r?   z2NativeStreamingRequestFlowControlTest.get_handlersJ
  s&   € ô	+Ô'=ô 	+ð Ð.´¸$´Ð@ÐAÐAr;   NrÒ  rI   r;   r9   rÔ  rÔ  G
  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À  r�  ©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  r}  rY   rá  rã  s     €r9   r\   z;IncorrectContentLengthTest.get_handlers.<locals>.TooLow.gete
  s>   ø€ Ø—‘Ð 0°#Ô6ðØ—K‘K Õ(øÜ ò Ø()�DÔ%Øûðúrä  Nr]   rº   s   €r9   ÚTooLowrè  d
  ræ  r;   rê  ú/highú/low)râ  r   )rC   rå  rê  r´   s      @r9   r?   z'IncorrectContentLengthTest.get_handlersV
  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_higho
  sŽ   € ô ”wÐ LÕMÜÜð5õð
 ×&Ñ&¤Õ7Ø—J‘J˜w°D�JÔ9÷ 8÷÷ Nð 	×ÑÜ�×!Ñ!Ó"Ð$Võ	
÷ 8Ð7ú÷ð ú÷ NÐMúó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_low
  sŽ   € ô ”wÐ LÕMÜÜð5õð
 ×&Ñ&¤Õ7Ø—J‘J˜v°4�JÔ8÷ 8÷÷ Nð 	×ÑÜ�×!Ñ!Ó"Ð$Rõ	
÷ 8Ð7ú÷ð ú÷ NÐMúrõ  N)rK   rL   rM   r?   rô  r÷  rI   r;   r9   rÜ  rÜ  U
  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.get’
  sS   € Ø�|‰|×#Ñ#×.Ñ.¨xÔ8ð —‘×'Ñ'×.Ñ.×4Ñ4Ô6Ø—
‘
˜7Õ#ð —
‘
Ð.Õ/r;   Nr]   rI   r;   r9   rT   rû  ‘
  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   rs  ÚSkipTestrÓ   rÒ   ÚskipTestr}   rÕ   rÙ   s     r9   Útest_client_closez!ClientCloseTest.test_client_closeŸ
  sh   € Ø×Ñ¤´×1BÑ1BÐCÕDØ—z‘z #°4�zÓ8ˆHØ�}‰}Ð 4Ò4Ø—‘Ð1Ô2Ø×Ñ˜XŸ]™]¨CÔ0÷	 E×DÑDús   ¦AA?Á?BN)rK   rL   rM   r   rT   r  rI   r;   r9   rù  rù  �
  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.present®
  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_values±
  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}   r9  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?  r9  s       r9   Ú.test_key_versioning_read_write_non_default_keyz>SignedValueTest.test_key_versioning_read_write_non_default_key4  rB  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_retrievalH  sC   € ØˆÜ$Ü×'Ñ'¨°¸T¿\¹\ÐWXô
ˆô 0°Ó7ˆØ×Ñ˜˜KÕ(r;   N)rK   rL   rM   r  r@  r
  r	  r  r  r#  r/  r7  r;  rA  rD  rG  rI  rI   r;   r9   r  r  §
  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   r}  Úxsrf_cookie_version)rç  rè  rb   r[   rß  )rC   rx   s     r9   r\   zXSRFTest.Handler.getS  s:   € Ü˜$×+Ñ+¨I°sÓ;Ó<ˆGð 4;ˆD�M‰MÐ/Ñ0Ø�J‰J�t—‘Õ'r;   c                 ó&   — | j                  d«       y r€  rZ   rB   s    r9   r¸   zXSRFTest.Handler.postZ  ó   € Ø�J‰J�tÕr;   N©rK   rL   rM   r\   r¸   rI   r;   r9   rT   rM  R  s   „ ò	(ó	r;   rT   c                 ó   — t        d¬«      S rE  rÌ   rB   s    r9   r@   zXSRFTest.get_app_kwargs]  rG  r;   c                 óL   •— t         ‰| �  «        | j                  «       | _        y r2   ©rK  ÚsetUpÚ	get_tokenrß  rO  s    €r9   rV  zXSRFTest.setUp`  ó   ø€ Ü‰‰ŒØŸ.™.Ó*ˆ�r;   c                 ó¬   — |�| j                  |«      }nd }| j                  |€dnd|z  |¬«      }|j                  «        t        |j                  «      S )NrR   z/?version=%drJ  ©Úcookie_headersrÓ   ra  r	   rÒ   )rC   Ú	old_tokenrx   rD  rÚ   s        r9   rW  zXSRFTest.get_tokend  s]   € ØÐ Ø×)Ñ)¨)Ó4‰GàˆGØ—:‘:Ø�?‰C¨¸'Ñ)AÈGð ó 
ˆð 	×ÑÔÜ˜(Ÿ-™-Ó(Ð(r;   c                 ó,   — |€| j                   }dd|z   iS )NrH  z_xsrf=©rß  ©rC   Útokens     r9   r[  zXSRFTest.cookie_headerso  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Ð   rl  rn  rÙ   s     r9   Útest_xsrf_fail_no_tokenz XSRFTest.test_xsrf_fail_no_tokent  óC   € Ü”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Ð   rl  ©
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_cookiey  óg   € Ü”wÐ CÕDØ—z‘zØØÜ—\‘\×+Ñ+¬D°t·±Ô,GÓHð "ó ˆH÷ Eð 	×Ñ˜Ÿ™¨Õ,÷ EÐDúó   ‘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|rj  rd  rl  )
r   r   rÓ   r[  r�  r‘  r’  rf   r}   rÕ   rÙ   s     r9   Ú&test_xsrf_fail_argument_invalid_formatz/XSRFTest.test_xsrf_fail_argument_invalid_format‚  so   € Ü”wÐ GÕHØ—z‘zØØØ×+Ñ+Ó-Ü—\‘\×+Ñ+¬D°tÔ,<Ó=ð	 "ó ˆH÷ Ið 	×Ñ˜Ÿ™¨Õ,÷ IÐ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)	Nri  rR   rÏ   rq  ©r`  rj  rd  rl  )r   r   rÓ   r[  r�  r‘  r’  rf   rß  r}   rÕ   rÙ   s     r9   Ú$test_xsrf_fail_cookie_invalid_formatz-XSRFTest.test_xsrf_fail_cookie_invalid_formatŒ  sx   € Ü”wÐ CÕDØ—z‘zØØØ×+Ñ+°$Ð+Ó7Ü—\‘\×+Ñ+¬D°t·±Ô,GÓHð	 "ó ˆH÷ Eð 	×Ñ˜Ÿ™¨Õ,÷ EÐDú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)Nrc  rR   rÏ   r;   ©rÑ   rÒ   rD  rl  )r   r   rÓ   r[  r}   rÕ   rÙ   s     r9   Útest_xsrf_fail_cookie_no_bodyz&XSRFTest.test_xsrf_fail_cookie_no_body–  sV   € Ü”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Ï   Údeadbeefrj  rt  rw  rÎ   ©rÓ   r�  r‘  r’  rf   r[  r}   rÕ   rÙ   s     r9   Útest_xsrf_success_short_tokenz&XSRFTest.test_xsrf_success_short_token�  sY   € Ø—:‘:ØØÜ—‘×'Ñ'¬°:Ô(>Ó?Ø×'Ñ'¨jÐ'Ó9ð	 ó 
ˆð 	×Ñ˜Ÿ™¨Õ,r;   c           	      óÔ   — | j                  ddt        j                  j                  t	        d¬«      «      | j                  d¬«      ¬«      }| j                  |j                  d«       y )NrR   rÏ   Úxoxorj  rt  rw  rÎ   r{  rÙ   s     r9   Útest_xsrf_success_non_hex_tokenz(XSRFTest.test_xsrf_success_non_hex_token¦  sY   € Ø—:‘:ØØÜ—‘×'Ñ'¬°6Ô(:Ó;Ø×'Ñ'¨fÐ'Ó5ð	 ó 
ˆð 	×Ñ˜Ÿ™¨Õ,r;   c           	      óä   — | j                  ddt        j                  j                  t	        | j
                  ¬«      «      | j                  «       ¬«      }| j                  |j                  d«       y ©NrR   rÏ   rj  rw  rÎ   ©	rÓ   r�  r‘  r’  rf   rß  r[  r}   rÕ   rÙ   s     r9   Útest_xsrf_success_post_bodyz$XSRFTest.test_xsrf_success_post_body¯  sX   € Ø—:‘:ØØÜ—‘×'Ñ'¬°4·?±?Ô(CÓDØ×'Ñ'Ó)ð	 ó 
ˆð 	×Ñ˜Ÿ™¨Õ,r;   c                 óê   — | j                  dt        j                  j                  t	        | j
                  ¬«      «      z   dd| j                  «       ¬«      }| j                  |j                  d«       y )Nz/?rj  rÏ   r;   rw  rÎ   r‚  rÙ   s     r9   Útest_xsrf_success_query_stringz'XSRFTest.test_xsrf_success_query_string¸  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-Xsrftokenrw  rÎ   )rÓ   rf   rß  r[  r}   rÕ   rÙ   s     r9   Útest_xsrf_success_headerz!XSRFTest.test_xsrf_success_headerÁ  sY   € Ø—:‘:ØØØÜØ §¡Ð0ñà×%Ñ%Ó'ñð	 ó 
ˆð 	×Ñ˜Ÿ™¨Õ,r;   c                 ó°   — d}t        «       }t        |«      D ]!  }|j                  | j                  «       «       Œ# | j	                  t        |«      |«       y )Nr#  )r®  r  r  rW  r}   rS  )rC   Ú
NUM_TOKENSÚtokensr»  s       r9   Útest_distinct_tokenszXSRFTest.test_distinct_tokensÍ  sD   € àˆ
Ü“ˆÜ�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Ï   rj  rw  rÎ   ri  rl  )rW  rß  rÓ   r�  r‘  r’  rf   r[  r}   rÕ   r   r   )rC   Útoken2r`  rÚ   Úcookie_tokenÚ
body_tokens         r9   Útest_cross_userzXSRFTest.test_cross_userÕ  s  € Ø—‘Ó!ˆà—o‘o vÓ.ˆEØ—z‘zØØÜ—\‘\×+Ñ+¬D°uÔ,=Ó>Ø×+Ñ+¨EÓ2ð	 "ó ˆHð ×Ñ˜XŸ]™]¨CÕ0ð /ð �_‰_˜fÐ%Ø�T—_‘_Ð%ó)
Ñ$ˆL˜*ô œ7Ð$GÕHØŸ:™:ØØ!ÜŸ™×/Ñ/´¸:Ô0FÓGØ ×/Ñ/°Ó=ð	 &ó �÷ Ið ×Ñ˜XŸ]™]¨CÕ0ñ)
÷ IÐHú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Ï   rj  rw  rÎ   é   )rß  r  rW  r  rÓ   r�  r‘  r’  rf   r[  r}   rÕ   rS  )rC   r`  Útokens_seenr»  rÚ   s        r9   Útest_refresh_tokenzXSRFTest.test_refresh_tokenî  s«   € Ø—‘ˆØ�gˆô
 �q–ˆAØ—N‘N 5Ó)ˆEà�O‰O˜EÔ"Ø—z‘zØØÜ—\‘\×+Ñ+¬D°t·±Ô,GÓHØ×+Ñ+¨EÓ2ð	 "ó ˆHð ×Ñ˜XŸ]™]¨CÕ0ð ð 	×Ñœ˜[Ó)¨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Ï   rj  rw  rÎ   )ÚassertNotEqualrW  r  r}   rÓ   r�  r‘  r’  rf   r[  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–ˆAØ×Ñ˜TŸ^™^¨H¸a˜^Ó@À(ÕKð ð —>‘> (Ó+ˆØ×Ñ˜H hÔ/à×Ñ˜H d§n¡n°XÓ&>Ô?ð +3°HÐ)=ÀÈ(Ð?SÓ(TÑ$ˆL˜*Ø—z‘zØØÜ—\‘\×+Ñ+¬D°zÔ,BÓCØ×+Ñ+¨LÓ9ð	 "ó ˆHð ×Ñ˜XŸ]™]¨CÕ0ñ )Ur;   rÁ  r2   )rK   rL   rM   r   rT   r@   rV  rW  r[  rd  rm  rr  ru  rx  r|  r  rƒ  r…  r‡  r‹  r�  r•  rš  r¡  r¢  s   @r9   rK  rK  Q  si   ø„ ô	�.ô 	ò'ô+ó	)ó,ò
-ò
-ò-ò-ò-ò-ò-ò-ò-ò
-ò2ò1ò2.ö(1r;   rK  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 r€  rZ   rB   s    r9   r¸   zXSRFCookieNameTest.Handler.post"  rQ  r;   NrR  rI   r;   r9   rT   rž    s   „ ò	(ó	r;   rT   c                 ó"   — t        ddddi¬«      S )NTz__Host-xsrfr.  )rF  Úxsrf_cookie_nameÚxsrf_cookie_kwargsrÌ   rB   s    r9   r@   z!XSRFCookieNameTest.get_app_kwargs%  s   € ÜØØ*Ø (¨$Ð/ô
ð 	
r;   c                 óL   •— t         ‰| �  «        | j                  «       | _        y r2   rU  rO  s    €r9   rV  zXSRFCookieNameTest.setUp,  rX  r;   c                 óž   — |�| j                  |«      }nd }| j                  d|¬«      }|j                  «        t        |j                  «      S )NrR   rJ  rZ  )rC   r\  rD  rÚ   s       r9   rW  zXSRFCookieNameTest.get_token0  sJ   € ØÐ Ø×)Ñ)¨)Ó4‰GàˆGØ—:‘:˜c¨7�:Ó3ˆØ×ÑÔÜ˜(Ÿ-™-Ó(Ð(r;   c                 ó,   — |€| j                   }dd|z   iS )NrH  z__Host-xsrf=r^  r_  s     r9   r[  z!XSRFCookieNameTest.cookie_headers9  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rb  rn  rÙ   s     r9   rd  z*XSRFCookieNameTest.test_xsrf_fail_no_token>  re  rf  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rh  rl  rÙ   s     r9   rm  z0XSRFCookieNameTest.test_xsrf_fail_body_no_cookieC  rn  ro  c           	      óä   — | j                  ddt        j                  j                  t	        | j
                  ¬«      «      | j                  «       ¬«      }| j                  |j                  d«       y r�  r‚  rÙ   s     r9   rƒ  z.XSRFCookieNameTest.test_xsrf_success_post_bodyL  sX   € Ø—:‘:ØØä—‘×'Ñ'¬°4·?±?Ô(CÓDØ×'Ñ'Ó)ð ó 
ˆð 	×Ñ˜Ÿ™¨Õ,r;   r2   )rK   rL   rM   r   rT   r@   rV  rW  r[  rd  rm  rƒ  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.getY  r¡  r;   Nr]   rI   r;   r9   rT   r¯  X  s   „ ó	(r;   rT   c                 ó2   — t        dt        dd¬«      ¬«      S )NTr„   )r/  rn   )rF  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;rB  zexpires=z.*; expires=(?P<expires>.+);.*r„   rg  ri  )Útzinfor#  )rÓ   rT  rD  Úlowerr\   rŠ   r‹   rj  rk  rl  rm  rn  ro  rp  rq  rr  r³  Úreplacer×   rt  ru  rv  s         r9   Útest_xsrf_httponlyz'XSRFCookieKwargsTest.test_xsrf_httponlya  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­  W  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        «       ‚)Nr‰  úWWW-AuthenticateúBasic realm="something"Úfinish_valuer\  zauthentication required)r  r  rè  r+   r[   rB   s    r9   r\   zFinishExceptionTest.Handler.getu  sN   € Ø�O‰O˜CÔ Ø�O‰OÐ.Ð0IÔJØ× Ñ  °Ô4ÜÐ6Ó7Ð7à—
‘
Ð4Ô5Ü“h�r;   Nr]   rI   r;   r9   rT   rº  t  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=1r‰  r½  r¼  s   authentication required)rÓ   r}   rÕ   rD  r\   rÒ   )rC   ÚurÚ   s      r9   Útest_finish_exceptionz)FinishExceptionTest.test_finish_exception~  si   € Û*ˆAØ—z‘z !“}ˆHØ×Ñ˜XŸ]™]¨CÔ0Ø×ÑØ)¨8×+;Ñ+;×+?Ñ+?Ð@RÓ+Sôð ×ÑÐ7¸¿¹ÕGñ +r;   N)rK   rL   rM   r   rT   rÁ  rI   r;   r9   r¸  r¸  s  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.get�  rÈ  r;   N)rK   rL   rM   r.   r\   rI   r;   r9   ÚAddSlashHandlerrË  �  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Î  FrŽ  r�  r‘  z/removeslashz/removeslash/?foo=barz/removeslash?foo=barr…  rÙ   s     r9   Útest_removeslashzDecoratorTest.test_removeslash–  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Ï  FrŽ  r�  r‘  z
/addslash/z/addslash?foo=barz/addslash/?foo=barr…  rÙ   s     r9   Útest_addslashzDecoratorTest.test_addslashŸ  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_etag¯  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_etag´  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_match¹  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_match¾  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_matchÃ  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   rJ  r‚  )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)rL  rs  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 )Nrl  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  s^   € ð
 *Ð*ˆÛˆ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})r^  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#  FrŽ  r�  r‘  r$  r…  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=barFrŽ  r�  r‘  z/dst?foo=barr…  rÙ   s     r9   Útest_redirect_with_argumentz/RedirectHandlerTest.test_redirect_with_argument4  sC   € Ø—:‘:˜n¸u�:ÓEˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Ñ5°~ÕFr;   c                 ó    — | j                  dd¬«      }| j                  |j                  d«       | j                  |j                  d   d«       y )Nz/src2?foo2=bar2FrŽ  r�  r‘  z/dst2?foo=bar&foo2=bar2r…  rÙ   s     r9   Ú%test_redirect_with_appending_argumentz9RedirectHandlerTest.test_redirect_with_appending_argument9  sE   € Ø—:‘:Ð/À%�:ÓHˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜×)Ñ)¨*Ñ5Ð7PÕQr;   c                 ó    — | j                  dd¬«      }| j                  |j                  d«       | j                  |j                  d   d«       y )Nz/a/b/cFrŽ  r�  r‘  z/b/a/cr…  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.getN  s>   € Ø—‘Ø&¨×(?Ñ(?Ó(A×(FÑ(F×(NÑ(NÈsÐTWÓ(Xôð —‘˜CÕ r;   Nr]   rI   r;   r9   ÚAcceptLanguageHandlerr3  M  s   „ ó!r;   r8  rR   )r   Úload_gettext_translationsr3   r4   r5   r6   r7   r   )rC   r8  s     r9   r?   zAcceptLanguageTest.get_handlersG  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   rb  zfr-FR;q=0.9rJ  r  zfr-FRzfr-FR; q=0.9©rÓ   r}   rD  rÙ   s     r9   Útest_accept_languagez'AcceptLanguageTest.test_accept_languageX  sj   € Ø—:‘:˜cÐ,=¸}Ð+M�:ÓNˆØ×Ñ˜×)Ñ)Ð*<Ñ=¸wÔGà—:‘:˜cÐ,=¸~Ð+N�:ÓOˆØ×Ñ˜×)Ñ)Ð*<Ñ=¸wÕGr;   c                 ól   — | j                  dddi¬«      }| j                  |j                  d   d«       y )NrR   rb  z	fr-FR;q=0rJ  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   rb  z
fr-FR;q=-1rJ  r  r>  r;  rÙ   s     r9   Útest_accept_language_invalidz/AcceptLanguageTest.test_accept_language_invalidc  s6   € Ø—:‘:˜cÐ,=¸|Ð+L�:ÓMˆØ×Ñ˜×)Ñ)Ð*<Ñ=¸wÕGr;   N)rK   rL   rM   rN   r?   r<  r?  rA  rI   r;   r9   r.  r.  D  s   „ Ù3ò
ò"HòHóHr;   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    r^  r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   rˆ   r¬  r§   rj  Úemail.utilsro  r�  Úior0   r  rU  r3   rŠ   r¨  r¸  rs  Úurllib.parser�  r:   r=   rP   rV   r_   ÚTestCaserr   r—   r¬   rß   r~  r‰  r–  r   r¸  rÇ  rÙ  rø  r  r
  r  r  r  r$  r-  r4  r<  rB  r¤  rª  rÑ  rv  rˆ  r•  r›  rÎ  rå  rì  rô  r   r
  r  r&  r1  r?  rM  rl  r|  rÀ  r‡  rŠ  r£  r¬  rÃ  rÍ  rÜ  r  r'  r6  r@  rL  rT  rZ  re  rl  rw  r¢  r¯  rË  rÔ  rÜ  rù  r  rK  rœ  r­  r¸  rÃ  rÕ  r   r  r  r  r!  r.  rI   r;   r9   Ú<module>rT     s  ðÛ å %Ý ÷÷ õ /Ý -Ý %Ý Ý ß (Ý ;Ý 'ß QÓ QÝ 0ß 1÷÷ ÷ ÷ ÷ ñ ó, Û Û Û Û Û Ý Û Û Û 	Û 	Û Û Û Û ò7ôÐ#ô ô$	%˜Kô 	%ô�>ô ô
$˜~ô $ô,2S˜×*Ñ*ô 2Sôl,E˜×*Ñ*ô ,Eô^.9�kô .9ôbh=�ô h=ôV
 ô 
ô
�{ô 
ô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;   