
{2Pc           @   s  d  Z  d d l Z d d l Z d d l Z d d l Z d d l m Z d d l m Z m	 Z	 d d l
 m Z m Z m Z m Z m Z d d l m Z m Z e j d  e k	 Z e j d  e k	 Z d	 e f d
     YZ d e f d     YZ d e f d     YZ d e f d     YZ d e f d     YZ d e f d     YZ d e f d     YZ d e f d     YZ d e f d     YZ d e f d     YZ  d e f d     YZ! d e f d      YZ" d! e" f d"     YZ# d# e" f d$     YZ$ d% e f d&     YZ% d' e f d(     YZ& d) e f d*     YZ' d+ e f d,     YZ( d- e f d.     YZ) d/ e f d0     YZ* d1 e f d2     YZ+ d3 e f d4     YZ, d5 e f d6     YZ- d S(7   s8  Tests for Beautiful Soup's tree traversal methods.

The tree traversal methods are the main advantage of using Beautiful
Soup over just using a parser.

Different parsers will build different Beautiful Soup trees given the
same markup, but all Beautiful Soup trees can be traversed with the
methods tested here.
iN(   t   BeautifulSoup(   t   builder_registryt   HTMLParserTreeBuilder(   t   CDatat   Doctypet   NavigableStringt   SoupStrainert   Tag(   t   SoupTestt   skipIft   xmlt   lxmlt   TreeTestc           B   s   e  Z d    Z d   Z RS(   c         C   s*   |  j  g  | D] } | j ^ q |  d S(   s   Make sure that the given tags have the correct text.

        This is used in tests that define a bunch of tags, each
        containing a single string, and then select certain strings by
        some mechanism.
        N(   t   assertEqualt   string(   t   selft   tagst   should_matcht   tag(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   assertSelects&   s    c         C   s+   |  j  g  | D] } | d ^ q |  d S(   s   Make sure that the given tags have the correct IDs.

        This is used in tests that define a bunch of tags, each
        containing a single string, and then select certain strings by
        some mechanism.
        t   idN(   R   (   R   R   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   assertSelectsIDs/   s    (   t   __name__t
   __module__R   R   (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR   $   s   		t   TestFindc           B   s    e  Z d  Z d   Z d   Z RS(   s   Basic tests of the find() method.

    find() just calls find_all() with limit=1, so it's not tested all
    that thouroughly here.
    c         C   s/   |  j  d  } |  j | j d  j d  d  S(   Ns    <a>1</a><b>2</b><a>3</a><b>4</b>t   bt   2(   t   soupR   t   findR   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_tag@   s    c         C   s/   |  j  d  } |  j | j d d  d  d  S(   Nu   <h1>Räksmörgås</h1>t   textu   Räksmörgås(   R   R   R   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_unicode_text_findD   s    (   R   R   t   __doc__R   R   (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR   9   s   	t   TestFindAllc           B   s2   e  Z d  Z d   Z d   Z d   Z d   Z RS(   s%   Basic tests of the find_all() method.c         C   s   |  j  d  } |  j | j d d  d g  |  j | j d d d g  d d g  |  j | j d t j d   d d d g  |  j | j d t  d d d g  d	 S(
   s'   You can search the tree for text nodes.s   <html>Foo<b>bar</b></html>R   t   baru   bart   Foou   Foos   .*u   »N(   R   R   t   find_allt   ret   compilet   True(   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_all_text_nodesK   s    "c         C   s   |  j  d  } |  j | j d d d d d d g  |  j | j d d d d g  |  j | j d d d	 d d d d
 d g  |  j | j d d d d d d d
 d g  d S(   s7   You can limit the number of items returned by find_all.s(   <a>1</a><a>2</a><a>3</a><a>4</a><a>5</a>t   at   limiti   t   1R   t   3i   i
   t   4t   5i    N(   R   R   R$   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_all_limitZ   s    ("(c         C   sQ   |  j  d  } |  j | d d d d g  |  j | j d d  d g  d  S(	   Ns!   <a>1</a><b>2<a id='foo'>3</a></b>R)   R*   i   R+   R   t   fooR,   (   R   R   R   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt%   test_calling_a_tag_is_calling_findallf   s    c         C   s?   |  j  d  } g  } | j |  |  j g  | j |   d  S(   Ns   <a></a>(   R   t   appendR   R$   (   R   R   t   l(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pytT   test_find_all_with_self_referential_data_structure_does_not_cause_infinite_recursionk   s    (   R   R   R    R(   R/   R1   R4   (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR!   H   s
   			t   TestFindAllBasicNamespacesc           B   s   e  Z d    Z RS(   c         C   sU   |  j  d  } |  j d | j d  j  |  j d | j d i d d 6 j  d  S(   Ns0   <mathml:msqrt>4</mathml:msqrt><a svg:fill="red">R-   s   mathml:msqrtR)   t   attrst   reds   svg:fill(   R   R   R   R   t   name(   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_by_namespaced_namew   s    (   R   R   R9   (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR5   u   s   t   TestFindAllByNamec           B   sh   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(   s&   Test ways of finding tags by tag name.c         C   s)   t  t |   j   |  j d  |  _ d  S(   Ns   <a>First tag.</a>
                                  <b>Second tag.</b>
                                  <c>Third <a>Nested tag.</a> tag.</c>(   t   superR   t   setUpR   t   tree(   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR<      s    c         C   s&   |  j  |  j j d  d d g  d  S(   NR)   s
   First tag.s   Nested tag.(   R   R=   R$   (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_all_by_tag_name   s    c         C   s   |  j  |  j j d d d d g  |  j  |  j j d d t d d g  |  j  |  j j d d t j d  d d g  d  S(   NR)   R   s
   First tag.s   Nested tag.R   (   R   R=   R$   R'   R%   R&   (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_all_by_name_and_text   s    "c         C   s&   |  j  |  j j j d  d g  d  S(   NR)   s   Nested tag.(   R   R=   t   cR$   (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt!   test_find_all_on_non_root_element   s    c         C   s#   |  j  |  j d  d d g  d  S(   NR)   s
   First tag.s   Nested tag.(   R   R=   (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt%   test_calling_element_invokes_find_all   s    c         C   s,   |  j  |  j j t d   d d g  d  S(   NR)   s
   First tag.s   Nested tag.(   R   R=   R$   R   (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_all_by_tag_strainer   s    c         C   s/   |  j  |  j j d d g  d d d g  d  S(   NR)   R   s
   First tag.s   Second tag.s   Nested tag.(   R   R=   R$   (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_all_by_tag_names   s    c         C   s7   |  j  |  j j i t d 6t d 6 d d d g  d  S(   NR)   R   s
   First tag.s   Second tag.s   Nested tag.(   R   R=   R$   R'   (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_all_by_tag_dict   s    c         C   s2   |  j  |  j j t j d   d d d g  d  S(   Ns   ^[ab]$s
   First tag.s   Second tag.s   Nested tag.(   R   R=   R$   R%   R&   (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_all_by_tag_re   s    c         C   s;   d   } |  j  d  } |  j | j |  d d g  d  S(   Nc         S   s   |  j  |  j d  k S(   NR   (   R8   t   get(   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   id_matches_name   s    s   <a id="a">Match 1.</a>
                            <a id="1">Does not match.</a>
                            <b id="b">Match 2.</a>s   Match 1.s   Match 2.(   R   R   R$   (   R   RH   R=   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt'   test_find_all_with_tags_matching_method   s
    		(   R   R   R    R<   R>   R?   RA   RB   RC   RD   RE   RF   RI   (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR:   }   s   									t   TestFindAllByAttributec           B   s   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 d   Z d   Z d   Z d   Z RS(   c         C   s5   |  j  d  } |  j | j d d  d d g  d  S(   Ns   
                         <a id="first">Matching a.</a>
                         <a id="second">
                          Non-matching <b id="first">Matching b.</b>a.
                         </a>R   t   firsts   Matching a.s   Matching b.(   R   R   R$   (   R   R=   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_all_by_attribute_name   s    	c         C   s   d j  d  } d j  d  } |  j |  } |  j | j g | j d |   |  j | j g | j d | j d    |  j | j g | j d | d g   d  S(   Nu   םולשt   utf8u   <a title="םולש"></a>t   titles   something else(   t   encodeR   R   R)   R$   t   decode(   R   t   peacet   dataR   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt%   test_find_all_by_utf8_attribute_value   s    "+c         C   s~   |  j  d  } |  j | j d d  d g  |  j | j d i d d 6 d g  |  j | j d i d d 6 d	 g  d  S(
   Ns0  
                         <a name="name1" class="class1">Name match.</a>
                         <a name="name2" class="class2">Class match.</a>
                         <a name="name3" class="class3">Non-match.</a>
                         <name1>A tag called 'name1'.</name1>
                         R8   t   name1s   A tag called 'name1'.R6   s   Name match.t   class2t   classs   Class match.(   R   R   R$   (   R   R=   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_all_by_attribute_dict   s    	

c         C   s   |  j  d  } |  j | j d d d d g  |  j | j d d d d g  |  j | j d d d	 d g  |  j | j d d  d g  |  j | j d
 d  d d g  |  j | j d d  d g  |  j | j d d	  d g  d  S(   Ns   
                         <a class="1">Class 1.</a>
                         <a class="2">Class 2.</a>
                         <b class="1">Class 1.</b>
                         <c class="3 4">Class 3 and 4.</c>
                         R)   t   class_R+   s   Class 1.R@   R,   s   Class 3 and 4.R-   R6   (   R   R   R$   (   R   R=   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_all_by_class   s    	""""c         C   s   |  j  d  } | j d d t j d  } |  j | d g  | j d d t j d  } |  j | d g  | j d d t j d  } |  j | g   d  S(   Ns#   <gar class='foo bar'>Found it</gar>t   garRX   t   os   Found itR)   s   o b(   R   R$   R%   R&   R   (   R   R=   t   f(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt0   test_find_by_class_when_multiple_classes_present   s    c         C   s   |  j  d  } |  j | j d t j d   d g  d   } |  j | j d |  g   d   } |  j | j d |  d g  d  S(   Ns   <a class='bar'>Found it</a>R)   t   bas   Found itc         S   s   t  |   d k S(   Ni   (   t   len(   t   value(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   big_attribute_value  s    c         S   s   t  |   d k S(   Ni   (   R_   (   R`   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   small_attribute_value  s    (   R   R   R$   R%   R&   (   R   R   Ra   Rb   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt:   test_find_all_with_non_dictionary_for_attrs_finds_by_class  s    (		c         C   s   |  j  d  } | j d  \ } } |  j | | g | j d d   |  j | g | j d d   |  j | g | j d d d  |  j | g | j d d   |  j g  | j d d   d  S(   Ns*   <a class="foo bar"></a><a class="foo"></a>R)   R0   R"   RX   s   foo bars   bar foo(   R   R$   R   (   R   R   R)   t   a2(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt:   test_find_all_with_string_for_attrs_finds_multiple_classes  s    ""c         C   sE   |  j  d  } t d i d d 6 } |  j | j |  d g  d  S(   Nsi   
                         <a id="first">Match.</a>
                         <a id="second">Non-match.</a>R6   RK   R   s   Match.(   R   R   R   R$   (   R   R=   t   strainer(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt'   test_find_all_by_attribute_soupstrainer(  s    	c         C   s5   |  j  d  } |  j | j d d d  d g  d  S(   Ns   <a id="1">ID present.</a>
                            <a>No ID present.</a>
                            <a id="">ID is empty.</a>R)   R   s   No ID present.(   R   R   R$   t   None(   R   R=   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt#   test_find_all_with_missing_atribute0  s    	c         C   s5   |  j  d  } |  j | j d t  d d g  d  S(   Ns   <a id="1">ID present.</a>
                            <a>No ID present.</a>
                            <a id="">ID is empty.</a>R   s   ID present.s   ID is empty.(   R   R   R$   R'   (   R   R=   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt$   test_find_all_with_defined_attribute8  s    	c         C   sW   |  j  d  } d d g } |  j | j d d  |  |  j | j d d  |  d  S(   Ns[   <a id=1>Unquoted attribute.</a>
                            <a id="1">Quoted attribute.</a>s   Unquoted attribute.s   Quoted attribute.R   i   R+   (   R   R   R$   (   R   R=   t   expected(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt$   test_find_all_with_numeric_attributeA  s
    	c         C   s>   |  j  d  } |  j | j d d d d g  d d g  d  S(   Ns   <a id="1">1</a>
                            <a id="2">2</a>
                            <a id="3">3</a>
                            <a>No ID.</a>R   R+   R,   R-   (   R   R   R$   (   R   R=   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt(   test_find_all_with_list_attribute_valuesJ  s    	c         C   s>   |  j  d  } |  j | j d t j d   d d g  d  S(   Ns   <a id="a">One a.</a>
                            <a id="aa">Two as.</a>
                            <a id="ab">Mixed as and bs.</a>
                            <a id="b">One b.</a>
                            <a>No ID.</a>R   s   ^a+$s   One a.s   Two as.(   R   R   R$   R%   R&   (   R   R=   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt5   test_find_all_with_regular_expression_attribute_valueT  s    	c         C   s|   |  j  d  } | j } |  j | g | j d d d  |  j g  | j d d d  |  j g  | j d d d  d  S(   Ns   <b>foo</b><b>bar</b><a>foo</a>R)   R   R0   R"   (   R   R)   R   R$   (   R   R   R)   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt'   test_find_by_name_and_containing_stringa  s
    	"c         C   s;   |  j  d  } |  j | j d  | j d d d  d  S(   Ns"   <a>foo</a><a><b><c>foo</c></b></a>R)   R   R0   (   R   R   R$   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt=   test_find_by_name_and_containing_string_when_string_is_buriedi  s    c         C   sc   |  j  d  } | j } |  j | g | j d d d d   |  j g  | j d d d d   d  S(   Ns"   <b id="1">foo</b><a id="2">foo</a>R   i   R   R0   i   R"   (   R   R)   R   R$   (   R   R   R)   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt,   test_find_by_attribute_and_containing_stringm  s    	%(   R   R   RL   RS   RW   RY   R]   Rc   Re   Rg   Ri   Rj   Rl   Rm   Rn   Ro   Rp   Rq   (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyRJ      s    														
			t	   TestIndexc           B   s   e  Z d  Z d   Z RS(   s   Test Tag.indexc         C   sk   |  j  d  } | j } x6 t | j  D]% \ } } |  j | | j |   q( W|  j t | j d  d  S(   Nsh  <div>
                            <a>Identical</a>
                            <b>Not identical</b>
                            <a>Identical</a>

                            <c><d>Identical with child</d></c>
                            <b>Also not identical</b>
                            <c><d>Identical with child</d></c>
                            </div>i   (   R   t   divt	   enumeratet   contentsR   t   indext   assertRaisest
   ValueError(   R   R=   Rs   t   it   element(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt
   test_indexy  s    		(   R   R   R    R{   (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyRr   w  s   t   TestParentOperationsc           B   s_   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z RS(
   s;   Test navigation and searching through an element's parents.c         C   s8   t  t |   j   |  j d  |  _ |  j j |  _ d  S(   Ns1  <ul id="empty"></ul>
                                 <ul id="top">
                                  <ul id="middle">
                                   <ul id="bottom">
                                    <b>Start here</b>
                                   </ul>
                                  </ul>(   R;   R|   R<   R   R=   R   t   start(   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR<     s    c         C   s[   |  j  |  j j d d  |  j  |  j j j d d  |  j  |  j j j j d d  d  S(   NR   t   bottomt   middlet   top(   R   R}   t   parent(   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_parent  s    c         C   s*   |  j  j d } |  j | j |  j   d  S(   Ni    (   R=   Ru   R   R   (   R   t   top_tag(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt%   test_parent_of_top_tag_is_soup_object  s    c         C   s   |  j  d  |  j j  d  S(   N(   R   Rh   R=   R   (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_soup_object_has_no_parent  s    c         C   sN   |  j  |  j j d  d d d g  |  j  |  j j d d d d g  d  S(   Nt   ulR~   R   R   R   (   R   R}   t   find_parents(   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_parents  s    c         C   s$   |  j  |  j j d  d d  d  S(   NR   R   R~   (   R   R}   t   find_parent(   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_parent  s    c         C   s/   |  j  j d d  } |  j | j j d  d  S(   NR   s
   Start hereR   (   R=   R   R   R   R8   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_parent_of_text_element  s    c         C   s6   |  j  j d d  } |  j | j d  d d  d  S(   NR   s
   Start hereR   R   R~   (   R=   R   R   R   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_text_element_find_parent  s    c         C   s[   g  |  j  j D]+ } | d  k	 r d | j k r | d ^ q } |  j | d d d g  d  S(   NR   R~   R   R   (   R}   t   parentsRh   R6   R   (   R   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_parent_generator  s    +(   R   R   R    R<   R   R   R   R   R   R   R   R   (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR|     s   								t   ProximityTestc           B   s   e  Z d    Z RS(   c         C   s)   t  t |   j   |  j d  |  _ d  S(   Nsg   <html id="start"><head></head><body><b id="1">One</b><b id="2">Two</b><b id="3">Three</b></body></html>(   R;   R   R<   R   R=   (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR<     s    (   R   R   R<   (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR     s   t   TestNextOperationsc           B   sP   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   c         C   s&   t  t |   j   |  j j |  _ d  S(   N(   R;   R   R<   R=   R   R}   (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR<     s    c         C   s7   |  j  |  j j d  |  j  |  j j j d d  d  S(   Nt   OneR   R   (   R   R}   t   next_element(   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt	   test_next  s    c         C   s,   |  j  j d d  } |  j | j d   d  S(   NR   t   Three(   R=   R   R   R   Rh   (   R   t   last(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_next_of_last_item_is_none  s    c         C   s   |  j  |  j j d   d  S(   N(   R   R=   R   Rh   (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_next_of_root_is_none  s    c         C   s[   |  j  |  j j d  d d g  |  j j d d  |  j  |  j j d d  d g  d  S(   NR   t   TwoR   R   i   (   R   R}   t   find_all_next(   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_all_next  s    "c         C   sC   |  j  |  j j d  d d  |  j  |  j j d d  d  d  S(   NR   R   R   R   R   (   R   R}   t	   find_next(   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_next  s     c         C   sT   |  j  j d d  } |  j | j d  j d  |  j | j d  d d g  d  S(   NR   R   R   R   R   (   R=   R   R   R   R   R   R   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_next_for_text_element  s    c         C   se   |  j  j d d  } g  | j D] } | ^ q } | \ } } |  j | d d  |  j | d  d  S(   NR   R   R   R,   R   (   R=   R   t   next_elementsR   (   R   R}   t   nodet
   successorsR   Ru   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_next_generator  s
    (
   R   R   R<   R   R   R   R   R   R   R   (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR     s   							t   TestPreviousOperationsc           B   sP   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   c         C   s/   t  t |   j   |  j j d d  |  _ d  S(   NR   R   (   R;   R   R<   R=   R   t   end(   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR<     s    c         C   s7   |  j  |  j j d d  |  j  |  j j j d  d  S(   NR   R,   R   (   R   R   t   previous_element(   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_previous  s    c         C   s)   |  j  j d  } |  j | j d   d  S(   Nt   html(   R=   R   R   R   Rh   (   R   RK   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt#   test_previous_of_first_item_is_none  s    c         C   s   d  S(   N(    (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_previous_of_root_is_none  s    c         C   sK   |  j  |  j j d  d d d g  |  j  |  j j d d  d g  d  S(   NR   R   R   R   R   i   (   R   R   t   find_all_previous(   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_all_previous  s    c         C   sC   |  j  |  j j d  d d  |  j  |  j j d d  d  d  S(   NR   R   R,   R   R   (   R   R   t   find_previous(   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_previous  s     c         C   sW   |  j  j d d  } |  j | j d  j d  |  j | j d  d d d g  d  S(   NR   R   R   R   R   (   R=   R   R   R   R   R   R   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt#   test_find_previous_for_text_element  s    c         C   s   |  j  j d d  } g  | j D] } | ^ q } | \ } } } } |  j | d d  |  j | j d  |  j | j d  |  j | j d  d  S(   NR   R   R   R+   t   bodyt   headR   (   R=   R   t   previous_elementsR   R8   (   R   R}   R   t   predecessorsR   R   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_previous_generator  s    (
   R   R   R<   R   R   R   R   R   R   R   (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR     s   							t   SiblingTestc           B   s   e  Z d    Z RS(   c         C   sJ   t  t |   j   d } t j d  j d |  } |  j |  |  _ d  S(   Ns  <html>
                    <span id="1">
                     <span id="1.1"></span>
                    </span>
                    <span id="2">
                     <span id="2.1"></span>
                    </span>
                    <span id="3">
                     <span id="3.1"></span>
                    </span>
                    <span id="4"></span>
                    </html>s   
\s*t    (   R;   R   R<   R%   R&   t   subR   R=   (   R   t   markup(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR<      s    (   R   R   R<   (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR     s   t   TestNextSiblingc           B   sG   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   c         C   s/   t  t |   j   |  j j d d  |  _ d  S(   NR   R+   (   R;   R   R<   R=   R   R}   (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR<   6  s    c         C   s   |  j  |  j j d   d  S(   N(   R   R=   t   next_siblingRh   (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt!   test_next_sibling_of_root_is_none:  s    c         C   sU   |  j  |  j j d d  |  j  |  j j j d d  |  j  |  j j d d  d  S(   NR   R   R,   s   1.1(   R   R}   R   R   (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_next_sibling=  s    c         C   sm   |  j  |  j j j d   |  j j d d  } |  j  | j d   |  j j d d  } |  j  | j d   d  S(   NR   s   1.1R-   (   R   R=   R   R   Rh   R   (   R   t   nested_spant	   last_span(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_next_sibling_may_not_existD  s
    c         C   s$   |  j  |  j j d  d d  d  S(   Nt   spanR   R   (   R   R}   t   find_next_sibling(   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_next_siblingM  s    c         C   sK   |  j  |  j j d  d d d g  |  j  |  j j d d  d g  d  S(   NR   R   R,   R-   R   (   R   R}   t   find_next_siblings(   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_next_siblingsP  s    c         C   s   |  j  d  } | j d d  } |  j | j j d  |  j | j j d  |  j | j d  d g  |  j | j d d  d  |  j | j d d  d   d  S(   Ns   Foo<b>bar</b>bazR   R#   R   t   bazR"   t   nonesuch(	   R   R   R   R   R8   R   R   R   Rh   (   R   R   R}   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt"   test_next_sibling_for_text_elementV  s    (	   R   R   R<   R   R   R   R   R   R   (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR   4  s   							t   TestPreviousSiblingc           B   sG   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   c         C   s/   t  t |   j   |  j j d d  |  _ d  S(   NR   R-   (   R;   R   R<   R=   R   R   (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR<   c  s    c         C   s   |  j  |  j j d   d  S(   N(   R   R=   t   previous_siblingRh   (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt%   test_previous_sibling_of_root_is_noneg  s    c         C   sU   |  j  |  j j d d  |  j  |  j j j d d  |  j  |  j j d d  d  S(   NR   R,   R   s   3.1(   R   R   R   R   (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_previous_siblingj  s    c         C   sm   |  j  |  j j j d   |  j j d d  } |  j  | j d   |  j j d d  } |  j  | j d   d  S(   NR   s   1.1R+   (   R   R=   R   R   Rh   R   (   R   R   t
   first_span(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt#   test_previous_sibling_may_not_existq  s
    c         C   s$   |  j  |  j j d  d d  d  S(   NR   R   R,   (   R   R   t   find_previous_sibling(   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_find_previous_siblingz  s    c         C   sK   |  j  |  j j d  d d d g  |  j  |  j j d d  d g  d  S(   NR   R,   R   R+   R   (   R   R   t   find_previous_siblings(   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_previous_siblings}  s    c         C   s   |  j  d  } | j d d  } |  j | j j d  |  j | j j d  |  j | j d  d g  |  j | j d d  d  |  j | j d d  d   d  S(   Ns   Foo<b>bar</b>bazR   R   R   R#   R"   R   (	   R   R   R   R   R8   R   R   R   Rh   (   R   R   R}   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt&   test_previous_sibling_for_text_element  s    (	   R   R   R<   R   R   R   R   R   R   (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR   a  s   							t   TestTagCreationc           B   s)   e  Z d  Z d   Z d   Z d   Z RS(   s$   Test the ability to create new tags.c         C   s   |  j  d  } | j d d d } |  j t | t   |  j d | j  |  j t d d  | j  |  j d  | j
  d  S(   NR   R0   R"   R   (   R   t   new_tagt
   assertTruet
   isinstanceR   R   R8   t   dictR6   Rh   R   (   R   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_new_tag  s    c         C   s   t  rb t d d  } | j d  } | j d  } |  j d | j    |  j d | j    n  t d d  } | j d  } | j d  } |  j d | j    |  j d | j    d  S(	   NR   R
   t   brt   ps   <br/>s   <p/>R   s   <p></p>(   t   XML_BUILDER_PRESENTR    R   R   RO   (   R   t   xml_soupt   xml_brt   xml_pt	   html_soupt   html_brt   html_p(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt1   test_tag_inherits_self_closing_rules_from_builder  s    c         C   sH   |  j  d  } | j d  } |  j d |  |  j t | t   d  S(   NR   R0   (   R   t
   new_stringR   R   R   R   (   R   R   t   s(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt'   test_new_string_creates_navigablestring  s    (   R   R   R    R   R   R   (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR     s   		t   TestTreeModificationc           B   s:  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 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  d  } d | j d <|  j | j   |  j d   | j d =|  j | j   |  j d   d | j d <|  j | j   |  j d   d  S(	   Ns   <a id="1"></a>i   R   s   <a id="2"></a>s   <a></a>R0   t   id2s   <a id2="foo"></a>(   R   R)   R   RP   t   document_for(   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_attribute_modification  s    
c         C   s   t  j d    } |  j d d | } t | | d  } t | | d  } d | d <| j j d |  | j j d	 |  |  j | j j   d
  d  S(   NR   s   <body></body>t   builderR)   t   ols   http://foo.com/t   hrefi    i   s4   <body><a href="http://foo.com/"></a><ol></ol></body>(   R   t   lookupR   R   R   t   insertR   RO   (   R   R   R   R)   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_new_tag_creation  s    
c         C   s   d } |  j  |  } | j d d  } | j } | j d d  j | j  |  j | j |  |  j | j   |  j d   d  S(   NsT   <p id="1">Don't leave me <b>here</b>.</p>
                <p id="2">Don't leave!</p>R   R   sD   <p id="1">Don't leave me .</p>
<p id="2">Don't leave!<b>here</b></p>(   R   R   R   R2   R   R   RP   R   (   R   t   docR   t   second_parat   bold(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt!   test_append_to_contents_moves_tag  s    	c         C   sD   d } |  j  |  } | j } | j | j  } |  j | |  d  S(   Ns   <a></a><b><c></c></b>(   R   R)   t   replace_withR@   R   (   R   R   R   R)   t   new_a(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt1   test_replace_with_returns_thing_that_was_replaced  s
    	c         C   s>   d } |  j  |  } | j } | j   } |  j | |  d  S(   Ns   <a><b></b><c></c></a>(   R   R)   t   unwrapR   (   R   R   R   R)   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt+   test_unwrap_returns_thing_that_was_replaced  s
    	c         C   sQ   d } |  j  |  } | j } | j j |  |  j | j   |  j |   d  S(   Ns-   <a><b></b><c>Foo<d></d></c></a><a><e></e></a>(   R   R@   R   R   RP   R   (   R   R   R   R@   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_replace_tag_with_itself  s
    	c         C   s5   d } |  j  |  } |  j t | j j | j  d  S(   Ns   <a><b></b></a>(   R   Rw   Rx   R   R   R)   (   R   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt1   test_replace_tag_with_its_parent_raises_exception  s    c         C   s8   d } |  j  |  } |  j t | j j d | j  d  S(   Ns   <a><b></b></a>i    (   R   Rw   Rx   R)   R   (   R   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt,   test_insert_tag_into_itself_raises_exception  s    c         C   sx   |  j  d  } | j } | j d } | j d d  | j \ } } | j d  | j d  |  j d | j j  d  S(   Ns   <p><a>one</a><b>three</b></p>i    i   t   twoR   t   three(   R   R)   Ru   R   t   replaceWithR   R   R   (   R   R   R)   R   t   leftt   right(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt3   test_replace_with_maintains_next_element_throughout  s    	c         C   s   |  j  d  } | j d d  j d  | j d d  } | j } |  j | j |  |  j | j |  |  j | j j |  |  j | j d   d  S(   Ns   <b>Argh!</b>R   s   Argh!s   Hooray!(	   R   R   R   R   R   R   R   R   Rh   (   R   R   t   new_textR   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_replace_final_node	  s    	c         C   s   |  j  d  } | j j d d  |  j | j   |  j d   | j d d  } |  j | j d  |  j | j j |  |  j | j	 d  |  j | j	 j
 |  |  j | j
 d   |  j | j | j  d  S(   Ns   <a><b>Argh!</b><c></c></a>i   s   Hooray!s!   <a><b>Argh!Hooray!</b><c></c></a>R   s   Argh!(   R   R   R   R   RP   R   R   R   R   R   R   Rh   R@   (   R   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_consecutive_text_nodes  s    
c         C   sr   |  j  d  } | j j d d  | j j d d  |  j d d g | j j  |  j | j j d j d  d  S(   Ns   <a></a>i    R"   R0   (   R   R)   R   R   Ru   R   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_insert_string(  s
    c         C   sW  |  j  } |  j d d | } t | | d  } | j d d  | j j d |  |  j | j   |  j d   | j } |  j | j	 |  |  j | j
 |  | j d d	  } |  j | j |  |  j | j |  | j } |  j | j	 |  |  j | j
 |  | j d d  } |  j | j |  |  j | j |  |  j | j |  d  S(
   Ns%   <a><b>Find</b><c>lady!</c><d></d></a>R   t   magictagi    t   thei   s=   <a><b>Find</b><magictag>the</magictag><c>lady!</c><d></d></a>R   t   Find(   t   default_builderR   R   R   R)   R   RP   R   R   R   R   R   R   R   R@   R   (   R   R   R   t	   magic_tagt   b_tagR   t   c_tagR  (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_insert_tag1  s,    	
		c         C   sB   d } |  j  |  } | j j | j  |  j | | j    d  S(   Ns   <a><b></b></a>(   R   R)   R2   R   R   RP   (   R   RR   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt*   test_append_child_thats_already_at_the_endO  s    c         C   sE   d } |  j  |  } | j j d | j  |  j d | j    d  S(   Ns   <a><b></b><c></c><d></d></a>i    s   <a><d></d><b></b><c></c></a>(   R   R)   R   t   dR   RP   (   R   RR   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt$   test_move_tag_to_beginning_of_parentU  s    c         C   s?   |  j  d  } | j j d d  |  j t | j  d  d  S(   Ns   <br/>i   t   Contentss   <br>Contents</br>(   R   R   R   R   t   str(   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt&   test_insert_works_on_empty_element_tag[  s    c         C   s   |  j  d  } | j j d  | j j d  |  j | j   |  j d   | j j | j  |  j | j   |  j d   d  S(   Ns   <a>foo</a><b>bar</b>t   BAZt   QUUXs   QUUX<a>foo</a>BAZ<b>bar</b>s   QUUX<b>bar</b><a>foo</a>BAZ(   R   R   t   insert_beforeR)   R   RP   R   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_insert_befored  s    c         C   s   |  j  d  } | j j d  | j j d  |  j | j   |  j d   | j j | j  |  j | j   |  j d   d  S(   Ns   <a>foo</a><b>bar</b>R  R  s   <a>foo</a>QUUX<b>bar</b>BAZs   QUUX<b>bar</b><a>foo</a>BAZ(   R   R   t   insert_afterR)   R   RP   R   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_insert_aftero  s    c         C   ss   |  j  d  } | j d  } | j d  } |  j t | j |  |  j t | j |  |  j t | j |  d  S(   NR   R)   (   R   R   R   Rw   Rx   R  t   NotImplementedError(   R   R   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt:   test_insert_after_raises_exception_if_after_has_no_meaningy  s    c         C   ss   |  j  d  } | j d  } | j d  } |  j t | j |  |  j t | j |  |  j t | j |  d  S(   NR   R)   (   R   R   R   Rw   Rx   R  R  (   R   R   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pytF   test_insert_before_raises_notimplementederror_if_before_has_no_meaning  s    c         C   s   |  j  d  } | j d  \ } } | j |  |  j | j   |  j d   |  j | j d   |  j | j | j  |  j | j	 d  |  j | j
 d  d  S(   Ns;   <p>There's <b>no</b> business like <b>show</b> business</p>R   s0   <p>There's  business like <b>no</b> business</p>t   nos	    business(   R   R$   R   R   RP   R   R   Rh   R   R   R   (   R   R   R  t   show(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_replace_with  s    		
c         C   sB   d } |  j  |  } | j j | j  |  j d | j    d  S(   Ns   <a><b></b><c></c></a>s   <a><c></c></a>(   R   R   R   R@   R   RP   (   R   RR   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_replace_first_child  s    c         C   sB   d } |  j  |  } | j j | j  |  j d | j    d  S(   Ns   <a><b></b><c></c></a>s   <a><b></b></a>(   R   R@   R   R   R   RP   (   R   RR   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_replace_last_child  s    c         C   sx  |  j  d  } | j } | j } | j |  |  j | j   |  j d   |  j | j d   |  j | j	 d d  j
 d   |  j | j d   |  j | j d   |  j | j d   |  j | j | j  |  j | j d  |  j | j
 j
 | j  |  j | j d   | j	 d d  } | j } |  j | j
 |  |  j | j |  |  j | j |  |  j | j |  d  S(   NsQ   <a>We<b>reserve<c>the</c><d>right</d></b></a><e>to<f>refuse</f><g>service</g></e>s-   <a>We<f>refuse</f></a><e>to<g>service</g></e>R   R   t   Wet   to(   R   R   R\   R   R   RP   R   R   Rh   R   R   R   R   R   R)   t   et   g(   R   R   t
   remove_tagt   move_tagt   to_textt   g_tag(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_nested_tag_replace_with  s.    			
	c         C   sI   |  j  d  } | j j   |  j | j d   |  j | j j d  d  S(   NsI   
            <p>Unneeded <em>formatting</em> is unneeded</p>
            s   Unneeded formatting is unneeded(   R   t   emR   R   Rh   R   R   (   R   R=   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_unwrap  s
    	c         C   sc   |  j  d  } | j j | j d   } |  j | j   d  |  j | j   |  j d   d  S(   Ns   I wish I was bold.R   s   <b>I wish I was bold.</b>(   R   R   t   wrapR   R   RP   R   (   R   R   R`   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt	   test_wrap  s
    c         C   sH   |  j  d  } | j j j | j  |  j | j   |  j d   d  S(   Ns   <b></b>I wish I was bold.s   <b>I wish I was bold.</b>(   R   R   R   R+  R   RP   R   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt%   test_wrap_extracts_tag_from_elsewhere  s    c         C   sd   |  j  d  } | j j j | j  |  j d t | j j   |  j | j   |  j d   d  S(   Ns+   <b>I like being bold.</b>I wish I was bold.i   s+   <b>I like being bold.I wish I was bold.</b>(	   R   R   R   R+  R   R_   Ru   RP   R   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt&   test_wrap_puts_new_contents_at_the_end  s    c         C   s;  |  j  d  } |  j t | j j  d  | j d d  j   } |  j | j   d  |  j | j   d  |  j t | j j  d  |  j | j d   |  j | j
 d   |  j | j j d   | j d d	  } | j d d
  } |  j | j |  |  j | j |  |  j | j
 |  |  j | j |  d  S(   NsR   <html><body>Some content. <div id="nav">Nav crap</div> More content.</body></html>i   R   t   navs6   <html><body>Some content.  More content.</body></html>s   <div id="nav">Nav crap</div>i   R   s   Some content. s    More content.(   R   R   R_   R   Ru   R   t   extractRP   R   Rh   R   R   R   R   (   R   R   t	   extractedt	   content_1t	   content_2(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_extract  s"    	c         C   s   |  j  d  } | j j } | j j } | j d  } | j d  } | j j |  | j j |  | j   | j   |  j | | j j  |  j | | j j  d  S(   Ns   <a>foo</a><b>bar</b>R0   R"   (   R   R)   R   R   R   R2   R0  R   (   R   R   t   foo_1t   bar_1t   foo_2t   bar_2(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt4   test_extract_distinguishes_between_identical_strings  s    

c         C   s   |  j  d  } | j } | j j   |  j t | j j  d  |  j t | d   | j	 } | j d t
  |  j t | d   d S(   s   Tag.clear()s4   <p><a>String <em>Italicized</em></a> and another</p>i    Ru   t	   decomposeN(   R   R)   R   t   clearR   R_   Ru   R   t   hasattrR)  R'   t   assertFalse(   R   R   R)   R)  (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt
   test_clear  s    		c         C   s]   |  j  d  } d | j _ |  j | j j d g  d | j _ |  j | j j d g  d S(   s   Tag.string = 'string's   <a></a> <b><c></c></b>R0   R"   N(   R   R)   R   R   Ru   R   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_string_set  s
    c         C   s>   |  j  d  } | j j | j _ |  j | j j   d  d  S(   Ns   <a><b>foo</b><c>bar</c>s   <a><b>bar</b><c>bar</c></a>(   R   R@   R   R   R   R)   RO   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt/   test_string_set_does_not_affect_original_string%  s    c         C   sG   |  j  d  } t d  } | | j _ |  j t | j j t   d  S(   Ns   <a></a>R0   (   R   R   R)   R   R   R   (   R   R   t   cdata(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt)   test_set_string_preserves_class_of_string*  s    ($   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.  R4  R9  R>  R?  R@  RB  (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR     sD   											
										
						$									t   TestElementObjectsc           B   sq   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(   s)   Test various features of element objects.c         C   sw   |  j  d  } |  j t | j  d  |  j t |  d  |  j t | j  d  |  j t | j j  d  d S(   s3   The length of an element is its number of children.s   <top>1<b>2</b>3</top>i   i   N(   R   R   R_   Ru   R   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_len3  s
    c         C   sj   |  j  d  } |  j | j | j d   |  j | j j | j d  j d   |  j | j d  d S(   s2   Accessing a Python member .foo invokes find('foo')s   <b><i></i></b>R   Ry   N(   R   R   R   R   Ry   R)   Rh   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_member_access_invokes_findA  s    (c         C   sg   |  j  d  } t j d t   } | j } Wd  QX|  j | j |  |  j d t | d j   d  S(   Ns   <b><i></i></b>t   records,   .bTag is deprecated, use .find("b") instead.i    (	   R   t   warningst   catch_warningsR'   t   bTagR   R   R  t   message(   R   R   t   wR   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_deprecated_member_accessH  s    c         C   sE   |  j  d  } |  j | j j d   |  j | j j d   d S(   s   has_attr() checks for the presence of an attribute.

        Please note note: has_attr() is different from
        __in__. has_attr() checks the tag's attributes and __in__
        checks the tag's chidlren.
        s   <foo attr='bar'>t   attrt   attr2N(   R   R   R0   t   has_attrR=  (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_has_attrQ  s    c         C   s   d } |  j  | d  d  S(   Ns%   <b a="1" z="5" m="3" f="2" y="4"></b>s%   <b a="1" f="2" m="3" y="4" z="5"></b>(   t   assertSoupEquals(   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt.   test_attributes_come_out_in_alphabetical_order]  s    c         C   s)   |  j  d  } |  j | j j d  d  S(   Ns
   <b>foo</b>R0   (   R   R   R   R   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_stringa  s    c         C   s)   |  j  d  } |  j | j j d   d  S(   Ns   <b></b>(   R   R   R   R   Rh   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_empty_tag_has_no_stringg  s    c         C   s   |  j  d  } |  j | j j d   |  j  d  } |  j | j j d   |  j  d  } | j j d d  |  j | j j d   d  S(   Ns   <a>foo<b></b><b></b></b>s   <a>foo<b></b>bar</b>s
   <a>foo</b>i   R"   (   R   R   R   R   Rh   R)   R   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt-   test_tag_with_multiple_children_has_no_stringl  s    c         C   s<   |  j  d  } |  j | j j d  |  j | j d  d  S(   Ns   <a><b>foo</b></a>R0   (   R   R   R)   R   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt)   test_tag_with_recursive_string_has_stringz  s    c         C   sH   |  j  d  } |  j | j j  |  j  d  } |  j | j j  d S(   s7   Only a tag containing a single text node has a .string.s   <b>f<i>e</i>o</b>s   <b></b>N(   R   R=  R   R   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_lack_of_string  s    c         C   s   |  j  d  } |  j | j j d  |  j | j j d t  d  |  j | j j d  d  |  j | j j d d t d  d S(	   sB   Tag.text and Tag.get_text(sep=u"") -> all child text, concatenateds   <a>a<b>r</b>   <r> t </r></a>s   ar  t t   stript   artt   ,s	   a,r, , t s   a,r,tN(   R   R   R)   R   t   get_textR'   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_all_text  s
    (   R   R   R    RD  RE  RL  RP  RR  RS  RT  RU  RV  RW  R\  (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyRC  0  s   											t   TestCDAtaListAttributesc           B   sD   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   s0   Testing cdata-list attributes like 'class'.
    c         C   s-   |  j  d  } |  j d g | j d  d  S(   Ns   <a class='foo'>R0   RV   (   R   R   R)   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_single_value_becomes_list  s    c         C   s0   |  j  d  } |  j d d g | j d  d  S(   Ns   <a class='foo bar'>R0   R"   RV   (   R   R   R)   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt!   test_multiple_values_becomes_list  s    c         C   s3   |  j  d  } |  j d d d g | j d  d  S(   Ns   <a class='foo	bar
baz'>R0   R"   R   RV   (   R   R   R)   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt2   test_multiple_values_separated_by_weird_whitespace  s    c         C   s,   |  j  d  } |  j d | j j    d  S(   Ns   <a class='foo	bar'>s   <a class="foo bar"></a>(   R   R   R)   RO   (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt,   test_attributes_joined_into_string_on_output  s    c         C   s0   |  j  d  } |  j d d g | j d  d  S(   Ns(   <form accept-charset="ISO-8859-1 UTF-8">s
   ISO-8859-1s   UTF-8s   accept-charset(   R   R   t   form(   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_accept_charset  s    c         C   s0   d } |  j  |  } |  j d | j d  d  S(   Ns)   <a accept-charset="ISO-8859-1 UTF-8"></a>s   ISO-8859-1 UTF-8s   accept-charset(   R   R   R)   (   R   RR   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt-   test_cdata_attribute_applying_only_to_one_tag  s    (	   R   R   R    R^  R_  R`  Ra  Rc  Rd  (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR]    s   					t   TestPersistencec           B   s2   e  Z d  Z d   Z d   Z d   Z d   Z RS(   s*   Testing features like pickle and deepcopy.c         C   s5   t  t |   j   d |  _ |  j |  j  |  _ d  S(   Nsy  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/REC-html40/transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Beautiful Soup: We called him Tortoise because he taught us.</title>
<link rev="made" href="mailto:leonardr@segfault.org">
<meta name="Description" content="Beautiful Soup: an HTML parser optimized for screen-scraping.">
<meta name="generator" content="Markov Approximation 1.4 (module: leonardr)">
<meta name="author" content="Leonard Richardson">
</head>
<body>
<a href="foo">foo</a>
<a href="foo"><b>bar</b></a>
</body>
</html>(   R;   Re  R<   t   pageR   R=   (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR<     s    	c         C   sZ   t  j |  j d  } t  j |  } |  j | j t  |  j | j   |  j j    d  S(   Ni   (   t   picklet   dumpsR=   t   loadsR   t	   __class__R    RP   (   R   t   dumpedt   loaded(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt!   test_pickle_and_unpickle_identity  s    c         C   s5   t  j |  j  } |  j | j   |  j j    d  S(   N(   t   copyt   deepcopyR=   R   RP   (   R   t   copied(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_deepcopy_identity  s    c         C   sY   d } |  j  |  } t j | t j  } t j |  } |  j | j   | j    d  S(   Nu
   <b>☃</b>(   R   Rg  Rh  t   HIGHEST_PROTOCOLRi  R   RP   (   R   R   R   Rk  Rl  (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_unicode_pickle  s
    (   R   R   R    R<   Rm  Rq  Rs  (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyRe    s
   			t   TestSubstitutionsc           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   sD   d } |  j  |  } | j d d  } |  j | |  j d   d  S(   Nu#   <b>&lt;&lt;Sacré bleu!&gt;&gt;</b>t	   formattert   minimal(   R   RP   R   R   (   R   R   R   t   decoded(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt!   test_default_formatter_is_minimal  s    c         C   sD   d } |  j  |  } | j d d  } |  j | |  j d   d  S(   Nu#   <b>&lt;&lt;Sacré bleu!&gt;&gt;</b>Ru  R   s)   <b>&lt;&lt;Sacr&eacute; bleu!&gt;&gt;</b>(   R   RP   R   R   (   R   R   R   Rw  (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_formatter_html  s    c         C   sD   d } |  j  |  } | j d d  } |  j | |  j d   d  S(   Nu#   <b>&lt;&lt;Sacré bleu!&gt;&gt;</b>Ru  Rv  (   R   RP   R   R   (   R   R   R   Rw  (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_formatter_minimal  s    c         C   sD   d } |  j  |  } | j d d   } |  j | |  j d   d  S(   Nu#   <b>&lt;&lt;Sacré bleu!&gt;&gt;</b>Ru  u   <b><<Sacré bleu!>></b>(   R   RP   Rh   R   R   (   R   R   R   Rw  (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_formatter_null  s
    	c         C   sG   d } |  j  |  } | j d d    } |  j | |  j d   d  S(   Nu   <b>&lt;foo&gt;</b><b>bar</b>Ru  c         S   s
   |  j    S(   N(   t   upper(   t   x(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   <lambda>	  s    u   <b><FOO></b><b>BAR</b>(   R   RP   R   R   (   R   R   R   Rw  (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_formatter_custom  s    c         C   s   d } |  j  |  } | j } d } |  j | | j    |  j | | j d d   d } |  j | | j d d   |  j | | j d d    d } |  j | | j d d     d  S(	   Nu%   <a href="http://a.com?a=b&c=é">e</a>u)   <a href="http://a.com?a=b&amp;c=é">e</a>Ru  Rv  u/   <a href="http://a.com?a=b&amp;c=&eacute;">e</a>R   u%   <a href="HTTP://A.COM?A=B&C=É">E</a>c         S   s
   |  j    S(   N(   R|  (   R}  (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR~    s    (   R   R)   R   RP   Rh   (   R   R   R   R)   t   expect_minimalt   expect_htmlt   expect_upper(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt)   test_formatter_is_run_on_attribute_values  s    	c         C   s8   t  d  } | j d d    } |  j d | k  d  S(   Ns   <html><body>foo</body></html>Ru  c         S   s
   |  j    S(   N(   R|  (   R}  (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR~  #  s    t   FOO(   R    t   prettifyR   (   R   R   t   pretty(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_prettify_accepts_formatter!  s    c         C   s/   |  j  d  } |  j t t | j     d  S(   Ns   <a></a>(   R   R   t   unicodet   typeR  (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt(   test_prettify_outputs_unicode_by_default&  s    c         C   s2   |  j  d  } |  j t t | j d    d  S(   Ns   <a></a>s   utf-8(   R   R   t   bytesR  R  (   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_prettify_can_encode_data*  s    c         C   sD   d } |  j  |  } | j j d  } |  j | | j d   d  S(   Nu   <b>Sacré bleu!</b>s   utf-8(   R   R   RO   R   (   R   R   R   t   encoded(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt,   test_html_entity_substitution_off_by_default.  s    c         C   s   d } |  j  |  } |  j | j d d  | j d  } |  j d | k  | j d  } |  j d | k  | j d  } |  j d	 | k  | j d
  j d
  } |  j d | k  d  S(   NsE   <meta content="text/html; charset=x-sjis" http-equiv="Content-type"/>t   contents   text/html; charset=x-sjiss   utf-8s   charset=utf-8t   euc_jps   charset=euc_jps	   shift-jiss   charset=shift-jiss   utf-16s   charset=utf-16(   R   R   t   metaRO   R   RP   (   R   t   meta_tagR   t   utf_8R  t	   shift_jist   utf_16_u(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_encoding_substitution4  s    c         C   sE   d } t  d  } |  j | d | } |  j | j d j d  d  S(   Ns`   <head><meta content="text/html; charset=x-sjis" http-equiv="Content-type"/></head><pre>foo</pre>t   pret
   parse_onlyi    (   R   R   R   Ru   R8   (   R   R   Rf   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt;   test_encoding_substitution_doesnt_happen_if_tag_is_strainedL  s    (   R   R   Rx  Ry  Rz  R{  R  R  R  R  R  R  R  R  (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyRt    s   	
		
			
						t   TestEncodingc           B   sM   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   s0   Test the ability to encode objects into strings.c         C   sA   d } |  j  |  } |  j | j j j d  d j d   d  S(   Nu
   <b>☃</b>s   utf-8u   ☃(   R   R   R   R   RO   (   R   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt"   test_unicode_string_can_be_encodedZ  s    c         C   s>   d } |  j  |  } |  j | j j d  | j d   d  S(   Nu
   <b>☃</b>s   utf-8(   R   R   R   RO   (   R   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt1   test_tag_containing_unicode_string_can_be_encoded`  s    c         C   s5   d } |  j  |  } |  j | j j d  d  d  S(   Nu
   <b>☃</b>t   asciis   <b>&#9731;</b>(   R   R   R   RO   (   R   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt<   test_encoding_substitutes_unrecognized_characters_by_defaultf  s    c         C   s5   d } |  j  |  } |  j t | j d d d d  S(   Nu
   <b>☃</b>R  t   errorst   strict(   R   Rw   t   UnicodeEncodeErrorRO   (   R   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt    test_encoding_can_be_made_strictk  s    c         C   s2   d } |  j  |  } |  j d | j j    d  S(   Nu
   <b>☃</b>u   ☃(   R   R   R   t   decode_contents(   R   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_decode_contentsq  s    c         C   sA   d } |  j  |  } |  j d j d  | j j d d   d  S(   Nu
   <b>☃</b>u   ☃RM   t   encoding(   R   R   RO   R   t   encode_contents(   R   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_encode_contentsv  s
    c         C   s;   d } |  j  |  } |  j d j d  | j j    d  S(   Nu
   <b>☃</b>u   ☃RM   (   R   R   RO   R   t   renderContents(   R   R   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_deprecated_renderContents}  s    (
   R   R   R    R  R  R  R  R  R  R  (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR  W  s   						t   TestNavigableStringSubclassesc           B   s#   e  Z d    Z d   Z d   Z RS(   c         C   sx   |  j  d  } t d  } | j d |  |  j t |  d  |  j | j d d  d  |  j | j d d  d  S(   NR   R0   i   s   <![CDATA[foo]]>R   i    (   R   R   R   R   R  R   Ru   (   R   R   RA  (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt
   test_cdata  s    c            sv   d   _    f d   }   j d  } t d  } | j d |    j d | j d |     j d   j   d S(	   sk   Text inside a CData object is passed into the formatter.

        But the return value is ignored.
        i    c             s     j  d 7_  d S(   Ni   s   BITTER FAILURE(   t   count(   t   args(   R   (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt	   increment  s    R   s   <><><>i   s   <![CDATA[<><><>]]>Ru  N(   R  R   R   R   R   RO   (   R   R  R   RA  (    (   R   s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_cdata_is_never_formatted  s    	c         C   sE   t  d  } |  j d  } | j d |  |  j | j   d  d  S(   NR0   R   i   s   <!DOCTYPE foo>
(   R   R   R   R   RO   (   R   t   doctypeR   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_doctype_ends_in_newline  s    (   R   R   R  R  R  (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR    s   	
	t   TestSoupSelectorc           B   s  e  Z d  Z d   Z d   Z 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 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(   s  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>The title</title>
<link rel="stylesheet" href="blah.css" type="text/css" id="l1">
</head>
<body>

<div id="main">
<div id="inner">
<h1 id="header1">An H1</h1>
<p>Some text</p>
<p class="onep" id="p1">Some more text</p>
<h2 id="header2">An H2</h2>
<p class="class1 class2 class3" id="pmulti">Another</p>
<a href="http://bob.example.org/" rel="friend met" id="bob">Bob</a>
<h2 id="header3">Another H2</h2>
<a id="me" href="http://simonwillison.net/" rel="me">me</a>
<span class="s1">
<a href="#" id="s1a1">span1a1</a>
<a href="#" id="s1a2">span1a2 <span id="s1a2s1">test</span></a>
<span class="span2">
<a href="#" id="s2a1">span2a1</a>
</span>
<span class="span3"></span>
</span>
</div>
<p lang="en" id="lang-en">English</p>
<p lang="en-gb" id="lang-en-gb">English UK</p>
<p lang="en-us" id="lang-en-us">English US</p>
<p lang="fr" id="lang-fr">French</p>
</div>

<div id="footer">
</div>
c         C   s   t  |  j  |  _ d  S(   N(   R    t   HTMLR   (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR<     s    c         C   ss   g  |  j  j |  D] } | d ^ q } | j   | j   |  j | | d | d j |  d j |  f  d  S(   NR   s$   Selector %s, expected [%s], got [%s]s   , (   R   t   selectt   sortR   t   join(   R   t   selectort   expected_idst   elt   el_ids(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR     s    )

c         G   s+   x$ | D] \ } } |  j  | |  q Wd  S(   N(   t   assertSelect(   R   t   testsR  R  (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   assertSelectMultiple  s    c         C   s]   |  j  j d  } |  j t |  d  |  j | d j d  |  j | d j d g  d  S(   NRN   i   i    u	   The title(   R   R  R   R_   R8   Ru   (   R   t   els(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_one_tag_one  s    c         C   sP   |  j  j d  } |  j t |  d  x! | D] } |  j | j d  q/ Wd  S(   NRs   i   (   R   R  R   R_   R8   (   R   R  Rs   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_one_tag_many  s    c         C   s)   |  j  j d  } |  j d d g  d  S(   Ns   div divt   inner(   R   R  R   (   R   R  (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_tag_in_tag_one  s    c         C   s.   x' d D] } |  j  | d d d g  q Wd  S(   Ns   html divs   html body divs   body divt   mainR  t   footer(   s   html divs   html body divs   body div(   R   (   R   R  (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_tag_in_tag_many  s    c         C   s&   |  j  t |  j j d   d  d  S(   Nt   deli    (   R   R_   R   R  (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_tag_no_match  s    c         C   s&   |  j  t |  j j d   d  d  S(   Ns   tag%ti    (   R   R_   R   R  (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_invalid_tag  s    c         C   s)   |  j  d d g f d d d g f  d  S(   Nt   h1t   header1t   h2t   header2t   header3(   R  (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_header_tags   s    c         C   so   xh d	 D]` } |  j  j |  } |  j t |  d  |  j | d j d  |  j | d d d g  q Wd  S(
   Ns   .oneps   p.oneps   html p.onepi   i    R   RV   t   onep(   s   .oneps   p.oneps   html p.onep(   R   R  R   R_   R8   (   R   R  R  (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_class_one  s
    c         C   s,   |  j  j d  } |  j t |  d  d  S(   Ns   div.onepi    (   R   R  R   R_   (   R   R  (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_class_mismatched_tag  s    c         C   s(   x! d D] } |  j  | d g  q Wd  S(   Ns	   div#inners   #inners   div div#innerR  (   s	   div#inners   #inners   div div#inner(   R   (   R   R  (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_one_id  s    c         C   s,   |  j  j d  } |  j t |  d  d  S(   Ns   #doesnotexisti    (   R   R  R   R_   (   R   R  (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_bad_id  s    c         C   s   |  j  j d  } |  j t |  d  x! | D] } |  j | j d  q/ W|  j | d d d g  |  j | d j d   d  S(   Ns   div#inner pi   R   i   RV   R  i    (   R   R  R   R_   R8   R=  t   has_key(   R   R  R  (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_items_in_id  s    c         C   s7   x0 d D]( } |  j  t |  j j |   d  q Wd  S(   Ns   div#main dels   div#main div.oopss   div div#maini    (   s   div#main dels   div#main div.oopss   div div#main(   R   R_   R   R  (   R   R  (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_a_bunch_of_emptys!  s    c         C   s(   x! d
 D] } |  j  | d	 g  q Wd  S(   Ns   .class1s   p.class1s   .class2s   p.class2s   .class3s   p.class3s   html p.class2s   div#inner .class2t   pmulti(   s   .class1s   p.class1s   .class2s   p.class2s   .class3s   p.class3s   html p.class2s   div#inner .class2(   R   (   R   R  (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_multi_class_support%  s    
c         C   s(   x! d D] } |  j  | d g  q Wd  S(   Ns   .class1.class3s   .class3.class2s   .class1.class2.class3R  (   s   .class1.class3s   .class3.class2s   .class1.class2.class3(   R   (   R   R  (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_multi_class_selection*  s    
c         C   s-   |  j  d d d g  |  j  d d g  d  S(   Ns   .s1 > at   s1a1t   s1a2s   .s1 > a spant   s1a2s1(   R   (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_child_selector/  s    c         C   s   |  j  d d g f d d g f d d g f d d g f d d g f d d g f d	 d g f d
 g  f d d g f d d g f d d g f d g  f d g  f d g  f  d  S(   Ns   p[class="onep"]t   p1s
   p[id="p1"]s   [class="onep"]s	   [id="p1"]s   link[rel="stylesheet"]t   l1s   link[type="text/css"]s   link[href="blah.css"]s   link[href="no-blah.css"]s   [rel="stylesheet"]s   [type="text/css"]s   [href="blah.css"]s   [href="no-blah.css"]s   p[href="no-blah.css"](   R  (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_attribute_equals3  s    			c         C   s   |  j  d d g f d d g f d d g f d d g f d d g f d d g f d d	 g f d
 d	 g f d d	 g f d d	 g f 
 d  S(   Ns   p[class~="class1"]R  s   p[class~="class2"]s   p[class~="class3"]s   [class~="class1"]s   [class~="class2"]s   [class~="class3"]s   a[rel~="friend"]t   bobs   a[rel~="met"]s   [rel~="friend"]s   [rel~="met"](   R  (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_attribute_tildeE  s    c         C   s   |  j  d d g f d d g f d g  f d g  f d g  f d d g f d d	 d
 g f d d	 d
 g f d d d g f d d
 d g f d d g f d d
 g f  d  S(   Ns   [rel^="style"]R  s   link[rel^="style"]s   notlink[rel^="notstyle"]s   [rel^="notstyle"]s   link[rel^="notstyle"]s   link[href^="bla"]s   a[href^="http://"]R  t   mes   [href^="http://"]s	   [id^="p"]R  R  s	   [id^="m"]R  s   div[id^="m"]s
   a[id^="m"](   R  (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_attribute_startswithS  s    			c         C   s_   |  j  d d g f d d g f d d g f d d d d d d	 d
 g f d g  f d g  f  d  S(   Ns   [href$=".css"]R  s   link[href$=".css"]s   link[id$="1"]s	   [id$="1"]R  R  R  t   s2a1R  s   div[id$="1"]s   [id$="noending"](   R  (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_attribute_endswithc  s    	c         C   s.  |  j  d d g f d d g f d g  f d g  f d g  f d d g f d d	 d
 g f d d	 d
 g f d d d g f d d g f d d
 g f d d g f d d g f d d g f d d d d d d d d g f d g  f d g  f d d	 d
 d g f d d	 d
 g f d d g f d  d d! g f d" d! g f  d  S(#   Ns   [rel*="style"]R  s   link[rel*="style"]s   notlink[rel*="notstyle"]s   [rel*="notstyle"]s   link[rel*="notstyle"]s   link[href*="bla"]s   a[href*="http://"]R  R  s   [href*="http://"]s	   [id*="p"]R  R  s   div[id*="m"]R  s
   a[id*="m"]s   [href*=".css"]s   link[href*=".css"]s   link[id*="1"]s	   [id*="1"]R  R  R  R  R  s   div[id*="1"]s   [id*="noending"]s   [href*="."]s   a[href*="."]s   link[href*="."]s   div[id*="n"]R  s   div[id*="nn"](   R  (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_attribute_containsm  s.    					c         C   sG   |  j  d d d d g f d d d d g f d d g f d g  f  d  S(	   Ns   p[lang|="en"]s   lang-ens
   lang-en-gbs
   lang-en-uss   [lang|="en"]s   p[lang|="fr"]s   lang-frs   p[lang|="gb"](   R  (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_attribute_exact_or_hypen  s
    c      	   C   sq   |  j  d d d d g f d d g f d d d g f d d d	 d
 d g f d d d g f d g  f d g  f  d  S(   Ns   [rel]R  R  R  s	   link[rel]s   a[rel]s   [lang]s   lang-ens
   lang-en-gbs
   lang-en-uss   lang-frs   p[class]R  R  s   [blah]s   p[blah](   R  (   R   (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_attribute_exists  s    	c         C   s>   |  j  j d d d } | j d  } |  j | d g  d  S(   NRs   R   R  R  (   R   R   R  R   (   R   R  t   selected(    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   test_select_on_element  s    (   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  (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyR    s:   '		
																					
			(.   R    Rn  Rg  R%   RG  t   bs4R    t   bs4.builderR   R   t   bs4.elementR   R   R   R   R   t   bs4.testingR   R	   R   Rh   R   t   LXML_PRESENTR   R   R!   R5   R:   RJ   Rr   R|   R   R   R   R   R   R   R   R   RC  R]  Re  Rt  R  R  R  (    (    (    s4   ./lib/python2.7/site-packages/bs4/tests/test_tree.pyt   <module>
   sD   (-C2(3--$ a!-x,'