
    <i^                     0   S SK JrJrJrJrJrJrJrJrJ	r	J
r
  S SKJrJr  S SKJr  S SKJr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJrJrJr  S\\\\\   4   \\\\
   4   4   4S jr  " S	 S
\RB                  5      r" " S S\RB                  5      r# " S S\RB                  5      r$ " S S\RB                  5      r% " S S\RB                  5      r& " S S\RB                  5      r' " S S\RB                  5      r( " S S\RB                  5      r)g)    )

url_concatparse_multipart_form_dataHTTPHeadersformat_timestampHTTPServerRequestparse_request_start_lineparse_cookie	qs_to_qslHTTPInputErrorHTTPFile)utf8
native_str)gen_log)ignore_deprecationN)TupleDictListreturnc                  
    0 0 4$ )zReturn two empty dicts suitable for use with parse_multipart_form_data.

mypy insists on type annotations for dict literals, so this lets us avoid
the verbose types throughout this test.
 r       </usr/lib/python3/dist-packages/tornado/test/httputil_test.pyform_data_argsr      s     r6Mr   c                   \    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rSrg)TestUrlConcat%   c                 D    [        SSS/5      nU R                  US5        g )Nhttps://localhost/pathyr    zr"   https://localhost/path?y=y&z=zr   assertEqualselfurls     r   test_url_concat_no_query_params-TestUrlConcat.test_url_concat_no_query_params&   s%    1J
3KL>?r   c                 D    [        SSS/5      nU R                  US5        g )Nr   )r    z/yr!   z!https://localhost/path?y=%2Fy&z=zr$   r&   s     r   test_url_concat_encode_args)TestUrlConcat.test_url_concat_encode_args*   s%    1K3LMABr   c                 D    [        SSS/5      nU R                  US5        g )Nzhttps://localhost/path?r   r!   r#   r$   r&   s     r   test_url_concat_trailing_q(TestUrlConcat.test_url_concat_trailing_q.   s%    2Z4LM>?r   c                 D    [        SSS/5      nU R                  US5        g )Nzhttps://localhost/path?xr   r!   !https://localhost/path?x=&y=y&z=zr$   r&   s     r   &test_url_concat_q_with_no_trailing_amp4TestUrlConcat.test_url_concat_q_with_no_trailing_amp2   s%    3j*5MNABr   c                 D    [        SSS/5      nU R                  US5        g )Nzhttps://localhost/path?x&r   r!   r2   r$   r&   s     r   test_url_concat_trailing_amp*TestUrlConcat.test_url_concat_trailing_amp6   s%    4z:6NOABr   c                 D    [        SSS/5      nU R                  US5        g )Nzhttps://localhost/path?a=1&b=2r   r!   z&https://localhost/path?a=1&b=2&y=y&z=zr$   r&   s     r   test_url_concat_mult_params)TestUrlConcat.test_url_concat_mult_params:   s%    9J
;STFGr   c                 @    [        S/ 5      nU R                  US5        g Nzhttps://localhost/path?r=1&t=2r$   r&   s     r   test_url_concat_no_params'TestUrlConcat.test_url_concat_no_params>   s     92>>?r   c                 @    [        SS 5      nU R                  US5        g r<   r$   r&   s     r   test_url_concat_none_params)TestUrlConcat.test_url_concat_none_paramsB   s     94@>?r   c                 B    [        SS/5      nU R                  US5        g )Nzhttps://localhost/path#tabr   zhttps://localhost/path?y=y#tabr$   r&   s     r   test_url_concat_with_frag'TestUrlConcat.test_url_concat_with_fragF   s"    5
|D>?r   c                 D    [        SSS/5      nU R                  US5        g )Nr   )r    y1)r    y2z https://localhost/path?y=y1&y=y2r$   r&   s     r   !test_url_concat_multi_same_params/TestUrlConcat.test_url_concat_multi_same_paramsJ   s%    1K3MN@Ar   c                 B    [        SS/5      nU R                  US5        g )Nzhttps://localhost/path?r=1&r=2r   z"https://localhost/path?r=1&r=2&y=yr$   r&   s     r   'test_url_concat_multi_same_query_params5TestUrlConcat.test_url_concat_multi_same_query_paramsN   s"    9J<HBCr   c                 N    [        S[        SS95      nU R                  US5        g )Nr   r    )r    zhttps://localhost/path?y=y)r   dictr%   r&   s     r   test_url_concat_dict_params)TestUrlConcat.test_url_concat_dict_paramsR   s$    14#;?:;r   r   N)__name__
__module____qualname____firstlineno__r)   r,   r/   r3   r6   r9   r=   r@   rC   rH   rK   rO   __static_attributes__r   r   r   r   r   %   sI    @C@CCH@@@BD<r   r   c                       \ rS rSrS rSrg)QsParseTestW   c                     Sn[         R                  R                  U5      n[        [	        U5      5      nU R                  SU5        U R                  SU5        U R                  SU5        g )Nza=1&b=2&a=3)a1)rZ   3)b2)urllibparseparse_qslistr
   assertIn)r'   qsstringqsqsls       r   test_parsingQsParseTest.test_parsingX   sS     \\""8,9R=!j#&j#&j#&r   r   N)rQ   rR   rS   rT   rg   rU   r   r   r   rW   rW   W   s    'r   rW   c                   V    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rSrg)MultipartFormDataTesta   c                     SR                  SS5      n[        5       u  p#[        SXU5        US   S   nU R                  US   S5        U R                  US	   S
5        g )NT   --1234
Content-Disposition: form-data; name="files"; filename="ab.txt"

