Ñò
ÜÂKc           @   s'  d  Z  d d k l Z d d k l Z d d k Td d k l Z l Z l Z d d k l	 Z	 d d k
 Td „  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 S(   sL   
    werkzeug.http test
    ~~~~~~~~~~~~~~~~~~~

    :license: BSD license.
iÿÿÿÿ(   t   datetime(   t   assert_raises(   t   *(   t	   http_datet   redirectR   (   t   create_environc              s”   t  d ƒ ‰  ˆ  i ƒ  d d g j p t ‚ ˆ  i d j p t ‚ ˆ  i d ƒ d j p t ‚ t t ‡  f d †  ƒ ˆ  i ƒ  d j p t ‚ d S(   s*   Regular accept header parsing and behaviors   en-us,ru;q=0.5s   en-ust   rui   c              s   ˆ  i  d  ƒ S(   t   de(   t   index(    (   t   a(    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   <lambda>   s    N(   t   parse_accept_headert   valuest   AssertionErrort   bestt   findR   t
   ValueErrort	   to_header(    (    (   R	   s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   test_accept   s     c              s’   t  d t ƒ ‰  t t ‡  f d †  ƒ ˆ  d d j p t ‚ ˆ  d d j p t ‚ ˆ  d d j p t ‚ ˆ  ˆ  i d ƒ d j p t ‚ d
 S(   s'   MIME accept header parsing and behaviorsc   text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5c              s   ˆ  d  S(   t   missing(    (    (   R	   (    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyR
   !   s    s	   image/pngi   s
   text/plaingš™™™™™é?s   foo/barg      à?s   */*N(   s   */*g      à?(   R   t
   MIMEAcceptR   R   R   R   (    (    (   R	   s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   test_mime_accept   s    	c          C   sÂ   t  d t ƒ }  |  i d d g ƒ d j p t ‚ |  i d g ƒ d j p t ‚ |  i d g ƒ d	 j p t ‚ |  i d d g d d ƒd j p t ‚ |  i d d g ƒ d j p t ‚ d	 S(
   s*   The `best_match` feature of accept objectssY   text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/pngs	   text/htmls   application/xhtml+xmls   foo/bars   bar/foot   defaults   application/xmls   text/xmlN(   R   R   t
   best_matchR   t   None(   R	   (    (    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   test_accept_matches(   s    	  c          C   sp   t  d t ƒ }  |  d |  d j o
 d j n p t ‚ |  d d j p t ‚ |  d d j p t ‚ d S(	   s*   Charset accept header parsing and behaviors   ISO-8859-1,utf-8;q=0.7,*;q=0.7s
   iso-8859-1s	   iso8859-1i   t   UTF8gffffffæ?t   ebcdicN(   R   t   CharsetAcceptR   (   R	   (    (    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   test_charset_accept6   s    -c          C   s‚   t  d t ƒ }  |  i d j p t ‚ d |  j p t ‚ d |  j p t ‚ |  d d j p t ‚ |  d d j p t ‚ d S(	   s+   Language accept header parsing and behaviors   de-AT,de;q=0.8,en;q=0.5s   de-ATt   de_ATt   ens   de-ati   g      à?N(   R   t   LanguageAcceptR   R   (   R	   (    (    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   test_language_accept>   s    c          C   s™   t  d ƒ }  d |  j p t ‚ d |  j p t ‚ d |  j p t ‚ t |  ƒ d d d d g j p t ‚ |  i d ƒ |  i ƒ  d j p t ‚ d	 S(
   s   Set header parsing and behaviors   foo, Bar, "Blah baz", Hehes   blah bazt   foobart   foot   Bars   Blah bazt   Hehet   FooN(   t   parse_set_headerR   t   listt   addR   (   t   hs(    (    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   test_set_headerH   s    &c          C   s*   t  d ƒ }  |  d d g j p t ‚ d S(   s   List header parsings   foo baz, blahs   foo bazt   blahN(   t   parse_list_headerR   (   t   hl(    (    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   test_list_headerS   s    c          C   s2   t  d ƒ }  |  h d d 6d d 6j p t ‚ d S(   s   Dict header parsings   foo="bar baz", blah=42s   bar bazR#   t   42R,   N(   t   parse_dict_headerR   (   t   d(    (    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   test_dict_headerY   s    c          C   s!  t  d ƒ }  |  i d j p t ‚ |  i p t ‚ t  d d t ƒ }  |  i p t ‚ |  d d j p t ‚ t ƒ  } | i d j p t ‚ | i d j p t ‚ t | _ | i d j p t ‚ t | _ | i d j p t ‚ | ` | i d j p t ‚ | i ƒ  d j p t ‚ d S(	   s)   Cache control header parsing and behaviors   max-age=0, no-cachei    s   private, community="UCI"t	   communityt   UCIR   s   no-cacheN(	   t   parse_cache_control_headert   max_ageR   t   no_cacheR   t   ResponseCacheControlt   privatet   TrueR   (   t   cct   c(    (    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   test_cache_control_header_   s"    					c          C   s~  t  d ƒ }  |  i d j p t ‚ |  i d j p t ‚ |  i d j p t ‚ t  d ƒ }  |  i d j p t ‚ |  i d j p t ‚ |  i d j p t ‚ |  i d	 j p t ‚ d
 |  i j p t ‚ |  i	 d j p t ‚ |  i
 d j p t ‚ |  i d j p t ‚ |  i d j p t ‚ t  d ƒ d j p t ‚ t  d ƒ d j p t ‚ t  d ƒ d j p t ‚ d S(   s)   Authorization header parsing and behaviors"   Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==t   basict   Aladdins   open sesames…  Digest username="Mufasa",
                 realm="testrealm@host.invalid",
                 nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
                 uri="/dir/index.html",
                 qop=auth,
                 nc=00000001,
                 cnonce="0a4f113b",
                 response="6629fae49393a05397450978507c4ef1",
                 opaque="5ccc069c403ebaf9f0171e9517f40e41"t   digests   testrealm@host.invalidt"   dcd98b7102dd2f0e8b11d0f600bfb0c093s   /dir/index.htmlt   autht   00000001t   0a4f113bt    6629fae49393a05397450978507c4ef1t    5ccc069c403ebaf9f0171e9517f40e41t    R#   N(   t   parse_authorization_headert   typeR   t   usernamet   passwordt   realmt   noncet   urit   qopt   nct   cnoncet   responset   opaqueR   (   R	   (    (    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   test_authorization_headeru   s$    	c          C   sG  t  d ƒ }  |  i d j p t ‚ |  i d j p t ‚ d |  _ |  i ƒ  d j p t ‚ t  d ƒ }  |  i d j p t ‚ |  i d j p t ‚ d	 |  i j p t ‚ d
 |  i j p t ‚ |  i d j p t ‚ |  i d j p t ‚ t  d ƒ }  |  i d j p t ‚ t  d ƒ i p t ‚ t  d ƒ p t ‚ d S(   s,   WWW Authenticate header parsing and behaviors   Basic realm="WallyWorld"R?   t
   WallyWorlds   Foo Bars   Basic realm="Foo Bar"sÑ   Digest
                 realm="testrealm@host.com",
                 qop="auth,auth-int",
                 nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
                 opaque="5ccc069c403ebaf9f0171e9517f40e41"RA   s   testrealm@host.comRC   s   auth-intRB   RG   t   brokenRH   N(   t   parse_www_authenticate_headerRJ   R   RM   R   RP   RN   RT   (   t   wa(    (    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   test_www_authenticate_header”   s"    		c          C   s`  t  d ƒ d j p t ‚ t  d t ƒ d j p t ‚ t d ƒ d t f j p t ‚ t d ƒ d t f j p t ‚ t d ƒ }  t |  ƒ d d d g j p t ‚ d |  j p t ‚ d |  j p t ‚ |  i d ƒ p t ‚ d |  j p t ‚ |  i d ƒ p t ‚ |  i d ƒ p t ‚ t |  i	 ƒ  i
 d	 ƒ ƒ d
 d d d g j p t ‚ d S(   s
   ETag toolsR#   s   "foo"s   w/"foo"s   "foo", "bar", w/"baz", blart   bart   blart   bazs   w/"baz"s   , s   "bar"s   "blar"N(   t
   quote_etagR   R;   t   unquote_etagt   Falset   parse_etagst   sortedt   contains_weakt   contains_rawR   t   split(   t   es(    (    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt
   test_etags°   s      #c           C   s«   t  d ƒ t d d d d d d ƒ j p t ‚ t  d ƒ t d d d d d d ƒ j p t ‚ t  d	 ƒ t d d d d d d ƒ j p t ‚ t  d
 ƒ d j p t ‚ d S(   s   Date parsings!   Sun, 06 Nov 1994 08:49:37 GMT    iÊ  i   i   i   i1   i%   s   Sunday, 06-Nov-94 08:49:37 GMTs    Sun Nov  6 08:49:37 1994R#   N(   t
   parse_dateR    R   R   (    (    (    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   test_parse_dateÁ   s    ///c           C   sy   t  d ƒ t d d d d d d ƒ j p t ‚ t  d ƒ t d d	 d	 d
 d
 ƒ j p t ‚ t  d ƒ d j p t ‚ d S(   s   Test for problematic days.s    Sun 02 Feb 1343 08:49:37 GMTi?  i   i   i1   i%   s   Thu, 01 Jan 1970 00:00:00 GMTi²  i   i    s   Thu, 33 Jan 1970 00:00:00 GMTN(   Rh   R    R   R   (    (    (    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   test_parse_date_overflowsÉ   s    /,c          C   s‚   t  ƒ  }  d |  f d d g } t | ƒ } t | ƒ | d |  f g j p t ‚ t | ƒ | t d |  f g ƒ j p t ‚ d S(	   s   Entity header removing functiont   Dates   Content-Types	   text/htmls   Content-Lengtht   0N(   s   Content-Types	   text/html(   s   Content-LengthRl   (   R   t   Headerst   remove_entity_headersR   (   t   nowt   headers1t   headers2(    (    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   test_remove_entity_headersÐ   s    	

c          C   sg   d d	 d
 g }  t  |  ƒ } t |  ƒ |  d g j p t ‚ t | ƒ | t  d g ƒ j p t ‚ d S(   s#   Hop-by-Hop header removing functiont
   Connectiont   closedR&   R[   s
   Keep-Alivet   wtfN(   s
   Connections   closed(   s   Foos   bar(   s
   Keep-AliveRu   (   s   Foos   bar(   s   Foos   bar(   Rm   t   remove_hop_by_hop_headersR   (   Rp   Rq   (    (    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   test_remove_hop_by_hop_headersÝ   s    	

c          C   sò   t  d ƒ }  d |  i j p t ‚ |  i d d j p t ‚ |  i d j p t ‚ t  d d ƒ }  d |  i j p t ‚ |  i d d j p t ‚ |  i d j p t ‚ t  d d	 ƒ }  |  i d d j p t ‚ |  i d	 j p t ‚ d
 S(   s   Tests the redirectingu
   /fÃ¼Ã¼bÃ¤rs   /f%C3%BC%C3%BCb%C3%A4rt   Locationi.  u   http://â˜ƒ.net/i3  s   http://xn--n3h.net/s   http://example.com/i1  N(   R   t   dataR   t   headerst   status_code(   t   resp(    (    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   test_redirectê   s    c           C   sS   t  d h d d 6ƒ d j p t ‚ t  d h d d 6d d 6ƒ d j p t ‚ d S(   s!   Test options header dumping aloneR#   i*   R[   s   foo; bar=42t   fizzs   foo; bar=42; fizzN(   t   dump_options_headerR   R   (    (    (    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   test_dump_options_headerû   s    c           C   s˜   t  d d d g ƒ d j p t ‚ t  d d d g d t ƒd j p t ‚ t  h d d 6d t ƒd	 j p t ‚ t  h d d 6ƒ d
 j p t ‚ d S(   s&   Test the header dumping function alonei   i   i   s   1, 2, 3t   allow_tokens   "1", "2", "3"R[   R#   s	   foo="bar"s   foo=barN(   t   dump_headerR   R`   (    (    (    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   test_dump_header  s    #)'c           C   sŽ   t  d ƒ d h d d 6f j p t ‚ t  d ƒ d h d d 6d d 6f j p t ‚ t  d ƒ d h d d 6d d 6d
 d	 6f j p t ‚ d
 S(   s   Parse options headers   something; foo="other"thing"t	   somethings   other"thingR#   s$   something; foo="other"thing"; meh=42R0   t   mehs*   something; foo="other"thing"; meh=42; bleht   blehN(   t   parse_options_headerR   R   (    (    (    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   test_parse_options_header  s    		%	c       	   C   sþ   t  ƒ  }  d |  d <t |  d d ƒp t ‚ d |  d <t t t |  d d d d ƒt d	 ƒ |  d
 <t |  d d	 ƒp t ‚ t t d d d d d ƒ ƒ |  d <t |  d t d d d d d ƒ ƒp t ‚ t |  d t d d d d d ƒ ƒp t ‚ d S(   s   Test is_resource_modified alonet   POSTt   REQUEST_METHODt   etagt   testingt   GETRy   R0   t   23t   awesomet   HTTP_IF_NONE_MATCHiØ  i   i   i   t   HTTP_IF_MODIFIED_SINCEt   last_modifiedi    i   N(   R   t   is_resource_modifiedR   R   t	   TypeErrort   generate_etagR   R    (   t   env(    (    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   test_is_resource_modified  s    	

"	$	N(    t   __doc__R    t
   nose.toolsR   t   werkzeug.httpt   werkzeug.utilsR   R   t   werkzeug.testR   t   werkzeug.datastructuresR   R   R   R   R!   R+   R/   R3   R>   RU   RZ   Rg   Ri   Rj   Rr   Rw   R}   R€   Rƒ   Rˆ   R—   (    (    (    s=   /Users/mitsuhiko/Development/werkzeug-main/tests/test_http.pyt   <module>   s6   

	
				
															
