
    Mhy                       d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZ d dlmZmZmZmZ d dl m!Z! d dl"m#Z#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 d dl:Z:d dl;Z;d dl<Z<d dl=Z=d dl>Z?d dl@Z@d dlAmBZB d dlCZCd dlDZDd dlEZEd dlFZFd dlGZGd dlHZHd dlIZId dlJZKd ZL G d de          ZM G d deM          ZN G d de'          ZO G d de'          ZP G d deIjQ                  ZR G d deIjQ                  ZS G d d eM          ZT G d! d"eM          ZU G d# d$e'          ZV G d% d&eM          ZW G d' d(e'          ZX G d) d*eM          ZY G d+ d,e'          ZZ G d- d.eM          Z[ G d/ d0e'          Z\ G d1 d2e'          Z] G d3 d4e'          Z^ G d5 d6e'          Z_ G d7 d8e'          Z` G d9 d:e'          Za G d; d<e'          Z) G d= d>e'          Zb G d? d@e'          Zc G dA dBe'          Zd G dC dDe'          Ze G dE dFe'          Zf G dG dHeM          Zg G dI dJeM          Zh G dK dLeM          Zi G dM dNeM          Zj G dO dPeM          Zk G dQ dReM          Zl G dS dTeM          Zm G dU dVeM          Zn G dW dXeM          Zo G dY dZeM          Zp G d[ d\eM          Zq G d] d^eN          Zr G d_ d`eN          Zs G da dbeN          Zt G dc ddeN          Zu G de dfeN          Zv G dg dheN          Zw G di djeM          Zx G dk dleN          Zy G dm dneM          Zz G do dpeN          Z{ G dq dre|          Z} G ds dteN          Z~ G du dveN          Z G dw dxeN          Z G dy dzeN          Z G d{ d|eN          Z G d} d~eM          Z G d deN          Z G d deN          Z G d deN          Z G d deN          Z G d deN          Z G d deM          Z G d deM          Z G d deM          Z G d deM          Z G d deM          Ze6 G d de'                      Z G d d          Z G d deeM          Z G d deeM          Z G d deN          Z G d deN          Z G d deIjQ                  Z G d deN          Z G d deN          Z G d deN          Z G d deN          Z G d deM          Z G d deM          Z G d deN          Z G d deIjQ                  Z G d de          Z G d deIjQ                  Z G d deM          Z G d deM          ZdS )    )Future)gen)json_decodeutf8
to_unicoderecursive_unicode
native_strto_basestring)HTTPClientError)format_timestamp)IOStream)locale)Event)app_loggen_logSimpleAsyncHTTPClient
DictLoader)AsyncHTTPTestCaseAsyncTestCase	ExpectLoggen_test)ignore_deprecation)
ObjectDictunicode_type)ApplicationRequestHandlerStaticFileHandlerRedirectHandler	HTTPErrorMissingArgumentErrorErrorHandlerauthenticatedurl_create_signature_v1create_signed_valuedecode_signed_valueget_signature_key_versionUIModuleFinishstream_request_bodyremoveslashaddslashGZipContentEncodingN)BytesIOc                  t    t          j        j        t           j                            t                    g| R  S N)ospathjoindirname__file__)as    U/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/tornado/test/web_test.pyrelpathr:   =   s*    7<116A6666    c                   $    e Zd ZdZd Zd Zd ZdS )WebTestCasezBase class for web tests that also supports WSGI mode.

    Override get_handlers and get_app_kwargs instead of get_app.
    This class is deprecated since WSGI mode is no longer supported.
    c                 |    t          |                                 fi |                                 | _        | j        S r2   )r   get_handlersget_app_kwargsappselfs    r9   get_appzWebTestCase.get_appH   s8    t0022LLd6I6I6K6KLLxr;   c                     t                      r2   NotImplementedErrorrB   s    r9   r?   zWebTestCase.get_handlersL   s    !###r;   c                     i S r2    rB   s    r9   r@   zWebTestCase.get_app_kwargsO       	r;   N)__name__
__module____qualname____doc__rD   r?   r@   rI   r;   r9   r=   r=   A   sK           $ $ $    r;   r=   c                       e Zd ZdZdZd ZdS )SimpleHandlerTestCasezSimplified 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    dl#$$r;   )rK   rL   rM   rN   rT   r?   rI   r;   r9   rP   rP   S   s4         
 G% % % % %r;   rP   c                       e Zd Zd ZdS )HelloHandlerc                 0    |                      d           d S NhellowriterB   s    r9   getzHelloHandler.get`   s    

7r;   NrK   rL   rM   r\   rI   r;   r9   rV   rV   _   s#            r;   rV   c                   $    e Zd ZddZd ZddZdS )CookieTestRequestHandler
0123456789Nc                     i | _         |%t          t          |                    | _        d S t          t          ||                    | _        d S )N)cookie_secret)settingsrb   key_version)_cookiesr   dictapplication)rC   rb   re   s      r9   __init__z!CookieTestRequestHandler.__init__f   si    )M:::     D  *M{SSS     Dr;   c                 6    | j                             |          S r2   )rf   r\   )rC   names     r9   
get_cookiez#CookieTestRequestHandler.get_cookier   s    }  &&&r;   c                     || j         |<   d S r2   )rf   )rC   rk   valueexpires_dayss       r9   
set_cookiez#CookieTestRequestHandler.set_cookieu   s    #dr;   )r`   Nr2   )rK   rL   rM   ri   rl   rp   rI   r;   r9   r_   r_   d   sK        
 
 
 
' ' '$ $ $ $ $ $r;   r_   c                        e Zd Zd Zd Zd ZdS )SecureCookieV1Testc                     t                      }|                    ddd           |                     |                    dd          d           d S )Nfoo   bar   versionmin_versionr_   set_signed_cookieassertEqualget_signed_cookierC   handlers     r9   test_round_tripz"SecureCookieV1Test.test_round_trip{   W    *,,!!%!;;;225a2HH&QQQQQr;   c           	      <   t                      }|                    dt          j        d          d           |j        d         }t          j        d|          }|                     |           |J |                    d          }|                    d          }| 	                    t          |j        j        d         dd|          |           | 	                    t          |j        j        d         dd	d
|z             |           t          dt          |           dt          |                     |j        d<   t          t           d          5  |                     |                    dd                     d d d            d S # 1 swxY w Y   d S )Nrt   s   d76df8e7aefcrv   rw   s   12345678\|([0-9]+)\|([0-9a-f]+)   rb   123456781234s   5678z	1234|5678|zCookie timestamp in futurery   )r_   r|   binasciia2b_hexrf   rematchassertIsNotNonegroupr}   r&   rh   rc   r   r
   r   r   assertIsNoner~   )rC   r   cookier   	timestampsigs         r9   &test_cookie_tampering_future_timestampz9SecureCookieV1Test.test_cookie_tampering_future_timestamp   s   *,,!!%)9/)J)JTU!VVV!%(<fEEU###   KKNN	kk!nn #,_=	  	
 	
 	
 	 #,_=)#	  	
 	
 	
 #'Gi00GG=3E3EGG#
 #
 w <== 	O 	Og7717MMNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	Os   +FFFc                     t                      }|                    ddd           |                     |                    dd          d           d S )Nrt      rv   rw   ry   r{   r   s     r9   test_arbitrary_bytesz'SecureCookieV1Test.test_arbitrary_bytes   sY     +,,!!%!!<<<225a2HH'RRRRRr;   N)rK   rL   rM   r   r   r   rI   r;   r9   rr   rr   z   sM        R R R
%O %O %ONS S S S Sr;   rr   c                   6    e Zd ZdddZd Zd Zd Zd Zd Zd	S )
SecureCookieV2Testajklasdf0ojaisdfaslkjasaolwkjsdf)r   rv   c                     t                      }|                    ddd           |                     |                    dd          d           d S )Nrt   ru   r   rw   ry   r{   r   s     r9   r   z"SecureCookieV2Test.test_round_trip   r   r;   c                     t          | j        d          }|                    dd           |                     |                    d          d           d S )Nr   rd   rt   ru   r_   KEY_VERSIONSr|   r}   r~   r   s     r9   test_key_version_roundtripz-SecureCookieV2Test.test_key_version_roundtrip   `    *+
 
 
 	!!%000225996BBBBBr;   c                     t          | j        d          }|                    dd           |                     |                    d          d           d S )Nrv   rd   rt   ru   r   r   s     r9   ,test_key_version_roundtrip_differing_versionz?SecureCookieV2Test.test_key_version_roundtrip_differing_version   r   r;   c                     t          | j        d          }|                    dd           t          | j        d          }|j        |_        |                     |                    d          d           d S Nr   rd   rt   ru   rv   )r_   r   r|   rf   r}   r~   )rC   r   new_handlers      r9   "test_key_version_increment_versionz5SecureCookieV2Test.test_key_version_increment_version   s    *+
 
 
 	!!%000.+
 
 
  '/66u==vFFFFFr;   c                 F   t          | j        d          }|                    dd           | j                                        }|                    d           t          |d          }|j        |_        |                     |                    d          d            d S r   )r_   r   r|   copypoprf   r}   r~   )rC   r   new_key_versionsr   s       r9   #test_key_version_invalidate_versionz6SecureCookieV2Test.test_key_version_invalidate_version   s    *+
 
 
 	!!%000,1133Q.*
 
 
  '/66u==tDDDDDr;   N)	rK   rL   rM   r   r   r   r   r   r   rI   r;   r9   r   r      s~        ).@AALR R R
C C CC C C	G 	G 	GE E E E Er;   r   c                   *    e Zd ZdZd Zd Zd Zd ZdS )FinalReturnTestNc                 l    |  G fddt                     } G fddt                     }d|fd|fgS )Nc                   X    e Zd Zej         fd            Zej         fd            ZdS )3FinalReturnTest.get_handlers.<locals>.FinishHandlerc              3   P   K   |                                  _        j        V  d S r2   )finishfinal_returnrC   tests    r9   r\   z7FinalReturnTest.get_handlers.<locals>.FinishHandler.get   s,      $(KKMM!''''''r;   c              3      K   |                      d           |                                 V  |                     d          _        j        V  d S )Nzhello,world)r[   flushr   r   r   s    r9   postz8FinalReturnTest.get_handlers.<locals>.FinishHandler.post   sV      

8$$$jjll"""$(KK$8$8!''''''r;   N)rK   rL   rM   r   	coroutiner\   r   r   s   r9   FinishHandlerr      sa        ]( ( ( ( ]( ]( ( ( ( ]( ( (r;   r   c                   :    e Zd Zd Zej         fd            ZdS )3FinalReturnTest.get_handlers.<locals>.RenderHandlerc                 $    t          ddi          S )Nfoo.htmlhir   rC   r4   s     r9   create_template_loaderzJFinalReturnTest.get_handlers.<locals>.RenderHandler.create_template_loader   s    !:t"4555r;   c                 <    |                      d          _        d S Nr   )renderr   r   s    r9   r\   z7FinalReturnTest.get_handlers.<locals>.RenderHandler.get   s    $(KK
$;$;!!!r;   N)rK   rL   rM   r   r   r   r\   r   s   r9   RenderHandlerr      sK        6 6 6 ]< < < < ]< < <r;   r   /finish/renderr   )rC   r   r   r   s      @r9   r?   zFinalReturnTest.get_handlers   s    	( 	( 	( 	( 	( 	( 	(N 	( 	( 	(	< 	< 	< 	< 	< 	< 	<N 	< 	< 	< M*Y,FGGr;   c                 "    t          d          S )Nr   )template_pathrg   rB   s    r9   r@   zFinalReturnTest.get_app_kwargs   s    "34444r;   c                 H   |                      |                     d                    }|                     |j        d           |                     | j        t                     |                     | j                                                   |                      |                     d          dd          }|                     |j        d           |                     | j        t                     |                     | j                                                   d S )Nr      POSTr;   methodbody)	fetchget_urlr}   codeassertIsInstancer   r   
assertTruedonerC   responses     r9    test_finish_method_return_futurez0FinalReturnTest.test_finish_method_return_future   s    ::dll95566,,,d/888)..00111::dll955f3:OO,,,d/888)..0011111r;   c                     |                      |                     d                    }|                     |j        d           |                     | j        t                     d S )Nr   r   )r   r   r}   r   r   r   r   r   s     r9    test_render_method_return_futurez0FinalReturnTest.test_render_method_return_future
  sV    ::dll95566,,,d/88888r;   )rK   rL   rM   r   r?   r@   r   r   rI   r;   r9   r   r      sX        LH H H45 5 5	2 	2 	29 9 9 9 9r;   r   c                   J    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S )
CookieTestc           
          G d dt                     } G d dt                     } G d dt                     } G d dt                     } G d	 d
t                     } G d dt                     } G d dt                     } G d dt                     } G d dt                     }	d|fd|fd|fd|fd|fd|fd|fd|fd|	fg	S )Nc                       e Zd Zd ZdS )1CookieTest.get_handlers.<locals>.SetCookieHandlerc                     |                      dd           |                      dd           |                      dd           d S )Nstrasdfunicodeqwerbytess   zxcvrp   rB   s    r9   r\   z5CookieTest.get_handlers.<locals>.SetCookieHandler.get  sF     v...	622211111r;   Nr]   rI   r;   r9   SetCookieHandlerr     s#        2 2 2 2 2r;   r   c                       e Zd Zd ZdS )1CookieTest.get_handlers.<locals>.GetCookieHandlerc                 d    |                      dd          }|J |                     |           d S )Nrt   default)rl   r[   )rC   r   s     r9   r\   z5CookieTest.get_handlers.<locals>.GetCookieHandler.get  s9    	::)))

6"""""r;   Nr]   rI   r;   r9   GetCookieHandlerr     s#        # # # # #r;   r   c                       e Zd Zd ZdS )7CookieTest.get_handlers.<locals>.SetCookieDomainHandlerc                 8    |                      dddd           d S )Nunicode_argsblahzfoo.com/foo)domainr4   r   rB   s    r9   r\   z;CookieTest.get_handlers.<locals>.SetCookieDomainHandler.get!  s$     yvVVVVVr;   Nr]   rI   r;   r9   SetCookieDomainHandlerr      s(        W W W W Wr;   r   c                       e Zd Zd ZdS )<CookieTest.get_handlers.<locals>.SetCookieSpecialCharHandlerc                     |                      dd           |                      dd           |                      dd           d S )Nequalsa=b	semicolona;bquotea"br   rB   s    r9   r\   z@CookieTest.get_handlers.<locals>.SetCookieSpecialCharHandler.get'  sD    %000U333/////r;   Nr]   rI   r;   r9   SetCookieSpecialCharHandlerr   &  s#        0 0 0 0 0r;   r  c                       e Zd Zd ZdS ):CookieTest.get_handlers.<locals>.SetCookieOverwriteHandlerc                     |                      ddd           |                      ddd           |                      dd           d S )Nr8   bzexample.com)r   cder   rB   s    r9   r\   z>CookieTest.get_handlers.<locals>.SetCookieOverwriteHandler.get-  sN    S???S??? S)))))r;   Nr]   rI   r;   r9   SetCookieOverwriteHandlerr  ,  s#        * * * * *r;   r	  c                       e Zd Zd ZdS )7CookieTest.get_handlers.<locals>.SetCookieMaxAgeHandlerc                 6    |                      ddd           d S )Nrt   bar
   )max_ager   rB   s    r9   r\   z;CookieTest.get_handlers.<locals>.SetCookieMaxAgeHandler.get5  s     ub99999r;   Nr]   rI   r;   r9   SetCookieMaxAgeHandlerr  4  s#        : : : : :r;   r  c                       e Zd Zd ZdS )<CookieTest.get_handlers.<locals>.SetCookieExpiresDaysHandlerc                 6    |                      ddd           d S )Nrt   r  r  )ro   r   rB   s    r9   r\   z@CookieTest.get_handlers.<locals>.SetCookieExpiresDaysHandler.get9  s     u2>>>>>r;   Nr]   rI   r;   r9   SetCookieExpiresDaysHandlerr  8  s#        ? ? ? ? ?r;   r  c                       e Zd Zd ZdS )4CookieTest.get_handlers.<locals>.SetCookieFalsyFlagsc                     |                      ddd           |                      ddd           |                      ddd           |                      d	dd           d S )
Nr8   1T)securer  Fr  )httponlyr  r   rB   s    r9   r\   z8CookieTest.get_handlers.<locals>.SetCookieFalsyFlags.get=  sh    S666S777S4888S599999r;   Nr]   rI   r;   r9   SetCookieFalsyFlagsr  <  s#        : : : : :r;   r  c                       e Zd Zd ZdS )8CookieTest.get_handlers.<locals>.SetCookieDeprecatedArgsc                 8    |                      dddd           d S )Nr8   r  Tr   )HttpOnlypATHr   rB   s    r9   r\   z<CookieTest.get_handlers.<locals>.SetCookieDeprecatedArgs.getD  s"    S4fEEEEEr;   Nr]   rI   r;   r9   SetCookieDeprecatedArgsr  C  s(        F F F F Fr;   r!  /set/get/set_domain/special_char/set_overwrite/set_max_age/set_expires_days/set_falsy_flags/set_deprecatedr   )
rC   r   r   r   r  r	  r  r  r  r!  s
             r9   r?   zCookieTest.get_handlers  s   	2 	2 	2 	2 	2~ 	2 	2 	2	# 	# 	# 	# 	#~ 	# 	# 	#	W 	W 	W 	W 	W^ 	W 	W 	W	0 	0 	0 	0 	0. 	0 	0 	0	* 	* 	* 	* 	* 	* 	* 	*	: 	: 	: 	: 	:^ 	: 	: 	:	? 	? 	? 	? 	?. 	? 	? 	?	: 	: 	: 	: 	:. 	: 	: 	:	F 	F 	F 	F 	Fn 	F 	F 	F %&%&239:8934 "=>!45 78

 
	
r;   c                     |                      d          }|                     t          |j                            d                    g d           d S )Nr"  
Set-Cookie)zbytes=zxcv; Path=/zstr=asdf; Path=/zunicode=qwer; Path=/)r   r}   sortedheadersget_listr   s     r9   test_set_cookiezCookieTest.test_set_cookieT  sZ    ::f%%8#,,\::;;NNN	
 	
 	
 	
 	
r;   c                 >   |                      dddi          }|                     |j        d           |                      dddi          }|                     |j        d           |                      dddi          }|                     |j        d           d S )	Nr#  Cookiefoo=barr.  ru   z	foo="bar"z/=exception;   defaultr   r}   r   r   s     r9   test_get_cookiezCookieTest.test_get_cookie[  s    ::fx.C:DD///::fx.E:FF///::fx.H:II
33333r;   c                     |                      d          }|                     |j                            d          dg           d S )Nr$  r,  z,unicode_args=blah; Domain=foo.com; Path=/foor   r}   r.  r/  r   s     r9   test_set_cookie_domainz!CookieTest.test_set_cookie_domaine  sO    ::m,,%%l33;<	
 	
 	
 	
 	
r;   c                 >   |                      d          }t          |j                            d                    }|                     t          |          d           |                     |d         d           |                     |d         d           |                     |d         d	|d                    g d
}|D ][\  }}t          j        d|           |                      dd|i          }|                     |j	        t          |                     \d S )Nr%  r,     r   zequals="a=b"; Path=/rv   zquote="a\"b"; Path=/r   )zsemicolon="a;b"; Path=/zsemicolon="a\073b"; Path=/))zfoo=a=br   )z	foo="a=b"r   )z	foo="a;b"z"a)z
foo=a\073bza\073b)zfoo="a\073b"r   )z
foo="a\"b"r   z	trying %rr#  r2  r4  )r   r-  r.  r/  r}   lenassertInloggingdebugr   r   )rC   r   r.  dataheaderexpecteds         r9   test_cookie_special_charz#CookieTest.test_cookie_special_charl  s(   ::o..)22<@@AAWq)))%;<<<%<===AJFAJ	
 	
 	

 
 
 !% 	< 	<FHM+v...zz&8V2DzEEHX]DNN;;;;	< 	<r;   c                     |                      d          }|j                            d          }|                     t	          |          ddg           d S )Nr&  r,  za=e; Path=/zc=d; Domain=example.com; Path=/r   r.  r/  r}   r-  rC   r   r.  s      r9   test_set_cookie_overwritez$CookieTest.test_set_cookie_overwrite  s]    ::.//"++L997OOm-NO	
 	
 	
 	
 	
r;   c                     |                      d          }|j                            d          }|                     t	          |          dg           d S )Nr'  r,  zfoo=bar; Max-Age=10; Path=/rF  rG  s      r9   test_set_cookie_max_agez"CookieTest.test_set_cookie_max_age  sO    ::n--"++L99+H*IJJJJJr;   c                 X   |                      d          }|j                            d          }|                     |           |J t	          j        d|          }|                     |           |J t          j                            t          j        j	                  t          j
        d          z   }t          j                            |                                d                   }|                     t!          ||z
                                            d           d S )Nr(  r,  z(foo=bar; expires=(?P<expires>.+); Path=/r  daysexpires)r   r.  r\   r   r   r   datetimenowtimezoneutc	timedeltaemailutilsparsedate_to_datetime	groupdict
assertLessabstotal_secondsrC   r   rB  r   rN  header_expiress         r9   test_set_cookie_expires_daysz'CookieTest.test_set_cookie_expires_days  s   ::122!%%l33V$$$!!!CVLLU###   #''(9(=>>ASB
 B
 B
 
 ::5??;L;LY;WXXW~5DDFFGGLLLLLr;   c                 ^   |                      d          }t          |j                            d                    }|                     |d         d           |                     |d         d           |                     |d         d           |                     |d	         d
           d S )Nr)  r,  r   za=1; Path=/; Securerv   zb=1; Path=/r   zc=1; HttpOnly; Path=/r<  zd=1; Path=/)r   r-  r.  r/  r}   rG  s      r9   test_set_cookie_false_flagsz&CookieTest.test_set_cookie_false_flags  s    ::011)22<@@AA%:;;;]333%<===]33333r;   c                     t                      5  |                     d          }d d d            n# 1 swxY w Y   |j                            d          }|                     |d           d S )Nr*  r,  za=b; HttpOnly; Path=/foo)r   r   r.  r\   r}   )rC   r   rB  s      r9   test_set_cookie_deprecatedz%CookieTest.test_set_cookie_deprecated  s    !! 	5 	5zz"344H	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5!%%l33!;<<<<<s   155N)rK   rL   rM   r?   r0  r7  r:  rD  rH  rJ  r]  r_  ra  rI   r;   r9   r   r     s        A
 A
 A