Foo
--1234--   
   
   1234filesr   filenameab.txtbody   Fooreplacer   r   r%   r'   dataargsrq   files        r   test_file_upload&MultipartFormDataTest.test_file_uploadb   sl    
 G7
 	 %&!'4u=W~a j)84fv.r   c                     SR                  SS5      n[        5       u  p#[        SXU5        US   S   nU R                  US   S5        U R                  US	   S
5        g )NsP   --1234
Content-Disposition: form-data; name=files; filename=ab.txt

Foo
--1234--rn   ro   rp   rq   r   rr   rs   rt   ru   rv   rx   s        r   test_unquoted_names)MultipartFormDataTest.test_unquoted_namesq   sl    
 G7
 	 %&!'4u=W~a j)84fv.r   c                 b   / SQnU H  n[         R                  " SU5        SUR                  SS5      R                  SS5      -  n[        UR                  SS	5      5      n[	        5       u  pV[        S
XEU5        US   S   nU R                  US   U5        U R                  US   S5        M     g )N)za;b.txtza"b.txtza";b.txtza;"b.txtz	a";";.txtza\"b.txtza\b.txtztrying filename %rzP--1234
Content-Disposition: form-data; name="files"; filename="%s"

Foo
--1234--\\\"z\"

rp   rq   r   rr   rt   ru   )loggingdebugrw   r   r   r   r%   )r'   	filenamesrr   str_datary   rz   rq   r{   s           r   test_special_filenames,MultipartFormDataTest.test_special_filenames   s    
	 "HMM.9
 fgU	H ((v67D(*KD%gt5A>!$DT*-x8T&\62# "r   c                     SR                  SS5      n[        5       u  p#[        SXU5        US   S   nU R                  US   S5        U R                  US	   S
5        g )Nsr   --1234
Content-Disposition: form-data; name="files"; filename="ab.txt"; filename*=UTF-8''%C3%A1b.txt

Foo
--1234--rn   ro   rp   rq   r   rr   u   áb.txtrt   ru   rv   rx   s        r   test_non_ascii_filename-MultipartFormDataTest.test_non_ascii_filename   sl    
 G7
 	 %&!'4u=W~a j)95fv.r   c                     SR                  SS5      n[        5       u  p#[        SXU5        US   S   nU R                  US   S5        U R                  US	   S
5        g )Nrm   rn   ro   s   "1234"rq   r   rr   rs   rt   ru   rv   rx   s        r   )test_boundary_starts_and_ends_with_quotes?MultipartFormDataTest.test_boundary_starts_and_ends_with_quotes   sl    
 G7
 	 %&!)T?W~a j)84fv.r   c                     SR                  SS5      n[        5       u  p#U R                  [        SS9   [	        SXU5        S S S 5        U R                  U0 5        g ! , (       d  f       N!= f)Ns   --1234

Foo
--1234--rn   ro   z#multipart/form-data missing headersmsgrp   rw   r   assertRaisesr   r   r%   r'   ry   rz   rq   s       r   test_missing_headers*MultipartFormDataTest.test_missing_headers   sr     G7
	 	 %& E  
 &gt5A
 	#	
 
   A
A*c                     SR                  SS5      n[        5       u  p#U R                  [        SS9   [	        SXU5        S S S 5        U R                  U0 5        g ! , (       d  f       N!= f)NsR   --1234
Content-Disposition: invalid; name="files"; filename="ab.txt"

Foo
--1234--rn   ro   Invalid multipart/form-datar   rp   r   r   s       r    test_invalid_content_disposition6MultipartFormDataTest.test_invalid_content_disposition   si    
 G7
 	 %&~3PQ%gt5A R# RQr   c                     SR                  SS5      n[        5       u  p#U R                  [        SS9   [	        SXU5        S S S 5        U R                  U0 5        g ! , (       d  f       N!= f)NsS   --1234
Content-Disposition: form-data; name="files"; filename="ab.txt"

Foo--1234--rn   ro   r   r   rp   r   r   s       r   .test_line_does_not_end_with_correct_line_breakDMultipartFormDataTest.test_line_does_not_end_with_correct_line_break   si     w7
	 	 %&~3PQ%gt5A R# RQr   c                     SR                  SS5      n[        5       u  p#U R                  [        SS9   [	        SXU5        S S S 5        U R                  U0 5        g ! , (       d  f       N!= f)NsF   --1234
Content-Disposition: form-data; filename="ab.txt"

Foo
--1234--rn   ro   z&multipart/form-data value missing namer   rp   r   r   s       r   6test_content_disposition_header_without_name_parameterLMultipartFormDataTest.test_content_disposition_header_without_name_parameter   sr    
 G7
 	 %& H  
 &gt5A
 	#	
 
r   c                     SR                  SS5      n[        5       u  p#[        SXU5        US   S   nU R                  US   S5        U R                  US	   S
5        g )NsU   --1234
Content-Disposition: form-data; name="files"; filename="ab.txt"

Foo
--1234--
rn   ro   rp   rq   r   rr   rs   rt   ru   rv   rx   s        r   test_data_after_final_boundary4MultipartFormDataTest.test_data_after_final_boundary   sl     G7
 	 %&!'4u=W~a j)84fv.r   c                 n    S nU" S5      nU" S5      nX2-  S:  a  U R                  SU< SU< 35        g g )Nc                     [         R                   " 5       nSSU -  -   S-   S-   n0 n0 n[        SX#U5        [         R                   " 5       U-
  $ )Ns+   --1234
Content-Disposition: form-data; x="   ;s   "; s1   name="files"; filename="a.txt"

Foo
--1234--
rp   )timer   )nstartmessagerz   rq   s        r   fJMultipartFormDataTest.test_disposition_param_linear_performance.<locals>.f  sb    IIKE(  O	O  ,.D/1E%gweD99;&&r   i  '     z,Disposition param parsing is not linear: d1= vs d2=failr'   r   d1d2s       r   )test_disposition_param_linear_performance?MultipartFormDataTest.test_disposition_param_linear_performance	  sC    	' uXvY7R<IIE"h2%PQ r   r   N)rQ   rR   rS   rT   r|   r   r   r   r   r   r   r   r   r   r   rU   r   r   r   rj   rj   a   s:    // 3://$$$$ /&Rr   rj   c                   P    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rSrg)HTTPHeadersTesti!  c                    SR                  SS5      n[        R                  " U5      nU R                  US   S5        U R                  UR	                  S5      S/5        U R                  US   S5        U R                  UR	                  S5      S	S
/5        U R                  [        [        UR                  5       5      5      / SQ5        U R                  SU;   5        U R                  SU;   5        g )Nz>Foo: bar
 baz
Asdf: qwer
	zxcv
Foo: even
     more
     lines
r   r   asdf	qwer zxcvFoozbar baz,even more linesfoobar bazeven more lines))Asdfr   )r   r   )r   r   r   )	rw   r   r`   r%   get_listsortedrb   get_all
assertTrue)r'   ry   headerss      r   test_multi_lineHTTPHeadersTest.test_multi_line"  s    
 G&
 	 ##D)+6))&1K=A)BC))%09>O2PQ4)*+S	

 	')*')*r   c                 R    SnU R                  [        [        R                  U5        g )Nz	 Foo: bar)r   r   r   r`   )r'   ry   s     r   test_malformed_continuation+HTTPHeadersTest.test_malformed_continuation?  s!     .+*;*;TBr   c           	         / SQnU H  nS H  n  UR                  U5      nSU-   S-   n[        R                  " [	        UR                  S5      5      5      nSS[	        UR                  S5      5      -   S-   4/nU R                  U[        UR                  5       5      5        M     M     g ! [         a     M  f = f! [         a    [        R                  " S	X#5        e f = f)
