ó
`¾Tc           @€  s.  d  Z  d d l m Z d d l 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 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 e j d „  ƒ Z d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d S(   sË   
    werkzeug.testsuite.formparser
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Tests the form parsing facilities.

    :copyright: (c) 2014 by Armin Ronacher.
    :license: BSD, see LICENSE for more details.
iÿÿÿÿ(   t   with_statementN(   t   joint   dirname(   t   WerkzeugTestCase(   t
   formparser(   t   create_environt   Client(   t   Requestt   Response(   t   RequestEntityTooLarge(   t	   MultiDict(   t   parse_form_data(   t   BytesIOc         C€  s›   |  j  d } | d k r0 t t |  j d ƒ ƒ S|  j | } t d j t | j ƒ j d ƒ t | j ƒ j d ƒ t | j	 ƒ j d ƒ | j
 j ƒ  f ƒ ƒ S(   Nt   objectt   texts   
t   ascii(   t   argsR   t   reprt   formt   filesR   t   filenamet   encodet   namet   content_typet   streamt   read(   t   requestt   result_objectt   f(    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   form_data_consumer   s    	c         C€  s&   t  |  d ƒ  } | j ƒ  SWd  QXd  S(   Nt   rb(   t   openR   (   R   R   (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   get_contents*   s    t   FormParserTestCasec           B€  s>   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c      	   €  sF  d } t  j d t | ƒ d t | ƒ d d d d ƒ ‰  d ˆ  _ |  j ˆ  j d	 d
 ƒ t  j d t | ƒ d t | ƒ d d d d ƒ ‰  d ˆ  _ |  j t	 ‡  f d †  ƒ t  j d t | ƒ d t | ƒ d d d d ƒ ‰  d ˆ  _ |  j ˆ  j d	 d
 ƒ d } t  j d t | ƒ d t | ƒ d d d d ƒ ‰  d ˆ  _ |  j t	 ‡  f d †  ƒ t  j d t | ƒ d t | ƒ d d d d ƒ ‰  d ˆ  _ |  j ˆ  j d	 d
 ƒ t  j d t | ƒ d t | ƒ d d d d ƒ ‰  d ˆ  _ |  j t	 ‡  f d †  ƒ t  j d t | ƒ d t | ƒ d d d d ƒ ‰  d ˆ  _ |  j ˆ  j d	 d
 ƒ d  S(   Ns   foo=Hello+World&bar=bazt   input_streamt   content_lengthR   s!   application/x-www-form-urlencodedt   methodt   POSTi  t   foou   Hello Worldi   c           €  s   ˆ  j  d S(   NR&   (   R   (    (   t   req(    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   <lambda>?   s    s…   --foo
Content-Disposition: form-field; name=foo

Hello World
--foo
Content-Disposition: form-field; name=bar

bar=baz
--foo--s!   multipart/form-data; boundary=fooi   c           €  s   ˆ  j  d S(   NR&   (   R   (    (   R'   (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyR(   Q   s    c           €  s   ˆ  j  d S(   NR&   (   R   (    (   R'   (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyR(   _   s    (
   R   t   from_valuesR   t   lent   max_content_lengtht   assert_strict_equalR   t   max_form_memory_sizet   assert_raisesR	   (   t   selft   data(    (   R'   sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   test_limiting1   sX    														c      	   C€  sM   d } t  j d t | ƒ d t | ƒ d d d d ƒ } |  j | j i  ƒ d  S(   Ns…   --foo
Content-Disposition: form-field; name=foo

Hello World
--foo
Content-Disposition: form-field; name=bar

bar=baz
--foo--R"   R#   R   s   multipart/form-dataR$   R%   (   R   R)   R   R*   t   assert_equalR   (   R/   R0   R'   (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   test_missing_multipart_boundaryh   s    	c         C€  s   t  d d d d ƒ} | d =| d =t j | ƒ \ } } } |  j | j ƒ  d ƒ |  j t | ƒ d ƒ |  j t | ƒ d ƒ d  S(	   Ns   /foos   http://example.org/R$   t   PUTt   CONTENT_TYPEt   CONTENT_LENGTHt    i    (   R   R   R   R,   R   R*   (   R/   t   envR   R   R   (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt(   test_parse_form_data_put_without_contents   s    c         C€  s   t  d d d d ƒ} | d =| d =t j | ƒ \ } } } |  j | j ƒ  d ƒ |  j t | ƒ d ƒ |  j t | ƒ d ƒ d  S(	   Ns   /foos   http://example.org/R$   t   GETR5   R6   R7   i    (   R   R   R   R,   R   R*   (   R/   R8   R   R   R   (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt(   test_parse_form_data_get_without_contentƒ   s    c         C€  sj   d d
 } t  j d i t | ƒ d f d 6d d ƒ } |  j t | j d j d	 ƒ ƒ | j d j ƒ  d  S(   Nt   xi   iX  R0   s   test.txtR&   R$   R%   u   filenoi `	 (   R   R)   R   t   assert_truet   hasattrR   R   t   close(   R/   R0   R'   (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   test_large_file   s
    
"	 c         €  sý   d d } d t  j f d „  ƒ  Y‰ d t  j f ‡ f d †  ƒ  Y‰  d t f ‡  f d	 †  ƒ  Y} | j d
 i t | ƒ d f d 6d d ƒ } |  j d | j d d ƒ |  j d | j d d d ƒ |  j d | j d d ƒ |  j | | j d d ƒ d  S(   NR<   i   iX  t	   StreamMPPc           B€  s   e  Z d  „  Z RS(   c         S€  sT   t  |  j | | | ƒ ƒ } t | ƒ } t | ƒ } |  j d ƒ i | d 6| d 6f S(   Nt   onet   two(    (   t   itert   parse_linest   nextt   cls(   R/   t   filet   boundaryR#   t   iRB   RC   (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   parseš   s    (   t   __name__t
   __module__RK   (    (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyRA   ™   s   t	   StreamFDPc           €  s:   e  Z ‡  f d  †  Z i  Z e j e j j ƒ e e d <RS(   c         €  sa   ˆ  |  j  |  j |  j d |  j d |  j ƒj | | j d ƒ j d ƒ | ƒ \ } } | | | f S(   NR-   RG   RI   R   (   t   stream_factoryt   charsett   errorsR-   RG   RK   t   getR   (   R/   R   t   mimetypeR#   t   optionsR   R   (   RA   (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   _sf_parse_multipart    s    	$s   multipart/form-data(   RL   RM   RU   t   parse_functionst   updateR   t   FormDataParser(    (   RA   (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyRN   Ÿ   s   t	   StreamReqc           €  s   e  Z ˆ  Z RS(    (   RL   RM   t   form_data_parser_class(    (   RN   (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyRY   «   s   R0   s   test.txtR&   R$   R%   t
   begin_fileRB   i    i   t   contRC   i `	 (   s   foos   test.txt(   R   t   MultiPartParserRX   R   R)   R   R,   R   (   R/   R0   RY   R'   (    (   RN   RA   sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   test_streaming_parse—   s    
"	(   RL   RM   R1   R3   R9   R;   R@   R^   (    (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyR!   /   s   	7			
	
t   MultiPartTestCasec           B€  sk   e  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  t t ƒ d ƒ } t t t ƒ } d d d/ d0 g d f d d d1 d2 g d f d d d3 d4 g d f d d d5 d6 g d f d d d7 d8 g d  f g } x~| D]v\ } } } } t  | | ƒ } t t  | d! ƒ ƒ }	 xí | D]å \ }
 } } } | j d" | d# |	 d$ d% | d& t |	 ƒ ƒ} | j	 ƒ  j
 d' d( ƒ } |  j | d) t |
 ƒ j d* ƒ ƒ |  j | d+ t | ƒ j d* ƒ ƒ |  j | d, t | ƒ j d* ƒ ƒ |  j | d( t t  | | ƒ ƒ ƒ q× W| j d- d# |	 d$ d% | d& t |	 ƒ ƒ} |  j | j	 ƒ  t | ƒ j d. ƒ ƒ qš Wd  S(9   Nt	   multiparts   firefox3-2png1txts9   ---------------------------186454651713519341951581030105u
   anchor.pngt   file1s	   image/pngs	   file1.pngu   application_edit.pngt   file2s	   file2.pngu   example texts   firefox3-2pnglongtexts8   ---------------------------14904044739787191031754711748u
   accept.pngu   add.pngu,   --long text
--with boundary
--lookalikes--s   opera8-2png1txts    ----------zEO9jQKmLc2Cq88c23Dx19u   arrow_branch.pngu   award_star_bronze_1.pngu   blafasel Ã¶Ã¤Ã¼s   webkit3-2png1txts&   ----WebKitFormBoundaryjdSFhcARk8fyGNy6u   gtk-apply.pngu
   gtk-no.pngu$   this is another text with Ã¼mlÃ¤Ã¼tss   ie6-2png1txts(   ---------------------------7d91b03a20128u	   file1.pngs   image/x-pngu	   file2.pngu   ie6 sucks :-/s   request.txts	   /?object=R0   R   s"   multipart/form-data; boundary="%s"R#   s   
i   i    R   i   i   s   /?object=texts   utf-8(   u
   anchor.pngRa   s	   image/pngs	   file1.png(   u   application_edit.pngRb   s	   image/pngs	   file2.png(   u
   accept.pngRa   s	   image/pngs	   file1.png(   u   add.pngRb   s	   image/pngs	   file2.png(   u   arrow_branch.pngRa   s	   image/pngs	   file1.png(   u   award_star_bronze_1.pngRb   s	   image/pngs	   file2.png(   u   gtk-apply.pngRa   s	   image/pngs	   file1.png(   u
   gtk-no.pngRb   s	   image/pngs	   file2.png(   u	   file1.pngRa   s   image/x-pngs	   file1.png(   u	   file2.pngRb   s   image/x-pngs	   file2.png(   R   R   t   __file__R   R   R   R    t   postR*   t   get_datat   splitR,   R   R   (   R/   t	   resourcest   clientt
   repositoryR   RI   R   R   t   folderR0   R   t   fieldR   t   fsnamet   responset   lines(    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt
   test_basic·   sL    
###'
c      	   C€  s£   t  t t ƒ } t t t ƒ d d ƒ } t | ƒ } d } | j d d | d d | d t | ƒ ƒ} | j	 ƒ  j
 d	 d
 ƒ } |  j | d t d ƒ j d ƒ ƒ d  S(   NR`   s   ie7_full_path_request.txts)   ---------------------------7da36d1b4a0164s    /?object=cb_file_upload_multipleR0   R   s"   multipart/form-data; boundary="%s"R#   s   
i   i    u2   Sellersburg Town Council Meeting 02-22-2010doc.docR   (   R   R   R   R   R   Rc   R    Rd   R*   Re   Rf   R,   R   R   (   R/   Rh   t	   data_fileR0   RI   Rm   Rn   (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   test_ie7_unc_pathã   s    c      	   C€  s\   d } t  j d t | ƒ d t | ƒ d d d d ƒ } |  j | j ƒ |  j | j ƒ d  S(   Ns}   --foo
Content-Disposition: form-data; name="test"; filename="test.txt"
Content-Type: text/plain

file contents and no endR"   R#   R   s!   multipart/form-data; boundary=fooR$   R%   (   R   R)   R   R*   R=   R   R   (   R/   R0   (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   test_end_of_fileî   s    	c      
   C€  s„   d } t  j t d | d d d d ƒ ƒ \ } } } |  j | ƒ |  j | ƒ |  j t t  j t d | d d d d ƒ d t ƒd  S(   Ns   --foo
Content-Disposition: form-data; name="test"; filename="test.txt"
Content-Transfer-Encoding: base64
Content-Type: text/plain

broken base 64--foo--R0   R$   R%   R   s!   multipart/form-data; boundary=foot   silent(   R   R   R   R=   R.   t
   ValueErrort   False(   R/   R0   t   _R   R   (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   test_brokenþ   s    	c      	   C€  sq   d } t  j d t | ƒ d t | ƒ d d d d ƒ } |  j | j d j d	 ƒ |  j | j d j ƒ  d
 ƒ d  S(   Nsa   --foo
Content-Disposition: form-data; name="test"; filename="test.txt"

file contents
--foo--R"   R#   R   s!   multipart/form-data; boundary=fooR$   R%   t   tests   test.txts   file contents(	   R   R)   R   R*   R2   R   R   R,   R   (   R/   R0   (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   test_file_no_content_type  s    	c      	   C€  sb   d } t  j d t | ƒ d t | ƒ d d d d ƒ } |  j | j ƒ |  j | j d d	 ƒ d  S(
   NsJ   

--foo
Content-Disposition: form-data; name="foo"

a string
--foo--R"   R#   R   s!   multipart/form-data; boundary=fooR$   R%   R&   u   a string(   R   R)   R   R*   R=   R   R,   R   (   R/   R0   (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   test_extra_newline  s    	c      	   C€  s¸   d } t  j d t | ƒ d t | ƒ d d d d ƒ } | j d } |  j | j d	 ƒ |  j | j i d
 d 6ƒ |  j | j d | j	 ƒ |  j | j	 d ƒ |  j | j d d ƒ d  S(   Ns²   --foo
Content-Disposition: form-data; name="foo"; filename="foo.txt"
X-Custom-Header: blah
Content-Type: text/plain; charset=utf-8

file contents, just the contents
--foo--R"   R#   R   s!   multipart/form-data; boundary=fooR$   R%   R&   s
   text/plains   utf-8RP   s   content-types   text/plain; charset=utf-8s   x-custom-headert   blah(
   R   R)   R   R*   R   R,   RS   t   mimetype_paramst   headersR   (   R/   R0   R'   R&   (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   test_headers.  s    	c         C€  s‚   x{ d D]s } | j  d ƒ } t j d t | ƒ d t | ƒ d d d d ƒ } |  j | j d d ƒ |  j | j d d ƒ q Wd  S(   Ns   
s   s   
s   --foos(   Content-Disposition: form-data; name=fooR7   s   this is just bars(   Content-Disposition: form-data; name=bart   blafasels   --foo--R"   R#   R   s!   multipart/form-data; boundary=fooR$   R%   R&   u   this is just bart   baru   blafasel(   s   
s   s   
(	   s   --foos(   Content-Disposition: form-data; name=fooR7   s   this is just bars   --foos(   Content-Disposition: form-data; name=barR7   R   s   --foo--(   R   R   R)   R   R*   R,   R   (   R/   t   nlR0   R'   (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   test_nonstandard_line_endings@  s"            		c         C€  sï   d „  } |  j  t | t ƒ  d d ƒ d } |  j  t | t | ƒ d t | ƒ ƒ d } |  j  t | t | ƒ d t | ƒ ƒ d } |  j  t | t | ƒ d t | ƒ ƒ t j d d	 g ƒ } |  j | d d
 ƒ |  j  t t j d d g ƒ d  S(   Nc         S€  s"   t  j | ƒ } | j |  | | ƒ S(   N(   R   R]   RK   (   R   RI   R#   t   parser(    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   parse_multipartU  s    s   broken  i    s   --foo

Hello World
--foo--R&   sk   --foo
Content-Disposition: form-field; name=foo
Content-Transfer-Encoding: base64

Hello World
--foo--sA   --foo
Content-Disposition: form-field; name=foo

Hello World
s
   foo: bar
s	    x test
s   bar
 x tests    x test(   R.   Rt   R   R*   R   t   parse_multipart_headersR,   (   R/   R„   R0   R<   (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   test_failuresT  s    	%%%c      	   C€  su   d t  f d „  ƒ  Y} d } d | d } | j d t | ƒ d t | ƒ d d	 d
 d ƒ } |  j | j d d ƒ d  S(   Nt
   ISORequestc           B€  s   e  Z d  Z RS(   t   latin1(   RL   RM   RP   (    (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyR‡   j  s   t   U2vlbmUgbORusY   --foo
Content-Disposition: form-data; name="test"
Content-Transfer-Encoding: base64

s	   
--foo--R"   R#   R   s!   multipart/form-data; boundary=fooR$   R%   Rx   u   SkÃ¥ne lÃ¤n(   R   R)   R   R*   R,   R   (   R/   R‡   t   contentsR0   R'   (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt'   test_bad_newline_bad_newline_assumptioni  s    	c         C€  s§   i  } d } d | d <d | d <t  t | ƒ ƒ | d <t | ƒ | d <t | d t ƒ\ } } } | j ƒ  } |  j | d	 ƒ |  j | t ƒ  ƒ |  j | t ƒ  ƒ d  S(
   Ns   --boundary--R%   t   REQUEST_METHODs&   multipart/form-data; boundary=boundaryR5   R6   s
   wsgi.inputRs   R7   (   t   strR*   R   R   Ru   R   R2   R
   (   R/   t   environR0   R   R   R   t   rv(    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   test_empty_multipartv  s    

(   RL   RM   Ro   Rq   Rr   Rw   Ry   Rz   R~   R‚   R†   R‹   R   (    (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyR_   µ   s   	,									t   InternalFunctionsTestCasec           B€  s   e  Z d  „  Z d „  Z RS(   c         C€  sˆ   t  j d ƒ d t f k s! t ‚ t  j d ƒ d t f k sB t ‚ t  j d ƒ d t f k sc t ‚ t  j d ƒ d t f k s„ t ‚ d  S(   NR&   s   foo
s   foos   foo
(   R   t   _line_parseRu   t   AssertionErrort   True(   R/   (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   test_line_parser†  s    !!!c         C€  s   t  d j t ƒ ƒ } t j ƒ  j } | | ƒ } |  j | d ƒ |  j t | ƒ d d g ƒ |  j | g  ƒ d ƒ |  j | d g ƒ d ƒ d  S(   Ns   


foo
bar
bazR&   s   bar
t   bazR7   (   RD   t
   splitlinesR”   R   R]   t   _find_terminatorR2   t   list(   R/   t   lineitert   find_terminatort   line(    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   test_find_terminatorŒ  s    (   RL   RM   R•   R   (    (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyR‘   „  s   	c          C€  sR   t  j ƒ  }  |  j t  j t ƒ ƒ |  j t  j t ƒ ƒ |  j t  j t ƒ ƒ |  S(   N(   t   unittestt	   TestSuitet   addTestt	   makeSuiteR!   R_   R‘   (   t   suite(    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyR¢   –  s
    (    t   __doc__t
   __future__R    Rž   t   os.pathR   R   t   werkzeug.testsuiteR   t   werkzeugR   t   werkzeug.testR   R   t   werkzeug.wrappersR   R   t   werkzeug.exceptionsR	   t   werkzeug.datastructuresR
   t   werkzeug.formparserR   t   werkzeug._compatR   t   applicationR   R    R!   R_   R‘   R¢   (    (    (    sc   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/werkzeug/testsuite/formparser.pyt   <module>
   s"   	†Ï