F
 
 
4 4 4
 
 
< < <4
 
 
K K K
M M M4 4 4= = = = =r;   r   c                   0    e Zd Zd Zd Zed             ZdS )AuthRedirectRequestHandlerc                     || _         d S r2   	login_url)rC   rf  s     r9   
initializez%AuthRedirectRequestHandler.initialize  s    "r;   c                     | j         S r2   re  rB   s    r9   get_login_urlz(AuthRedirectRequestHandler.get_login_url  s
    ~r;   c                 0    |                      d           d S )N  )
send_errorrB   s    r9   r\   zAuthRedirectRequestHandler.get  s     	r;   N)rK   rL   rM   rg  ri  r$   r\   rI   r;   r9   rc  rc    sM        # # #     ]  r;   rc  c                        e Zd Zd Zd Zd ZdS )AuthRedirectTestc                 b    dt           t          d          fdt           t          d          fgS )N	/relativez/loginre  	/absolutezhttp://example.com/login)rc  rg   rB   s    r9   r?   zAuthRedirectTest.get_handlers  s<    4dX6N6N6NO*9:::
 	
r;   c                     |                      |                     d          d          }|                     |j        d           |                     |j        d         d           d S )Nrp  Ffollow_redirects.  Locationz/login?next=%2Frelative)r   r   r}   r   r.  r   s     r9   test_relative_auth_redirectz,AuthRedirectTest.test_relative_auth_redirect  s`    ::dll;77%:PP,,,)*57PQQQQQr;   c                    |                      |                     d          d          }|                     |j        d           |                     t          j        d|j        d                   |j        d                    d S )Nrq  Frs  ru  zIhttp://example.com/login\?next=http%3A%2F%2F127.0.0.1%3A[0-9]+%2Fabsoluterv  )r   r   r}   r   r   r   r   r.  r   s     r9   test_absolute_auth_redirectz,AuthRedirectTest.test_absolute_auth_redirect  s    ::dll;77%:PP,,,H\ ,  Z(	
 	
 	
 	
 	
r;   N)rK   rL   rM   r?   rw  ry  rI   r;   r9   rn  rn    sD        
 
 
R R R
	
 	
 	
 	
 	
r;   rn  c                   :    e Zd Zd Zej        d             Zd ZdS )ConnectionCloseHandlerc                     || _         d S r2   r   r   s     r9   rg  z!ConnectionCloseHandler.initialize  s    			r;   c              #   |   K   | j                                          | j         j                                        V  d S r2   )r   on_handler_waitingcleanup_eventwaitrB   s    r9   r\   zConnectionCloseHandler.get  s=      	$$&&&i%**,,,,,,,r;   c                 8    | j                                          d S r2   )r   on_connection_closerB   s    r9   r  z*ConnectionCloseHandler.on_connection_close  s    	%%'''''r;   N)rK   rL   rM   rg  r   r   r\   r  rI   r;   r9   r{  r{    sO           	]- - ]-( ( ( ( (r;   r{  c                   &    e Zd Zd Zd Zd Zd ZdS )ConnectionCloseTestc                 Z    t                      | _        dt          t          |           fgS )NrR   r   )r   r  r{  rg   rB   s    r9   r?   z ConnectionCloseTest.get_handlers  s'    "WW,dooo>??r;   c                    t          j         t           j        t           j        d          }|                    d|                                 f           t          |          | _        | j                            d           |                                  | j	        
                                 | j                            d            d S )Nr   	127.0.0.1s   GET / HTTP/1.0

c                  *    t          j        d          S Nr   )r   sleeprI   r;   r9   <lambda>z;ConnectionCloseTest.test_connection_close.<locals>.<lambda>  s    cill r;   )socketAF_INETSOCK_STREAMconnectget_http_portr   streamr[   r  r  setio_looprun_sync)rC   ss     r9   test_connection_closez)ConnectionCloseTest.test_connection_close  s    M&.&*<a@@			; 2 2 4 45666qkk3444		   2233333r;   c                 `    t          j        d           | j                                         d S )Nzhandler waiting)r?  r@  r  closerB   s    r9   r~  z&ConnectionCloseTest.on_handler_waiting  s-    '(((r;   c                 V    t          j        d           |                                  d S )Nzconnection closed)r?  r@  stoprB   s    r9   r  z'ConnectionCloseTest.on_connection_close  s$    )***		r;   N)rK   rL   rM   r?   r  r~  r  rI   r;   r9   r  r    sS        @ @ @4 4 4      r;   r  c                       e Zd Zd ZdS )EchoHandlerc           	         | j         j        D ]}t          |          t          urt	          dt          |          z            | j         j        |         D ]7}t          |          t
          urt	          dt          |          z            8|                     |          D ]7}t          |          t          urt	          dt          |          z            8|D ]7}t          |          t          urt	          dt          |          z            8|                     t          | j         j
        |t          | j         j                                       d S )Nzincorrect type for key: %rzincorrect type for value: %rzincorrect type for path arg: %rr4   	path_argsargs)request	argumentstyper   	Exceptionr   get_argumentsr   r[   rg   r4   r   )rC   r  keybvaluesvalueargs         r9   r\   zEchoHandler.get  su   
 <) 	S 	SCCyy## <tCyy HIII,05 S S<<u,,#$BT&\\$QRRR -,,S11 S S<<|33#$BT&\\$QRRR 4S  	O 	OCCyy,, ADII MNNN -

\&#&t|'=>>  	
 	
 	
 	
 	
r;   Nr]   rI   r;   r9   r  r    s#        
 
 
 
 
r;   r  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )RequestEncodingTestc                 &    dt           fdt           fgS )Nz/group/(.*)z/slashes/([^/]*)/([^/]*))r  rB   s    r9   r?   z RequestEncodingTest.get_handlers  s    ,/I;.WXXr;   c                 P    t          |                     |          j                  S r2   )r   r   r   r   s     r9   
fetch_jsonzRequestEncodingTest.fetch_json  s    4::d++0111r;   c           	          |                      |                     d          t          ddgi                      |                      |                     d          t          ddgddgi                     d S )Nz
/group/%3F?r  z/group/%3F?%3F=%3Fr}   r  rg   rB   s    r9   test_group_question_markz,RequestEncodingTest.test_group_question_mark   s    OOL))lse"===	
 	
 	
 	OO011lse3,GGG	
 	
 	
 	
 	
r;   c                 h    |                      |                     d          ddgddgid           d S )Nz/group/%C3%A9?arg=%C3%A9z/group/%C3%A9   ér  r  r}   r  rB   s    r9   test_group_encodingz'RequestEncodingTest.test_group_encoding+  sP    OO677'&Z
+ 	
 	
 	
 	
 	
r;   c                     |                      |                     d          t          dddgi                      |                      |                     d          t          dddgi                      d S )Nz/slashes/foo/barrt   r  r  z/slashes/a%2Fb/c%2Fdza/bzc/dr  rB   s    r9   test_slashesz RequestEncodingTest.test_slashes6  s     	OO.//(UENLLL	
 	
 	
 	OO233,RPPP	
 	
 	
 	
 	
r;   c                     t          t          d          5  |                     d           d d d            d S # 1 swxY w Y   d S )Nz.*Invalid unicodez/group/?arg=%25%e9)r   r   r   rB   s    r9   
test_errorzRequestEncodingTest.test_errorB  s     w 344 	- 	-JJ+,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-   9= =N)	rK   rL   rM   r?   r  r  r  r  r  rI   r;   r9   r  r    sq        Y Y Y2 2 2	
 	
 	
	
 	
 	


 

 

- - - - -r;   r  c                   &    e Zd Zd Zd Zd Zd ZdS )TypeCheckHandlerc                    i | _         |                     d|                                 t                     |                     d|                     d          t
                     |                     dt          | j                                                  d         t                     |                     dt          | j        
                                          d         j        t                     t          | j                                                  dgk    r)t          d| j                                        z            |                     d	|                     d          t                     |                     d
|                     d          t                     |                     d| j        t                     |                     d|                                 t                     |                     d|                     dd          t                     |                     d|                                 t                     d S )Nstatusargumentrt   
cookie_keyr   cookie_valuer   z%unexpected values for cookie keys: %rr~   rl   
xsrf_tokenxsrf_form_htmlreverse_url	typecheckrequest_summary)errors
check_type
get_statusintget_argumentr   listcookieskeysr   valuesrn   r  r~   r   rl   r  r  r  _request_summaryrB   s    r9   preparezTypeCheckHandler.prepareJ  s   $//"3"3S999 	
D$5$5e$<$<lKKKd4<+<+<+>+>&?&?&BCHHHT\-@-@-B-B(C(CA(F(LcRRR !!##$$007$,:K:K:M:MM   	+T-C-CF-K-KUSSSdoof&=&=sCCCdou===($*=*=*?*?EEEt'7'7U'K'KSQQQ)4+@+@+B+BCHHHHHr;   c                 r    |                      d|t                     |                     | j                   d S Npath_componentr  r   r[   r  rC   r  s     r9   r\   zTypeCheckHandler.gete  s5     	(.,GGG

4;r;   c                 r    |                      d|t                     |                     | j                   d S r  r  r  s     r9   r   zTypeCheckHandler.postk  s3    (.,GGG

4;r;   c                 T    t          |          }||k    rd| d| | j        |<   d S d S )Nz	expected z, got )r  r  )rC   rk   objexpected_typeactual_types        r9   r  zTypeCheckHandler.check_typeo  sB    3iiK'' NM N N N NDK ('r;   N)rK   rL   rM   r  r\   r   r  rI   r;   r9   r  r  I  sX        I I I6          O O O O Or;   r  c                       e Zd ZddZd ZdS )DecodeArgHandlerNc                     t          |          t          urt          dt          |          z            d| j        j        v r8|                    t          | j        j        d         d                             S |S )Nzunexpected type for value: %rencodingr   )r  r   r  r  r  decoder   )rC   rn   rk   s      r9   decode_argumentz DecodeArgHandler.decode_argumentv  sk    ;;e##;d5kkIJJJ///<<
4<+A*+Ma+P Q QRRRLr;   c                     d }|                       ||           ||                     d                    d           d S )Nc                     t          |           t          u r#dt          t          j        |                     gS t          |           t
          u rd| gS t          d          )Nr   r   zunknown type)r  r   r	   r   b2a_hexr   r  )r  s    r9   describez&DecodeArgHandler.get.<locals>.describe  sZ    Aww%H,<Q,?,?!@!@AAaL((!1~%N+++r;   rt   r4   query)r[   r  )rC   r  r  s      r9   r\   zDecodeArgHandler.get  sS    	, 	, 	, 	

HHSMMHHT=N=Nu=U=U4V4VWWXXXXXr;   r2   )rK   rL   rM   r  r\   rI   r;   r9   r  r  u  s<           Y Y Y Y Yr;   r  c                       e Zd Zd ZdS )LinkifyHandlerc                 4    |                      dd           d S )Nlinkify.htmlzhttp://example.com)messager   rB   s    r9   r\   zLinkifyHandler.get  s    N,@AAAAAr;   Nr]   rI   r;   r9   r  r    s(        B B B B Br;   r  c                       e Zd Zd ZdS )UIModuleResourceHandlerc                 8    |                      dddg           d S )N	page.htmlrv   r   )entriesr  rB   s    r9   r\   zUIModuleResourceHandler.get  s"    K!Q00000r;   Nr]   rI   r;   r9   r  r    s#        1 1 1 1 1r;   r  c                       e Zd Zd ZdS )OptionalPathHandlerc                 4    |                      d|i           d S )Nr4   rZ   r   s     r9   r\   zOptionalPathHandler.get  s    

FD>"""""r;   Nr]   rI   r;   r9   r  r    s#        # # # # #r;   r  c                       e Zd Zd ZdS )MultiHeaderHandlerc                     |                      dd           |                      dd           |                     dd           |                     dd           d S )	Nx-overwriter  zX-Overwriter   x-multir<  zX-Multi4)
set_header
add_headerrB   s    r9   r\   zMultiHeaderHandler.get  sX    s+++q)))	1%%%	3'''''r;   Nr]   rI   r;   r9   r  r    s#        ( ( ( ( (r;   r  c                       e Zd Zd ZdS )r    c           
      v   |                      dd           F|                     dt          t          |                      d                                         d S |                      dd           9|                     dt          |                      d                               d S t	          d          )N	permanentrR   )r  r  )r  z(didn't get permanent or status arguments)r  redirectboolr  r  rB   s    r9   r\   zRedirectHandler.get  s    [$//;MM#c$2C2CK2P2P.Q.Q)R)RMSSSSSx..:MM#c$*;*;H*E*E&F&FMGGGGGFGGGr;   Nr]   rI   r;   r9   r    r      s(        H H H H Hr;   r    c                   .    e Zd Zej        d             ZdS )EmptyFlushCallbackHandlerc              #     K   |                                  V  |                                  V  |                     d           |                                  V  |                                  V  |                     d           d S )Nok)r   r[   r   rB   s    r9   r\   zEmptyFlushCallbackHandler.get  s      
 jjlljjll

3jjlljjllCr;   N)rK   rL   rM   r   r   r\   rI   r;   r9   r  r    s/        ]	 	 ]	 	 	r;   r  c                       e Zd Zd ZdS )HeaderInjectionHandlerc                     	 |                      dd           t          d          # t          $ r3}dt          |          v r|                     d           n Y d }~d S d }~ww xY w)NX-Foozfoo
X-Bar: bazDidn't get expected exceptionUnsafe header value   ok)r  r  
ValueErrorr   r   rC   r  s     r9   r\   zHeaderInjectionHandler.get  s    	OOG%8999;<<< 	 	 	$A..E"""" #"""""	s   %' 
A$(AA$Nr]   rI   r;   r9   r
  r
    s#            r;   r
  c                       e Zd Zd ZdS )SetHeaderHandlerc                    d t          dd          D             }|                    t          d                     |                    d           |D ]V}	 |                     dd|z   dz              t          d	          # t          $ r}d
t          |          vr Y d }~Od }~ww xY w|                     dd           |                     d           d S )Nc                 ,    g | ]}t          |          S rI   )chr).0r  s     r9   
<listcomp>z(SetHeaderHandler.get.<locals>.<listcomp>  s    888AQ888r;   r          	r  rt   r  r  r   r  )	rangeappendr  remover  r  r  r   r   )rC   illegal_charscharr  s       r9   r\   zSetHeaderHandler.get  s    88q$888SYY'''T"""! 	 	D)=>>> ?@@@   (A66 76666
 	$$$Es   +B
B(B##B(Nr]   rI   r;   r9   r  r    s#            r;   r  c                       e Zd Zd ZdS )GetArgumentHandlerc                     |                      dd           dk    r| j        }n)|                      dd           dk    r| j        }n| j         }|                      |dd                     d S )Nsourcer  r   rt   r   )r  get_query_argumentget_body_argumentr   rC   r   s     r9   r  zGetArgumentHandler.prepare  sx    Xt,,77,FFx..&88+FF&FFF5),,-----r;   NrK   rL   rM   r  rI   r;   r9   r#  r#    s#        . . . . .r;   r#  c                       e Zd Zd ZdS )GetArgumentsHandlerc           	          |                      t          |                     d          |                     d          |                     d                               d S )Nrt   r   r  r   )r   rg   r  get_query_argumentsget_body_argumentsrB   s    r9   r  zGetArgumentsHandler.prepare  sg    **511..u55,,U33  	
 	
 	
 	
 	
r;   Nr)  rI   r;   r9   r+  r+    s#        
 
 
 
 
r;   r+  c                        e Zd ZdZd Z fdZd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )WSGISafeWebTestzWebTest.COOKIE_SECRETc                 V    t          dddd          }t          |d| j                  S )Nz{% module linkify(message) %}zv<html><head></head><body>
{% for e in entries %}
{% module Template("entry.html", entry=e) %}
{% end %}
</body></html>aY  {{ set_resources(embedded_css=".entry { margin-bottom: 1em; }",
                 embedded_javascript="js_embed()",
                 css_files=["/base.css", "/foo.css"],
                 javascript_files="/common.js",
                 html_head="<meta>",
                 html_body='<script src="/analytics.js"/>') }}
<div class="entry">...</div>)r  r  z
entry.htmlxhtml_escape)template_loader
autoescaperb   )r   rg   COOKIE_SECRET)rC   loaders     r9   r@   zWSGISafeWebTest.get_app_kwargs  sM     ?  
 
& "%,
 
 
 	
r;   c                     t                                                       t          j                                         d S r2   supertearDownr   _template_loadersclearrC   	__class__s    r9   r;  zWSGISafeWebTest.tearDown  4    (..00000r;   c                 ~   t          dt          d          t          dt          d          t          dt                    t          dt                    t          dt                    t          d	t
                    t          d
t                    t          dt                    t          dt          ddi          t          dt          ddd          t          dt          ddi          t          dt                    t          dt                    t          dt                    t          dt                    g}|S )Nz/typecheck/(.*)r  )rk   z/decode_arg/(.*)
decode_argz/decode_arg_kw/(?P<arg>.*)/linkify/uimodule_resourcesz/optional_path/(.+)?/multi_headerz	/redirect/web_redirect_permanentr%   /web_redirect_newpath/web_redirectF)r%   r  //web_redirect_double_slash/header_injection/get_argumentz/get_arguments/set_header)r%   r  r  r  r  r  r  r    WebRedirectHandlerr
  r#  r+  r  )rC   urlss     r9   r?   zWSGISafeWebTest.get_handlers  s#   !#3+FFF"$4<HHH,.>??
N++%'>??&(;<<!344_--)"/0 
 "/eDD 
 -"/0 
 #%;<<!344 "566/007