N)   u    u    )r   latin1s   Cookie: foo=s   barr   Cookiezfoo=barzfailed while trying %r in %s)encodeUnicodeEncodeErrorr   r`   r   decoder%   rb   r   	Exceptionr   warning)r'   newlinesnewlineencodingencodedry   r   expecteds           r   test_unicode_newlines%HTTPHeadersTest.test_unicode_newlinesF  s    
  G.!")..": +W4v=D *//
4;;x;P0QRG %"Zx0H%IIEQ H $$XtGOO4E/FG# /   . ! ! ! OO$BGVs)   B-BB>-
B;7B>:B;;B>>#C!c                     / SQnU HZ  u  p#[         R                  " SU-  5      nU(       a  S/nOSSU-  4/nU R                  U[        UR	                  5       5      5        M\     g )N)) T)	T)    F)r   FzTransfer-Encoding: %schunked)Transfer-Encodingchunkedr   z	%schunked)r   r`   r%   rb   r   )r'   
whitespacecstrippedr   r   s         r   test_unicode_whitespace'HTTPHeadersTest.test_unicode_whitespacen  se    


 &KA!''(F(JKG<=0+/BCXtGOO,='>? &r   c                     [         R                  " S5      nU R                  [        UR	                  5       5      / SQ5        g )Nz&CRLF: crlf
LF: lf
CR: crMore: more
))CrzcrMore: more)Crlfcrlf)Lflf)r   r`   r%   r   r   r'   r   s     r   test_optional_cr HTTPHeadersTest.test_optional_cr  s5     ##$RS7??$%F	
r   c           	         / SQn[        5       nU H  u  p4UR                  X45        M     UR                  5       n[        R                  " U5      n[        R                  " U5      nX%Xg4 H5  nU R	                  [        [        UR                  5       5      5      U5        M7     XVU4 HD  nU R                  X5        U R                  UR                  S5      UR                  S5      5        MF     g )N))Ar[   )r   r^   )Br   r   )
r   addcopydeepcopyr%   rb   r   r   assertIsNotr   )	r'   	all_pairsh1kvh2h3h4r   s	            r   	test_copyHTTPHeadersTest.test_copy  s    8	]DAFF1L WWYYYr]]]2'G T&):";<iH ( |GW)W--c2BKK4DE $r   c                    [        5       nUR                  SS5        UR                  SS5        UR                  SS5        [        R                  " U5      n[        R                  " U5      nU R                  [        UR                  5       5      [        UR                  5       5      5        U R                  [        UR                  5       5      [        UR                  5       5      5        g )Nz
Set-Cookieza=bzc=dzContent-Typez	text/html)	r   r   pickledumpsloadsr%   r   r   items)r'   r   pickled	unpickleds       r   test_pickle_roundtrip%HTTPHeadersTest.test_pickle_roundtrip  s    -L%(L%(NK0,,w'LL)	 12F9;L;L;N4OP0&9J2KLr   c                 T   [        5       nSUS'   U R                  UR                  SS5      S5        U R                  US   S5        U R                  UR                  SS5      S5        U R                  US   S5        U R                  [        UR	                  5       5      SS/5        g )Nr   r   bazquuxxyzzy)r   r   )Quuxr  )r   r%   
setdefaultr   r   r   s     r   test_setdefaultHTTPHeadersTest.test_setdefault  s    -++E595A/++FG<gF'2 12^EV4WXr   c                     [        5       nUR                  SS5        UR                  SS5        UR                  SS5        [         R                  " [        U5      5      nU R	                  X5        g )Nr   r[   r^   r\   )r   r   r`   strr%   )r'   r   headers2s      r   test_stringHTTPHeadersTest.test_string  sU    -E3E3E3$$S\2+r   c                 n    S nU" S5      nU" S5      nX2-  S:  a  U R                  SU< SU< 35        g g )Nc                     [         R                   " 5       n[        5       n[        U 5       H  nUR                  SS5        M     [         R                   " 5       U-
  $ )NzX-Foor   )r   r   ranger   )r   r   r   is       r   r   2HTTPHeadersTest.test_linear_performance.<locals>.f  sA    IIKE!mG1XGU+ 99;&&r   r   順 r   z.HTTPHeaders.add() does not scale linearly: d1=r   r   r   s       r   test_linear_performance'HTTPHeadersTest.test_linear_performance  sC    	' vYwZ7R<IIGB5RERS r   r   N)rQ   rR   rS   rT   r   r   r   r   r   r  r  r  r  r%  rU   r   r   r   r   r   !  s;    +:C&P@&
