
'Uc           @   s   d  d l  Z  d  d l Z d  d l m Z d  d l m Z d  d l m Z m	 Z	 m
 Z
 m Z m Z d e j f d     YZ d e f d     YZ d	   Z d
   Z d e f d     YZ e d k r e j   n  d S(   iN(   t   xmlrpc_client(   t   urlparse(   t   Requestt   FormRequestt   XmlRpcRequestt   Headerst   HtmlResponset   RequestTestc           B   s   e  Z e Z d  Z i  Z i  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(   t   GETc         C   s_  |  j  t |  j  |  j  t |  j d  |  j d  } |  j d  } t | j t  s_ t  |  j | j d  |  j | j	 |  j
  t | j t  s t  |  j | j |  j  |  j | j |  j  i d d 6} i d d 6} |  j d d | d | d	 d
 } | j | k	 st  |  j | j |  | j | k	 sDt  |  j | j d d  d  S(   Ni{   s   http://www.example.comt   lolot   lalat   cocot   cacat   metat   headerst   bodys   a body(   t   assertRaisest	   Exceptiont   request_classt	   TypeErrort
   isinstancet   urlt   strt   AssertionErrort   assertEqualt   methodt   default_methodR   R   t   default_headersR   t   default_meta(   t   selft   rR   R   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt	   test_init   s"    !c         C   s   |  j  t |  j d  d  S(   Nt   foo(   R   t
   ValueErrorR   (   R   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_url_no_scheme*   s    c   	      C   s  d } i d d 6d d 6} |  j  d | d |  } |  j  d | d | j  } |  j | j | j  |  j | j | k  |  j | j | j k  t i d d	 6d
 d 6 } d | d <xW | j   D]I \ } } |  j t | t   x$ | D] } |  j t | t   q Wq Wd  S(   Ns   http://www.scrapy.orgt   gzipt   Accepts   nothing to tell yous   Custom-HeaderR   R   u   val1t   key1t   val2u   key2u   newvalu   newkey(	   R   R   R   t   assertFalseR   t	   iteritemst   assert_R   R   (	   R   R   R   R   t   pt   ht   kt   vt   s(    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_headers-   s    
c         C   sw   d } |  j  d |  } |  j  d |  } |  j | |  t   } | j |  | j |  |  j t |  d  d  S(   Ns   http://www.scrapy.orgR   i   (   R   t   assertNotEqualt   sett   addR   t   len(   R   R   t   r1t   r2t   set_(    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_eq@   s    	c         C   s   |  j  d d  } |  j | j d  |  j  d d  } |  j | j d  |  j  d d  } |  j | j d  |  j  d d d d  } |  j  d d d d  } |  j | j d	  |  j | j d
  d S(   s   Request url testsR   s   http://www.scrapy.org/paths#   http://www.scrapy.org/blank%20spaces!   http://www.scrapy.org/blank spaceu   http://www.scrapy.org/price/£t   encodings   utf-8t   latin1s"   http://www.scrapy.org/price/%C2%A3s   http://www.scrapy.org/price/%A3N(   R   R   R   (   R   R   R4   R5   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_urlK   s    c         C   s   |  j  d d  } | j d k s' t  |  j  d d d d  } t | j t  sW t  |  j | j d  |  j  d d d d d d  } t | j t  s t  |  j | j d  |  j  d d d d d d	  } t | j t  s t  |  j | j d
  d  S(   NR   s   http://www.example.com/t    R   s   utf-8u   Price: £100R8   s   Price: £100R9   s   Price: 100(   R   R   R   R   R   R   R8   (   R   R4   R5   t   r3t   r4(    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt	   test_body\   s    c         C   sN   |  j  d d  } |  j | j d  |  j  d d  } |  j | j d  d  S(   NR   s+   http://www.example.com/ajax.html#!key=values?   http://www.example.com/ajax.html?_escaped_fragment_=key%3Dvalueu+   http://www.example.com/ajax.html#!key=value(   R   R   R   (   R   R   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_ajax_urll   s    c         C   s/  d   } |  j  d d | d | } d | j d <| j   } | j | k sR t  | j | k sg t  | j | j k s t  | j | j k s t  | j | j k	 s t d   |  j | j | j  | j | j k	 s t d   |  j | j | j  |  j | j | j  |  j | j	 | j	  d	 S(
   s   Test Request copyc           S   s   d  S(   N(    (    (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   somecallbackw   s    s   http://www.example.comt   callbackt   errbackt   barR    s*   meta must be a shallow copy, not identicals-   headers must be a shallow copy, not identicalN(
   R   R   t   copyRA   R   RB   R   R   R8   t   dont_filter(   R   R@   R4   R5   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt	   test_copyt   s    	c         C   sM   d |  j  f d     Y} | d  } | j   } t |  | k sI t  d S(   s1   Test Request children copies preserve their classt   CustomRequestc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyRG      s   s   http://www.example.comN(   R   RD   t   typeR   (   R   RG   R4   R5   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_copy_inherited_classes   s    c      	   C   sY  |  j  d d d } t t | j d d  } | j d d d d d	 |  } |  j | j | j  |  j | j | j f d  |  j | j | j f d  |  j | j | j f |  j	 | f  |  j  d d i d d 6d t
 } | j d d d d
 d i  d t  } |  j | j d  |  j | j d
  |  j | j i   | j t k sUt  d S(   s   Test Request.replace() methods   http://www.example.comR   R   t   keyt   valuet   POSTR   s   New bodyR   R;   R   i   t   aRE   R   s   http://www.example.com/2N(   s   GETs   POST(   R;   s   New body(   R   R   t   dictR   t   replaceR   R   R   R   R   t   Truet   FalseR   RE   R   (   R   R4   t   hdrsR5   R<   R=   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_replace   s    %"$c         C   s1   |  j  d d d } t | j t  s- t  d  S(   Ns   http://www.example.comR   u   POST(   R   R   R   R   R   (   R   R   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_method_always_str   s    c         C   sE   |  j  d  } |  j t t | d d  |  j t t | d d  d  S(   Ns   http://example.comR   s   http://example2.comR   t   xxx(   R   R   t   AttributeErrort   setattr(   R   R   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_immutable_attributes   s    (   RH   RI   R   R   R   R   R   R   R"   R/   R7   R:   R>   R?   RF   RK   RU   RV   RZ   (    (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyR   	   s    											t   FormRequestTestc           B   sp  e  Z e 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 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+ RS((   c         C   s   |  j  t |  t |  |  S(   N(   R   t   sorted(   R   t   firstt   secondt   msg(    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   assertSortedEqual   s    c         C   s,   |  j  d d i  } |  j | j d  d  S(   Ns   http://www.example.comt   formdataR;   (   R   R   R   (   R   R4   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_empty_formdata   s    c         C   s   i d d 6d d 6} |  j  d d | } |  j | j d  |  j | j d  |  j | j j d	  d
 j d	   |  j | j d d  d  S(   Nt   twot   ones   £ 100t   prices   http://www.example.comRa   RN   s   utf-8t   &s   price=%C2%A3+100&one=twos   Content-Types!   application/x-www-form-urlencoded(   R   R   R   R8   R`   R   t   splitR   (   R   t   dataR5   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_default_encoding   s    c         C   sR   i d d 6} |  j  d d | d d } |  j | j d  |  j | j d  d  S(   Nu   £ 100Re   s   http://www.example.comRa   R8   R9   s   price=%A3+100(   R   R   R8   R   (   R   Rh   R<   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_custom_encoding   s    c         C   s[   i d d 6d d d g d 6} |  j  d d | } |  j | j j d	  d
 j d	   d  S(   Nu   £ 100Re   t   redt   bluet   greent   colourss   http://www.example.comRa   Rf   s7   colours=red&colours=blue&colours=green&price=%C2%A3+100(   R   R`   R   Rg   (   R   Rh   R<   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_multi_key_values   s    c         C   s  t  d d d } |  j j | d i d d g d 6d d	 6} |  j | j d
  |  j | j d d  |  j | j d  t |  } |  j t | d  t d d g   |  j t | d  t d d g   |  j | d d g  |  j | d	 d g  d  S(   Ns   <form action="post.php" method="POST">
            <input type="hidden" name="test" value="val1">
            <input type="hidden" name="test" value="val2">
            <input type="hidden" name="test2" value="xxx">
            </form>R   s%   http://www.example.com/this/list.htmlRa   Rc   t   threeRd   t   sevent   sixRN   s   Content-types!   application/x-www-form-urlencodeds$   http://www.example.com/this/post.phpt   testt   val1R&   t   test2RW   (	   t   _buildresponseR   t   from_responseR   R   R   R   t   _qsR1   (   R   t   responset   reqt   fs(    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_from_response_post   s    	&&c         C   s   t  d  } |  j j | d i d d g d 6d d 6d i d	 d
 6} |  j | j d  |  j | j d d  |  j | j d
 d	  d  S(   Ns   <form action="post.php" method="POST">
            <input type="hidden" name="test" value="val1">
            <input type="hidden" name="test" value="val2">
            <input type="hidden" name="test2" value="xxx">
            </form>Ra   Rc   Rp   Rd   Rq   Rr   R   s   gzip,deflates   Accept-EncodingRN   s   Content-types!   application/x-www-form-urlencoded(   Rv   R   Rw   R   R   R   (   R   Ry   Rz   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt    test_from_response_extra_headers   s    	c         C   s  t  d d d } |  j j | d i d d g d 6d d	 6} |  j | j d
  |  j t | j  j d  |  j t | j  j d  t	 |  } |  j t
 | d  t
 d d g   |  j t
 | d  t
 d d g   |  j | d d g  |  j | d	 d g  d  S(   Ns   <form action="get.php" method="GET">
            <input type="hidden" name="test" value="val1">
            <input type="hidden" name="test" value="val2">
            <input type="hidden" name="test2" value="xxx">
            </form>R   s%   http://www.example.com/this/list.htmlRa   Rc   Rp   Rd   Rq   Rr   R   s   www.example.coms   /this/get.phpRs   Rt   R&   Ru   RW   (   Rv   R   Rw   R   R   R   R   t   hostnamet   pathRx   R1   (   R   Ry   R4   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_from_response_get   s    	&&c         C   si   t  d  } |  j j | d i d d 6} t |  } |  j | d d g  |  j | d d g  d  S(   Ns   <form action="get.php" method="POST">
            <input type="hidden" name="one" value="1">
            <input type="hidden" name="two" value="3">
            </form>Ra   t   2Rc   Rd   t   1(   Rv   R   Rw   Rx   R   (   R   Ry   Rz   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt"   test_from_response_override_params  s    	c         C   sZ   t  d  } t j |  } |  j | j d  t j | d d } |  j | j d  d  S(   NsW   <html><body>
                <form action="/app"></form>
                </body></html>R   R   RN   (   Rv   R   Rw   R   R   (   R   Ry   t   request(    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt"   test_from_response_override_method  s    	c         C   s   t  d  } t j |  } |  j | j d  t j | d d } |  j | j d  t j | d d } |  j | j d  d  S(   NsW   <html><body>
                <form action="/app"></form>
                </body></html>s   http://example.com/appR   s   http://foo.bar/absolutes	   /relatives   http://example.com/relative(   Rv   R   Rw   R   R   (   R   Ry   R   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_from_response_override_url"  s    	c         C   s   t  d  } |  j j | d i d d 6} t |  } |  j | d d g  |  j d | k |  |  j | d d	 g  |  j | d d g  d  S(
   Ns0  <form action="get.php" method="GET">
            <input type="submit" name="clickable1" value="clicked1">
            <input type="hidden" name="one" value="1">
            <input type="hidden" name="two" value="3">
            <input type="submit" name="clickable2" value="clicked2">
            </form>Ra   R   Rc   t
   clickable1t   clicked1t
   clickable2Rd   R   (   Rv   R   Rw   Rx   R   R'   (   R   Ry   Rz   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt)   test_from_response_submit_first_clickable.  s    	c         C   s   t  d  } |  j j | d i d d 6d i d d 6} t |  } |  j | d d g  |  j d	 | k |  |  j | d
 d g  |  j | d d g  d  S(   Ns0  <form action="get.php" method="GET">
            <input type="submit" name="clickable1" value="clicked1">
            <input type="hidden" name="one" value="1">
            <input type="hidden" name="two" value="3">
            <input type="submit" name="clickable2" value="clicked2">
            </form>Ra   R   Rc   t	   clickdataR   t   namet   clicked2R   Rd   R   (   Rv   R   Rw   Rx   R   R'   (   R   Ry   Rz   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt-   test_from_response_submit_not_first_clickable=  s    	c         C   sN   t  d  } |  j j | d t } t |  } |  j | i d g d 6 d  S(   Ns   <form>
            <input type="hidden" name="i1" value="i1v">
            <input type="image" name="i2" src="http://my.image.org/1.jpg">
            <input type="submit" name="i3" value="i3v">
            </form>t
   dont_clickt   i1vt   i1(   Rv   R   Rw   RR   Rx   R   (   R   Ry   Rz   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt-   test_from_response_dont_submit_image_as_inputM  s
    	c         C   sX   t  d  } |  j j | d t } t |  } |  j | i d g d 6d g d 6 d  S(   Ns   <form>
            <input type="hidden" name="i1" value="i1v">
            <input type="text" name="i2" value="i2v">
            <input type="reset" name="resetme">
            <input type="submit" name="i3" value="i3v">
            </form>R   R   R   t   i2vt   i2(   Rv   R   Rw   RR   Rx   R   (   R   Ry   Rz   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt-   test_from_response_dont_submit_reset_as_inputX  s
    	c         C   s   t  d  } |  j j | d i d d 6d d 6} t |  } |  j | d d g  |  j | d d g  |  j | d	 d g  d  S(
   Ns<  <form action="get.php" method="GET">
            <input type="submit" name="clickable" value="clicked1">
            <input type="submit" name="clickable" value="clicked2">
            <input type="hidden" name="one" value="clicked1">
            <input type="hidden" name="two" value="clicked2">
            </form>R   t	   clickableR   R   RM   Rd   R   Rc   (   Rv   R   Rw   Rx   R   (   R   Ry   Rz   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt%   test_from_response_multiple_clickdatad  s    	c         C   sU   t  d  } |  j j | d i d d 6} t |  } |  j | d j d   d  S(   Nu@  <form action="get.php" method="GET">
            <input type="submit" name="price in £" value="£ 1000">
            <input type="submit" name="price in €" value="€ 2000">
            <input type="hidden" name="poundsign" value="£">
            <input type="hidden" name="eurosign" value="€">
            </form>R   u   price in £R   s   utf-8(   Rv   R   Rw   Rx   t
   assertTruet   encode(   R   Ry   Rz   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt$   test_from_response_unicode_clickdatas  s    	c         C   s   t  d  } |  j j | d d d i d d 6} t |  } |  j | d d g  |  j | d d	 g  |  j d
 | k |  d  S(   Nsn  <form name="form1">
            <input type="submit" name="clickable" value="clicked1">
            <input type="hidden" name="field1" value="value1">
            </form>
            <form name="form2">
            <input type="submit" name="clickable" value="clicked2">
            <input type="hidden" name="field2" value="value2">
            </form>
            t   formnamet   form2R   R   R   R   t   field2t   value2t   field1(   Rv   R   Rw   Rx   R   R'   (   R   Ry   Rz   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt+   test_from_response_multiple_forms_clickdata  s    		c         C   s_   t  d  } |  j j | d i d d 6d i d d 6} t |  } |  j | d d g  d  S(   Ns>   <form><input type="submit" name="clickme" value="one"> </form>Ra   Rc   t   clickmeR   R   (   Rv   R   Rw   Rx   R   (   R   Ry   Rz   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt%   test_from_response_override_clickable  s
    c         C   s`   t  d  } |  j j | d t } t |  } |  j d | k |  |  j d | k |  d  S(   Ns0  <form action="get.php" method="GET">
            <input type="submit" name="clickable1" value="clicked1">
            <input type="hidden" name="one" value="1">
            <input type="hidden" name="two" value="3">
            <input type="submit" name="clickable2" value="clicked2">
            </form>R   R   R   (   Rv   R   Rw   RR   Rx   R'   (   R   Ry   R4   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_from_response_dont_click  s    	c         C   s6   t  d  } |  j t |  j j | d i d d 6d  S(   Ns=  
            <form action="get.php" method="GET">
            <input type="submit" name="clickable1" value="clicked1">
            <input type="hidden" name="one" value="1">
            <input type="hidden" name="two" value="3">
            <input type="submit" name="clickable2" value="clicked2">
            </form>R   t   submitRJ   (   Rv   R   R!   R   Rw   (   R   Ry   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt&   test_from_response_ambiguous_clickdata  s    	c         C   s6   t  d  } |  j t |  j j | d i d d 6d  S(   Ns]   <form>
            <input type="submit" name="clickable" value="clicked">
            </form>R   t   notmet   nonexistent(   Rv   R   R!   R   Rw   (   R   Ry   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt)   test_from_response_non_matching_clickdata  s    	c         C   s[   t  d  } |  j j | d i d d 6} t |  } |  j d |  |  j d |  d  S(   Ns   <form>
            <input type="submit" name="clickable1" value="clicked1">
            <input type="submit" name="clickable2" value="clicked2">
            </form>
            R   i   t   nrR   R   (   Rv   R   Rw   Rx   t   assertInt   assertNotIn(   R   Ry   Rz   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt%   test_from_response_nr_index_clickdata  s    	c         C   s6   t  d  } |  j t |  j j | d i d d 6d  S(   Nsj   <form>
            <input type="submit" name="clickable" value="clicked">
            </form>
            R   i   R   (   Rv   R   R!   R   Rw   (   R   Ry   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt-   test_from_response_invalid_nr_index_clickdata  s    	c         C   s)   t  d  } |  j t |  j j |  d  S(   Ns   <html></html>(   Rv   R   R!   R   Rw   (   R   Ry   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt    test_from_response_errors_noform  s    c         C   s_   t  d  } |  j j | d i d d 6} t |  } |  j | i d g d 6d g d 6 d  S(   Nsa   <!DOCTYPE html><body></html><form><input type="text" name="foo" value="xxx"></form></body></html>Ra   t   buzRC   RW   R    (   Rv   R   Rw   Rx   R   (   R   Ry   Rz   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt    test_from_response_invalid_html5  s    c         C   s/   t  d  } |  j t |  j j | d d d  S(   Ns   <form action="get.php" method="GET">
            <input type="hidden" name="test" value="val1">
            <input type="hidden" name="test" value="val2">
            <input type="hidden" name="test2" value="xxx">
            </form>t
   formnumberi   (   Rv   R   t
   IndexErrorR   Rw   (   R   Ry   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt$   test_from_response_errors_formnumber  s    	c         C   s   t  d  } |  j j | d i d d 6} |  j | j d  |  j | j d d  t |  } |  j | i d g d	 6d g d 6 d  S(
   Ns   <form action="post.php" method="POST">
            <input type="hidden" name="one" value="1">
            <input type="hidden" name="two" value="2">
            </form>Ra   t   3Rc   RN   s   Content-types!   application/x-www-form-urlencodedR   Rd   (   Rv   R   Rw   R   R   R   Rx   (   R   Ry   R4   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_from_response_noformname  s    	c         C   sk   t  d  } |  j j | d d } |  j | j d  t |  } |  j | i d g d 6d g d 6 d  S(	   Nsm  <form action="post.php" method="POST">
            <input type="hidden" name="one" value="1">
            <input type="hidden" name="two" value="2">
            </form>
            <form name="form2" action="post.php" method="POST">
            <input type="hidden" name="three" value="3">
            <input type="hidden" name="four" value="4">
            </form>R   R   RN   t   4t   fourR   Rp   (   Rv   R   Rw   R   R   Rx   (   R   Ry   R4   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt"   test_from_response_formname_exists  s    	c         C   sa   t  d  } |  j j | d d } |  j | j d  t |  } |  j | i d g d 6 d  S(   Ns	  <form name="form1" action="post.php" method="POST">
            <input type="hidden" name="one" value="1">
            </form>
            <form name="form2" action="post.php" method="POST">
            <input type="hidden" name="two" value="2">
            </form>R   t   form3RN   R   Rd   (   Rv   R   Rw   R   R   Rx   (   R   Ry   R4   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt$   test_from_response_formname_notexist  s    	c         C   s5   t  d  } |  j t |  j j | d d d d d  S(   Ns	  <form name="form1" action="post.php" method="POST">
            <input type="hidden" name="one" value="1">
            </form>
            <form name="form2" action="post.php" method="POST">
            <input type="hidden" name="two" value="2">
            </form>R   R   R   i   (   Rv   R   R   R   Rw   (   R   Ry   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt-   test_from_response_formname_errors_formnumber  s    	c         C   s_   t  d  } |  j j |  } t |  } |  j | i d g d 6d g d 6d d g d 6 d  S(	   Ns  <form>
            <select name="i1">
                <option value="i1v1">option 1</option>
                <option value="i1v2" selected>option 2</option>
            </select>
            <select name="i2">
                <option value="i2v1">option 1</option>
                <option value="i2v2">option 2</option>
            </select>
            <select>
                <option value="i3v1">option 1</option>
                <option value="i3v2">option 2</option>
            </select>
            <select name="i4" multiple>
                <option value="i4v1">option 1</option>
                <option value="i4v2" selected>option 2</option>
                <option value="i4v3" selected>option 3</option>
            </select>
            <select name="i5" multiple>
                <option value="i5v1">option 1</option>
                <option value="i5v2">option 2</option>
            </select>
            <select name="i6"></select>
            <select name="i7"/>
            </form>t   i1v2R   t   i2v1R   t   i4v2t   i4v3t   i4(   Rv   R   Rw   Rx   R   (   R   t   resRz   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_from_response_select  s
    	c         C   sR   t  d  } |  j j |  } t |  } |  j | i d g d 6d g d 6 d  S(   Ns  <form>
            <input type="radio" name="i1" value="i1v1">
            <input type="radio" name="i1" value="iv2" checked>
            <input type="radio" name="i2" checked>
            <input type="radio" name="i2">
            <input type="radio" name="i3" value="i3v1">
            <input type="radio" name="i3">
            <input type="radio" value="i4v1">
            <input type="radio">
            </form>t   iv2R   t   onR   (   Rv   R   Rw   Rx   R   (   R   R   Rz   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_from_response_radio6  s
    
	c         C   sR   t  d  } |  j j |  } t |  } |  j | i d g d 6d g d 6 d  S(   Ns  <form>
            <input type="checkbox" name="i1" value="i1v1">
            <input type="checkbox" name="i1" value="iv2" checked>
            <input type="checkbox" name="i2" checked>
            <input type="checkbox" name="i2">
            <input type="checkbox" name="i3" value="i3v1">
            <input type="checkbox" name="i3">
            <input type="checkbox" value="i4v1">
            <input type="checkbox">
            </form>R   R   R   R   (   Rv   R   Rw   Rx   R   (   R   R   Rz   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_from_response_checkboxF  s
    
	c         C   sR   t  d  } |  j j |  } t |  } |  j | i d g d 6d g d 6 d  S(   Ns   <form>
            <input type="text" name="i1" value="i1v1">
            <input type="text" name="i2">
            <input type="text" value="i3v1">
            <input type="text">
            </form>t   i1v1R   R;   R   (   Rv   R   Rw   Rx   R   (   R   R   Rz   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_from_response_input_textV  s
    	c         C   sR   t  d  } |  j j |  } t |  } |  j | i d g d 6d g d 6 d  S(   Ns   <form>
            <input type="hidden" name="i1" value="i1v1">
            <input type="hidden" name="i2">
            <input type="hidden" value="i3v1">
            <input type="hidden">
            </form>R   R   R;   R   (   Rv   R   Rw   Rx   R   (   R   R   Rz   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_from_response_input_hiddenb  s
    	c         C   s\   t  d  } |  j j |  } t |  } |  j | i d g d 6d g d 6d g d 6 d  S(   Ns   <form>
            <textarea name="i1">i1v</textarea>
            <textarea name="i2"></textarea>
            <textarea name="i3"/>
            <textarea>i4v</textarea>
            </form>R   R   R;   R   t   i3(   Rv   R   Rw   Rx   R   (   R   R   Rz   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt!   test_from_response_input_textarean  s
    	c      
   C   s_   t  d  } |  j j |  } t |  } |  j t |  t d d d d d d d g   d  S(	   Ns7  <form>
            <div>
              <fieldset>
                <input type="text" name="i1">
                <select name="i2">
                    <option value="v1" selected>
                </select>
              </fieldset>
              <input type="radio" name="i3" value="i3v2" checked>
              <input type="checkbox" name="i4" value="i4v2" checked>
              <textarea name="i5"></textarea>
              <input type="hidden" name="h1" value="h1v">
              </div>
            <input type="hidden" name="h2" value="h2v">
            </form>t   h2R   R   R   t   h1t   i5R   (   Rv   R   Rw   Rx   R   R1   (   R   R   Rz   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_from_response_descendantsz  s
    	c         C   s   t  d  } |  j j | d d } t |  } |  j | d d g  |  j j | d d } t |  } |  j | d d g  |  j t |  j j | d d	 d  S(
   Nsa  <form action="post.php" method="POST">
            <input type="hidden" name="one" value="1">
            <input type="hidden" name="two" value="2">
            </form>
            <form action="post2.php" method="POST">
            <input type="hidden" name="three" value="3">
            <input type="hidden" name="four" value="4">
            </form>t	   formxpaths   //form[@action='post.php']Rd   R   s   //form/input[@name='four']Rp   R   s   //form/input[@name='abc'](   Rv   R   Rw   Rx   R   R   R!   (   R   Ry   R4   R{   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_from_response_xpath  s    	N(,   RH   RI   R   R   t   NoneR`   Rb   Ri   Rj   Ro   R|   R}   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyR[      sP   		
							
																														c         K   s:   | j  d |   | j  d d  | j  d d  t |   S(   NR   R   s   http://example.comR8   s   utf-8(   t
   setdefaultR   (   R   t   kwargs(    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyRv     s    c         C   sA   |  j  d k r |  j } n |  j j d  d } t j | t  S(   NRN   t   ?i   (   R   R   R   t	   partitiont   cgit   parse_qsRR   (   Rz   t   qs(    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyRx     s    t   XmlRpcRequestTestc           B   s6   e  Z e Z d  Z i d g d 6Z d   Z d   Z RS(   RN   s   text/xmls   Content-Typec         K   s   |  j  d |  } |  j | j d d  |  j | j t j |    |  j | j d  |  j | j | j d d   |  j	 | j
 t  d  S(   Ns   http://scrapytest.org/rpc2s   Content-Types   text/xmlRN   R8   s   utf-8(   R   R   R   R   t	   xmlrpclibt   dumpsR   R8   t   getR   RE   RR   (   R   R   R   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   _test_request  s    c         C   s   |  j  d d  |  j  d d d d  |  j  d d d d  |  j  d d d
 d  |  j  d d d
 d  |  j  d d d d  |  j t |  j   |  j t |  j  d d d  S(   Nt   paramsRM   t   usernamet   passwordt
   methodnamet   loginRy   t   methodresponseu   pas£R8   s   utf-8t   latint
   allow_nonei   (   s   value(   s   usernames   password(   s   response(   u   pas£(   u   pas£(   N(   N(   R   R   R   R   (   R   (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   test_xmlrpc_dumps  s    (   RH   RI   R   R   R   R   R   R   (    (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyR     s
   	t   __main__(   R   t   unittestt	   six.movesR    R   t   six.moves.urllib.parseR   t   scrapy.httpR   R   R   R   R   t   TestCaseR   R[   Rv   Rx   R   RH   t   main(    (    (    s;   /home/travis/build/scrapy/scrapy/tests/test_http_request.pyt   <module>   s   ( 		