: r;   c                 l     | j         |i |}|                                 t          |j                  S r2   )r   rethrowr   r   )rC   r  kwargsr   s       r9   r  zWSGISafeWebTest.fetch_json1  s:    4:t.v..8=)))r;   c                    t          t          | j        dd                    }|                     ddd|z   i          }t	          |j                  }|                     |i            |                     dddd|z   id	          }d S )
Nr   r   z/typecheck/asdf?foo=barr2  zasdf=r4  r   r3  r   r.  r   )r   r'   r6  r   r   r   r}   )rC   r  r   rA  s       r9   
test_typeszWSGISafeWebTest.test_types6  s    ! 2FFCC
 
 ::%'L:P/Q  
 
 8=))r"""::%w56	  
 
r;   c                    g d}|D ]\}|                      |          }|                                 t          |j                  }|                     |ddgddgd           ]|                      d          }|                                 t          |j                  }|                     |ddgddgd           d S )N)z,/decode_arg/%C3%A9?foo=%C3%A9&encoding=utf-8z'/decode_arg/%E9?foo=%E9&encoding=latin1z*/decode_arg_kw/%E9?foo=%E9&encoding=latin1r   r  r  z/decode_arg/%C3%A9?foo=%C3%A9r   c3a9r   rP  r   r   r}   rC   rN  req_urlr   rA  s        r9   test_decode_argumentz$WSGISafeWebTest.test_decode_argumentG  s    
 
 

  	 	Gzz'**Hx}--D#X.)X9NOO   
 ::=>>8=))&(9WfDUVVWWWWWr;   c                 "   t          t          d          5  |                     d          }|                     |j        d           |                     d          }|                     |j        d           d d d            d S # 1 swxY w Y   d S )Nz.*Invalid unicode.*z/typecheck/invalid%FFi  z/typecheck/invalid?foo=%FFr   r   r   r}   r   r   s     r9   $test_decode_argument_invalid_unicodez4WSGISafeWebTest.test_decode_argument_invalid_unicode\  s    w 566 	1 	1zz"9::HX]C000zz">??HX]C000		1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   A!BBBc                     ddg}|D ]\}|                      |          }|                                 t          |j                  }|                     |ddgddgd           ]d S )Nz6/decode_arg/1%20%2B%201?foo=1%20%2B%201&encoding=utf-8z0/decode_arg/1%20+%201?foo=1+%2B+1&encoding=utf-8r   1 + 1r  rW  rX  s        r9   test_decode_argument_plusz)WSGISafeWebTest.test_decode_argument_plusd  s     E>
  	 	Gzz'**Hx}--D#W-G8LMM   		 	r;   c                    |                      | j                            dd          d           |                      | j                            dd          d           |                      | j                            dd          d           |                      | j                            dd          d	           |                      | j                            dd
          d           d S )NrB  rt   z/decode_arg/foo*   z/decode_arg/42r   z/decode_arg/%E9r  z/decode_arg/%C3%A9r_  z/decode_arg/1%20%2B%201)r}   rA   r  rB   s    r9   test_reverse_urlz WSGISafeWebTest.test_reverse_urls  s    --lEBBDUVVV--lB??AQRRR--lGDDFWXXXH  x88:N	
 	
 	
 	H  w779R	
 	
 	
 	
 	
r;   c                 f    |                      d          }|                     |j        d           d S )NrC  s3   <a href="http://example.com">http://example.com</a>r6  r   s     r9   test_uimodule_unescapedz'WSGISafeWebTest.test_uimodule_unescaped~  s=    ::j))MQ	
 	
 	
 	
 	
r;   c                 f    |                      d          }|                     |j        d           d S )NrD  s  <html><head><link href="/base.css" type="text/css" rel="stylesheet"/><link href="/foo.css" type="text/css" rel="stylesheet"/>
<style type="text/css">
.entry { margin-bottom: 1em; }
</style>
<meta>
</head><body>


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


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

<script src="/common.js" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
js_embed()
//]]>
</script>
<script src="/analytics.js"/>
</body></html>r6  r   s     r9   test_uimodule_resourcesz'WSGISafeWebTest.test_uimodule_resources  s@    ::344M	
 	
 	
 	
 	
r;   c                     |                      |                     d          ddi           |                      |                     d          dd i           d S )Nz/optional_path/foor4   rt   z/optional_path/r  rB   s    r9   test_optional_pathz"WSGISafeWebTest.test_optional_path  sV    )=>>PPP):;;fd^LLLLLr;   c                     |                      d          }|                     |j        d         d           |                     |j                            d          ddg           d S )NrE  r  2r  3r  r9  r   s     r9   test_multi_headerz!WSGISafeWebTest.test_multi_header  sb    ::o..)-8#>>>)229==SzJJJJJr;   c                 2   |                      dd          }|                     |j        d           |                      dd          }|                     |j        d           |                      dd          }|                     |j        d           d S )	Nz/redirect?permanent=1Frs  -  z/redirect?permanent=0ru  z/redirect?status=307i3  r   r}   r   r   s     r9   test_redirectzWSGISafeWebTest.test_redirect  s    ::5:NN,,,::5:NN,,,::4u:MM,,,,,r;   c                 R   |                      dd          }|                     |j        d           |                     |j        d         d           |                      dd          }|                     |j        d           |                     |j        d         d           d S )	NrF  Frs  ro  rv  rG  rH  ru  r   r}   r   r.  r   s     r9   test_web_redirectz!WSGISafeWebTest.test_web_redirect  s    ::7%:PP,,,)*57NOOO::o:FF,,,)*57NOOOOOr;   c                     |                      dd          }|                     |j        d           |                     |j        d         d           d S )NrI  Frs  ro  rv  rG  rs  r   s     r9   test_web_redirect_double_slashz.WSGISafeWebTest.test_web_redirect_double_slash  sU    ::;e:TT,,,)*57NOOOOOr;   c                 f    |                      d          }|                     |j        d           d S )NrJ  r  r6  r   s     r9   test_header_injectionz%WSGISafeWebTest.test_header_injection  s2    ::122.....r;   c                 f    |                      d          }|                     |j        d           d S )NrL  r  r6  r   s     r9   test_set_headerzWSGISafeWebTest.test_set_header  s1    ::m,,.....r;   c                    |                      d          }|                     |j        d           |                      d          }|                     |j        d           |                      d          }|                     |j        d           t          j                            t          d                    }|                      dd	|
          }|                     |j        d           |                      dd	|
          }|                     t          |j                  t          ddgdgdg                     d S )Nz/get_argument?foo=barru   z/get_argument?foo=r;   rK  r5  rY   rt   r   r      helloz/get_arguments?foo=barr  r-  )r   r}   r   urllibparse	urlencoderg   r   )rC   r   r   s      r9   test_get_argumentz!WSGISafeWebTest.test_get_argument  s3   ::566///::233,,,::o..
333 |%%dw&7&7&788::5f4:PP111::6vD:QQ&&%)%yIII	
 	
 	
 	
 	
r;   c                    t           j                            t          d                    }|                     dd|          }|                     |j        d           |                     dd|          }|                     |j        d           |                     d	d|          }|                     |j        d
           d S )NrY   r|  z"/get_argument?source=query&foo=barr   r   ru   z/get_argument?source=query&foo=r;   z/get_argument?source=queryr5  r~  r  r  rg   r   r}   r   rC   r   r   s      r9   test_get_query_argumentsz(WSGISafeWebTest.test_get_query_arguments  s     |%%dw&7&7&788::0d  
 
 	///::-f4  
 
 	,,,:::6PT:UU
33333r;   c                 B   t           j                            t          d                    }|                     dd|          }|                     |j        d           t           j                            t          d                    }|                     dd|          }|                     |j        d           t           j                            t                                }|                     dd|          }|                     |j        d	           d S )
Nr  r|  z#/get_argument?source=body&foo=hellor   r   ru   r  r;   r5  r  r  s      r9   test_get_body_argumentsz'WSGISafeWebTest.test_get_body_arguments  s   |%%duooo66::1&t  
 
 	///|%%drlll33::1&t  
 
 	,,,|%%dff--::1&t  
 
 	
33333r;   c                     |                      d          }|                     d|j                            dd                     |                     d|j                            dd                     d S )NrK  Accept-EncodingVaryr  gzipContent-Encoding)r   assertNotInr.  r\   r   s     r9   test_no_gzipzWSGISafeWebTest.test_no_gzip  sm    ::o..*H,<,@,@,L,LMMM!1!5!56H"!M!MNNNNNr;   )rK   rL   rM   r6  r@   r;  r?   r  rT  rZ  r]  r`  rc  re  rg  ri  rm  rq  rt  rv  rx  rz  r  r  r  r  __classcell__r?  s   @r9   r1  r1    s       +M
 
 
41 1 1 1 1  @* * *

 
 
"X X X*1 1 1  	
 	
 	

 
 

 
 
8M M MK K K
- - -P P PP P P
/ / // / /
 
 
(4 4 44 4 4&O O O O O O Or;   r1  c                       e Zd Zd Zd ZdS )NonWSGIWebTestsc                     dt           fgS )N/empty_flush)r  rB   s    r9   r?   zNonWSGIWebTests.get_handlers  s    !:;<<r;   c                 f    |                      d          }|                     |j        d           d S )Nr  r  r6  r   s     r9   test_empty_flushz NonWSGIWebTests.test_empty_flush  s1    ::n--.....r;   N)rK   rL   rM   r?   r  rI   r;   r9   r  r    s2        = = =/ / / / /r;   r  c                   &    e Zd Zd Zd Zd Zd ZdS )ErrorResponseTestc                      G d dt                     } G d dt                     } G d dt                     }t          d|          t          d|          t          d	|          gS )
Nc                       e Zd Zd ZdS )6ErrorResponseTest.get_handlers.<locals>.DefaultHandlerc                     |                      dd           r/t          t          |                      d                              ddz   d S Nr  rv   r   )r  r!   r  rB   s    r9   r\   z:ErrorResponseTest.get_handlers.<locals>.DefaultHandler.get  sL    $$Xt44 F#C(9(9((C(C$D$DEEEAr;   Nr]   rI   r;   r9   DefaultHandlerr    s#            r;   r  c                       e Zd Zd Zd ZdS )9ErrorResponseTest.get_handlers.<locals>.WriteErrorHandlerc                     |                      dd           r7|                     t          |                      d                               d S ddz   d S r  )r  rl  r  rB   s    r9   r\   z=ErrorResponseTest.get_handlers.<locals>.WriteErrorHandler.get  sU    $$Xt44 OOC(9(9((C(C$D$DEEEEEEEEEr;   c                     |                      dd           d|v r+|                     d|d         d         j        z             d S |                     d|z             d S )NContent-Type
text/plainexc_infozException: %sr   z
Status: %d)r  r[   rK   rC   status_coderQ  s      r9   write_errorzEErrorResponseTest.get_handlers.<locals>.WriteErrorHandler.write_error  sh    ===''JJ
1CA1F1OOPPPPPJJ|k9:::::r;   NrK   rL   rM   r\   r  rI   r;   r9   WriteErrorHandlerr    s2          ; ; ; ; ;r;   r  c                       e Zd Zd Zd ZdS )?ErrorResponseTest.get_handlers.<locals>.FailedWriteErrorHandlerc                     ddz   d S Nrv   r   rI   rB   s    r9   r\   zCErrorResponseTest.get_handlers.<locals>.FailedWriteErrorHandler.get"  s    Ar;   c                      t          d          )Nzexception in write_errorr  r  s      r9   r  zKErrorResponseTest.get_handlers.<locals>.FailedWriteErrorHandler.write_error%  s     :;;;r;   Nr  rI   r;   r9   FailedWriteErrorHandlerr  !  s2          < < < < <r;   r  /default/write_error/failed_write_error)r   r%   )rC   r  r  r  s       r9   r?   zErrorResponseTest.get_handlers  s    	 	 	 	 	^ 	 	 		; 	; 	; 	; 	; 	; 	; 	;	< 	< 	< 	< 	<n 	< 	< 	< 
N++ 122%'>??
 	
r;   c                 $   t          t          d          5  |                     d          }|                     |j        d           |                     d|j                   |                     d          }|                     |j        d           |                     d|j                   |                     d          }|                     |j        d	           |                     d
|j                   d d d            d S # 1 swxY w Y   d S )NUncaught exceptionr  rk  s   500: Internal Server Errorz/default?status=503  s   503: Service Unavailablez/default?status=435i  s   435: Unknown)r   r   r   r}   r   r>  r   r   s     r9   test_defaultzErrorResponseTest.test_default.  s8   w 455 	: 	:zz*--HX]C000MM7GGGzz"788HX]C000MM5x}EEEzz"788HX]C000MM/8=999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   C"DD	D	c                    t          t          d          5  |                     d          }|                     |j        d           |                     d|j                   |                     d          }|                     |j        d           |                     d|j                   d d d            d S # 1 swxY w Y   d S )Nr  r  rk  s   Exception: ZeroDivisionErrorz/write_error?status=503r  s   Status: 503r   r   r   r}   r   r   r   s     r9   test_write_errorz"ErrorResponseTest.test_write_error<  s    w 455 	< 	<zz.11HX]C000<hmLLLzz";<<HX]C000^X];;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   BB::B>B>c                     t          t          d          5  |                     d          }|                     |j        d           |                     d|j                   d d d            d S # 1 swxY w Y   d S )Nr  r  rk  r;   r  r   s     r9   test_failed_write_errorz)ErrorResponseTest.test_failed_write_errorF  s    w 455 	1 	1zz"788HX]C000S(-000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   AA//A36A3N)rK   rL   rM   r?   r  r  r  rI   r;   r9   r  r    sQ         
  
  
D: : :< < <1 1 1 1 1r;   r  c                      e Zd ZdZej                            ej                            e          d          Z	d Z
d Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d  Z'd! Z(d" Z)d# Z*d$ Z+d% Z, e-j.        ej/        d&k    d'          d(             Z0d)S )*StaticFileTests   63a36e950e134b5217e33c763e88840c10a07d80e6057d92b9ac97508de7fb1fa6f0e9b7531e169657165ea764e8963399cb6d921ffe6078425aaafe54c04563staticc                      G d dt                     } G d d|          } G d dt                     }d|fd|fd	|fd
t          t          d          fgS )Nc                       e Zd Zd ZdS )5StaticFileTest.get_handlers.<locals>.StaticUrlHandlerc                     t          |                     dd                    }|                     |                     ||                     d S )Ninclude_versionr  )r  )r  r  r[   
static_url)rC   r4   with_vs      r9   r\   z9StaticFileTest.get_handlers.<locals>.StaticUrlHandler.getX  sH    T../@#FFGG

4??4?HHIIIIIr;   Nr]   rI   r;   r9   StaticUrlHandlerr  W  s(        J J J J Jr;   r  c                       e Zd ZdZdS )=StaticFileTest.get_handlers.<locals>.AbsoluteStaticUrlHandlerTN)rK   rL   rM   include_hostrI   r;   r9   AbsoluteStaticUrlHandlerr  \  s        LLLr;   r  c                       e Zd Zd ZdS )=StaticFileTest.get_handlers.<locals>.OverrideStaticUrlHandlerc                    t          |                     d                    }| | _        |                     |          }|                     ||          }||k    r"|                     t          d                    S | j        j        dz   }t          |          }|	                    |d|          }|	                    |d|          }|r|dk    o|dk    }	n|dk    o|dk    }	|                     t          |	                     d S )Nr  )r  Fz://r   )
r  r  r  r  r[   r   r  protocolr=  find)
rC   r4   
do_includeregular_urloverride_urlr  protocol_lengthcheck_regularcheck_overrideresults
             r9   r\   zAStaticFileTest.get_handlers.<locals>.OverrideStaticUrlHandler.get`  s	   !$"3"3N"C"CDD
(2N!"ood33#t*MM;..::c%jj111<058"%h-- + 0 01o N N!-!2!28Q!P!P I+q0H]b5HFF+r1Hmq6HF

3v;;'''''r;   Nr]   rI   r;   r9   OverrideStaticUrlHandlerr  _  s#        ( ( ( ( (r;   r  /static_url/(.*)z/abs_static_url/(.*)z/override_static_url/(.*)z/root_static/(.*)rR   )r4   )r   r   rg   )rC   r  r  r  s       r9   r?   zStaticFileTest.get_handlersV  s    	J 	J 	J 	J 	J~ 	J 	J 	J
	  	  	  	  	 '7 	  	  	 	( 	( 	( 	( 	(~ 	( 	( 	(,  !12#%=>(*BC "3Ts^^^D	
 	
r;   c                 <    t          t          d                    S )Nr  )static_pathrg   r:   rB   s    r9   r@   zStaticFileTest.get_app_kwargs{  s     1 12222r;   c                 "   |                      d          }|                     d|j                   |                      d          }|                     d|j                   |                     |j                            d          d           d S )N/robots.txt   Disallow: //static/robots.txtr  r  )r   r>  r   r}   r.  r\   r   s     r9   test_static_filesz StaticFileTest.test_static_files~  s~    ::m,,nhm444::233nhm444)--n==|LLLLLr;   c                     |                      d          }|                     d|j                   |                     d|j                   |                     d|j                   d S )Nz/robots.txt?v=12345r  zCache-ControlExpires)r   r>  r   r.  r   s     r9   test_static_files_cacheablez*StaticFileTest.test_static_files_cacheable  s`     ::344nhm444ox'7888i!122222r;   c                    |                      d          }|                     |j                            d          d           |                      d          }|                     |j                            d          d           |                      d          }|                     |j                            d          ddh           d S )	Nz/static/sample.xml.gzr  zapplication/gzipz/static/sample.xml.bz2zapplication/octet-streamz/static/sample.xmlztext/xmlzapplication/xml)r   r}   r.  r\   r>  r   s     r9   test_static_compressed_filesz+StaticFileTest.test_static_compressed_files  s    ::566)--n==?QRRR::677  002L	
 	
 	
 ::233  00:?P2Q	
 	
 	
 	
 	
r;   c                 v    |                      d          }|                     |j        d| j        z              d S )Nz/static_url/robots.txts   /static/robots.txt?v=)r   r}   r   robots_txt_hashr   s     r9   test_static_urlzStaticFileTest.test_static_url  s;    ::677(@4CW(WXXXXXr;   c                     |                      d          }|                     |j        t          |                     d                    dz   | j        z              d S )Nz/abs_static_url/robots.txtrR   s   static/robots.txt?v=)r   r}   r   r   r   r  r   s     r9   test_absolute_static_urlz'StaticFileTest.test_absolute_static_url  s`    :::;;M$,,s##$$'>>AUU	
 	
 	
 	
 	
r;   c                 f    |                      d          }|                     |j        d           d S )Nz(/static_url/robots.txt?include_version=0s   /static/robots.txtr6  r   s     r9   test_relative_version_exclusionz.StaticFileTest.test_relative_version_exclusion  s3    ::HII(=>>>>>r;   c                     |                      d          }|                     |j        t          |                     d          dz                        d S )Nz,/abs_static_url/robots.txt?include_version=0rR   static/robots.txt)r   r}   r   r   r   r   s     r9   test_absolute_version_exclusionz.StaticFileTest.test_absolute_version_exclusion  sL    ::LMMT\\#->->AT-T(U(UVVVVVr;   c                 Z    |                      d           |                      d           d S )NFT)_trigger_include_host_checkrB   s    r9   test_include_host_overridez)StaticFileTest.test_include_host_override  s0    ((///((.....r;   c                     d}|                      |t          |          z            }|                     |j        t	          t          d                               d S )Nz//override_static_url/robots.txt?include_host=%sT)r   r  r}   r   r   r   )rC   r  r4   r   s       r9   r  z*StaticFileTest._trigger_include_host_check  sO    @::dS%6%6677SYY88888r;   c                      | j         |ddi|} | j         |ddi|}t                      }t          j        |j        |j                  D ],}|                    d          r|                    |           -|D ]}|                     |j                            |          |j                            |          |d|j                            |          d|j                            |          d           |S )zPerforms a GET and HEAD request and returns the GET response.

        Fails if any ``Content-*`` headers returned by the two requests
        differ.
        r   HEADGETzContent-z differs between GET (z) and HEAD ())	r   r  	itertoolschainr.  
startswithaddr}   r\   )rC   r  rQ  head_responseget_responsecontent_headershs          r9   get_and_headzStaticFileTest.get_and_head  s(    #
DBB6BB!tz4@@@@%%!68LMM 	' 	'A||J'' '##A&&&  	 	A%))!,,$((++11m+//2222L4H4L4LQ4O4O4O4OQ    r;   c                     |                      d          }|                      dd|j        d         i          }|                     |j        d           |                     d|j                   d S )Nr  If-Modified-SinceLast-Modifiedr4  0  Content-Length)r  r.  r}   r   r  rC   	response1	response2s      r9   !test_static_304_if_modified_sincez0StaticFileTest.test_static_304_if_modified_since  s}    %%&:;;	%% ()*;O*LM & 
 
	 	---)9+<=====r;   c                     |                      d          }|                      dd|j        d         i          }|                     |j        d           d S )Nr  If-None-MatchEtagr4  r  r  r.  r}   r   r	  s      r9   test_static_304_if_none_matchz,StaticFileTest.test_static_304_if_none_match  sb    %%&:;;	%% ?I<Mf<U*V & 
 
	 	-----r;   c                     |                      d          }|                      dd|j        d         d          }|                     |j        d           d S )Nr  z
"MISMATCH"r  )r  r  r4  r   r  r	  s      r9   !test_static_304_etag_modified_bugz0StaticFileTest.test_static_304_etag_modified_bug  sk    %%&:;;	%% !-%.%6%G  & 
 
	 	-----r;   c                 n    |                      dddi          }|                     |j        d           d S )Nr  r  z!nv@l!dr4  r   r  r}   r   r   s     r9   )test_static_304_if_modified_since_invalidz8StaticFileTest.test_static_304_if_modified_since_invalid  sG    $$ ()4 % 
 
 	,,,,,r;   c                 n    |                      dddi          }|                     |j        d           d S )Nr  r  zFri, 01 Jan 1960 00:00:00 GMTr4  r   r  r   s     r9   'test_static_if_modified_since_pre_epochz6StaticFileTest.test_static_if_modified_since_pre_epoch  sJ     $$ (*IJ % 
 
 	,,,,,r;   c                 l   t          j        t          d                    }|                     ddt	          |j        dz
            i          }|                     |j        d           |                     ddt	          |j        dz             i          }|                     |j        d           d S )Nr  r  r  rv   r4  r   r  )r3   statr:   r  r   st_mtimer}   r   )rC   r  r   s      r9   'test_static_if_modified_since_time_zonez6StaticFileTest.test_static_if_modified_since_time_zone  s    
 ww23344$$ (*:4=1;L*M*MN % 
 
 	,,,$$ (*:4=1;L*M*MN % 
 
 	,,,,,r;   c                     |                      d          }|                     t          |j                            d                    d| j        z   dz              d S )Nr  r     ")r  r}   r   r.  r\   r  r   s     r9   test_static_etagzStaticFileTest.test_static_etag  sc    $$%9::!%%f--..t7K0Kd0R	
 	
 	
 	
 	
r;   c                    |                      dddi          }|                     |j        d           |                     |j        d           |                     t	          |j                            d                    d| j        z   dz              |                     |j                            d	          d
           |                     |j                            d          d           d S )Nr  Rangez	bytes=0-9r4     s
   User-agentr  r  r  10Content-Rangezbytes 0-9/26)r  r}   r   r   r   r.  r\   r  r   s     r9   test_static_with_rangez%StaticFileTest.test_static_with_range  s    $$ 7K*@ % 
 
 	,,,666!%%f--..t7K0Kd0R	
 	
 	
 	)--.>??FFF)--o>>OOOOOr;   c                 4   |                      dddi          }|                     |j        d           t          j                            | j        d          }t          |d          5 }|                     |j        t          |
                                                     d d d            n# 1 swxY w Y   |                     |j                            d	          d
           |                     |j                            d                     d S )Nr  r!  zbytes=0-r4  r   
robots.txtutf-8r  r  26r$  r  r}   r   r3   r4   r5   
static_diropenr   r   readr.  r\   r   rC   r   robots_file_pathfs       r9    test_static_with_range_full_filez/StaticFileTest.test_static_with_range_full_file  s7   $$ 7J*? % 
 

 	,,,7<<FF"W555 	<X]DNN;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<)--.>??FFF(*..??@@@@@   +;B22B69B6c                 4   |                      dddi          }|                     |j        d           t          j                            | j        d          }t          |d          5 }|                     |j        t          |
                                                     d d d            n# 1 swxY w Y   |                     |j                            d	          d
           |                     |j                            d                     d S )Nr  r!  zbytes=0-10000000r4  r   r'  r(  r)  r  r*  r$  r+  r/  s       r9   $test_static_with_range_full_past_endz3StaticFileTest.test_static_with_range_full_past_end*  s8   $$ 74F*G % 
 
 	,,,7<<FF"W555 	<X]DNN;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<)--.>??FFF(*..??@@@@@r3  c           	      F   |                      dddi          }|                     |j        d           t          j                            | j        d          }t          |d          5 }|                     |j        t          |
                                d	d                               d d d            n# 1 swxY w Y   |                     |j                            d
          d           |                     |j                            d          d           d S )Nr  r!  zbytes=1-10000000r4  r"  r'  r(  r)  rv   r  25r$  zbytes 1-25/26)r  r}   r   r3   r4   r5   r,  r-  r   r   r.  r.  r\   r/  s       r9   'test_static_with_range_partial_past_endz6StaticFileTest.test_static_with_range_partial_past_end5  sT   $$ 74F*G % 
 
 	,,,7<<FF"W555 	@X]D!"",>,>???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@)--.>??FFF)--o>>PPPPPs   +AB::B>B>c                 &   |                      dddi          }|                     |j        d           |                     |j                            d          d           |                     |j                            d          d	           d S )
Nr  r!  z	bytes=22-r4     : /
r  r  r$  bytes 22-25/26r  r}   r   r.  r\   r   s     r9   test_static_with_range_end_edgez.StaticFileTest.test_static_with_range_end_edge@  s    $$ 7K*@ % 
 
 	111)--.>??EEE)--o>>@PQQQQQr;   c                 &   |                      dddi          }|                     |j        d           |                     |j                            d          d           |                     |j                            d          d	           d S )
Nr  r!  zbytes=-4r4  r:  r  r  r$  r;  r<  r   s     r9   test_static_with_range_neg_endz-StaticFileTest.test_static_with_range_neg_endH  s    $$ 7J*? % 
 
 	111)--.>??EEE)--o>>@PQQQQQr;   c                 4   |                      dddi          }|                     |j        d           t          j                            | j        d          }t          |d          5 }|                     |j        t          |
                                                     d d d            n# 1 swxY w Y   |                     |j                            d	          d
           |                     |j                            d                     d S )Nr  r!  zbytes=-1000000r4  r   r'  r(  r)  r  r*  r$  r+  r/  s       r9   %test_static_with_range_neg_past_startz4StaticFileTest.test_static_with_range_neg_past_startP  s8   $$ 74D*E % 
 
 	,,,7<<FF"W555 	<X]DNN;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<)--.>??FFF(*..??@@@@@r3  c                 n    |                      dddi          }|                     |j        d           d S )Nr  r!  r   r4  r   r  r   s     r9   test_static_invalid_rangez(StaticFileTest.test_static_invalid_range[  s>    $$%9GVCT$UU,,,,,r;   c                     |                      dddi          }|                     |j                            d          d           |                     |j        d           d S )Nr  r!  zbytes=-0r4  r$  
bytes */26  )r  r}   r.  r\   r   r   s     r9   +test_static_unsatisfiable_range_zero_suffixz:StaticFileTest.test_static_unsatisfiable_range_zero_suffix_  sm    $$ 7J*? % 
 
 	)--o>>MMM,,,,,r;   c                     |                      dddi          }|                     |j        d           |                     |j                            d          d           d S )Nr  r!  zbytes=26r4  rF  r$  rE  r  r}   r   r.  r\   r   s     r9   -test_static_unsatisfiable_range_invalid_startz<StaticFileTest.test_static_unsatisfiable_range_invalid_startf  sm    $$ 7J*? % 
 
 	,,,)--o>>MMMMMr;   c                     |                      dddi          }|                     |j        d           |                     |j                            d          d           d S )Nr  r!  z
bytes=10-3r4  rF  r$  rE  rI  r   s     r9   3test_static_unsatisfiable_range_end_less_than_startzBStaticFileTest.test_static_unsatisfiable_range_end_less_than_startm  sm    $$ 7L*A % 
 
 	,,,)--o>>MMMMMr;   c                 T   |                      dd          }|                     |j        d           |                     |j        d           |                     |j        d         d           |                     t          |j        d                   d	| j        z   d	z              d S )
Nr  r  r   r   r;   r  r*  r  r  r   r}   r   r   r.  r   r  r   s     r9   test_static_headzStaticFileTest.test_static_headt  s    ::26:BB,,,,,,)*:;TBBB!&)**D43G,G$,N	
 	
 	
 	
 	
r;   c                 Z   |                      ddddi          }|                     |j        d           |                     |j        d           |                     |j        d         d	           |                     t          |j        d
                   d| j        z   dz              d S )Nr  r  r!  	bytes=1-4)r   r.  r"  r;   r  r  r  r  rO  r   s     r9   test_static_head_rangez%StaticFileTest.test_static_head_range~  s    :: ';9O  
 
 	,,,,,,)*:;SAAA!&)**D43G,G$,N	
 	
 	
 	
 	
r;   c                 d   |                      ddd| j        z   dz   d          }|                     |j        d           |                     |j        d           |                     d|j                   |                     t          |j        d	                   d| j        z   dz              d S )
Nr  rR  r  )r!  r  r4  r  r;   r  r  )r  r  r}   r   r   r  r.  r   r   s     r9   test_static_range_if_none_matchz.StaticFileTest.test_static_range_if_none_match  s    $$ $!%(<!<t!C  % 
 
 	,,,,,,)8+;<<<!&)**D43G,G$,N	
 	
 	
 	
 	
r;   c                 f    |                      d          }|                     |j        d           d S )Nz/static/blarg  r  r   s     r9   test_static_404zStaticFileTest.test_static_404  s3    $$_55,,,,,r;   c                    | j                                          t                      | _         t          t          d          5  |                     d          }d d d            n# 1 swxY w Y   |                     |j        d           d S )Nz.*not in root static directoryz/static/../static_foo.txt  )http_clientr  r   r   r   r  r}   r   r   s     r9   test_path_traversal_protectionz-StaticFileTest.test_path_traversal_protection  s     	   022w @AA 	F 	F(()DEEH	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	,,,,,s   A$$A(+A(posixznon-posix OSc                 d   t           j                            t           j                            t           j                            t
                              d          }|                     dt          j        	                    |          z             }| 
                    |j        d           d S )Nr  z/root_staticr   )r3   r4   r5   r6   abspathr7   r  r~  r  r   r}   r   )rC   r4   r   s      r9   test_root_static_pathz$StaticFileTest.test_root_static_path  s     w||GOOBGOOH55668K
 
 $$^fl6H6H6N6N%NOO,,,,,r;   N)1rK   rL   rM   r  r3   r4   r5   r6   r7   r,  r?   r@   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%  r2  r5  r8  r=  r?  rA  rC  rG  rJ  rL  rP  rS  rU  rX  r\  unittestskipIfrk   r`  rI   r;   r9   r  r  M  s       	L  bgooh77BBJ#
 #
 #
J3 3 3M M M3 3 3
 
 
Y Y Y
 
 
? ? ?W W W/ / /9 9 9
  *> > >. . .	. 	. 	.- - -- - -- - -$
 
 

P 
P 
PA A A	A 	A 	A	Q 	Q 	QR R RR R R	A 	A 	A- - -- - -N N NN N N
 
 
	
 	
 	

 
 
- - -- - - X_RW'88	- 	- 98	- 	- 	-r;   r  c                   &    e Zd Zd Zd Zd Zd ZdS )StaticDefaultFilenameTestc                 Z    t          t          d          t          d                    S Nr  
index.htmldefault_filename)r  static_handler_argsr  rB   s    r9   r@   z(StaticDefaultFilenameTest.get_app_kwargs  2    )) $l C C C
 
 
 	
r;   c                     g S r2   rI   rB   s    r9   r?   z&StaticDefaultFilenameTest.get_handlers  rJ   r;   c                     |                      dd          }|                     |j        d           |                     d|j                   d S )N/static/dir/Frs  r   s   this is the index
r   r}   r   r   r   s     r9   test_static_default_filenamez6StaticDefaultFilenameTest.test_static_default_filename  sN    ::nu:EE,,,/?????r;   c                     |                      dd          }|                     |j        d           |                     |j        d                             d                     d S )N/static/dirFrs  ro  rv  rn  )r   r}   r   r   r.  endswithr   s     r9   test_static_default_redirectz6StaticDefaultFilenameTest.test_static_default_redirect  s]    ::me:DD,,,(4==nMMNNNNNr;   N)rK   rL   rM   r@   r?   rp  rt  rI   r;   r9   rd  rd    sX        
 
 
  @ @ @
O O O O Or;   rd  c                   &    e Zd Zd Zd Zd Zd ZdS )StaticDefaultFilenameRootTestc                     t          t          j                            t	          d                    t          d          d          S )Nr  rg  rh  rR   )r  rj  static_url_prefix)rg   r3   r4   r_  r:   rB   s    r9   r@   z,StaticDefaultFilenameRootTest.get_app_kwargs  sC    (9(9:: $l C C C!
 
 
 	
r;   c                     g S r2   rI   rB   s    r9   r?   z*StaticDefaultFilenameRootTest.get_handlers  rJ   r;   c                     t                      S r2   r   rB   s    r9   get_http_clientz-StaticDefaultFilenameRootTest.get_http_client  s     %&&&r;   c                    t           j                            t                    }t           j                            |          \  }}t           j        dk    r|                     ||           n|}t          t          d          5  | 	                    d| dd          }d d d            n# 1 swxY w Y   |                     |j
        d           d S )Nr]  z/.*cannot redirect path with two initial slashesz//evil.com/../rr  Frs  rZ  )r3   r4   r6   r7   
splitdriverk   r}   r   r   r   r   )rC   test_dirdrivetailr   s        r9   test_no_open_redirectz3StaticDefaultFilenameRootTest.test_no_open_redirect  s
    7??8,,g((22t7gT8,,,,Hw QRR 	 	zz6666!& "  H	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 	,,,,,s   B--B14B1N)rK   rL   rM   r@   r?   r{  r  rI   r;   r9   rv  rv    sP        
 
 
  ' ' '
- - - - -r;   rv  c                        e Zd Zd Zd Zd ZdS )StaticFileWithPathTestc                 Z    t          t          d          t          d                    S rf  r  rB   s    r9   r@   z%StaticFileWithPathTest.get_app_kwargs  rk  r;   c                 6    dt           dt          d          ifgS )Nz	/foo/(.*)r4   z
templates/)r   r:   rB   s    r9   r?   z#StaticFileWithPathTest.get_handlers  s     /&',:O:O1PQRRr;   c                 f    |                      d          }|                     |j        d           d S )Nz/foo/utf8.htmls   Héllo
r6  r   s     r9   
test_servez!StaticFileWithPathTest.test_serve  s3    ::.//(9:::::r;   N)rK   rL   rM   r@   r?   r  rI   r;   r9   r  r    sD        
 
 
S S S; ; ; ; ;r;   r  c                   &    e Zd Zd Zd Zd Zd ZdS )CustomStaticFileTestc                 f     G d dt                     } G d dt                    }|| _        d|fgS )Nc                       e Zd Zed             Zd Zed             Zd Zed
d            Zd Z	d Z
ed	             ZdS )>CustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandlerc                     |                      ||          }|                    d          }|d |         }||dz   d          }d                    |||          S )N.rv   z/static/{}.{}.{})get_versionrindexformat)clsrc   r4   version_hashextension_indexbefore_versionafter_versions          r9   make_static_urlzNCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.make_static_url  sl    "x>>"&++c"2"2!%&6&6!7 $o&9%<%< =)00" !  r;   c                     |                     d          }|                     dd|          }|d |          ||d           S )Nr  r   )r  )rC   url_pathr  version_indexs       r9   parse_url_pathzMCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.parse_url_path  sM    "*//#"6"6 (Q H H">M>2PH_=M=M4NPPPr;   c                     d|z   S )NzCustomStaticFileTest:rI   r  rc   r4   s      r9   get_absolute_pathzPCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_absolute_path  s    .55r;   c                     |S r2   rI   )rC   rootabsolute_paths      r9   validate_absolute_pathzUCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.validate_absolute_path  s    $$r;   Nc                 B    ||J |dk    rdS t          d|z            )NCustomStaticFileTest:foo.txtru   unexpected path %rr  )rC   r4   startends       r9   get_contentzJCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_content  s4    }999!6 4t ;<<<r;   c                 J    | j         dk    rdS t          d| j         z            )Nr  r<  r  )r  r  rB   s    r9   get_content_sizezOCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_content_size!  s-    %)GGG1 4t7I IJJJr;   c                     d S r2   rI   rB   s    r9   get_modified_timezPCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_modified_time&  s    tr;   c                     dS )N42rI   r  s      r9   r  zJCustomStaticFileTest.get_handlers.<locals>.MyStaticFileHandler.get_version)  s    tr;   NN)rK   rL   rM   classmethodr  r  r  r  r  r  r  r  rI   r;   r9   MyStaticFileHandlerr    s        	 	 [	Q Q Q
 6 6 [6% % % = = = [=K K K
     [  r;   r  c                       e Zd Zd ZdS );CustomStaticFileTest.get_handlers.<locals>.StaticUrlHandlerc                 V    |                      |                     |                     d S r2   )r[   r  r   s     r9   r\   z?CustomStaticFileTest.get_handlers.<locals>.StaticUrlHandler.get.  s&    

4??40011111r;   Nr]   rI   r;   r9   r  r  -  s#        2 2 2 2 2r;   r  r  )r   r   static_handler_class)rC   r  r  s      r9   r?   z!CustomStaticFileTest.get_handlers   sq    *	 *	 *	 *	 *	"3 *	 *	 *	X	2 	2 	2 	2 	2~ 	2 	2 	2 %8!#%5677r;   c                 .    t          d| j                  S )Ndummy)r  r  )rg   r  rB   s    r9   r@   z#CustomStaticFileTest.get_app_kwargs5  s    d>WXXXXr;   c                 f    |                      d          }|                     |j        d           d S )Nz/static/foo.42.txtru   r6  r   s     r9   r  zCustomStaticFileTest.test_serve8  s2    ::233/////r;   c                     t          t          dd          5  |                     d          }|                     |j        d           d d d            d S # 1 swxY w Y   d S )NzCould not open static fileF)requiredz/static_url/foo.txts   /static/foo.42.txt)r   r   r   r}   r   r   s     r9   r  z$CustomStaticFileTest.test_static_url<  s    w <uMMM 	C 	Czz"788HX],ABBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   1AAAN)rK   rL   rM   r?   r@   r  r  rI   r;   r9   r  r    sY        38 38 38jY Y Y0 0 0C C C C Cr;   r  c                   6    e Zd Z G d de          Zd Zd ZdS )HostMatchingTestc                       e Zd Zd Zd ZdS )HostMatchingTest.Handlerc                     || _         d S r2   )reply)rC   r  s     r9   rg  z#HostMatchingTest.Handler.initializeD  s    DJJJr;   c                 :    |                      | j                   d S r2   )r[   r  rB   s    r9   r\   zHostMatchingTest.Handler.getG  s    JJtz"""""r;   N)rK   rL   rM   rg  r\   rI   r;   r9   rT   r  C  s2        	 	 		# 	# 	# 	# 	#r;   rT   c                 &    dt           j        ddifgS )Nr   r  wildcard)r  rT   rB   s    r9   r?   zHostMatchingTest.get_handlersJ  s    )1GZ3HIJJr;   c                    | j                             ddt          j        ddifg           | j                             ddt          j        ddifg           | j                             ddt          j        dd	ifg           | j                             d
dt          j        ddifg           |                     d          }|                     |j        d           |                     d          }|                     |j        d           |                     d          }|                     |j        d           |                     dddi          }|                     |j        d           |                     dddi          }|                     |j        d           |                     dddi          }|                     |j        d           |                     dddi          }|                     |j        d           d S )Nwww.example.comr   r  [0]www\.example\.com/bar[1]/baz[2]zwww.e.*e.comz[3]s   wildcardrW  Hostr4     [0]   [1]   [2]zwww.exe.coms   [3])rA   add_handlersr  rT   r   r}   r   r   r   s     r9   test_host_matchingz#HostMatchingTest.test_host_matchingM  s   )9)AGUCS TU	
 	
 	
 	 F,<,DwPUFV#W"X	
 	
 	
 	)9)AGUCS TU	
 	
 	
 	f&6&>%@PQR	
 	
 	
 ::f%%444::f%%,,,::f%%,,,::fv7H.I:JJ///::fv7H.I:JJ///::fv7H.I:JJ///::fv}.E:FF/////r;   N)rK   rL   rM   r   rT   r?   r  rI   r;   r9   r  r  B  s_        # # # # #. # # #K K K0 0 0 0 0r;   r  c                        e Zd Zd Zd Zd ZdS )DefaultHostMatchingTestc                     g S r2   rI   rB   s    r9   r?   z$DefaultHostMatchingTest.get_handlersm  rJ   r;   c                 
    ddiS )Ndefault_hostr  rI   rB   s    r9   r@   z&DefaultHostMatchingTest.get_app_kwargsp  s     122r;   c                    | j                             ddt          j        ddifg           | j                             ddt          j        ddifg           | j                             dd	t          j        dd
