
[c           @` s  d  d l  m Z 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 d  d l 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 Z d  d l Z d  d l Z d  d l Z d  d l Z e rd  d l j Z  n d  d l! Z  d	 e j" f d
     YZ# d e j" f d     YZ$ d e j" f d     YZ% d e j" f d     YZ& d e j" f d     YZ' d e j" f d     YZ( d e j" f d     YZ) d e j" f d     YZ* d S(   i    (   t   absolute_importt   divisiont   print_function(	   t
   url_concatt   parse_multipart_form_datat   HTTPHeaderst   format_timestampt   HTTPServerRequestt   parse_request_start_linet   parse_cookiet	   qs_to_qslt   HTTPInputError(   t   utf8t
   native_str(   t   PY3(   t   gen_log(   t	   ExpectLog(   t   unittestNt   TestUrlConcatc           B` st   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 RS(   c         C` s)   t  d d d g  } |  j | d  d  S(   Ns   https://localhost/patht   yt   zs   https://localhost/path?y=y&z=z(   R   R   (   R   R   (   R   t   assertEqual(   t   selft   url(    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_url_concat_no_query_params   s    c         C` s)   t  d d d g  } |  j | d  d  S(   Ns   https://localhost/pathR   s   /yR   s!   https://localhost/path?y=%2Fy&z=z(   R   s   /y(   R   R   (   R   R   (   R   R   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_url_concat_encode_args#   s    c         C` s)   t  d d d g  } |  j | d  d  S(   Ns   https://localhost/path?R   R   s   https://localhost/path?y=y&z=z(   R   R   (   R   R   (   R   R   (   R   R   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_url_concat_trailing_q*   s    c         C` s)   t  d d d g  } |  j | d  d  S(   Ns   https://localhost/path?xR   R   s!   https://localhost/path?x=&y=y&z=z(   R   R   (   R   R   (   R   R   (   R   R   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt&   test_url_concat_q_with_no_trailing_amp1   s    c         C` s)   t  d d d g  } |  j | d  d  S(   Ns   https://localhost/path?x&R   R   s!   https://localhost/path?x=&y=y&z=z(   R   R   (   R   R   (   R   R   (   R   R   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_url_concat_trailing_amp8   s    c         C` s)   t  d d d g  } |  j | d  d  S(   Ns   https://localhost/path?a=1&b=2R   R   s&   https://localhost/path?a=1&b=2&y=y&z=z(   R   R   (   R   R   (   R   R   (   R   R   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_url_concat_mult_params?   s    c         C` s#   t  d g   } |  j | d  d  S(   Ns   https://localhost/path?r=1&t=2(   R   R   (   R   R   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_url_concat_no_paramsF   s    	c         C` s#   t  d d   } |  j | d  d  S(   Ns   https://localhost/path?r=1&t=2(   R   t   NoneR   (   R   R   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_url_concat_none_paramsM   s    	c         C` s&   t  d d g  } |  j | d  d  S(   Ns   https://localhost/path#tabR   s   https://localhost/path?y=y#tab(   R   R   (   R   R   (   R   R   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_url_concat_with_fragT   s    c         C` s)   t  d d d g  } |  j | d  d  S(   Ns   https://localhost/pathR   t   y1t   y2s    https://localhost/path?y=y1&y=y2(   R   R"   (   R   R#   (   R   R   (   R   R   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt!   test_url_concat_multi_same_params[   s    c         C` s&   t  d d g  } |  j | d  d  S(   Ns   https://localhost/path?r=1&r=2R   s"   https://localhost/path?r=1&r=2&y=y(   R   R   (   R   R   (   R   R   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt'   test_url_concat_multi_same_query_paramsb   s    c         C` s,   t  d t d d   } |  j | d  d  S(   Ns   https://localhost/pathR   s   https://localhost/path?y=y(   R   t   dictR   (   R   R   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_url_concat_dict_paramsi   s    (   t   __name__t
   __module__R   R   R   R   R   R   R   R    R!   R$   R%   R'   (    (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyR      s   											t   QsParseTestc           B` s   e  Z d    Z RS(   c         C` s[   d } t  j |  } t t |   } |  j d |  |  j d |  |  j d	 |  d  S(
   Ns   a=1&b=2&a=3t   at   1t   3t   bt   2(   R+   R,   (   R+   R-   (   R.   R/   (   t   urllib_parset   parse_qst   listR
   t   assertIn(   R   t   qsstringt   qst   qsl(    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_parsings   s    (   R(   R)   R7   (    (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyR*   q   s   t   MultipartFormDataTestc           B` sb   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z RS(
   c         C` sk   d j  d d  } i  } i  } t d | | |  | d d } |  j | d d  |  j | d	 d
  d  S(   NsT   --1234
Content-Disposition: form-data; name="files"; filename="ab.txt"

Foo
--1234--s   
s   
t   1234t   filesi    t   filenames   ab.txtt   bodyt   Foo(   t   replaceR   R   (   R   t   datat   argsR:   t   file(    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_file_upload}   s    c         C` sk   d j  d d  } i  } i  } t d | | |  | d d } |  j | d d  |  j | d	 d
  d  S(   NsP   --1234
Content-Disposition: form-data; name=files; filename=ab.txt

Foo
--1234--s   
s   
R9   R:   i    R;   s   ab.txtR<   R=   (   R>   R   R   (   R   R?   R@   R:   RA   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_unquoted_names   s    c         C` s   d d d d d d d g } x | D] } t  j d |  d	 | j d
 d  j d d  } t | j d d   } i  } i  } t d | | |  | d d } |  j | d |  |  j | d d  q" Wd  S(   Ns   a;b.txts   a"b.txts   a";b.txts   a;"b.txts	   a";";.txts   a\"b.txts   a\b.txts   trying filename %rsP   --1234
Content-Disposition: form-data; name="files"; filename="%s"

Foo
--1234--s   \s   \\t   "s   \"s   
s   
R9   R:   i    R;   R<   R=   (   t   loggingt   debugR>   R   R   R   (   R   t	   filenamesR;   R?   R@   R:   RA   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_special_filenames   s"    	"c         C` sk   d j  d d  } i  } i  } t d | | |  | d d } |  j | d d  |  j | d	 d
  d  S(   Nsr   --1234
Content-Disposition: form-data; name="files"; filename="ab.txt"; filename*=UTF-8''%C3%A1b.txt

Foo
--1234--s   
s   
R9   R:   i    R;   u   áb.txtR<   R=   (   R>   R   R   (   R   R?   R@   R:   RA   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_non_ascii_filename   s    c         C` sk   d j  d d  } i  } i  } t d | | |  | d d } |  j | d d  |  j | d	 d
  d  S(   NsT   --1234
Content-Disposition: form-data; name="files"; filename="ab.txt"

Foo
--1234--s   
s   
s   "1234"R:   i    R;   s   ab.txtR<   R=   (   R>   R   R   (   R   R?   R@   R:   RA   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt)   test_boundary_starts_and_ends_with_quotes   s    c      	   C` s[   d j  d d  } i  } i  } t t d   t d | | |  Wd  QX|  j | i   d  S(   Ns   --1234

Foo
--1234--s   
s   
s#   multipart/form-data missing headersR9   (   R>   R   R   R   R   (   R   R?   R@   R:   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_missing_headers   s    c      	   C` s[   d j  d d  } i  } i  } t t d   t d | | |  Wd  QX|  j | i   d  S(   NsR   --1234
Content-Disposition: invalid; name="files"; filename="ab.txt"

Foo
--1234--s   
s   
s   Invalid multipart/form-dataR9   (   R>   R   R   R   R   (   R   R?   R@   R:   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt    test_invalid_content_disposition   s    c      	   C` s[   d j  d d  } i  } i  } t t d   t d | | |  Wd  QX|  j | i   d  S(   NsS   --1234
Content-Disposition: form-data; name="files"; filename="ab.txt"

Foo--1234--s   
s   
s   Invalid multipart/form-dataR9   (   R>   R   R   R   R   (   R   R?   R@   R:   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt.   test_line_does_not_end_with_correct_line_break   s    c      	   C` s[   d j  d d  } i  } i  } t t d   t d | | |  Wd  QX|  j | i   d  S(   NsF   --1234
Content-Disposition: form-data; filename="ab.txt"

Foo
--1234--s   
s   
s&   multipart/form-data value missing nameR9   (   R>   R   R   R   R   (   R   R?   R@   R:   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt6   test_content_disposition_header_without_name_parameter   s    c         C` sk   d j  d d  } i  } i  } t d | | |  | d d } |  j | d d  |  j | d	 d
  d  S(   NsU   --1234
Content-Disposition: form-data; name="files"; filename="ab.txt"

Foo
--1234--
s   
s   
R9   R:   i    R;   s   ab.txtR<   R=   (   R>   R   R   (   R   R?   R@   R:   RA   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_data_after_final_boundary  s    
(   R(   R)   RB   RC   RH   RI   RJ   RK   RL   RM   RN   RO   (    (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyR8   |   s   									t   HTTPHeadersTestc           B` sP   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   c         C` s   d j  d d  } t j |  } |  j | d d  |  j | j d  d g  |  j | d d  |  j | j d  d	 d
 g  |  j t t | j     d d d g  d  S(   Ns>   Foo: bar
 baz
Asdf: qwer
	zxcv
Foo: even
     more
     lines
s   
s   
t   asdfs	   qwer zxcvR=   s   bar baz,even more linest   foos   bar bazs   even more linest   Asdf(   RS   s	   qwer zxcv(   R=   s   bar baz(   R=   s   even more lines(   R>   R   t   parseR   t   get_listt   sortedR2   t   get_all(   R   R?   t   headers(    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_multi_line  s    c         C` s    d } |  j  t t j |  d  S(   Ns	    Foo: bar(   t   assertRaisesR   R   RT   (   R   R?   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_malformed_continuation-  s    c         C` s  d d d d d d d g } x | D] } x d d	 g D] } y y | j  |  } Wn t k
 rg w5 n Xd
 | d } t j t | j d	    } d d t | j d	   d f g } |  j | t | j     Wq5 t	 k
 r t
 j d | |    q5 Xq5 Wq" Wd  S(   Nu   u   u   u   u   u    u    R   t   latin1s   Cookie: foo=t   bart   Cookies   foo=s   failed while trying %r in %s(   t   encodet   UnicodeEncodeErrorR   RT   R   t   decodeR   R2   RW   t	   ExceptionR   t   warning(   R   t   newlinest   newlinet   encodingt   encodedR?   RX   t   expected(    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_unicode_newlines4  s2    	#	
c         C` s8   t  j d  } |  j t | j    d d	 d
 g  d  S(   Ns&   CRLF: crlf
LF: lf
CR: crMore: more
t   Crs   crMore: moret   Crlft   crlft   Lft   lf(   Rj   s   crMore: more(   Rk   Rl   (   Rm   Rn   (   R   RT   R   RV   RW   (   R   RX   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_optional_cr[  s    	c   	      C` s   d d d g } t    } x$ | D] \ } } | j | |  q W| j   } t j |  } t j |  } x< | | | | g D]( } |  j t t | j     |  q| WxI | | | g D]8 } |  j | |  |  j | j	 d  | j	 d   q Wd  S(	   Nt   AR,   R/   t   Bt   c(   Rp   R,   (   Rp   R/   (   Rq   Rr   (
   R   t   addt   copyt   deepcopyR   R2   RV   RW   t   assertIsNotRU   (	   R   t	   all_pairst   h1t   kt   vt   h2t   h3t   h4RX   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt	   test_copyg  s    	&c         C` s   t    } | j d d  | j d d  | j d d  t j |  } t j |  } |  j t | j    t | j     |  j t | j    t | j     d  S(   Ns
   Set-Cookies   a=bs   c=ds   Content-Types	   text/html(	   R   Rs   t   picklet   dumpst   loadsR   RV   RW   t   items(   R   RX   t   pickledt	   unpickled(    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_pickle_roundtripx  s    	(c         C` s   t    } d | d <|  j | j d d  d  |  j | d d  |  j | j d d  d  |  j | d d  |  j t | j    d d	 g  d  S(
   NR]   RR   t   bazt   quuxt   xyzzyR=   t   Quux(   R=   R]   (   R   R   (   R   R   t
   setdefaultRV   RW   (   R   RX   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_setdefault  s    	
c         C` sb   t    } | j d d  | j d d  | j d d  t  j t |   } |  j | |  d  S(   NR=   R,   R/   R-   (   R   Rs   RT   t   strt   assertEquals(   R   RX   t   headers2(    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_string  s    	(
   R(   R)   RY   R[   Ri   Ro   R~   R   R   R   (    (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyRP     s   			'			
	t   FormatTimestampTestc           B` sJ   e  Z d  Z d Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   g*; R]AAs   Sun, 27 Jan 2013 18:43:20 GMTc         C` s   |  j  t |  |  j  d  S(   N(   R   R   t   EXPECTED(   R   t   value(    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   check  s    c         C` s   |  j  |  j  d  S(   N(   R   t	   TIMESTAMP(   R   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_unix_time_float  s    c         C` s   |  j  t |  j   d  S(   N(   R   t   intR   (   R   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_unix_time_int  s    c         C` s   |  j  t j |  j   d  S(   N(   R   t   timet   gmtimeR   (   R   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_struct_time  s    c         C` s?   t  t j |  j   } |  j d t |   |  j |  d  S(   Ni	   (   t   tupleR   R   R   R   t   lenR   (   R   t   tup(    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_time_tuple  s    c         C` s    |  j  t j j |  j   d  S(   N(   R   t   datetimet   utcfromtimestampR   (   R   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_datetime  s    (
   R(   R)   R   R   R   R   R   R   R   R   (    (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyR     s   					t   HTTPServerRequestTestc           B` s#   e  Z d    Z d   Z d   Z RS(   c         C` s   t  d d  d  S(   Nt   urit   /(   R   (   R   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_default_constructor  s    c         C` s&   t  d d  } |  j | j t  d  S(   NR   R   (   R   t   assertIsInstanceR<   t   bytes(   R   t   requets(    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_body_is_a_byte_string  s    c         C` s9   t  d d d i d d 6 } |  j d t |  k  d  S(   NR   R   RX   s	   Coal Minet   Canary(   R   t
   assertTruet   repr(   R   t   request(    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt"   test_repr_does_not_contain_headers  s    (   R(   R)   R   R   R   (    (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyR     s   		t   ParseRequestStartLineTestc           B` s#   e  Z d  Z d Z d Z d   Z RS(   t   GETs   /foos   HTTP/1.1c         C` ss   d j  |  j |  j |  j g  } t |  } |  j | j |  j  |  j | j |  j  |  j | j |  j  d  S(   Nt    (	   t   joint   METHODt   PATHt   VERSIONR   R   t   methodt   patht   version(   R   t
   start_linet   parsed_start_line(    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_parse_request_start_line  s
    !(   R(   R)   R   R   R   R   (    (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyR     s   t   ParseCookieTestc           B` s#   e  Z d    Z d   Z d   Z RS(   c         C` s   |  j  t d  i d d 6d d 6 |  j  t d  i d d 6d	 d
 6d d 6d d 6 |  j  t d  i d d 6 |  j  t d  i d d 6 |  j  t d  i d d 6d d 6d d 6d d 6 d S(   sO   
        Test cases copied from Python's Lib/test/test_http_cookies.py
        s   chips=ahoy; vienna=fingert   ahoyt   chipst   fingert   viennas)   keebler="E=mc2; L=\"Loves\"; fudge=\012;"s   "E=mc2t   keeblers	   \"Loves\"t   Ls   \012t   fudgeRD   t    s   keebler=E=mc2s   E=mc2s   key:term=value:terms
   value:terms   key:terms   a=b; c=[; d=r; f=hR.   R+   t   [Rr   t   rt   dt   ht   fN(   R   R	   (   R   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_python_cookies  s    	#c         C` sL   |  j  t d  i d d 6d d 6 |  j  t d  i d d 6d d	 6 d  S(
   Ns   a=b; Domain=example.comR.   R+   s   example.comt   Domains   a=b; h=i; a=cRr   t   iR   (   R   R	   (   R   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_cookie_edgecases  s    c         C` s   |  j  d t d  j    |  j t d  i d d 6d d 6d d	 6 |  j t d
  i d d 6d d 6 |  j t d  i d d 6 |  j t d  i t d  d 6 |  j t d  i d d 6d d	 6 d S(   ss   
        Cookie strings that go against RFC6265 but browsers will send if set
        via document.cookie.
        t   django_languages$   abc=def; unnamed; django_language=ens   a=b; "; c=dR.   R+   RD   R   R   Rr   s   a b c=d e = f; gh=is   d e = fs   a b cR   t   ghs   a   b,c<>@:/[]?{}=d  "  =e,f gs   d  "  =e,f gs   a   b,c<>@:/[]?{}s   saint=André Bessettes   André Bessettet   saints     =  b  ;  ;  =  ;   c  =  ;  N(   R3   R	   t   keysR   R   (   R   (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   test_invalid_cookies  s    	+$(   R(   R)   R   R   R   (    (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyR     s   		(+   t
   __future__R    R   R   t   tornado.httputilR   R   R   R   R   R   R	   R
   R   t   tornado.escapeR   R   t   tornado.utilR   t   tornado.logR   t   tornado.testingR   t   tornado.test.utilR   Rt   R   RE   R   R   t   urllib.parseRT   R0   t   urlparset   TestCaseR   R*   R8   RP   R   R   R   R   (    (    (    s9   lib/python2.7/site-packages/tornado/test/httputil_test.pyt   <module>   s,   @V