F"M	Y,Tr   r   c                   R    \ rS rSrSrSrS rS rS rS r	S r
S	 rS
 rS rS rSrg)FormatTimestampTesti  g*; R]AAzSun, 27 Jan 2013 18:43:20 GMTc                 N    U R                  [        U5      U R                  5        g N)r%   r   EXPECTED)r'   values     r   checkFormatTimestampTest.check  s    )%0$--@r   c                 :    U R                  U R                  5        g r*  )r-  	TIMESTAMPr'   s    r   test_unix_time_float(FormatTimestampTest.test_unix_time_float  s    

4>>"r   c                 L    U R                  [        U R                  5      5        g r*  )r-  intr0  r1  s    r   test_unix_time_int&FormatTimestampTest.test_unix_time_int  s    

3t~~&'r   c                 b    U R                  [        R                  " U R                  5      5        g r*  )r-  r   gmtimer0  r1  s    r   test_struct_time$FormatTimestampTest.test_struct_time  s    

4;;t~~./r   c                     [        [        R                  " U R                  5      5      nU R	                  S[        U5      5        U R                  U5        g )N	   )tupler   r9  r0  r%   lenr-  )r'   tups     r   test_time_tuple#FormatTimestampTest.test_time_tuple  s8    DKK/0CH%

3r   c                     U R                  [        R                  R                  U R                  [        R                  R
                  5      R                  S S95        g )N)tzinfo)r-  datetimefromtimestampr0  timezoneutcrw   r1  s    r   test_utc_naive_datetime+FormatTimestampTest.test_utc_naive_datetime  sC    

++ 1 1 5 5gTg"	
r   c                     [        5          U R                  [        R                  R                  U R                  5      5        S S S 5        g ! , (       d  f       g = fr*  )r   r-  rE  utcfromtimestampr0  r1  s    r   "test_utc_naive_datetime_deprecated6FormatTimestampTest.test_utc_naive_datetime_deprecated  s5    !JJx((99$..IJ "!!s   9A
Ac                     U R                  [        R                  R                  U R                  [        R                  R
                  5      5        g r*  )r-  rE  rF  r0  rG  rH  r1  s    r   test_utc_aware_datetime+FormatTimestampTest.test_utc_aware_datetime  s4    

++DNNH<M<M<Q<QR	
r   c                     U R                  [        R                  R                  U R                  [        R                  " [        R
                  " SS95      5      5        g )N)hours)r-  rE  rF  r0  rG  	timedeltar1  s    r   test_other_aware_datetime-FormatTimestampTest.test_other_aware_datetime  sA    

++ 1 1(2D2D22N O	
r   r   N)rQ   rR   rS   rT   r0  r+  r-  r2  r6  r:  rA  rI  rM  rP  rV  rU   r   r   r   r(  r(    s;    !I.HA#(0

K


r   r(  c                   &    \ rS rSrS rS rS rSrg)HTTPServerRequestTesti  c                     [        SS9  g N/)uri)r   r1  s    r   test_default_constructor.HTTPServerRequestTest.test_default_constructor  s     	c"r   c                 V    [        SS9nU R                  UR                  [        5        g r[  )r   assertIsInstancert   bytes)r'   requetss     r   test_body_is_a_byte_string0HTTPServerRequestTest.test_body_is_a_byte_string  s     #,gllE2r   c                 j    [        S[        SS/05      S9nU R                  S[        U5      ;  5        g )Nr\  Canaryz	Coal Mine)r]  r   )r   r   r   repr)r'   requests     r   "test_repr_does_not_contain_headers8HTTPServerRequestTest.test_repr_does_not_contain_headers  s4    #[([M)BC
 	W56r   r   N)rQ   rR   rS   rT   r^  rd  rj  rU   r   r   r   rY  rY    s    #37r   rY  c                   &    \ rS rSrSrSrSrS rSrg)ParseRequestStartLineTesti  GETz/foozHTTP/1.1c                 b   SR                  U R                  U R                  U R                  /5      n[	        U5      nU R                  UR                  U R                  5        U R                  UR                  U R                  5        U R                  UR                  U R                  5        g )Nr   )	joinMETHODPATHVERSIONr   r%   methodpathversion)r'   
start_lineparsed_start_lines      r   test_parse_request_start_line7ParseRequestStartLineTest.test_parse_request_start_line  s    XXt{{DIIt||DE
4Z@*114;;?*//;*22DLLAr   r   N)	rQ   rR   rS   rT   rq  rr  rs  ry  rU   r   r   r   rm  rm    s    FDGBr   rm  c                   2    \ rS rSrS rS rS rS rS rSr	g)	ParseCookieTesti  c                 4   U R                  [        S5      SSS.5        U R                  [        S5      SSSS	S
.5        U R                  [        S5      SS05        U R                  [        S5      SS05        U R                  [        S5      SSSSS.5        g)z?
Test cases copied from Python's Lib/test/test_http_cookies.py
zchips=ahoy; vienna=fingerahoyfinger)chipsviennaz)keebler="E=mc2; L=\"Loves\"; fudge=\012;"z"E=mc2z	\"Loves\"z\012r   )keeblerLfudge zkeebler=E=mc2r  zE=mc2zkey:term=value:termzkey:termz
value:termza=b; c=[; d=r; f=hr]   [rh)rZ   r   dr   Nr%   r	   r1  s    r   test_python_cookies#ParseCookieTest.test_python_cookies  s     	451	
 	GH }wCP	

 	o6G8LM./*l1K	
 	-.c#TW0X	
r   c                 |    U R                  [        S5      SSS.5        U R                  [        S5      SSS.5        g )	Nza=b; Domain=example.comr]   zexample.com)rZ   Domainza=b; h=i; a=cr   r"  )rZ   r  r  r1  s    r   test_cookie_edgecases%ParseCookieTest.test_cookie_edgecases5  s<    233-5X	

 	o6c8LMr   c                    U R                  S[        S5      R                  5       5        U R                  [        S5      SSSS.5        U R                  [        S5      S	S
S.5        U R                  [        S5      SS05        U R                  [        S5      S[	        S5      05        U R                  [        S5      SSS.5        g)z[
Cookie strings that go against RFC6265 but browsers will send if set
via document.cookie.
django_languagez$abc=def; unnamed; django_language=enza=b; "; c=dr]   r   r  )rZ   r  r   za b c=d e = f; gh=izd e = fr"  )za b cghza   b,c<>@:/[]?{}=d  "  =e,f gza   b,c<>@:/[]?{}zd  "  =e,f gu   saint=André Bessettesaintu   André Bessettez  =  b  ;  ;  =  ;   c  =  ;  r  )r  r   N)rc   r	   keysr%   r   r1  s    r   test_invalid_cookies$ParseCookieTest.test_invalid_cookies>  s     	?@EEG	

 	m4CSs6ST./9C1P	
 	9: .1	

 	01j!234	
 	9:2<N	
r   c                     / SQnU H?  u  p#U R                  U5         [        U5      nU R                  US   U5        S S S 5        MA     g ! , (       d  f       MS  = f)N))za="b=\""b=")za="b=\\"b=\)za="b=\="zb==)za="b=\n"zb=n)z
a="b=\042"r  )z
a="b=\134"r  )z
a="b=\377"u   b=ÿ)z
a="b=\400"zb=400)z	a="b=\42"zb=42)za="b=\\042"zb=\042)za="b=\\134"zb=\134)z
a="b=\\\""b=\")za="b=\\\042"r  )za="b=\134\""r  )za="b=\134\042"r  rZ   )subTestr	   r%   )r'   casesr   decodedr   s        r   test_unquoteParseCookieTest.test_unquote`  sQ    
" !&Gg& )  31 '& !&&&s   !A
A	c                    SnS H  nU R                  U5         [        R                  " 5       nSX!-  -   S-   n[        U5      S   n[        R                  " 5       nU R                  US S S5        U R                  USS  S	5        U R                  [	        U5      US
-   5        U R                  Xc-
  SS5        S S S 5        M     g ! , (       d  f       M  = f)Nr$  )r   z\134za="b=r   rZ      r  z\\\      zTest took too long)r  r   r	   r%   r?  
assertLess)r'   r   r   r   ry   r,  ends          r   test_unquote_large"ParseCookieTest.test_unquote_largey  s     %Gg&		,s2$T*3/iik  rF3  rsX6  UQU3 Q0DE '& &&&s   B C
C	r   N)
rQ   rR   rS   rT   r  r  r  r  r  rU   r   r   r   r|  r|    s    
2N 
D22Fr   r|  )*tornado.httputilr   r   r   r   r   r   r	   r
   r   r   tornado.escaper   r   tornado.logr   tornado.test.utilr   r   rE  r   r
  r   urllib.parser_   unittesttypingr   r   r   r  rb  r   TestCaser   rW   rj   r   r(  rY  rm  r|  r   r   r   <module>r     s     ,  0        $ $d3U#34d3X;N6OOP /<H%% /<d'(## '}RH-- }R@eTh'' eTP,
(++ ,
b7H-- 7$
B 1 1 
BsFh'' sFr   