ifg           |                     d          }|                     |j        d           |                     d          }|                     |j        d           |                     d	          }|                     |j        d           |                     dddi          }|                     |j        d           d| j         _        |                     d	          }|                     |j        d           d S )Nr  r   r  r  r  r  r  zwww.test.comr  r  r  r  rW  z	X-Real-Ipr  r4  r  )	rA   r  r  rT   r   r}   r   r   r  r   s     r9   test_default_host_matchingz2DefaultHostMatchingTest.test_default_host_matchings  s   )9)AGUCS TU	
 	
 	
 	 F,<,DwPUFV#W"X	
 	
 	
 	f&6&>%@PQR	
 	
 	
 ::f%%///::f%%///::f%%,,,::f{K.H:II,,, .::f%%/////r;   N)rK   rL   rM   r?   r@   r  rI   r;   r9   r  r  l  sA          3 3 30 0 0 0 0r;   r  c                       e Zd Zd Zd ZdS )NamedURLSpecGroupsTestc                 8     G d dt                     }d|fd|fgS )Nc                       e Zd Zd ZdS )8NamedURLSpecGroupsTest.get_handlers.<locals>.EchoHandlerc                 0    |                      |           d S r2   rZ   r   s     r9   r\   z<NamedURLSpecGroupsTest.get_handlers.<locals>.EchoHandler.get  s    

4     r;   Nr]   rI   r;   r9   r  r    s#        ! ! ! ! !r;   r  z/str/(?P<path>.*)z/unicode/(?P<path>.*)r   )rC   r  s     r9   r?   z#NamedURLSpecGroupsTest.get_handlers  sH    	! 	! 	! 	! 	!. 	! 	! 	!
 !+.$k2
 	
r;   c                     |                      d          }|                     |j        d           |                      d          }|                     |j        d           d S )Nz/str/foos   fooz/unicode/barru   r6  r   s     r9   test_named_urlspec_groupsz0NamedURLSpecGroupsTest.test_named_urlspec_groups  sZ    ::j))///::n--/////r;   N)rK   rL   rM   r?   r  rI   r;   r9   r  r    s2        
 
 
0 0 0 0 0r;   r  c                   0    e Zd Z G d de          Zd ZdS )ClearHeaderTestc                       e Zd Zd ZdS )ClearHeaderTest.Handlerc                     |                      dd           |                      dd           |                     d           |                     d           d S )Nh1rt   h2r  nonexistent)r  clear_headerrB   s    r9   r\   zClearHeaderTest.Handler.get  sX    OOD%(((OOD%(((d###m,,,,,r;   Nr]   rI   r;   r9   rT   r    s#        	- 	- 	- 	- 	-r;   rT   c                     |                      d          }|                     d|j                   |                     |j        d         d           d S )NrR   r  r  r  r   r  r.  r}   r   s     r9   test_clear_headerz!ClearHeaderTest.test_clear_header  sN    ::c??x/000)$/77777r;   N)rK   rL   rM   r   rT   r  rI   r;   r9   r  r    sM        - - - - -. - - -8 8 8 8 8r;   r  c                   0    e Zd Z G d de          Zd ZdS )Header204Testc                       e Zd Zd ZdS )Header204Test.Handlerc                 X    |                      d           |                                  d S )N   )
set_statusr   rB   s    r9   r\   zHeader204Test.Handler.get  s%    OOC   KKMMMMMr;   Nr]   rI   r;   r9   rT   r    s#        	 	 	 	 	r;   rT   c                     |                      d          }|                     |j        d           |                     d|j                   |                     d|j                   d S )NrR   r  r  Transfer-Encoding)r   r}   r   r  r.  r   s     r9   test_204_headerszHeader204Test.test_204_headers  sc    ::c??,,,)8+;<<<,h.>?????r;   N)rK   rL   rM   r   rT   r  rI   r;   r9   r  r    sR            .   
@ @ @ @ @r;   r  c                   0    e Zd Z G d de          Zd ZdS )Header304Testc                       e Zd Zd ZdS )Header304Test.Handlerc                 \    |                      dd           |                     d           d S )NContent-Languageen_USrY   )r  r[   rB   s    r9   r\   zHeader304Test.Handler.get  s/    OO.888JJwr;   Nr]   rI   r;   r9   rT   r    s#        	  	  	  	  	 r;   rT   c                    |                      d          }|                     |j        d         d           |                     |j        d         d           |                      dd|j        d         i          }|                     |j        d	           |                     d|j                   |                     d|j                   |                     d
|j                   d S )NrR   r  5r  r  r  r  r4  r  r  )r   r}   r.  r   r  r	  s      r9   test_304_headerszHeader304Test.test_304_headers  s    JJsOO	*+;<cBBB*+=>HHHJJ/9+<V+DE  
 
	 	---)9+<===+Y->???,i.?@@@@@r;   N)rK   rL   rM   r   rT   r   rI   r;   r9   r  r    sR                 .      
A A A A Ar;   r  c                   6    e Zd Z G d de          Zd Zd ZdS )StatusReasonTestc                       e Zd Zd ZdS )StatusReasonTest.Handlerc                     | j         j                            dg           }|                     t	          |                     d                    |rt          |d                   nd            d S )Nreasonr   r   r  )r  r  r\   r  r  r  r   )rC   r  s     r9   r\   zStatusReasonTest.Handler.get  ss    \+//"==FOOD%%f--..06@z&),,,D      r;   Nr]   rI   r;   r9   rT   r    s#        	 	 	 	 	r;   rT   c                     t                      S r2   r   rB   s    r9   r{  z StatusReasonTest.get_http_client      $&&&r;   c                 ^   |                      d          }|                     |j        d           |                     |j        d           |                      d          }|                     |j        d           |                     |j        d           |                      d          }|                     |j        d           |                     |j        d           |                      d	          }|                     |j        d           |                     |j        d
           d S )Nz
/?code=304r  zNot Modifiedz/?code=304&reason=FooFooz/?code=682&reason=Bar  Barz
/?code=682Unknown)r   r}   r   r  r   s     r9   test_statuszStatusReasonTest.test_status  s   ::l++,,,.999::566,,,%000::566,,,%000::l++,,,)44444r;   N)rK   rL   rM   r   rT   r{  r  rI   r;   r9   r  r    s\            .   ' ' '5 5 5 5 5r;   r  c                   0    e Zd Z G d de          Zd ZdS )DateHeaderTestc                       e Zd Zd ZdS )DateHeaderTest.Handlerc                 0    |                      d           d S rX   rZ   rB   s    r9   r\   zDateHeaderTest.Handler.get      JJwr;   Nr]   rI   r;   r9   rT   r    s#        	  	  	  	  	 r;   rT   c                 4   |                      d          }t          j                            |j        d                   }|                     |t          j                            t          j        j	                  z
  t          j
        d                     d S )NrR   Dater   )seconds)r   rT  rU  rV  r.  rX  rO  rP  rQ  rR  rS  )rC   r   header_dates      r9   test_date_headerzDateHeaderTest.test_date_header  s~    ::c??k778H8PQQ(+//0A0EFFFq)))	
 	
 	
 	
 	
r;   N)rK   rL   rM   r   rT   r  rI   r;   r9   r  r    sM                 .      
 
 
 
 
r;   r  c                   B    e Zd Z G d de          Zd Zd Zd Zd ZdS )RaiseWithReasonTestc                       e Zd Zd ZdS )RaiseWithReasonTest.Handlerc                 $    t          dd          )Nr  r  r  r!   rB   s    r9   r\   zRaiseWithReasonTest.Handler.get  s    C....r;   Nr]   rI   r;   r9   rT   r    s#        	/ 	/ 	/ 	/ 	/r;   rT   c                     t                      S r2   r   rB   s    r9   r{  z#RaiseWithReasonTest.get_http_client   r	  r;   c                     |                      d          }|                     |j        d           |                     |j        d           |                     d|j                   d S )NrR   r  r  s   682: Foo)r   r}   r   r  r>  r   r   s     r9   test_raise_with_reasonz*RaiseWithReasonTest.test_raise_with_reason  s]    ::c??,,,%000k8=11111r;   c                 j    |                      t          t          dd                    d           d S )Nr  r  r  zHTTP 682: Foor}   r   r!   rB   s    r9   test_httperror_strz&RaiseWithReasonTest.test_httperror_str
  s3    Ys5999::OLLLLLr;   c                 f    |                      t          t          d                    d           d S )Nr  zHTTP 682: Unknownr%  rB   s    r9    test_httperror_str_from_httputilz4RaiseWithReasonTest.test_httperror_str_from_httputil  s-    Ys^^,,.ABBBBBr;   N)	rK   rL   rM   r   rT   r{  r#  r&  r(  rI   r;   r9   r  r    s        / / / / /. / / /' ' '2 2 2M M MC C C C Cr;   r  c                   &    e Zd Zd Zd Zd Zd ZdS )ErrorHandlerXSRFTestc                 4    dt           t          d          fgS )N/error  r  )r#   rg   rB   s    r9   r?   z!ErrorHandlerXSRFTest.get_handlers  s     <#)>)>)>?@@r;   c                 "    t          d          S NT)xsrf_cookiesr   rB   s    r9   r@   z#ErrorHandlerXSRFTest.get_app_kwargs      &&&&r;   c                 l    |                      ddd          }|                     |j        d           d S )Nr,  r   r  r   r-  rp  r   s     r9   test_error_xsrfz$ErrorHandlerXSRFTest.test_error_xsrf  s7    ::hvB:??,,,,,r;   c                 l    |                      ddd          }|                     |j        d           d S )Nz/404r   r  r   rW  rp  r   s     r9   test_404_xsrfz"ErrorHandlerXSRFTest.test_404_xsrf  s7    ::fV":==,,,,,r;   N)rK   rL   rM   r?   r@   r4  r6  rI   r;   r9   r*  r*    sS        A A A' ' '- - -- - - - -r;   r*  c                   T    e Zd Z G d de          Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )GzipTestCasec                       e Zd Zd ZdS )GzipTestCase.Handlerc                     |                      d          D ]}|                     d|           |                     ddt          j        z  z              d S )Nvaryr  zhello world!)r  r  r[   r/   
MIN_LENGTH)rC   vs     r9   r\   zGzipTestCase.Handler.get&  s\    ''// + +****JJ}.A.L(LMNNNNNr;   Nr]   rI   r;   r9   rT   r:  %  s(        	O 	O 	O 	O 	Or;   rT   c                     t          dt          j                            t          j                            t
                    d                    S )NTr  )r  r  )rg   r3   r4   r5   r6   r7   rB   s    r9   r@   zGzipTestCase.get_app_kwargs,  s<    27<<0I0I8#T#T
 
 
 	
r;   c                     |                      |j                            d|j                            d                    d           d S )Nr  zX-Consumed-Content-Encodingr  )r}   r.  r\   r   s     r9   assert_compressedzGzipTestCase.assert_compressed1  sX     	  "H$4$8$89V$W$W  		
 	
 	
 	
 	
r;   c                     |                      d          }|                     |           |                     |j        d         d           d S )NrR   r  r  r   rB  r}   r.  r   s     r9   	test_gzipzGzipTestCase.test_gzip;  sJ    ::c??x((()&13DEEEEEr;   c                     |                      d          }|                     |           |                     |j        d         d           d S )Nr  r  r  rD  r   s     r9   test_gzip_staticzGzipTestCase.test_gzip_static@  sN     ::m,,x((()&13DEEEEEr;   c                     |                      dd          }|                     d|j                   |                     |j        d         d           d S )NrR   F)use_gzipr  r  r  r  r   s     r9   test_gzip_not_requestedz$GzipTestCase.test_gzip_not_requestedG  sV    ::cE:22+X-=>>>)&13DEEEEEr;   c                     |                      d          }|                     |           |                     d |j        d                             d          D             ddg           d S )Nz/?vary=Accept-Languagec                 6    g | ]}|                                 S rI   stripr  r  s     r9   r  z:GzipTestCase.test_vary_already_present.<locals>.<listcomp>P       DDD1QWWYYDDDr;   r  ,Accept-Languager  r   rB  r}   r.  splitr   s     r9   test_vary_already_presentz&GzipTestCase.test_vary_already_presentL  sz    ::677x(((DD 0 8 > >s C CDDD 12	
 	
 	
 	
 	
r;   c                     |                      d          }|                     |           |                     d |j        d                             d          D             g d           d S )Nz"/?vary=Accept-Language&vary=Cookiec                 6    g | ]}|                                 S rI   rM  rO  s     r9   r  zCGzipTestCase.test_vary_already_present_multiple.<locals>.<listcomp>Y  rP  r;   r  rQ  )rR  r2  r  rS  r   s     r9   "test_vary_already_present_multiplez/GzipTestCase.test_vary_already_present_multipleT  sz    ::BCCx(((DD 0 8 > >s C CDDD<<<	
 	
 	
 	
 	
r;   N)rK   rL   rM   r   rT   r@   rB  rE  rG  rJ  rU  rX  rI   r;   r9   r8  r8  $  s        O O O O O. O O O
 
 


 
 
F F F
F F FF F F

 
 

 
 
 
 
r;   r8  c                   <    e Zd Z G d de          Zd Zd Zd ZdS )PathArgsInPrepareTestc                       e Zd Zd Zd ZdS )PathArgsInPrepareTest.Handlerc                 b    |                      t          | j        | j                             d S )Nr  rQ  )r[   rg   r  path_kwargsrB   s    r9   r  z%PathArgsInPrepareTest.Handler.prepare`  s,    JJt8HIIIJJJJJr;   c                 >    |dk    sJ |                                   d S )Nrt   r   r   s     r9   r\   z!PathArgsInPrepareTest.Handler.getc  s     5====KKMMMMMr;   NrK   rL   rM   r  r\   rI   r;   r9   rT   r\  _  s5        	K 	K 	K	 	 	 	 	r;   rT   c                 &    d| j         fd| j         fgS )Nz	/pos/(.*)z/kw/(?P<path>.*)rS   rB   s    r9   r?   z"PathArgsInPrepareTest.get_handlersg  s    dl+.@$,-OPPr;   c                     |                      d          }|                                 t          |j                  }|                     |dgi d           d S )Nz/pos/foort   r^  rW  rC   r   rA  s      r9   test_poszPathArgsInPrepareTest.test_posj  sZ    ::j))8=))2>>?????r;   c                     |                      d          }|                                 t          |j                  }|                     |g ddid           d S )Nz/kw/foor4   rt   r^  rW  re  s      r9   test_kwzPathArgsInPrepareTest.test_kwp  s\    ::i((8=))vuoFFGGGGGr;   N)rK   rL   rM   r   rT   r?   rf  rh  rI   r;   r9   rZ  rZ  ^  sv            .   Q Q Q@ @ @H H H H Hr;   rZ  c                   0    e Zd Z G d de          Zd ZdS )ClearAllCookiesTestc                       e Zd Zd ZdS )ClearAllCookiesTest.Handlerc                 X    |                                   |                     d           d S Nok)clear_all_cookiesr[   rB   s    r9   r\   zClearAllCookiesTest.Handler.gety  s,    ""$$$JJtr;   Nr]   rI   r;   r9   rT   rl  x  s#        	 	 	 	 	r;   rT   c                 >   |                      dddi          }t          |j                            d                    }|                     |d                             d                     |                     |d                             d	                     d S )
NrR   r2  zfoo=bar; baz=xyzzyr4  r,  r   zbaz="";rv   zfoo="";)r   r-  r.  r/  r   r  )rC   r   set_cookiess      r9   test_clear_all_cookiesz*ClearAllCookiesTest.test_clear_all_cookies}  s    ::cH6J+K:LLX-66|DDEEA11)<<===A11)<<=====r;   N)rK   rL   rM   r   rT   rs  rI   r;   r9   rj  rj  w  sM            .   
> > > > >r;   rj  c                       e Zd ZdS )PermissionErrorNrK   rL   rM   rI   r;   r9   ru  ru    s        Dr;   ru  c                   <    e Zd Z G d de          Zd Zd Zd ZdS )ExceptionHandlerTestc                        e Zd Zd Zd Zd ZdS )ExceptionHandlerTest.Handlerc                     |                      d          }|dk    rt          dd          |dk    rddz   d S |dk    rt          d	          d S )
Nexchttp  zno longer herezerorv   r   
permissionznot allowed)r  r!   ru  )rC   r|  s     r9   r\   z ExceptionHandlerTest.Handler.get  sf    ##E**Cf}}%5666A$$%m444 %$r;   c                     d|v rM|d         \  }}}t          |t                    r,|                     d           |                     d           d S t	          j        | |fi | d S )Nr  rZ  ru  )
isinstanceru  r  r[   r   r  )rC   r  rQ  typrn   tbs         r9   r  z(ExceptionHandlerTest.Handler.write_error  sz    V##!'
!3UBe_55 OOC(((JJ0111F&t[CCFCCCCCr;   c                     t          |t                    r"t          j        d|j        d                    d S t          j        | |||           d S )Nz&custom logging for PermissionError: %sr   )r  ru  r   warningr  r   log_exceptionrC   r  rn   r  s       r9   r  z*ExceptionHandlerTest.Handler.log_exception  sR    %11 C H%*UV-XXXXX,T3rBBBBBr;   N)rK   rL   rM   r\   r  r  rI   r;   r9   rT   rz    sI        	5 	5 	5	D 	D 	D	C 	C 	C 	C 	Cr;   rT   c                     t          t          d          5  |                     d          }|                     |j        d           d d d            d S # 1 swxY w Y   d S )Nz.*no longer herez
/?exc=httpr~  r\  r   s     r9   test_http_errorz$ExceptionHandlerTest.test_http_error  s     w 233 	1 	1zz,//HX]C000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1   1AAAc                     t          t          d          5  |                     d          }|                     |j        d           d d d            d S # 1 swxY w Y   d S )Nr  z
/?exc=zerork  r   r   r   r}   r   r   s     r9   test_unknown_errorz'ExceptionHandlerTest.test_unknown_error  s    w 455 	1 	1zz,//HX]C000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1r  c                     t          t          d          5  |                     d          }|                     |j        d           d d d            d S # 1 swxY w Y   d S )Nz/custom logging for PermissionError: not allowedz/?exc=permissionrZ  r  r   s     r9   test_known_errorz%ExceptionHandlerTest.test_known_error  s     w QRR 	1 	1zz"455HX]C000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1r  N)rK   rL   rM   r   rT   r  r  r  rI   r;   r9   rx  rx    ss        C C C C C. C C C21 1 11 1 11 1 1 1 1r;   rx  c                   0    e Zd Z G d de          Zd ZdS )BuggyLoggingTestc                       e Zd Zd Zd ZdS )BuggyLoggingTest.Handlerc                     ddz   d S r  rI   rB   s    r9   r\   zBuggyLoggingTest.Handler.get      EEEEr;   c                     ddz   d S r  rI   r  s       r9   r  z&BuggyLoggingTest.Handler.log_exception  r  r;   N)rK   rL   rM   r\   r  rI   r;   r9   rT   r    s2        	 	 		 	 	 	 	r;   rT   c                     t          t          d          5  |                     d           d d d            d S # 1 swxY w Y   d S )Nz.*rR   )r   r   r   rB   s    r9   test_buggy_log_exceptionz)BuggyLoggingTest.test_buggy_log_exception  s     w%% 	 	JJsOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r  N)rK   rL   rM   r   rT   r  rI   r;   r9   r  r    sM            .       r;   r  c                   J     e Zd ZdZ G d de          Zd Z fdZd Z xZ	S )UIMethodUIModuleTestz`Test that UI methods and modules are created correctly and
    associated with the handler.
    c                       e Zd Zd Zd ZdS )UIMethodUIModuleTest.Handlerc                 0    |                      d           d S r   r  rB   s    r9   r\   z UIMethodUIModuleTest.Handler.get  s    KK
#####r;   c                 ,    |                      d          S )Nrn   )r  rB   s    r9   rn   z"UIMethodUIModuleTest.Handler.value  s    $$W---r;   N)rK   rL   rM   r\   rn   rI   r;   r9   rT   r    s2        	$ 	$ 	$	. 	. 	. 	. 	.r;   rT   c                 |    d } G d dt                     }t          ddi          }t          |d|id|i          S )Nc                 8    d| d|                                   dS )NzIn my_ui_method(z) with handler value r  )rn   )r   xs     r9   my_ui_methodz9UIMethodUIModuleTest.get_app_kwargs.<locals>.my_ui_method  s#    PaPPgmmooPPPPr;   c                       e Zd Zd ZdS )5UIMethodUIModuleTest.get_app_kwargs.<locals>.MyModulec                     d                     |t          j        t          j        | j                                                            S )Nz&In MyModule({}) with handler value {}.)r  typingcastr  rT   r   rn   )rC   r  s     r9   r   z<UIMethodUIModuleTest.get_app_kwargs.<locals>.MyModule.render  s>    ?FFK 4 <dlKKQQSS  r;   NrK   rL   rM   r   rI   r;   r9   MyModuler    s#            r;   r  r   z1{{ my_ui_method(42) }} {% module MyModule(123) %}r  )r4  
ui_methods
ui_modulesr*   r   rg   )rC   r  r  r7  s       r9   r@   z#UIMethodUIModuleTest.get_app_kwargs  s    	Q 	Q 	Q	 	 	 	 	x 	 	 	 LM
 
 "&5"H-
 
 
 	
r;   c                     t                                                       t          j                                         d S r2   r9  r>  s    r9   r;  zUIMethodUIModuleTest.tearDown  s4    (..00000r;   c                 f    |                      d          }|                     |j        d           d S )Nz/?value=asdfsV   In my_ui_method(42) with handler value asdf. In MyModule(123) with handler value asdf.r6  r   s     r9   test_ui_methodz#UIMethodUIModuleTest.test_ui_method  s?    ::n--M9	
 	
 	
 	
 	
r;   )
rK   rL   rM   rN   r   rT   r@   r;  r  r  r  s   @r9   r  r    s         . . . . .. . . .
 
 
(1 1 1 1 1

 
 
 
 
 
 
r;   r  c                   0    e Zd Z G d de          Zd ZdS )GetArgumentErrorTestc                       e Zd Zd ZdS )GetArgumentErrorTest.Handlerc                     	 |                      d           |                     i            d S # t          $ r-}|                     |j        |j        d           Y d }~d S d }~ww xY w)Nrt   arg_namelog_message)r  r[   r"   r  r  r  s     r9   r\   z GetArgumentErrorTest.Handler.get  s    S!!%(((

2' S S S


1=QQRRRRRRRRRSs   *. 
A%"A  A%Nr]   rI   r;   r9   rT   r    s(        	S 	S 	S 	S 	Sr;   rT   c                     |                      d          }|                     t          |j                  ddd           d S )NrR   rt   zMissing argument foor  )r   r}   r   r   r   s     r9   test_catch_errorz%GetArgumentErrorTest.test_catch_error  sL    ::c??&&/EFF	
 	
 	
 	
 	
r;   N)rK   rL   rM   r   rT   r  rI   r;   r9   r  r    sU        S S S S S. S S S
 
 
 
 
r;   r  c                   0    e Zd Z G d de          Zd ZdS )SetLazyPropertiesTestc                   &    e Zd Zd Zd Zd Zd ZdS )SetLazyPropertiesTest.Handlerc                 F    d| _         t          j        d          | _        d S )NBenr  )current_userr   r\   rB   s    r9   r  z%SetLazyPropertiesTest.Handler.prepare  s     %D *W--DKKKr;   c                     t                      r2   rF   rB   s    r9   get_user_localez-SetLazyPropertiesTest.Handler.get_user_locale      %'''r;   c                     t                      r2   rF   rB   s    r9   get_current_userz.SetLazyPropertiesTest.Handler.get_current_user  r  r;   c                 \    |                      d| j         d| j        j         d           d S )NzHello z (r  )r[   r  r   r   rB   s    r9   r\   z!SetLazyPropertiesTest.Handler.get  s6    JJH 1HHT[5EHHHIIIIIr;   N)rK   rL   rM   r  r  r  r\   rI   r;   r9   rT   r    sU        	. 	. 	.	( 	( 	(	( 	( 	(	J 	J 	J 	J 	Jr;   rT   c                 f    |                      d          }|                     |j        d           d S )NrR   s   Hello Ben (en_US)r6  r   s     r9   test_set_propertiesz)SetLazyPropertiesTest.test_set_properties  s2     ::c??(<=====r;   N)rK   rL   rM   r   rT   r  rI   r;   r9   r  r    sU        J J J J J. J J J> > > > >r;   r  c                   n     e Zd Zd Z fdZd Z ej        d          d             Zd Z	d Z
d Z xZS )	GetCurrentUserTestc                      G d dt                     } G d dt                     }t          ddddd	          }t          |||d
          S )Nc                       e Zd Zd ZdS )<GetCurrentUserTest.get_app_kwargs.<locals>.WithoutUserModulec                     dS )Nr  rI   rB   s    r9   r   zCGetCurrentUserTest.get_app_kwargs.<locals>.WithoutUserModule.render  s    rr;   Nr  rI   r;   r9   WithoutUserModuler    s#            r;   r  c                       e Zd Zd ZdS )9GetCurrentUserTest.get_app_kwargs.<locals>.WithUserModulec                 *    t          | j                  S r2   )r   r  rB   s    r9   r   z@GetCurrentUserTest.get_app_kwargs.<locals>.WithUserModule.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  )r4  r  r  )rC   r  r  r7  s       r9   r@   z!GetCurrentUserTest.get_app_kwargs  s    	 	 	 	 	 	 	 		. 	. 	. 	. 	.X 	. 	. 	. %'"6,N)H	 
 
 ""0%6 
 
 
 	
r;   c                     t                                                       t          j                                         d S r2   r9  r>  s    r9   r;  zGetCurrentUserTest.tearDown6  r@  r;   c                      G d dt                     } G d d|          } G d d|          } G d d|          } G d	 d
|          } G d d|          }d|fd|fd|fd|fgS )Nc                       e Zd Zd Zd ZdS );GetCurrentUserTest.get_handlers.<locals>.CurrentUserHandlerc                     d| _         d S )NFhas_loaded_current_userrB   s    r9   r  zCGetCurrentUserTest.get_handlers.<locals>.CurrentUserHandler.prepare<  s    /4,,,r;   c                     d| _         dS )NTr  r  rB   s    r9   r  zLGetCurrentUserTest.get_handlers.<locals>.CurrentUserHandler.get_current_user?  s    /3,rr;   N)rK   rL   rM   r  r  rI   r;   r9   CurrentUserHandlerr  ;  s2        5 5 5    r;   r  c                       e Zd Zd ZdS );GetCurrentUserTest.get_handlers.<locals>.WithoutUserHandlerc                 ~    |                      d           |                     t          | j                             d S )Nr  render_stringr   r   r  rB   s    r9   r\   z?GetCurrentUserTest.get_handlers.<locals>.WithoutUserHandler.getD  s:    ""#6777C <==>>>>>r;   Nr]   rI   r;   r9   WithoutUserHandlerr  C  #        ? ? ? ? ?r;   r  c                       e Zd Zd ZdS )8GetCurrentUserTest.get_handlers.<locals>.WithUserHandlerc                 ~    |                      d           |                     t          | j                             d S )Nr  r  rB   s    r9   r\   z<GetCurrentUserTest.get_handlers.<locals>.WithUserHandler.getI  s:    ""#3444C <==>>>>>r;   Nr]   rI   r;   r9   WithUserHandlerr  H  r  r;   r  c                       e Zd Zd ZdS )AGetCurrentUserTest.get_handlers.<locals>.CurrentUserModuleHandlerc                     | j         S r2   )uirB   s    r9   get_template_namespacezXGetCurrentUserTest.get_handlers.<locals>.CurrentUserModuleHandler.get_template_namespaceN  s     wr;   N)rK   rL   rM   r  rI   r;   r9   CurrentUserModuleHandlerr  M  s#            r;   r  c                       e Zd Zd ZdS )AGetCurrentUserTest.get_handlers.<locals>.WithoutUserModuleHandlerc                 ~    |                      d           |                     t          | j                             d S )Nr  r  rB   s    r9   r\   zEGetCurrentUserTest.get_handlers.<locals>.WithoutUserModuleHandler.getU  s:    ""#=>>>C <==>>>>>r;   Nr]   rI   r;   r9   WithoutUserModuleHandlerr  T  r  r;   r  c                       e Zd Zd ZdS )>GetCurrentUserTest.get_handlers.<locals>.WithUserModuleHandlerc                 ~    |                      d           |                     t          | j                             d S )Nr  r  rB   s    r9   r\   zBGetCurrentUserTest.get_handlers.<locals>.WithUserModuleHandler.getZ  s:    ""#:;;;C <==>>>>>r;   Nr]   rI   r;   r9   WithUserModuleHandlerr  Y  r  r;   r  /without_user
/with_user/without_user_module/with_user_moduler   )rC   r  r  r  r  r  r  s          r9   r?   zGetCurrentUserTest.get_handlers:  s2   	 	 	 	 	 	 	 		? 	? 	? 	? 	?!3 	? 	? 	?
	? 	? 	? 	? 	?0 	? 	? 	?
	 	 	 	 	'9 	 	 		? 	? 	? 	? 	?'? 	? 	? 	?
	? 	? 	? 	? 	?$< 	? 	? 	? 01?+#%=> "78	
 	
r;   z	needs fixc                 f    |                      d          }|                     |j        d           d S )Nr     Falser6  r   s     r9   test_get_current_user_is_lazyz0GetCurrentUserTest.test_get_current_user_is_lazye  s3     ::o..11111r;   c                 f    |                      d          }|                     |j        d           d S )Nr     Truer6  r   s     r9   test_get_current_user_worksz.GetCurrentUserTest.test_get_current_user_worksk  s1    ::l++00000r;   c                 f    |                      d          }|                     |j        d           d S )Nr  r   r6  r   s     r9   ,test_get_current_user_from_ui_module_is_lazyz?GetCurrentUserTest.test_get_current_user_from_ui_module_is_lazyo  s2    ::45511111r;   c                 f    |                      d          }|                     |j        d           d S )Nr  r  r6  r   s     r9   *test_get_current_user_from_ui_module_worksz=GetCurrentUserTest.test_get_current_user_from_ui_module_workss  s2    ::12200000r;   )rK   rL   rM   r@   r;  r?   ra  skipr  r  r  r  r  r  s   @r9   r  r    s        
 
 
21 1 1 1 1)
 )
 )
V X];2 2  2
1 1 12 2 21 1 1 1 1 1 1r;   r  c                   0    e Zd Z G d de          Zd ZdS )UnimplementedHTTPMethodsTestc                       e Zd ZdS )$UnimplementedHTTPMethodsTest.HandlerNrv  rI   r;   r9   rT   r  y  s        r;   rT   c                     dD ]4}|                      d|          }|                     |j        d           5dD ]5}|                      d|d          }|                     |j        d           6d S )N)r  r  DELETEOPTIONSrR   rN    r   PUTr;   r   rp  )rC   r   r   s      r9   #test_unimplemented_standard_methodsz@UnimplementedHTTPMethodsTest.test_unimplemented_standard_methods|  s    : 	1 	1Fzz#fz55HX]C0000% 	1 	1Fzz#f3z??HX]C0000	1 	1r;   N)rK   rL   rM   r   rT   r  rI   r;   r9   r  r  x  sM            .   1 1 1 1 1r;   r  c                   6    e Zd Z G d de          Zd Zd ZdS )#UnimplementedNonStandardMethodsTestc                       e Zd Zd ZdS )+UnimplementedNonStandardMethodsTest.Handlerc                 0    |                      d           d S NotherrZ   rB   s    r9   r  z1UnimplementedNonStandardMethodsTest.Handler.other  s     JJwr;   N)rK   rL   rM   r  rI   r;   r9   rT   r    s#        	  	  	  	  	 r;   rT   c                 l    |                      ddd          }|                     |j        d           d S )NrR   PATCHr;   r   r  rp  r   s     r9   test_unimplemented_patchz<UnimplementedNonStandardMethodsTest.test_unimplemented_patch  s9     ::c':<<,,,,,r;   c                 l    |                      ddd          }|                     |j        d           d S )NrR   OTHERTr   allow_nonstandard_methodsr  rp  r   s     r9   test_unimplemented_otherz<UnimplementedNonStandardMethodsTest.test_unimplemented_other  s7    ::c'T:RR,,,,,r;   N)rK   rL   rM   r   rT   r  r#  rI   r;   r9   r  r    s\                 .      - - -- - - - -r;   r  c                   0    e Zd Z G d de          Zd ZdS )AllHTTPMethodsTestc                   (    e Zd Zd ZexZxZxZxZZdS )AllHTTPMethodsTest.Handlerc                 `    | j         j        J |                     | j         j                   d S r2   )r  r   r[   rB   s    r9   r   z!AllHTTPMethodsTest.Handler.method  s0    <&222JJt|*+++++r;   N)	rK   rL   rM   r   r\   deleteoptionsr   putrI   r;   r9   rT   r'    s8        	, 	, 	, /544f4w4r;   rT   c                 |   |                      dd          }|                     |j        d           dD ]A}|                      d|          }|                     |j        t          |                     BdD ]B}|                      d|d          }|                     |j        t          |                     Cd S )NrR   r  rN  r;   )r  r  r  r  r   )r   r}   r   r   )rC   r   r   s      r9   test_standard_methodsz(AllHTTPMethodsTest.test_standard_methods  s    ::c&:11,,,2 	: 	:Fzz#fz55HX]DLL9999% 	: 	:Fzz#f3z??HX]DLL9999	: 	:r;   N)rK   rL   rM   r   rT   r-  rI   r;   r9   r%  r%    sM        5 5 5 5 5. 5 5 5: : : : :r;   r%  c                   6    e Zd Z G d de          Zd Zd ZdS )PatchMethodTestc                   .    e Zd Zej        dz   Zd Zd ZdS )PatchMethodTest.Handler)r   c                 0    |                      d           d S )NpatchrZ   rB   s    r9   r3  zPatchMethodTest.Handler.patch  r  r;   c                 0    |                      d           d S r  rZ   rB   s    r9   r  zPatchMethodTest.Handler.other  r  r;   N)rK   rL   rM   r   SUPPORTED_METHODSr3  r  rI   r;   r9   rT   r1    sF        *< @
 
	  	  	 	  	  	  	  	 r;   rT   c                 l    |                      ddd          }|                     |j        d           d S )NrR   r  r;   r   s   patchr6  r   s     r9   
test_patchzPatchMethodTest.test_patch  s7    ::c':<<11111r;   c                 l    |                      ddd          }|                     |j        d           d S )NrR   r   Tr!  s   otherr6  r   s     r9   
test_otherzPatchMethodTest.test_other  s7    ::c'T:RR11111r;   N)rK   rL   rM   r   rT   r7  r9  rI   r;   r9   r/  r/    s\        	  	  	  	  	 . 	  	  	 2 2 22 2 2 2 2r;   r/  c                   0    e Zd Z G d de          Zd ZdS )FinishInPrepareTestc                       e Zd Zd Zd ZdS )FinishInPrepareTest.Handlerc                 0    |                      d           d S )Nr   ra  rB   s    r9   r  z#FinishInPrepareTest.Handler.prepare  s    KKr;   c                      t          d          )Nzshould not reach this methodr  rB   s    r9   r\   zFinishInPrepareTest.Handler.get  s     :;;;r;   Nrb  rI   r;   r9   rT   r=    s2        	  	  	 	< 	< 	< 	< 	<r;   rT   c                 f    |                      d          }|                     |j        d           d S )NrR   s   doner6  r   s     r9   test_finish_in_preparez*FinishInPrepareTest.test_finish_in_prepare  s/    ::c??00000r;   N)rK   rL   rM   r   rT   rA  rI   r;   r9   r;  r;    sM        < < < < <. < < <1 1 1 1 1r;   r;  c                       e Zd Zd Zd ZdS )Default404Testc                     dt           fgS Nr   r   rB   s    r9   r?   zDefault404Test.get_handlers  s    ())r;   c                     |                      d          }|                     |j        d           |                     |j        d           d S )NrR   rW  sE   <html><title>404: Not Found</title><body>404: Not Found</body></html>ro  r   s     r9   test_404zDefault404Test.test_404  sU    ::c??,,,M2	
 	
 	
 	
 	
r;   N)rK   rL   rM   r?   rG  rI   r;   r9   rC  rC    s2        * * *
 
 
 
 
r;   rC  c                        e Zd Zd Zd Zd ZdS )Custom404Testc                     dt           fgS rE  r   rB   s    r9   r?   zCustom404Test.get_handlers      ())r;   c                 H     G d dt                     }t          |          S )Nc                       e Zd Zd ZdS )6Custom404Test.get_app_kwargs.<locals>.Custom404Handlerc                 Z    |                      d           |                     d           d S )NrW  zcustom 404 response)r  r[   rB   s    r9   r\   z:Custom404Test.get_app_kwargs.<locals>.Custom404Handler.get  s-    $$$

011111r;   Nr]   rI   r;   r9   Custom404HandlerrN    s#        2 2 2 2 2r;   rP  )default_handler_class)r   rg   )rC   rP  s     r9   r@   zCustom404Test.get_app_kwargs  s@    	2 	2 	2 	2 	2~ 	2 	2 	2
 *:;;;;r;   c                     |                      d          }|                     |j        d           |                     |j        d           d S )NrR   rW  s   custom 404 responsero  r   s     r9   rG  zCustom404Test.test_404  sH    ::c??,,,(>?????r;   N)rK   rL   rM   r?   r@   rG  rI   r;   r9   rI  rI    sF        * * *< < <@ @ @ @ @r;   rI  c                        e Zd Zd Zd Zd ZdS )DefaultHandlerArgumentsTestc                     dt           fgS rE  r   rB   s    r9   r?   z(DefaultHandlerArgumentsTest.get_handlers  rK  r;   c                 J    t          t          t          d                    S )NrZ  r.  )rQ  default_handler_args)rg   r#   rB   s    r9   r@   z*DefaultHandlerArgumentsTest.get_app_kwargs  s*    ".!%#!6!6!6
 
 
 	
r;   c                 f    |                      d          }|                     |j        d           d S )NrR   rZ  rp  r   s     r9   test_403z$DefaultHandlerArgumentsTest.test_403  s/    ::c??,,,,,r;   N)rK   rL   rM   r?   r@   rY  rI   r;   r9   rT  rT    sA        * * *
 
 
- - - - -r;   rT  c                       e Zd Zd Zd ZdS )HandlerByNameTestc                 6    dt           fdt          dd          gS )N/hello1)/hello2"tornado.test.web_test.HelloHandler/hello3r_  )rV   r%   rB   s    r9   r?   zHandlerByNameTest.get_handlers 	  s'     %=	?@@
 	
r;   c                 &   |                      d          }|                     |j        d           |                      d          }|                     |j        d           |                      d          }|                     |j        d           d S )Nr]  r}  r^  r`  r6  rC   resps     r9   test_handler_by_namez&HandlerByNameTest.test_handler_by_name	  s    zz)$$H---zz)$$H---zz)$$H-----r;   N)rK   rL   rM   r?   rd  rI   r;   r9   r[  r[    s2        
 
 
. . . . .r;   r[  c                   r    e Zd Zd Zd Zed             Zed             Zed             Zed             Z	dS )StreamingRequestBodyTestc                    t            G d dt                                }t            G d dt                                }t            G d dt                                }d|t          |           fd	|fd
|t          |           fgS )Nc                   &    e Zd Zd Zd Zd Zd ZdS )CStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandlerc                     || _         d S r2   r   r   s     r9   rg  zNStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.initialize	       			r;   c                 D    | j         j                            d            d S r2   )r   prepared
set_resultrB   s    r9   r  zKStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.prepare	  s!    	"--d33333r;   c                 D    | j         j                            |           d S r2   )r   rA  rn  rC   rA  s     r9   data_receivedzQStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.data_received	  s     	))$/////r;   c                 n    | j         j                            d            |                     i            d S r2   )r   finishedrn  r[   rB   s    r9   r\   zGStreamingRequestBodyTest.get_handlers.<locals>.StreamingBodyHandler.get	  s.    	"--d333

2r;   N)rK   rL   rM   rg  r  rq  r\   rI   r;   r9   StreamingBodyHandlerri  	  sP        ! ! !4 4 40 0 0    r;   rt  c                       e Zd Zd ZdS )AStreamingRequestBodyTest.get_handlers.<locals>.EarlyReturnHandlerc                      t          d          )N  r   rB   s    r9   r  zIStreamingRequestBodyTest.get_handlers.<locals>.EarlyReturnHandler.prepare$	  s      nn$r;   Nr)  rI   r;   r9   EarlyReturnHandlerrv  "	  s#        % % % % %r;   ry  c                   $     e Zd Zd Z fdZ xZS )DStreamingRequestBodyTest.get_handlers.<locals>.CloseDetectionHandlerc                     || _         d S r2   r   r   s     r9   rg  zOStreamingRequestBodyTest.get_handlers.<locals>.CloseDetectionHandler.initialize+	  rk  r;   c                     t                                                       | j        j                            d            d S r2   )r:  r  r   close_futurern  r>  s    r9   r  zXStreamingRequestBodyTest.get_handlers.<locals>.CloseDetectionHandler.on_connection_close.	  s8    ++---	&11$77777r;   )rK   rL   rM   rg  r  r  r  s   @r9   CloseDetectionHandlerr{  )	  sG        ! ! !8 8 8 8 8 8 8 8 8r;   r  z/stream_bodyr   z/early_returnz/close_detection)r,   r   rg   )rC   rt  ry  r  s       r9   r?   z%StreamingRequestBodyTest.get_handlers	  s    		 	 	 	 	> 	 	 
		 
	% 	% 	% 	% 	% 	% 	% 
		% 
	8 	8 	8 	8 	8N 	8 	8 
		8 14T???C01!6$H
 	
r;   c                 X   t          j         t           j        t           j        d          }|                    d|                                 f           t          |          }|                    d|z   dz              |r|                    d           |                    d           |S )Nr   r  s   GET s    HTTP/1.1
Host: 127.0.0.1
s   Connection: close
s   Transfer-Encoding: chunked

)r  r  r  r  r  r   r[   )rC   r%   connection_closer  r  s        r9   r  z StreamingRequestBodyTest.connect8	  s    M&.&*<a@@			; 2 2 4 45666!Ws]%HHIII 	3LL1222:;;;r;   c              #     K   t                      | _        t                      | _        t                      | _        |                     dd          }| j        V  |                    d           | j        V }|                     |d           t                      | _        |                    d           | j        V }|                     |d           |                    d           | j        V  |                                V }|                     |	                    d	                     |
                                 d S )
Ns   /stream_bodyTr  	   4
asdf
s   asdfs	   4
qwer
s   qwers   0

s   {})r   rm  rA  rs  r  r[   r}   read_until_closer   rs  r  rC   r  rA  s      r9   test_streaming_bodyz,StreamingRequestBodyTest.test_streaming_bodyC	  s#     HH	oEEm%&&&Yw'''HH	%&&&Yw'''\"""m,,....e,,---r;   c              #      K   |                      dd          }|                                V }|                     |                    d                     d S )N   /early_returnFr     HTTP/1.1 401)r  r  r   r  r  s      r9   test_early_returnz*StreamingRequestBodyTest.test_early_returnZ	  sW      .GG,,....8899999r;   c              #      K   |                      dd          }|                    d           |                                V }|                     |                    d                     d S )Nr  Fr  r  r  )r  r[   r  r   r  r  s      r9   test_early_return_with_dataz4StreamingRequestBodyTest.test_early_return_with_data`	  sj      .GG%&&&,,....8899999r;   c              #      K   t                      | _        |                     dd          }|                                 | j        V  d S )Ns   /close_detectionFr  )r   r~  r  r  )rC   r  s     r9   test_close_during_uploadz1StreamingRequestBodyTest.test_close_during_uploadg	  sJ      "HH1EJJr;   N)
rK   rL   rM   r?   r  r   r  r  r  r  rI   r;   r9   rf  rf  	  s        $
 $
 $
L	 	 	   X, : : X:
 : : X:     X     r;   rf  c                   t    e Zd Zd Zej        d             Zej        d             Z	ej        d             Z
dS )BaseFlowControlHandlerc                 0    || _         d | _        g | _        d S r2   )r   r   methodsr   s     r9   rg  z!BaseFlowControlHandler.initializeu	  s    	r;   c              #      K   | j         %| j                            d| d| j                     || _         | j                            |           	 d V  d | _         d S # d | _         w xY w)Nzentered method z
 while in )r   r   failr  r  r(  s     r9   	in_methodz BaseFlowControlHandler.in_methodz	  s~      ;"INNLVLLt{LLMMMF###	EEEDKKK$DKs   A 	A'c              #   Z   K   | j                             d           t          j        V  d S )Nr  )r  r  r   momentrB   s    r9   r  zBaseFlowControlHandler.prepare	  s2       	I&&&jr;   c              #      K   |                      d          5  t          j        V  d d d            n# 1 swxY w Y   |                     t	          | j                             d S )Nr   r  )r  r   r  r[   rg   r  rB   s    r9   r   zBaseFlowControlHandler.post	  s      ^^F## 	 	*	 	 	 	 	 	 	 	 	 	 	 	 	 	 	

4---.....s   377N)rK   rL   rM   rg  
contextlibcontextmanagerr  r   r   r  r   rI   r;   r9   r  r  s	  s|          
    	]  ] 	]/ / ]/ / /r;   r  c                   \    e Zd Zd Zd Zdej        fdZdej        fdZdej        fdZ	dS )#BaseStreamingRequestFlowControlTestc                 $    t          dd          S )Nr  T)
chunk_sizedecompress_requestr   rB   s    r9   get_httpserver_optionsz:BaseStreamingRequestFlowControlTest.get_httpserver_options	  s     rd;;;;r;   c                     t                      S r2   r   rB   s    r9   r{  z3BaseStreamingRequestFlowControlTest.get_http_client	  r	  r;   rC   c                     |                      ddd          }|                                 |                     t          |j                  t          g d                     d S )NrR   abcdefghijklmnopqrstuvwxyzr   )r   r   r  rq  rq  rq  r   r  )r   rP  r}   r   r   rg   r   s     r9   test_flow_control_fixed_bodyz@BaseStreamingRequestFlowControlTest.test_flow_control_fixed_body	  s|    ::c(DV:TT&&    	
 	
 	
 	
 	
r;   c                    g dt           j        fd            }|                     d|d          }|                                 |                     t          |j                  t          g d                     d S )N)s   abcds   efghs   ijklc              3   0   K   D ]} | |          V  d S r2   rI   )r[   ichunkss     r9   body_producerzYBaseStreamingRequestFlowControlTest.test_flow_control_chunked_body.<locals>.body_producer	  s3        eAhh r;   rR   r   )r  r   r  r  )r   r   r   rP  r}   r   r   rg   )rC   r  r   r  s      @r9   test_flow_control_chunked_bodyzBBaseStreamingRequestFlowControlTest.test_flow_control_chunked_body	  s    ,,,		 	 	 	 
	 ::cv:NN&&    	
 	
 	
 	
 	
r;   c                    t                      }t          j        d|          }|                    d           |                                 |                                }|                     d|dddi          }|                                 |                     t          |j
                  t          g d	
                     d S )Nw)modefileobjs   abcdefghijklmnopqrstuvwxyzrR   r   r  r  )r   r   r.  r  r  )r0   r  GzipFiler[   r  getvaluer   rP  r}   r   r   rg   )rC   bytesio	gzip_filecompressed_bodyr   s        r9   !test_flow_control_compressed_bodyzEBaseStreamingRequestFlowControlTest.test_flow_control_compressed_body	  s    ))MsG<<<	5666!**,,:: '0	  
 
 	&&    	
 	
 	
 	
 	
r;   N)
rK   rL   rM   r  r{  r  Anyr  r  r  rI   r;   r9   r  r  	  s        < < <
' ' '

6: 
 
 
 
 
VZ 
 
 
 
.

 
 
 
 
 
 
r;   r  c                       e Zd Zd ZdS )(DecoratedStreamingRequestFlowControlTestc                 P     G d dt                     }d|t          |           fgS )Nc                   .    e Zd Zej        d             ZdS )ZDecoratedStreamingRequestFlowControlTest.get_handlers.<locals>.DecoratedFlowControlHandlerc              3      K   |                      d          5  t          j        V  d d d            d S # 1 swxY w Y   d S )Nrq  )r  r   r  rp  s     r9   rq  zhDecoratedStreamingRequestFlowControlTest.get_handlers.<locals>.DecoratedFlowControlHandler.data_received	  s      ^^O44 % %*$$$% % % % % % % % % % % % % % % % % %s   488N)rK   rL   rM   r   r   rq  rI   r;   r9   DecoratedFlowControlHandlerr  	  s/        ]% % ]% % %r;   r  rR   r   r  rg   )rC   r  s     r9   r?   z5DecoratedStreamingRequestFlowControlTest.get_handlers	  sH    	% 	% 	% 	% 	%*@ 	% 	% 	% 14T???CDDr;   NrK   rL   rM   r?   rI   r;   r9   r  r  	  s(        E E E E Er;   r  c                       e Zd Zd ZdS )%NativeStreamingRequestFlowControlTestc                 P     G d dt                     }d|t          |           fgS )Nc                       e Zd Zd ZdS )TNativeStreamingRequestFlowControlTest.get_handlers.<locals>.NativeFlowControlHandlerc                    K   |                      d          5  dd l}|                    d           d {V  d d d            d S # 1 swxY w Y   d S )Nrq  r   )r  asyncior  )rC   rA  r  s      r9   rq  zbNativeStreamingRequestFlowControlTest.get_handlers.<locals>.NativeFlowControlHandler.data_received	  s      ^^O44 + +"NNN!--*********+ + + + + + + + + + + + + + + + + +s    AA	A	N)rK   rL   rM   rq  rI   r;   r9   NativeFlowControlHandlerr  	  s#        + + + + +r;   r  rR   r   r  )rC   r  s     r9   r?   z2NativeStreamingRequestFlowControlTest.get_handlers	  sH    	+ 	+ 	+ 	+ 	+'= 	+ 	+ 	+ .$@AAr;   Nr  rI   r;   r9   r  r  	  s(        B B B B Br;   r  c                        e Zd Zd Zd Zd ZdS )IncorrectContentLengthTestc                 z    | d | _          G fddt                    } G fddt                    }d|fd|fgS )Nc                       e Zd Z fdZdS )8IncorrectContentLengthTest.get_handlers.<locals>.TooHighc                     |                      dd           	 |                     d           d S # t          $ r}|_         d }~ww xY w)Nr  r  ro  r  r   r  server_errorrC   r  r   s     r9   r\   z<IncorrectContentLengthTest.get_handlers.<locals>.TooHigh.get
  s_     0$777KK%%%%%    ()D%   0 
AAANr]   r   s   r9   TooHighr  
  .              r;   r  c                       e Zd Z fdZdS )7IncorrectContentLengthTest.get_handlers.<locals>.TooLowc                     |                      dd           	 |                     d           d S # t          $ r}|_         d }~ww xY w)Nr  rk  rY   r  r  s     r9   r\   z;IncorrectContentLengthTest.get_handlers.<locals>.TooLow.get
  s_     0#666KK(((((    ()D%r  Nr]   r   s   r9   TooLowr  

  r  r;   r  /high/low)r  r   )rC   r  r  r   s      @r9   r?   z'IncorrectContentLengthTest.get_handlers	  s     	 	 	 	 	 	 	n 	 	 		 	 	 	 	 	 	^ 	 	 	 '"VV$455r;   c                    t          t          d          5  t          t          d          5  |                     t                    5  |                     dd           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     t          | j                  d           d S )N*(Uncaught exception|Exception in callback)S(Cannot send error response after headers written|Failed to flush partial response)r  Traise_errorz0Tried to write 40 bytes less than Content-Length	r   r   r   assertRaisesr   r   r}   r   r  rB   s    r9   test_content_length_too_highz7IncorrectContentLengthTest.test_content_length_too_high
  s    w LMM 	: 	:5  : :
 &&77 : :JJwDJ999: : : : : : : : : : : : : : :: : : : : : : : : : : : : : :	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	!""$V	
 	
 	
 	
 	
X   BBA+B+A//B2A/3B6BB	B	B	
BB Bc                    t          t          d          5  t          t          d          5  |                     t                    5  |                     dd           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     t          | j                  d           d S )Nr  r  r  Tr  z,Tried to write more data than Content-Lengthr  rB   s    r9   test_content_length_too_lowz6IncorrectContentLengthTest.test_content_length_too_low%
  s    w LMM 	9 	95  9 9
 &&77 9 9JJv4J8889 9 9 9 9 9 9 9 9 9 9 9 9 9 99 9 9 9 9 9 9 9 9 9 9 9 9 9 9	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	!""$R	
 	
 	
 	
 	
r  N)rK   rL   rM   r?   r  r  rI   r;   r9   r  r  	  sA        6 6 62
 
 
 
 
 
 
 
r;   r  c                   0    e Zd Z G d de          Zd ZdS )ClientCloseTestc                       e Zd Zd ZdS )ClientCloseTest.Handlerc                     | j         j                            d          r:| j         j        j                                         |                     d           d S |                     d           d S )NzHTTP/1rY   requires HTTP/1.x)r  rx   r  
connectionr  r  r[   rB   s    r9   r\   zClientCloseTest.Handler.get8
  sl    |#..x88 
0 '.44666

7##### 

./////r;   Nr]   rI   r;   r9   rT   r  7
  s#        	0 	0 	0 	0 	0r;   rT   c                 (   |                      t          t          j        f          5  |                     dd          }|j        dk    r|                     d           |                     |j        d           d d d            d S # 1 swxY w Y   d S )NrR   Tr  s   requires HTTP/1.xr  iW  )	r  r   ra  SkipTestr   r   skipTestr}   r   r   s     r9   test_client_closez!ClientCloseTest.test_client_closeE
  s    1BCDD 	1 	1zz#4z88H} 4441222X]C000		1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   ABBBN)rK   rL   rM   r   rT   r  rI   r;   r9   r  r  6
  sM        0 0 0 0 0. 0 0 01 1 1 1 1r;   r  c                   f    e Zd ZdZddddZd Zd Zd Zd	 Zd
 Z	d Z
d Zd Zd Zd Zd Zd ZdS )SignedValueTestzIt's a secret to everybody	asdfbasdf123123122342342)r   rv   r   c                 0    |                                  dz
  S )Ni 0* )presentrB   s    r9   pastzSignedValueTest.pastQ
  s    ||~~
**r;   c                     dS )Ni m|MrI   rB   s    r9   r  zSignedValueTest.presentT
  s    zr;   c                 >   t          t          j        ddd| j                  }|                     |d           t          t          j        ddd| j                  }|                     |d           t          t          j        dd| j                  }|                     ||           t          t          j        d|d| j        	          }|                     |d
           t          t          j        d|d| j        	          }|                     |d
           d S )Nr  rn   rv   )rx   clocks<   dmFsdWU=|1300000000|31c934969f53e48164c50768b40cbd7e2daaaa4fr   se   2|1:0|10:1300000000|3:key|8:dmFsdWU=|3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e152r  )rz   r     value)r'   r  SECRETr  r}   r(   )rC   	signed_v1	signed_v2signed_default
decoded_v1
decoded_v2s         r9   test_known_valuesz!SignedValueTest.test_known_valuesW
  sI   '"E7AT\
 
 
	 	V	
 	
 	
 ("E7AT\
 
 
	 	P	
 	
 	
 -"E7$,
 
 
 	333("E9!4<
 
 

 	X...("E9!4<
 
 

 	X.....r;   c                 j   t          t          j        dd| j                  }t          t          j        dd| j                  }t	          t          j        d|| j                  }|                     |           t	          t          j        d|| j                  }|                     |           d S )Nkey1rn   r  key2)r'   r  r  r  r(   r   )rC   signed1signed2decoded1decoded2s        r9   test_name_swapzSignedValueTest.test_name_swapw
  s    %"FG4<
 
 
 &"FG4<
 
 
 '"FG4<
 
 
 	(###&"FG4<
 
 
 	(#####r;   c                 (   t          t          j        dd| j                  }t	          t          j        d|| j                  }|                     |d           t	          t          j        d|| j                  }|                     |           d S )Nr  rn   r  r  )r'   r  r  r  r(   r}   r  r   )rC   signeddecoded_pastdecoded_presents       r9   test_expiredzSignedValueTest.test_expired
  s    $"FG49
 
 
 +"FF$)
 
 
 	x000-"FF$,
 
 
 	/*****r;   c                 
    d fd}                       |d                                           |d                                           |d                                           |d                     d S )N@3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e152c                 V    dt          t          j        d| z   j                  k    S Nr  r  r  r(   r  r  r  )prefixrC   r   s    r9   validatez8SignedValueTest.test_payload_tampering.<locals>.validate
  4    2&v|4<       r;   %2|1:0|10:1300000000|3:key|8:dmFsdWU=|z%2|1:1|10:1300000000|3:key|8:dmFsdWU=|z$2|1:0|10:130000000|3:key|8:dmFsdWU=|z&2|1:0|10:1300000000|3:keey|8:dmFsdWU=|r   assertFalse)rC   r  r   s   ` @r9   test_payload_tamperingz&SignedValueTest.test_payload_tampering
  s    P	 	 	 	 	 	
 	!HIIJJJ"IJJKKK"HIIJJJ"JKKLLLLLr;   c                     d fd}                       |d                                           |d                                           |d                                           |d                                           |d                                           |d                     d S )	Nr  c                 V    dt          t          j        d| z   j                  k    S r  r  )r   r  rC   s    r9   r  z:SignedValueTest.test_signature_tampering.<locals>.validate
  r  r;   r   00000000000000000000000000000000@4d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e152@3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e153?3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e15A3d4e60b996ff9c5d5788e333a0cba6f238a22c6c0f94788870e1a9ecd482e1538r  )rC   r  r  s   ` @r9   test_signature_tamperingz(SignedValueTest.test_signature_tampering
  s   8	 	 	 	 	 	
 	HWXX	
 	
 	
 	(++,,,HWXX	
 	
 	
 	HWXX	
 	
 	
 	HVWW	
 	
 	
 	HS 	
 	
 	
 	
 	
r;   c                     d}t          t          j        d|| j                  }t	          t          j        d|| j                  }|                     ||           d S )Nr   r  r  )r'   r  r  r  r(   r}   rC   rn   r  decodeds       r9   test_non_asciizSignedValueTest.test_non_ascii
  sk    $"E5
 
 
 &"E6
 
 
 	(((((r;   c                     d}t          t          j        d|| j        d          }t	          t          j        d|| j                  }|                     ||           d S Nr   r  r   r  re   r  r'   r  SECRET_DICTr  r(   r}   r(  s       r9   *test_key_versioning_read_write_default_keyz:SignedValueTest.test_key_versioning_read_write_default_key
  n    $'T\WX
 
 
 &'dl
 
 
 	(((((r;   c                     d}t          t          j        d|| j        d          }t	          t          j        d|| j                  }|                     ||           d S )Nr   r  rv   r-  r  r.  r(  s       r9   .test_key_versioning_read_write_non_default_keyz>SignedValueTest.test_key_versioning_read_write_non_default_key
  r1  r;   c                    d}t          t          j        d|| j        d          }t          j                                        }|                    d           t          |d|| j                  }|                     |           d S r,  )r'   r  r/  r  r   r   r(   r   )rC   rn   r  newkeysr)  s        r9   test_key_versioning_invalid_keyz/SignedValueTest.test_key_versioning_invalid_key
  s    $'T\WX
 
 
 "-2244A%gufDLQQQ'"""""r;   c                     d}t          t          j        d|| j        d          }t	          |          }|                     d|           d S )Nr   r  rv   r-  )r'   r  r/  r  r)   r}   )rC   rn   r  re   s       r9   test_key_version_retrievalz*SignedValueTest.test_key_version_retrieval
  sW    $'T\WX
 
 
 077K(((((r;   N)rK   rL   rM   r  r/  r  r  r  r  r  r  r&  r*  r0  r3  r6  r8  rI   r;   r9   r  r  M
  s        )F!jY??K+ + +  / / /@$ $ $"+ + +M M M"
 
 
@) ) )) ) )) ) )# # #) ) ) ) )r;   r  c                        e Zd Z G d de          Zd Z fdZddZddZd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )XSRFTestc                       e Zd Zd Zd ZdS )XSRFTest.Handlerc                     t          |                     dd                    }|| j        d<   |                     | j                   d S )Nrx   rk  xsrf_cookie_version)r  r  rc   r[   r  )rC   rx   s     r9   r\   zXSRFTest.Handler.get
  sH    $++Is;;<<G 4;DM/0JJt'''''r;   c                 0    |                      d           d S rn  rZ   rB   s    r9   r   zXSRFTest.Handler.post       JJtr;   NrK   rL   rM   r\   r   rI   r;   r9   rT   r<  
  s2        	( 	( 	(	 	 	 	 	r;   rT   c                 "    t          d          S r0  r   rB   s    r9   r@   zXSRFTest.get_app_kwargs  r2  r;   c                 z    t                                                       |                                 | _        d S r2   r:  setUp	get_tokenr  r>  s    r9   rE  zXSRFTest.setUp  )    ..**r;   Nc                     ||                      |          }nd }|                     |dnd|z  |          }|                                 t          |j                  S )NrR   z/?version=%dr4  cookie_headersr   rP  r	   r   )rC   	old_tokenrx   r.  r   s        r9   rF  zXSRFTest.get_token
  sp     )))44GGG::?CC')AG  
 
 	(-(((r;   c                 "    || j         }dd|z   iS )Nr2  z_xsrf=r  rC   tokens     r9   rJ  zXSRFTest.cookie_headers  s    =OE(U*++r;   c                     t          t          d          5  |                     ddd          }d d d            n# 1 swxY w Y   |                     |j        d           d S N.*'_xsrf' argument missingrR   r   r;   r   rZ  r\  r   s     r9   test_xsrf_fail_no_tokenz XSRFTest.test_xsrf_fail_no_token      w <== 	@ 	@zz#f3z??H	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@,,,,,   ;??c           
      &   t          t          d          5  |                     ddt          j                            t          | j                                      }d d d            n# 1 swxY w Y   |                     |j	        d           d S N!.*XSRF cookie does not match POSTrR   r   _xsrfr   rZ  
r   r   r   r~  r  r  rg   r  r}   r   r   s     r9   test_xsrf_fail_body_no_cookiez&XSRFTest.test_xsrf_fail_body_no_cookie      w CDD 	 	zz\++Dt,G,G,GHH "  H	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	,,,,,   A	A++A/2A/c                 B   t          t          d          5  |                     dd|                                 t          j                            t          d                              }d d d            n# 1 swxY w Y   |                     |j	        d           d S )Nz%.*'_xsrf' argument has invalid formatrR   r   3|rY  rS  rZ  )
r   r   r   rJ  r~  r  r  rg   r}   r   r   s     r9   &test_xsrf_fail_argument_invalid_formatz/XSRFTest.test_xsrf_fail_argument_invalid_format(  s    w GHH 	 	zz++--\++Dt,<,<,<==	 "  H	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	,,,,,s   AA99A= A=c                 P   t          t          d          5  |                     dd|                     d          t          j                            t          | j                                      }d d d            n# 1 swxY w Y   | 	                    |j
        d           d S )	NrX  rR   r   r`  rO  rY  rS  rZ  )r   r   r   rJ  r~  r  r  rg   r  r}   r   r   s     r9   $test_xsrf_fail_cookie_invalid_formatz-XSRFTest.test_xsrf_fail_cookie_invalid_format2  s    w CDD 	 	zz++$+77\++Dt,G,G,GHH	 "  H	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	,,,,,s   AB  BBc                     t          t          d          5  |                     ddd|                                           }d d d            n# 1 swxY w Y   |                     |j        d           d S )NrR  rR   r   r;   r   r   r.  rZ  )r   r   r   rJ  r}   r   r   s     r9   test_xsrf_fail_cookie_no_bodyz&XSRFTest.test_xsrf_fail_cookie_no_body<  s    w <== 	 	zzFd6I6I6K6K "  H	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	,,,,,s   ,AAAc           	          |                      ddt          j                            t	          d                    |                     d                    }|                     |j        d           d S )NrR   r   deadbeefrY  rc  rf  r   r   r~  r  r  rg   rJ  r}   r   r   s     r9   test_xsrf_success_short_tokenz&XSRFTest.test_xsrf_success_short_tokenC  sr    ::'':(>(>(>??''j'99	  
 
 	,,,,,r;   c           	          |                      ddt          j                            t	          d                    |                     d                    }|                     |j        d           d S )NrR   r   xoxorY  rc  rf  r   rj  r   s     r9   test_xsrf_success_non_hex_tokenz(XSRFTest.test_xsrf_success_non_hex_tokenL  sr    ::''6(:(:(:;;''f'55	  
 
 	,,,,,r;   c           	          |                      ddt          j                            t	          | j                            |                                           }|                     |j        d           d S NrR   r   rY  rf  r   	r   r~  r  r  rg   r  rJ  r}   r   r   s     r9   test_xsrf_success_post_bodyz$XSRFTest.test_xsrf_success_post_bodyU  so    ::''4?(C(C(CDD''))	  
 
 	,,,,,r;   c                     |                      dt          j                            t	          | j                            z   dd|                                           }|                     |j        d           d S )Nz/?rY  r   r;   rf  r   rq  r   s     r9   test_xsrf_success_query_stringz'XSRFTest.test_xsrf_success_query_string^  st    ::6<))$T_*E*E*EFFF''))	  
 
 	,,,,,r;   c                     |                      dddt          d| j        ifi |                                           }|                     |j        d           d S )NrR   r   r;   zX-Xsrftokenrf  r   )r   rg   r  rJ  r}   r   r   s     r9   test_xsrf_success_headerz!XSRFTest.test_xsrf_success_headerg  ss    ::0 %%'' 	  
 
 	,,,,,r;   c                     d}t                      }t          |          D ])}|                    |                                            *|                     t          |          |           d S )Nr  )r  r  r  rF  r}   r=  )rC   
NUM_TOKENStokensr  s       r9   test_distinct_tokenszXSRFTest.test_distinct_tokenss  sh    
z"" 	) 	)AJJt~~''((((Vj11111r;   c                    |                                  }| j        |fD ]t}|                     ddt          j                            t          |                    |                     |                    }|                     |j	        d           u| j        |f|| j        ffD ]\  }}t          t          d          5  |                     ddt          j                            t          |                    |                     |                    }d d d            n# 1 swxY w Y   |                     |j	        d           d S )NrR   r   rY  rf  r   rX  rZ  )rF  r  r   r~  r  r  rg   rJ  r}   r   r   r   )rC   token2rO  r   cookie_token
body_tokens         r9   test_cross_userzXSRFTest.test_cross_user{  s   !!ov. 	1 	1Ezz\++Du,=,=,=>>++E22	 "  H X]C0000 _f%T_%)
 	1 	1$L* 7$GHH  ::!//:0F0F0FGG //==	 &                 X]C0000	1 	1s   ?AD##D'	*D'	c           
         | j         }|h}t          d          D ]}|                     |          }|                    |           |                     ddt
          j                            t          | j                             | 	                    |                    }| 
                    |j        d           | 
                    t          |          d           d S )N   rR   r   rY  rf  r      )r  r  rF  r  r   r~  r  r  rg   rJ  r}   r   r=  )rC   rO  tokens_seenr  r   s        r9   test_refresh_tokenzXSRFTest.test_refresh_token  s    g
 q 
	1 
	1ANN5))EOOE"""zz\++Dt,G,G,GHH++E22	 "  H X]C0000[))1-----r;   c           
         |                      |                     d          |                     d                     |                     d          }t          d          D ]-}|                     |                     |d          |           .|                     |          }|                      ||           |                      ||                     |                     ||f||ffD ]w\  }}|                     ddt
          j                            t          |                    | 	                    |                    }|                     |j
        d           xd S )	Nrv   rw   r  rR   r   rY  rf  r   )assertNotEqualrF  r  r}   r   r~  r  r  rg   rJ  r   )rC   v1_tokenr  v2_tokenr}  r~  r   s          r9   test_versioningzXSRFTest.test_versioning  sm   DNN1N55t~~a~7P7PQQQ >>!>,,q 	L 	LAT^^Ha^@@(KKKK >>(++Hh///HdnnX&>&>??? +3H)=(?S(T 	1 	1$L*zz\++Dz,B,B,BCC++L99	 "  H X]C0000	1 	1r;   r  r2   )rK   rL   rM   r   rT   r@   rE  rF  rJ  rS  r\  ra  rd  rg  rk  rn  rr  rt  rv  rz  r  r  r  r  r  s   @r9   r:  r:  
  sk       	 	 	 	 	. 	 	 	' ' '+ + + + +	) 	) 	) 	), , , ,
- - -
- - -- - -- - -- - -- - -- - -- - -- - -
- 
- 
-2 2 21 1 12. . .(1 1 1 1 1 1 1r;   r:  c                   b     e Zd Z G d de          Zd Z fdZddZddZd Z	d	 Z
d
 Z xZS )XSRFCookieNameTestc                       e Zd Zd Zd ZdS )XSRFCookieNameTest.Handlerc                 :    |                      | j                   d S r2   r[   r  rB   s    r9   r\   zXSRFCookieNameTest.Handler.get      JJt'''''r;   c                 0    |                      d           d S rn  rZ   rB   s    r9   r   zXSRFCookieNameTest.Handler.post  r@  r;   NrA  rI   r;   r9   rT   r    s2        	( 	( 	(	 	 	 	 	r;   rT   c                 *    t          ddddi          S )NTz__Host-xsrfr  )r1  xsrf_cookie_namexsrf_cookie_kwargsr   rB   s    r9   r@   z!XSRFCookieNameTest.get_app_kwargs  s'    * ($/
 
 
 	
r;   c                 z    t                                                       |                                 | _        d S r2   rD  r>  s    r9   rE  zXSRFCookieNameTest.setUp  rG  r;   Nc                     ||                      |          }nd }|                     d|          }|                                 t          |j                  S )NrR   r4  rI  )rC   rK  r.  r   s       r9   rF  zXSRFCookieNameTest.get_token  sY     )))44GGG::c7:33(-(((r;   c                 "    || j         }dd|z   iS )Nr2  z__Host-xsrf=rM  rN  s     r9   rJ  z!XSRFCookieNameTest.cookie_headers  s    =OE.5011r;   c                     t          t          d          5  |                     ddd          }d d d            n# 1 swxY w Y   |                     |j        d           d S rQ  r\  r   s     r9   rS  z*XSRFCookieNameTest.test_xsrf_fail_no_token  rT  rU  c           
      &   t          t          d          5  |                     ddt          j                            t          | j                                      }d d d            n# 1 swxY w Y   |                     |j	        d           d S rW  r[  r   s     r9   r\  z0XSRFCookieNameTest.test_xsrf_fail_body_no_cookie  r]  r^  c           	          |                      ddt          j                            t	          | j                            |                                           }|                     |j        d           d S rp  rq  r   s     r9   rr  z.XSRFCookieNameTest.test_xsrf_success_post_body  so    ::''4?(C(C(CDD''))  
 
 	,,,,,r;   r2   )rK   rL   rM   r   rT   r@   rE  rF  rJ  rS  r\  rr  r  r  s   @r9   r  r    s            .   
 
 
+ + + + +) ) ) )2 2 2 2
- - -
- - -- - - - - - -r;   r  c                   6    e Zd Z G d de          Zd Zd ZdS )XSRFCookieKwargsTestc                       e Zd Zd ZdS )XSRFCookieKwargsTest.Handlerc                 :    |                      | j                   d S r2   r  rB   s    r9   r\   z XSRFCookieKwargsTest.Handler.get  r  r;   Nr]   rI   r;   r9   rT   r    s#        	( 	( 	( 	( 	(r;   rT   c                 B    t          dt          dd                    S )NTr   )r  ro   )r1  r  r   rB   s    r9   r@   z#XSRFCookieKwargsTest.get_app_kwargs  s,    $ST2U2U2U
 
 
 	
r;   c                 .   |                      d          }|                     d|j        d                                                    |                     d|j        d                                                    |j                            d          }|J t          j        d|          }|J t          j                            t          j	        j
                  t          j        d          z   }t          j                            |                                d                   }|j        %|                    t          j	        j
        	          }|                     t'          ||z
                                            d
k                d S )NrR   z	httponly;r,  zexpires=z.*; expires=(?P<expires>.+);.*r   rL  rN  )tzinfor  )r   r>  r.  lowerr\   r   r   rO  rP  rQ  rR  rS  rT  rU  rV  rW  r  replacer   rY  rZ  r[  s         r9   test_xsrf_httponlyz'XSRFCookieKwargsTest.test_xsrf_httponly  s]   ::c??k8#3L#A#G#G#I#IJJJj("2<"@"F"F"H"HIII!%%l33!!!96BB   #''(9(=>>ASB
 B
 B
 
 ::5??;L;LY;WXX (+338;L;P3QQNW~5DDFFGG"LMMMMMr;   N)rK   rL   rM   r   rT   r@   r  rI   r;   r9   r  r    sa        ( ( ( ( (. ( ( (
 
 

N N N N Nr;   r  c                   0    e Zd Z G d de          Zd ZdS )FinishExceptionTestc                       e Zd Zd ZdS )FinishExceptionTest.Handlerc                     |                      d           |                     dd           |                     dd          rt          d          |                     d           t                      )Nrx  WWW-AuthenticateBasic realm="something"finish_valuer  zauthentication required)r  r  r  r+   r[   rB   s    r9   r\   zFinishExceptionTest.Handler.get  sm    OOC   OO.0IJJJ  44 6777

4555hhr;   Nr]   rI   r;   r9   rT   r    s#        	 	 	 	 	r;   rT   c                    dD ]{}|                      |          }|                     |j        d           |                     d|j                            d                     |                     d|j                   |d S )N)rR   z/?finish_value=1rx  r  r  s   authentication required)r   r}   r   r.  r\   r   )rC   ur   s      r9   test_finish_exceptionz)FinishExceptionTest.test_finish_exception$  s    * 	H 	HAzz!}}HX]C000)8+;+?+?@R+S+S   7GGGG	H 	Hr;   N)rK   rL   rM   r   rT   r  rI   r;   r9   r  r    sR            .   H H H H Hr;   r  c                        e Zd Zd Zd Zd ZdS )DecoratorTestc                 ^     G d dt                     } G d dt                     }d|fd|fgS )Nc                   $    e Zd Zed             ZdS )6DecoratorTest.get_handlers.<locals>.RemoveSlashHandlerc                     d S r2   rI   rB   s    r9   r\   z:DecoratorTest.get_handlers.<locals>.RemoveSlashHandler.get1      r;   N)rK   rL   rM   r-   r\   rI   r;   r9   RemoveSlashHandlerr  0  s-          [  r;   r  c                   $    e Zd Zed             ZdS )3DecoratorTest.get_handlers.<locals>.AddSlashHandlerc                     d S r2   rI   rB   s    r9   r\   z7DecoratorTest.get_handlers.<locals>.AddSlashHandler.get6  r  r;   N)rK   rL   rM   r.   r\   rI   r;   r9   AddSlashHandlerr  5  s-          X  r;   r  /removeslash/	/addslashr   )rC   r  r  s      r9   r?   zDecoratorTest.get_handlers/  sn    	 	 	 	 	 	 	 	
	 	 	 	 	n 	 	 	
 !"45_7UVVr;   c                 R   |                      dd          }|                     |j        d           |                     |j        d         d           |                      dd          }|                     |j        d           |                     |j        d         d           d S )	Nr  Frs  ro  rv  z/removeslashz/removeslash/?foo=barz/removeslash?foo=barrs  r   s     r9   test_removeslashzDecoratorTest.test_removeslash<  s    ::o:FF,,,)*5~FFF::5:NN,,,)*57MNNNNNr;   c                 R   |                      dd          }|                     |j        d           |                     |j        d         d           |                      dd          }|                     |j        d           |                     |j        d         d           d S )	Nr  Frs  ro  rv  z
/addslash/z/addslash?foo=barz/addslash/?foo=barrs  r   s     r9   test_addslashzDecoratorTest.test_addslashE  s    ::kE:BB,,,)*5|DDD::1E:JJ,,,)*57KLLLLLr;   N)rK   rL   rM   r?   r  r  rI   r;   r9   r  r  .  sL        W W WO O OM M M M Mr;   r  c                   P    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )	CacheTestc                 2     G d dt                     }d|fgS )Nc                       e Zd Zd Zd ZdS )+CacheTest.get_handlers.<locals>.EtagHandlerc                 0    |                      |           d S r2   rZ   )rC   computed_etags     r9   r\   z/CacheTest.get_handlers.<locals>.EtagHandler.getR  s    

=)))))r;   c                     | j         d         S r  )_write_bufferrB   s    r9   compute_etagz8CacheTest.get_handlers.<locals>.EtagHandler.compute_etagU  s    )!,,r;   N)rK   rL   rM   r\   r  rI   r;   r9   EtagHandlerr  Q  s2        * * *- - - - -r;   r  z
/etag/(.*)r   )rC   r  s     r9   r?   zCacheTest.get_handlersP  s<    	- 	- 	- 	- 	-. 	- 	- 	- {+,,r;   c                 <    d}d}|                      ||d           d S )N"xyzzy"*r  
_test_etagrC   r  etagss      r9   test_wildcard_etagzCacheTest.test_wildcard_etagZ  s(    !uc22222r;   c                 <    d}d}|                      ||d           d S )Nr  r  r  r  s      r9   test_strong_etag_matchz CacheTest.test_strong_etag_match_  s(    !uc22222r;   c                 <    d}d}|                      ||d           d S )N"xyzzy1""xyzzy1", "xyzzy2"r  r  r  s      r9   test_multiple_strong_etag_matchz)CacheTest.test_multiple_strong_etag_matchd  s(    "$uc22222r;   c                 <    d}d}|                      ||d           d S )Nr  r  r   r  r  s      r9   test_strong_etag_not_matchz$CacheTest.test_strong_etag_not_matchi  s(    !uc22222r;   c                 <    d}d}|                      ||d           d S )Nr  r  r   r  r  s      r9   #test_multiple_strong_etag_not_matchz-CacheTest.test_multiple_strong_etag_not_matchn  s(    !$uc22222r;   c                 <    d}d}|                      ||d           d S )Nr  
W/"xyzzy1"r  r  r  s      r9   test_weak_etag_matchzCacheTest.test_weak_etag_matchs  (    "uc22222r;   c                 <    d}d}|                      ||d           d S )N"xyzzy2"W/"xyzzy1", W/"xyzzy2"r  r  r  s      r9   test_multiple_weak_etag_matchz'CacheTest.test_multiple_weak_etag_matchx  (    "(uc22222r;   c                 <    d}d}|                      ||d           d S )Nr  r  r   r  r  s      r9   test_weak_etag_not_matchz"CacheTest.test_weak_etag_not_match}  r  r;   c                 <    d}d}|                      ||d           d S )Nz"xyzzy3"r  r   r  r  s      r9   !test_multiple_weak_etag_not_matchz+CacheTest.test_multiple_weak_etag_not_match  r  r;   c                 t    |                      d|z   d|i          }|                     |j        |           d S )Nz/etag/r  r4  rp  )rC   r  r  r  r   s        r9   r  zCacheTest._test_etag  sI    ::}$.F  
 
 	44444r;   N)rK   rL   rM   r?   r  r  r  r  r  r  r  r  r  r  rI   r;   r9   r  r  O  s        - - -3 3 3
3 3 3
3 3 3
3 3 3
3 3 3
3 3 3
3 3 3
3 3 3
3 3 3
5 5 5 5 5r;   r  c                   0    e Zd Z G d de          Zd ZdS )RequestSummaryTestc                       e Zd Zd ZdS )RequestSummaryTest.Handlerc                 l    d | j         _        |                     |                                            d S r2   )r  	remote_ipr   r  rB   s    r9   r\   zRequestSummaryTest.Handler.get  s2     &*DL"KK--//00000r;   Nr]   rI   r;   r9   rT   r    s#        	1 	1 	1 	1 	1r;   rT   c                 f    |                      d          }|                     |j        d           d S )NrR   s   GET / (None)r6  rb  s     r9   test_missing_remote_ipz)RequestSummaryTest.test_missing_remote_ip  s/    zz#O44444r;   N)rK   rL   rM   r   rT   r  rI   r;   r9   r  r    sM        1 1 1 1 1. 1 1 15 5 5 5 5r;   r  c                       e Zd Zd ZdS )HTTPErrorTestc                     t          dd          }t          j        |          }|                     ||           |                     |j        |j                   |                     |j        |j                   d S )NrZ  zGo awayr  )r!   r   assertIsNotr}   r  r  )rC   r  e2s      r9   	test_copyzHTTPErrorTest.test_copy  sq    c),,,Yq\\B77729-----r;   N)rK   rL   rM   r  rI   r;   r9   r  r    s#        . . . . .r;   r  c                       e Zd Zd ZdS )ApplicationTestc                 z    t          g           }|                    dd          }|                                 d S )Nr   r  )address)r   listenr  )rC   rA   servers      r9   test_listenzApplicationTest.test_listen  s3    "ooA{33r;   N)rK   rL   rM   r  rI   r;   r9   r  r    s#            r;   r  c                        e Zd Zd Zd Zd ZdS )URLSpecReverseTestc                     |                      dt          dd                                                      |                      dt          dd                                                      d S )Nz/favicon.icoz/favicon\.icoz^/favicon\.ico$r}   r%   reverserB   s    r9   test_reversezURLSpecReverseTest.test_reverse  sb    -=t)D)D)L)L)N)NOOO-?)F)F)N)N)P)PQQQQQr;   c                     dg}|D ]R}t          |d           }	 |                                }|                     d|d|           C# t          $ r Y Ow xY wd S )Nz^/api/v\d+/foo/(\w+)$z.did not get expected exception when reversing z
. result: )r%   r  r  r  )rC   pathsr4   url_specr  s        r9   test_non_reversiblez&URLSpecReverseTest.test_non_reversible  s    
 ** 
	 
	D4H!))++			$(DD&&2       
	 
	s   /A		
AAc                     |                      dt          dd                               d                     |                      dt          dd                               d                     d S )Nz/api/v1/foo/barz^/api/v1/foo/(\w+)$r  z/api.v1/foo/5/icon.pngz/api\.v1/foo/([0-9]+)/icon\.pngr  r  rB   s    r9   test_reverse_argumentsz)URLSpecReverseTest.test_reverse_arguments  s{    s#94@@HHOO	
 	
 	
 	$2D99AA!DD	
 	
 	
 	
 	
r;   N)rK   rL   rM   r  r  r  rI   r;   r9   r  r    sD        R R R  $
 
 
 
 
r;   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )RedirectHandlerTestc                 H    dt           ddifdt           ddifdt           ddifgS )N/srcr%   /dstz/src2z/dst2?foo=barz/(.*?)/(.*?)/(.*)z/{1}/{0}/{2})rM  rB   s    r9   r?   z RedirectHandlerTest.get_handlers  s;    '%9(5/*BC!#5~7NO
 	
r;   c                     |                      dd          }|                     |j        d           |                     |j        d         d           d S )Nr  Frs  ro  rv  r  rs  r   s     r9   test_basic_redirectz'RedirectHandlerTest.test_basic_redirect  sS    ::fu:==,,,)*5v>>>>>r;   c                     |                      dd          }|                     |j        d           |                     |j        d         d           d S )Nz/src?foo=barFrs  ro  rv  z/dst?foo=barrs  r   s     r9   test_redirect_with_argumentz/RedirectHandlerTest.test_redirect_with_argument  sS    ::nu:EE,,,)*5~FFFFFr;   c                     |                      dd          }|                     |j        d           |                     |j        d         d           d S )Nz/src2?foo2=bar2Frs  ro  rv  z/dst2?foo=bar&foo2=bar2rs  r   s     r9   %test_redirect_with_appending_argumentz9RedirectHandlerTest.test_redirect_with_appending_argument  sU    ::/%:HH,,,)*57PQQQQQr;   c                     |                      dd          }|                     |j        d           |                     |j        d         d           d S )Nz/a/b/cFrs  ro  rv  z/b/a/crs  r   s     r9   test_redirect_patternz)RedirectHandlerTest.test_redirect_pattern  sS    ::h:??,,,)*5x@@@@@r;   N)rK   rL   rM   r?   r  r  r  r  rI   r;   r9   r  r    sj        
 
 
? ? ?
G G G
R R R
A A A A Ar;   r  c                   *    e Zd ZdZd Zd Zd Zd ZdS )AcceptLanguageTestz)Test evaluation of Accept-Language headerc                     t          j        t          j                            t          j                            t                    d          d            G d dt                    }d|fgS )Ngettext_translationstornado_testc                       e Zd Zd ZdS )>AcceptLanguageTest.get_handlers.<locals>.AcceptLanguageHandlerc                     |                      d|                                 j                            dd                     |                     d           d S )Nr  _-r;   )r  get_browser_localer   r  r   rB   s    r9   r\   zBAcceptLanguageTest.get_handlers.<locals>.AcceptLanguageHandler.get  sW    &(?(?(A(A(F(N(NsTW(X(X   C     r;   Nr]   rI   r;   r9   AcceptLanguageHandlerr"    s#        ! ! ! ! !r;   r'  rR   )r   load_gettext_translationsr3   r4   r5   r6   r7   r   )rC   r'  s     r9   r?   zAcceptLanguageTest.get_handlers  s{    (GLL224JKK	
 	
 	

	! 	! 	! 	! 	!N 	! 	! 	! '(
 	
r;   c                     |                      dddi          }|                     |j        d         d           |                      dddi          }|                     |j        d         d           d S )NrR   rR  zfr-FR;q=0.9r4  r  zfr-FRzfr-FR; q=0.9r   r}   r.  r   s     r9   test_accept_languagez'AcceptLanguageTest.test_accept_language  s|    ::c,=}+M:NN)*<=wGGG::c,=~+N:OO)*<=wGGGGGr;   c                 z    |                      dddi          }|                     |j        d         d           d S )NrR   rR  z	fr-FR;q=0r4  r  en-USr*  r   s     r9   test_accept_language_ignorez.AcceptLanguageTest.test_accept_language_ignore  sB    ::c,={+K:LL)*<=wGGGGGr;   c                 z    |                      dddi          }|                     |j        d         d           d S )NrR   rR  z
fr-FR;q=-1r4  r  r-  r*  r   s     r9   test_accept_language_invalidz/AcceptLanguageTest.test_accept_language_invalid	  sB    ::c,=|+L:MM)*<=wGGGGGr;   N)rK   rL   rM   rN   r?   r+  r.  r0  rI   r;   r9   r  r    sa        33
 
 
"H H HH H HH H H H Hr;   r  )tornado.concurrentr   tornador   tornado.escaper   r   r   r   r	   r
   tornado.httpclientr   tornado.httputilr   tornado.iostreamr   r   tornado.locksr   tornado.logr   r   tornado.simple_httpclientr   tornado.templater   tornado.testingr   r   r   r   tornado.test.utilr   tornado.utilr   r   tornado.webr   r   r   r    rM  r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r   r  r   rO  email.utilsrT  r  ior0   r  r?  r3   r   r  r  ra  urllib.parser~  r:   r=   rP   rV   r_   TestCaserr   r   r   r   rc  rn  r{  r  r  r  r  r  r  r  r  r  r  r
  r  r#  r+  r1  r  r  r  rd  rv  r  r  r  r  r  r  r  r  r  r  r  r*  r8  rZ  rj  r  ru  rx  r  r  r  r  r  r  r  r%  r/  r;  rC  rI  rT  r[  rf  r  r  r  r  r  r  r  r:  r  r  r  r  r  r  r  r  r  r  r  rI   r;   r9   <module>rC     s   % % % % % %                      / . . . . . - - - - - - % % % % % %             ( ( ( ( ( ( ( ( ; ; ; ; ; ; ' ' ' ' ' ' Q Q Q Q Q Q Q Q Q Q Q Q 0 0 0 0 0 0 1 1 1 1 1 1 1 1                                         ,                        				 				       7 7 7    #   $	% 	% 	% 	% 	%K 	% 	% 	%    >   
$ $ $ $ $~ $ $ $,2S 2S 2S 2S 2S* 2S 2S 2Sl,E ,E ,E ,E ,E* ,E ,E ,E^.9 .9 .9 .9 .9k .9 .9 .9b]= ]= ]= ]= ]= ]= ]= ]=@
 
 
 
 
 
 
 

 
 
 
 
{ 
 
 
8
( 
( 
( 
( 
(^ 
( 
( 
(    +   0
 
 
 
 
. 
 
 
6-- -- -- -- --+ -- -- --`)O )O )O )O )O~ )O )O )OXY Y Y Y Y~ Y Y Y*B B B B B^ B B B
1 1 1 1 1n 1 1 1
# # # # #. # # #
( ( ( ( ( ( ( (H H H H Hn H H H       	 	 	 	 	^ 	 	 	    ~   (. . . . . . . .
 
 
 
 
. 
 
 
OO OO OO OO OOk OO OO OOd/ / / / /k / / /?1 ?1 ?1 ?1 ?1 ?1 ?1 ?1Df- f- f- f- f-[ f- f- f-RO O O O O O O O*"- "- "- "- "-K "- "- "-J; ; ; ; ;[ ; ; ;@C @C @C @C @C; @C @C @CF'0 '0 '0 '0 '0{ '0 '0 '0T0 0 0 0 0k 0 0 0D0 0 0 0 0[ 0 0 0&8 8 8 8 8+ 8 8 8
@ 
@ 
@ 
@ 
@) 
@ 
@ 
@A A A A A) A A A*5 5 5 5 5, 5 5 58
 
 
 
 
* 
 
 
C C C C C/ C C C,- - - - -; - - -&7
 7
 7
 7
 7
( 7
 7
 7
tH H H H HK H H H2> > > > >/ > > >	 	 	 	 	i 	 	 	,1 ,1 ,1 ,1 ,10 ,1 ,1 ,1^    ,   +
 +
 +
 +
 +
0 +
 +
 +
\
 
 
 
 
0 
 
 
"> > > > >1 > > >,Y1 Y1 Y1 Y1 Y1 Y1 Y1 Y1x
1 
1 
1 
1 
1#8 
1 
1 
1- - - - -*? - - -$: : : : :. : : :&2 2 2 2 2+ 2 2 2*1 1 1 1 1/ 1 1 1 
 
 
 
 
[ 
 
 
@ @ @ @ @K @ @ @$- - - - -+ - - -. . . . . . . .$[  [  [  [  [ { [  [  [ D / / / / /^ / / />J
 J
 J
 J
 J
 J
 J
 J
Z
E 
E 
E 
E 
E'
E 
E 
EB B B B B'B B B8
 8
 8
 8
 8
!6 8
 8
 8
v1 1 1 1 1+ 1 1 1.g) g) g) g) g)h' g) g) g)TH1 H1 H1 H1 H1$ H1 H1 H1X7- 7- 7- 7- 7-. 7- 7- 7-tN N N N N0 N N N8H H H H H/ H H H*M M M M MK M M MB<5 <5 <5 <5 <5 <5 <5 <5~5 5 5 5 5. 5 5 5. . . . .H% . . .    m   
 
 
 
 
* 
 
 
BA A A A A+ A A A:!H !H !H !H !H !H !H !H !H !Hr;   