§
     Mºf¼  ã                   óJ  — d Z ddlm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mZmZmZmZmZmZ ddlmZ  G d	„ d
e¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z  G d„ de¦  «        Z! G d„ de!¦  «        Z" G d„ de!¦  «        Z# G d„ d e¦  «        Z$ G d!„ d"e$¦  «        Z% G d#„ d$e$¦  «        Z& G d%„ d&e¦  «        Z' G d'„ d(e¦  «        Z(dS ))a8  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.
é    )Ú	set_traceN)ÚBeautifulSoup)Úbuilder_registryÚHTMLParserTreeBuilder)ÚCDataÚCommentÚDeclarationÚDoctypeÚ	FormatterÚNavigableStringÚScriptÚSoupStrainerÚ
StylesheetÚTagÚTemplateStringé   )ÚSoupTestc                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestFindzˆBasic tests of the find() method.

    find() just calls find_all() with limit=1, so it's not tested all
    that thouroughly here.
    c                 óp   — |                       d¦  «        }|                     d¦  «        j        dk    sJ ‚d S )Nz <a>1</a><b>2</b><a>3</a><b>4</b>ÚbÚ2)ÚsoupÚfindÚstring©Úselfr   s     úR/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/bs4/tests/test_tree.pyÚtest_find_tagzTestFind.test_find_tag-   s8   € Ø�yŠyÐ;Ñ<Ô<ˆØ�yŠy˜‰~Œ~Ô$¨Ò+Ð+Ð+Ð+Ð+Ð+ó    c                 óh   — |                       d¦  «        }|                     d¬¦  «        dk    sJ ‚d S )Nu   <h1>RÃ¤ksmÃ¶rgÃ¥s</h1>õ   RÃ¤ksmÃ¶rgÃ¥s©r   )r   r   r   s     r   Útest_unicode_text_findzTestFind.test_unicode_text_find1   s9   € Ø�yŠyÐ1Ñ2Ô2ˆØ�yŠy ˆyÑ0Ô0°OÒCÐCÐCÐCÐCÐCr    c                 ó�   — |                       d¦  «        }t          |¦  «         d|                     d¬¦  «        j        k    sJ ‚d S )Nu&   <h1 id="RÃ¤ksmÃ¶rgÃ¥s">here it is</h1>z
here it isr"   ©Úid)r   Ústrr   Útextr   s     r   Útest_unicode_attribute_findz$TestFind.test_unicode_attribute_find5   sG   € Ø�yŠyÐAÑBÔBˆÝˆD‰	Œ	ˆ	Ø˜tŸyšy¨O˜yÑ<Ô<ÔAÒAÐAÐAÐAÐAÐAr    c                 ó~   — |                       d¦  «        }dt          |                     ¦   «         ¦  «        k    sJ ‚dS )z)Test an optimization that finds all tags.ú<a>foo</a><b>bar</b>é   N©r   ÚlenÚfind_allr   s     r   Útest_find_everythingzTestFind.test_find_everything;   s;   € à�yŠyÐ/Ñ0Ô0ˆØ•C˜Ÿš™œÑ(Ô(Ò(Ð(Ð(Ð(Ð(Ð(r    c                 ó€   — |                       d¦  «        }dt          |                     d¦  «        ¦  «        k    sJ ‚dS )z;Test an optimization that finds all tags with a given name.z<a>foo</a><b>bar</b><a>baz</a>r-   ÚaNr.   r   s     r   Útest_find_everything_with_namez'TestFind.test_find_everything_with_name@   s?   € à�yŠyÐ9Ñ:Ô:ˆØ•C˜Ÿš cÑ*Ô*Ñ+Ô+Ò+Ð+Ð+Ð+Ð+Ð+r    N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r$   r*   r1   r4   © r    r   r   r   &   so   € € € € € ðð ð,ð ,ð ,ðDð Dð DðBð Bð Bð)ð )ð )ð
,ð ,ð ,ð ,ð ,r    r   c                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestFindAllz%Basic tests of the find_all() method.c                 óF  — |                       d¦  «        }|                     d¬¦  «        dgk    sJ ‚|                     ddg¬¦  «        ddgk    sJ ‚|                     t          j        d¦  «        ¬¦  «        g d¢k    sJ ‚|                     d¬¦  «        g d¢k    sJ ‚dS )	z'You can search the tree for text nodes.u   <html>Foo<b>bar</b>Â»</html>Úbarr#   ÚFooz.*)r>   r=   õ   Â»TN)r   r0   ÚreÚcompiler   s     r   Útest_find_all_text_nodesz$TestFindAll.test_find_all_text_nodesH   sº   € à�yŠyÐ9Ñ:Ô:ˆà�}Š} Eˆ}Ñ*Ô*¨u¨gÒ5Ð5Ð5Ð5ð �}Š} U¨E Nˆ}Ñ3Ô3¸¸u°~ÒEÐEÐEÐEà�}Š}¥B¤J¨tÑ$4Ô$4ˆ}Ñ5Ô5Ð9OÐ9OÐ9OÒOÐOÐOÐOà�}Š} Dˆ}Ñ)Ô)Ð-CÐ-CÐ-CÒCÐCÐCÐCÐCÐCr    c                 ó–  — |                       d¦  «        }|                      |                     dd¬¦  «        g d¢¦  «         |                      |                     dd¬¦  «        dg¦  «         |                      |                     dd¬¦  «        g d	¢¦  «         |                      |                     dd
¬¦  «        g d	¢¦  «         dS )z7You can limit the number of items returned by find_all.z(<a>1</a><a>2</a><a>3</a><a>4</a><a>5</a>r3   é   ©Úlimit)Ú1r   Ú3r   rG   é
   )rG   r   rH   Ú4Ú5r   N©r   Úassert_selectsr0   r   s     r   Útest_find_all_limitzTestFindAll.test_find_all_limitV   sâ   € à�yŠyÐCÑDÔDˆØ×Ò˜DŸMšM¨#°Q˜MÑ7Ô7¸¸¸ÑIÔIÐIØ×Ò˜DŸMšM¨#°Q˜MÑ7Ô7¸#¸Ñ?Ô?Ð?Ø×ÒØ�MŠM˜# RˆMÑ(Ô(Ð*CÐ*CÐ*Cñ	Eô 	Eð 	Eð 	×ÒØ�MŠM˜# QˆMÑ'Ô'Ð)BÐ)BÐ)Bñ	Dô 	Dð 	Dð 	Dð 	Dr    c                 óÊ   — |                       d¦  «        }|                       |dd¬¦  «        dg¦  «         |                      |                     d¬¦  «        dg¦  «         d S )	Nz!<a>1</a><b>2<a id='foo'>3</a></b>r3   r   rE   rG   Úfoor&   rH   )r   rM   r   r   s     r   Ú%test_calling_a_tag_is_calling_findallz1TestFindAll.test_calling_a_tag_is_calling_findallb   sg   € Ø�yŠyÐ<Ñ=Ô=ˆØ×Ò˜D˜D ¨AÐ.Ñ.Ô.°°Ñ6Ô6Ð6Ø×Ò˜DŸFšF e˜FÑ,Ô,¨s¨eÑ4Ô4Ð4Ð4Ð4r    c                 ó”   — |                       d¦  «        }g }|                     |¦  «         g |                     |¦  «        k    sJ ‚d S )Nú<a></a>)r   Úappendr0   )r   r   Úls      r   ÚTtest_find_all_with_self_referential_data_structure_does_not_cause_infinite_recursionz`TestFindAll.test_find_all_with_self_referential_data_structure_does_not_cause_infinite_recursiong   sL   € Ø�yŠy˜Ñ#Ô#ˆàˆØ	�Š�‰Œˆð �T—]’] 1Ñ%Ô%Ò%Ð%Ð%Ð%Ð%Ð%r    c                 ó  — |                       d¦  «        }|                     d¦  «        }t          |d¦  «        sJ ‚|                     d¦  «        }t          |d¦  «        sJ ‚|                     d¬¦  «        }t          |d¦  «        sJ ‚dS )z%All find_all calls return a ResultSetrS   r3   ÚsourceTrP   r#   N)r   r0   Úhasattr)r   r   Úresults      r   Útest_find_all_resultsetz#TestFindAll.test_find_all_resultsetq   s�   € à�yŠy˜Ñ#Ô#ˆØ—’˜sÑ#Ô#ˆÝ�v˜xÑ(Ô(Ð(Ð(Ð(à—’˜tÑ$Ô$ˆÝ�v˜xÑ(Ô(Ð(Ð(Ð(à—’ e�Ñ,Ô,ˆÝ�v˜xÑ(Ô(Ð(Ð(Ð(Ð(Ð(r    N)	r5   r6   r7   r8   rB   rN   rQ   rV   r[   r9   r    r   r;   r;   E   sk   € € € € € Ø/Ð/ðDð Dð Dð
Dð 
Dð 
Dð5ð 5ð 5ð
&ð &ð &ð
)ð 
)ð 
)ð 
)ð 
)r    r;   c                   ó   — e Zd Zd„ ZdS )ÚTestFindAllBasicNamespacesc                 ó¶   — |                       d¦  «        }d|                     d¦  «        j        k    sJ ‚d|                     ddi¬¦  «        j        k    sJ ‚d S )Nz0<mathml:msqrt>4</mathml:msqrt><a svg:fill="red">rJ   zmathml:msqrtr3   zsvg:fillÚred©Úattrs)r   r   r   Únamer   s     r   Útest_find_by_namespaced_namez7TestFindAllBasicNamespaces.test_find_by_namespaced_name€   sa   € Ø�yŠyÐKÑLÔLˆØ�d—i’i Ñ/Ô/Ô6Ò6Ð6Ð6Ð6Ø�d—i’i¨°eÐ'=�iÑ>Ô>ÔCÒCÐCÐCÐCÐCÐCr    N)r5   r6   r7   rc   r9   r    r   r]   r]   ~   s(   € € € € € ðDð Dð Dð Dð Dr    r]   c                   óT   — 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S )ÚTestFindAllByNamez&Test ways of finding tags by tag name.c                 ó:   — |                       d¦  «        | _        d S )Nz�<a>First tag.</a>
                                  <b>Second tag.</b>
                                  <c>Third <a>Nested tag.</a> tag.</c>©r   Útree©r   s    r   Úsetup_methodzTestFindAllByName.setup_method‰   s#   € Ø—Y’Yð  Jñ Kô KˆŒ	ˆ	ˆ	r    c                 óf   — |                       | j                             d¦  «        ddg¦  «         d S ©Nr3   ú
First tag.úNested tag.©rM   rh   r0   ri   s    r   Útest_find_all_by_tag_namez+TestFindAllByName.test_find_all_by_tag_nameŽ   sC   € à×ÒØŒI×Ò˜sÑ#Ô# l°MÐ%Bñ	Dô 	Dð 	Dð 	Dð 	Dr    c                 óT  — |                       | j                             dd¬¦  «        dg¦  «         |                       | j                             dd¬¦  «        ddg¦  «         |                       | j                             dt          j        d¦  «        ¬¦  «        ddg¦  «         d S )Nr3   rm   r#   Trn   Útag©rM   rh   r0   r@   rA   ri   s    r   Útest_find_all_by_name_and_textz0TestFindAllByName.test_find_all_by_name_and_text“   sÃ   € Ø×ÒØŒI×Ò˜s¨<ÐÑ8Ô8¸<¸.ñ	Jô 	Jð 	Jð 	×ÒØŒI×Ò˜s¨4ÐÑ0Ô0°<ÀÐ2Oñ	Qô 	Qð 	Qð 	×ÒØŒI×Ò˜s­2¬:°eÑ+<Ô+<ÐÑ=Ô=Ø˜=Ð)ñ	+ô 	+ð 	+ð 	+ð 	+r    c                 ón   — |                       | j        j                             d¦  «        dg¦  «         d S )Nr3   rn   )rM   rh   Úcr0   ri   s    r   Ú!test_find_all_on_non_root_elementz3TestFindAllByName.test_find_all_on_non_root_elementŸ   s2   € à×Ò˜DœIœK×0Ò0°Ñ5Ô5¸°ÑGÔGÐGÐGÐGr    c                 ó\   — |                       |                      d¦  «        ddg¦  «         d S rl   )rM   rh   ri   s    r   Ú%test_calling_element_invokes_find_allz7TestFindAllByName.test_calling_element_invokes_find_all£   s-   € Ø×Ò˜DŸIšI c™NœN¨\¸=Ð,IÑJÔJÐJÐJÐJr    c                 ó€   — |                       | j                             t          d¦  «        ¦  «        ddg¦  «         d S rl   )rM   rh   r0   r   ri   s    r   Útest_find_all_by_tag_strainerz/TestFindAllByName.test_find_all_by_tag_strainer¦   sG   € Ø×ÒØŒI×Ò�|¨CÑ0Ô0Ñ1Ô1Ø˜=Ð)ñ	+ô 	+ð 	+ð 	+ð 	+r    c                 ój   — |                       | j                             ddg¦  «        g d¢¦  «         d S )Nr3   r   ©rm   zSecond tag.rn   ro   ri   s    r   Útest_find_all_by_tag_namesz,TestFindAllByName.test_find_all_by_tag_names«   sD   € Ø×ÒØŒI×Ò  S˜zÑ*Ô*Ø8Ð8Ð8ñ	:ô 	:ð 	:ð 	:ð 	:r    c                 ól   — |                       | j                             dddœ¦  «        g d¢¦  «         d S )NT)r3   r   r}   ro   ri   s    r   Útest_find_all_by_tag_dictz+TestFindAllByName.test_find_all_by_tag_dict°   sH   € Ø×ÒØŒI×Ò d°$Ð7Ð7Ñ8Ô8Ø8Ð8Ð8ñ	:ô 	:ð 	:ð 	:ð 	:r    c                 óŠ   — |                       | j                             t          j        d¦  «        ¦  «        g d¢¦  «         d S )Nz^[ab]$r}   rs   ri   s    r   Útest_find_all_by_tag_rez)TestFindAllByName.test_find_all_by_tag_reµ   sJ   € Ø×ÒØŒI×Ò�rœz¨(Ñ3Ô3Ñ4Ô4Ø8Ð8Ð8ñ	:ô 	:ð 	:ð 	:ð 	:r    c                 óŒ   — d„ }|                       d¦  «        }|                      |                     |¦  «        ddg¦  «         d S )Nc                 ó>   — | j         |                      d¦  «        k    S ©Nr'   )rb   Úget©rr   s    r   Úid_matches_namezRTestFindAllByName.test_find_all_with_tags_matching_method.<locals>.id_matches_name½   s   € Ø”8˜sŸwšw t™}œ}Ò,Ð,r    zƒ<a id="a">Match 1.</a>
                            <a id="1">Does not match.</a>
                            <b id="b">Match 2.</a>zMatch 1.zMatch 2.rL   )r   rˆ   rh   s      r   Ú'test_find_all_with_tags_matching_methodz9TestFindAllByName.test_find_all_with_tags_matching_methodº   sj   € ð	-ð 	-ð 	-ð �yŠyð 6ñ 7ô 7ˆð 	×ÒØ�MŠM˜/Ñ*Ô*¨Z¸Ð,Dñ	Fô 	Fð 	Fð 	Fð 	Fr    c                 óJ  — |                       d¦  «        }|                     dd¦  «        }|                     dt          j        d¦  «        ¦  «        }|                     dddg¦  «        \  }}d|j        k    sJ ‚d|j        k    sJ ‚d|j        k    sJ ‚d|j        k    sJ ‚d S )NzH<div class='a b'>1</div><div class='a c'>2</div><div class='a d'>3</div>Údivza dza brH   rG   )r   r   r@   rA   r0   r   )r   r   Úr1Úr2Úr3Úr4s         r   Ú%test_find_with_multi_valued_attributez7TestFindAllByName.test_find_with_multi_valued_attributeÇ   s·   € Ø�yŠyØVñ
ô 
ˆð �YŠY�u˜eÑ$Ô$ˆØ�YŠY�u�bœj¨Ñ0Ô0Ñ1Ô1ˆØ—’˜u u¨e nÑ5Ô5‰ˆˆBØ�b”iÒÐÐÐØ�b”iÒÐÐÐØ�b”iÒÐÐÐØ�b”iÒÐÐÐÐÐr    N)r5   r6   r7   r8   rj   rp   rt   rw   ry   r{   r~   r€   r‚   r‰   r�   r9   r    r   re   re   †   sÎ   € € € € € Ø0Ð0ðKð Kð Kð
Dð Dð Dð
	+ð 	+ð 	+ðHð Hð HðKð Kð Kð+ð +ð +ð
:ð :ð :ð
:ð :ð :ð
:ð :ð :ð
Fð Fð Fð
 ð 
 ð 
 ð 
 ð 
 r    re   c                   ón   — 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S )ÚTestFindAllByAttributec                 óˆ   — |                       d¦  «        }|                      |                     d¬¦  «        ddg¦  «         d S )NzÅ
                         <a id="first">Matching a.</a>
                         <a id="second">
                          Non-matching <b id="first">Matching b.</b>a.
                         </a>Úfirstr&   zMatching a.zMatching b.rL   ©r   rh   s     r   Útest_find_all_by_attribute_namez6TestFindAllByAttribute.test_find_all_by_attribute_nameÖ   sX   € ð �yŠyð !ñ "ô "ˆð
 	×Ò˜DŸMšM¨W˜MÑ5Ô5Ø)¨=Ð9ñ	;ô 	;ð 	;ð 	;ð 	;r    c                 ó‚  — d                      d¦  «        }d                      d¦  «        }|                      |¦  «        }|j        g|                     |¬¦  «        k    sJ ‚|j        g|                     |                     d¦  «        ¬¦  «        k    sJ ‚|j        gs J |                     |dg¬¦  «        ¦   «         ‚d S )Nu   ×�×•×œ×©Úutf8u   <a title="×�×•×œ×©"></a>)Útitlezsomething else)Úencoder   r3   r0   Údecode)r   ÚpeaceÚdatar   s       r   Ú%test_find_all_by_utf8_attribute_valuez<TestFindAllByAttribute.test_find_all_by_utf8_attribute_valueá   s»   € Ø×!Ò! &Ñ)Ô)ˆØ)×0Ò0°Ñ8Ô8ˆØ�yŠy˜‰ŒˆØ”ˆx˜4Ÿ=š=¨u˜=Ñ5Ô5Ò5Ð5Ð5Ð5Ø”ˆx˜4Ÿ=š=¨u¯|ª|¸FÑ/CÔ/C˜=ÑDÔDÒDÐDÐDÐDØ”ˆxÐGÐG˜Ÿš¨eÐ5EÐ-F˜ÑGÔGÑGÔGÐGÐGÐGr    c                 ó:  — |                       d¦  «        }|                      |                     d¬¦  «        dg¦  «         |                      |                     ddi¬¦  «        dg¦  «         |                      |                     dd	i¬¦  «        d
g¦  «         d S )Na0  
                         <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>
                         Úname1©rb   zA tag called 'name1'.rb   r`   zName match.ÚclassÚclass2zClass match.rL   r•   s     r   Útest_find_all_by_attribute_dictz6TestFindAllByAttribute.test_find_all_by_attribute_dicté   s¿   € ð �yŠyð ñ ô ˆð 	×Ò˜DŸMšM¨w˜MÑ7Ô7Ø3Ð4ñ	6ô 	6ð 	6ð 	×Ò˜DŸMšM°¸'Ð0B˜MÑCÔCØ)˜?ñ	,ô 	,ð 	,ð 	×Ò˜DŸMšM°¸8Ð0D˜MÑEÔEØ*Ð+ñ	-ô 	-ð 	-ð 	-ð 	-r    c                 ó’  — |                       d¦  «        }|                      |                     dd¬¦  «        dg¦  «         |                      |                     dd¬¦  «        dg¦  «         |                      |                     dd	¬¦  «        dg¦  «         |                      |                     dd¦  «        dg¦  «         |                      |                     d¬
¦  «        ddg¦  «         |                      |                     dd¦  «        dg¦  «         |                      |                     dd	¦  «        dg¦  «         d S )Nzî
                         <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>
                         r3   rG   ©Úclass_zClass 1.rv   rH   zClass 3 and 4.rJ   r`   rL   r•   s     r   Útest_find_all_by_classz-TestFindAllByAttribute.test_find_all_by_classþ   s?  € Ø�yŠyð ñ ô ˆð 	×Ò˜DŸMšM¨#°c˜MÑ:Ô:¸Z¸LÑIÔIÐIØ×Ò˜DŸMšM¨#°c˜MÑ:Ô:Ð=MÐ<NÑOÔOÐOØ×Ò˜DŸMšM¨#°c˜MÑ:Ô:Ð=MÐ<NÑOÔOÐOð 	×Ò˜DŸMšM¨#¨sÑ3Ô3°j°\ÑBÔBÐBØ×Ò˜DŸMšM°˜MÑ4Ô4°zÀ:Ð6NÑOÔOÐOØ×Ò˜DŸMšM¨#¨sÑ3Ô3Ð6FÐ5GÑHÔHÐHØ×Ò˜DŸMšM¨#¨sÑ3Ô3Ð6FÐ5GÑHÔHÐHÐHÐHr    c                 ó°  — |                       d¦  «        }|                     dt          j        d¦  «        ¬¦  «        }|                      |dg¦  «         |                     dt          j        d¦  «        ¬¦  «        }|                      |dg¦  «         |                     dt          j        d¦  «        ¬¦  «        }|                      |dg¦  «         d S )Nz#<gar class='foo bar'>Found it</gar>ÚgarÚor¦   úFound itr3   zo b)r   r0   r@   rA   rM   )r   rh   Úfs      r   Ú0test_find_by_class_when_multiple_classes_presentzGTestFindAllByAttribute.test_find_by_class_when_multiple_classes_present  s½   € Ø�yŠyÐ>Ñ?Ô?ˆà�MŠM˜%­¬
°3©¬ˆMÑ8Ô8ˆØ×Ò˜A 
˜|Ñ,Ô,Ð,à�MŠM˜%­¬
°3©¬ˆMÑ8Ô8ˆØ×Ò˜A 
˜|Ñ,Ô,Ð,ð �MŠM˜%­¬
°5Ñ(9Ô(9ˆMÑ:Ô:ˆØ×Ò˜A 
˜|Ñ,Ô,Ð,Ð,Ð,r    c                 ó`  — |                       d¦  «        }|                      |                     dt          j        d¦  «        ¦  «        dg¦  «         d„ }|                      |                     d|¦  «        g ¦  «         d„ }|                      |                     d|¦  «        dg¦  «         d S )Nz<a class='bar'>Found it</a>r3   Úbar¬   c                 ó(   — t          | ¦  «        dk    S ©NrD   ©r/   ©Úvalues    r   Úbig_attribute_valueznTestFindAllByAttribute.test_find_all_with_non_dictionary_for_attrs_finds_by_class.<locals>.big_attribute_value%  s   € Ý�u‘:”: ’>Ð!r    c                 ó(   — t          | ¦  «        dk    S r²   r³   r´   s    r   Úsmall_attribute_valuezpTestFindAllByAttribute.test_find_all_with_non_dictionary_for_attrs_finds_by_class.<locals>.small_attribute_value*  s   € Ý�u‘:”: ’?Ð"r    ©r   rM   r0   r@   rA   )r   r   r¶   r¸   s       r   Ú:test_find_all_with_non_dictionary_for_attrs_finds_by_classzQTestFindAllByAttribute.test_find_all_with_non_dictionary_for_attrs_finds_by_class   sÈ   € Ø�yŠyÐ6Ñ7Ô7ˆà×Ò˜DŸMšM¨#­r¬z¸$Ñ/?Ô/?Ñ@Ô@À:À,ÑOÔOÐOð	"ð 	"ð 	"ð 	×Ò˜DŸMšM¨#Ð/BÑCÔCÀRÑHÔHÐHð	#ð 	#ð 	#ð 	×ÒØ�MŠM˜#Ð4Ñ5Ô5¸
°|ñ	Eô 	Eð 	Eð 	Eð 	Er    c                 ó”  — |                       d¦  «        }|                     d¦  «        \  }}||gsJ |                     dd¦  «        ¦   «         ‚|gsJ |                     dd¦  «        ¦   «         ‚|g|                     dd¬¦  «        k    sJ ‚|g|                     dd¦  «        k    sJ ‚g |                     dd¦  «        k    sJ ‚d S )Nz*<a class="foo bar"></a><a class="foo"></a>r3   rP   r=   zfoo barr¦   zbar foo©r   r0   )r   r   r3   Úa2s       r   Ú:test_find_all_with_string_for_attrs_finds_multiple_classeszQTestFindAllByAttribute.test_find_all_with_string_for_attrs_finds_multiple_classes0  sÞ   € Ø�yŠyÐEÑFÔFˆØ—’˜cÑ"Ô"‰ˆˆ2Ø�2ˆwÐ1Ð1˜Ÿš c¨5Ñ1Ô1Ñ1Ô1Ð1ØˆsÐ-Ð-�D—M’M # uÑ-Ô-Ñ-Ô-Ð-ð ˆs�d—m’m C°	�mÑ:Ô:Ò:Ð:Ð:Ð:Øˆs�d—m’m C¨Ñ3Ô3Ò3Ð3Ð3Ð3Ø�T—]’] 3¨	Ñ2Ô2Ò2Ð2Ð2Ð2Ð2Ð2r    c                 ó¨   — |                       d¦  «        }t          ddi¬¦  «        }|                      |                     |¦  «        dg¦  «         d S )Nzi
                         <a id="first">Match.</a>
                         <a id="second">Non-match.</a>r'   r”   r`   zMatch.)r   r   rM   r0   )r   rh   Ústrainers      r   Ú'test_find_all_by_attribute_soupstrainerz>TestFindAllByAttribute.test_find_all_by_attribute_soupstrainer<  s[   € Ø�yŠyð :ñ ;ô ;ˆõ   t¨gÐ&6Ð7Ñ7Ô7ˆØ×Ò˜DŸMšM¨(Ñ3Ô3°h°ZÑ@Ô@Ð@Ð@Ð@r    c                 óˆ   — |                       d¦  «        }|                      |                     dd ¬¦  «        dg¦  «         d S )Nú�<a id="1">ID present.</a>
                            <a>No ID present.</a>
                            <a id="">ID is empty.</a>r3   r&   zNo ID present.rL   r•   s     r   Ú$test_find_all_with_missing_attributez;TestFindAllByAttribute.test_find_all_with_missing_attributeD  sN   € ð �yŠyð 9ñ :ô :ˆð 	×Ò˜DŸMšM¨#°$˜MÑ7Ô7Ð:JÐ9KÑLÔLÐLÐLÐLr    c                 óˆ   — |                       d¦  «        }|                      |                     d¬¦  «        ddg¦  «         d S )NrÃ   Tr&   zID present.zID is empty.rL   r•   s     r   Ú$test_find_all_with_defined_attributez;TestFindAllByAttribute.test_find_all_with_defined_attributeL  s]   € ð �yŠyð 9ñ :ô :ˆð 	×ÒØ�MŠM˜TˆMÑ"Ô" ]°NÐ$Cñ	Eô 	Eð 	Eð 	Eð 	Er    c                 óà   — |                       d¦  «        }ddg}|                      |                     d¬¦  «        |¦  «         |                      |                     d¬¦  «        |¦  «         d S )Nz[<a id=1>Unquoted attribute.</a>
                            <a id="1">Quoted attribute.</a>zUnquoted attribute.zQuoted attribute.r   r&   rG   rL   )r   rh   Úexpecteds      r   Ú$test_find_all_with_numeric_attributez;TestFindAllByAttribute.test_find_all_with_numeric_attributeU  sw   € à�yŠyð ?ñ @ô @ˆð *Ð+>Ð?ˆØ×Ò˜DŸMšM¨Q˜MÑ/Ô/°Ñ:Ô:Ð:Ø×Ò˜DŸMšM¨S˜MÑ1Ô1°8Ñ<Ô<Ð<Ð<Ð<r    c                 óŒ   — |                       d¦  «        }|                      |                     g d¢¬¦  «        ddg¦  «         d S )Nz‘<a id="1">1</a>
                            <a id="2">2</a>
                            <a id="3">3</a>
                            <a>No ID.</a>)rG   rH   rJ   r&   rG   rH   rL   r•   s     r   Ú(test_find_all_with_list_attribute_valuesz?TestFindAllByAttribute.test_find_all_with_list_attribute_values^  s[   € ð �yŠyð -ñ .ô .ˆð 	×Ò˜DŸMšM¨_¨_¨_˜MÑ=Ô=Ø ˜:ñ	'ô 	'ð 	'ð 	'ð 	'r    c                 ó¬   — |                       d¦  «        }|                      |                     t          j        d¦  «        ¬¦  «        ddg¦  «         d S )NzÞ<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>z^a+$r&   zOne a.zTwo as.r¹   r•   s     r   Ú5test_find_all_with_regular_expression_attribute_valuezLTestFindAllByAttribute.test_find_all_with_regular_expression_attribute_valueh  sb   € ð �yŠyð -ñ .ô .ˆð 	×Ò˜DŸMšM­R¬Z¸Ñ-?Ô-?˜MÑ@Ô@Ø$ iÐ0ñ	2ô 	2ð 	2ð 	2ð 	2r    c                 ó´   — |                       d¦  «        }|j        }|g|                     dd¬¦  «        k    sJ ‚g |                     dd¬¦  «        k    sJ ‚d S )Nz<b>foo</b><b>bar</b><a>foo</a>r3   rP   r#   r=   ©r   r3   r0   ©r   r   r3   s      r   Ú'test_find_by_name_and_containing_stringz>TestFindAllByAttribute.test_find_by_name_and_containing_stringu  se   € Ø�yŠyÐ9Ñ:Ô:ˆØŒFˆàˆs�d—m’m C°�mÑ6Ô6Ò6Ð6Ð6Ð6Ø�T—]’] 3¨u�]Ñ5Ô5Ò5Ð5Ð5Ð5Ð5Ð5r    c                 ó�   — |                       d¦  «        }|                     d¦  «        |                     dd¬¦  «        k    sJ ‚d S )Nz"<a>foo</a><a><b><c>foo</c></b></a>r3   rP   r#   r¼   r   s     r   Ú=test_find_by_name_and_containing_string_when_string_is_buriedzTTestFindAllByAttribute.test_find_by_name_and_containing_string_when_string_is_buried|  sG   € Ø�yŠyÐ=Ñ>Ô>ˆØ�}Š}˜SÑ!Ô! T§]¢]°3¸u ]Ñ%EÔ%EÒEÐEÐEÐEÐEÐEr    c                 ó´   — |                       d¦  «        }|j        }|g|                     dd¬¦  «        k    sJ ‚g |                     dd¬¦  «        k    sJ ‚d S )Nz"<b id="1">foo</b><a id="2">foo</a>r-   rP   )r'   r   r   r=   rÏ   rÐ   s      r   Ú,test_find_by_attribute_and_containing_stringzCTestFindAllByAttribute.test_find_by_attribute_and_containing_string€  se   € Ø�yŠyÐ=Ñ>Ô>ˆØŒFˆàˆs�d—m’m q°�mÑ7Ô7Ò7Ð7Ð7Ð7Ø�T—]’] a°�]Ñ6Ô6Ò6Ð6Ð6Ð6Ð6Ð6r    N)r5   r6   r7   r–   rž   r¤   r¨   r®   rº   r¾   rÁ   rÄ   rÆ   rÉ   rË   rÍ   rÑ   rÓ   rÕ   r9   r    r   r’   r’   Ô   s  € € € € € ð	;ð 	;ð 	;ðHð Hð Hð-ð -ð -ð*Ið Ið Ið(-ð -ð -ðEð Eð Eð 
3ð 
3ð 
3ðAð Að AðMð Mð MðEð Eð Eð=ð =ð =ð'ð 'ð 'ð2ð 2ð 2ð6ð 6ð 6ðFð Fð Fð7ð 7ð 7ð 7ð 7r    r’   c                   ó   — e Zd ZdZd„ ZdS )Ú
TestSmoothzTest Tag.smooth.c                 óV  — |                       d¦  «        }|j        }|                     d¦  «         |                     d¦  «         |                     t          d¦  «        ¦  «         |                     t          d¦  «        ¦  «         |                     d¦  «         |                      ¦   «         }t          ||d¦  «        }|                     d¦  «         |                     d	¦  «         |                     |¦  «         d |j        j        k    sJ ‚d
t          |j	        ¦  «        k    sJ ‚| 
                    ¦   «          dt          |j	        ¦  «        k    sJ ‚d|j	        d         k    sJ ‚d|j        j        k    sJ ‚d|j	        d         k    sJ ‚d|j	        d         k    sJ ‚d S )Nz<div>a</div>r   rv   z	Comment 1z	Comment 2ÚdÚspanrG   r   é   é   Úabcr   Ú12r   r-   )r   r‹   rT   r   Údefault_builderr   rÚ   r   r/   ÚcontentsÚsmooth)r   r   r‹   ÚbuilderrÚ   s        r   Útest_smoothzTestSmooth.test_smooth‹  s“  € Ø�yŠy˜Ñ(Ô(ˆØŒhˆØ�
Š
�3‰ŒˆØ�
Š
�3‰ŒˆØ�
Š
•7˜;Ñ'Ô'Ñ(Ô(Ð(Ø�
Š
•7˜;Ñ'Ô'Ñ(Ô(Ð(Ø�
Š
�3‰ŒˆØ×&Ò&Ñ(Ô(ˆÝ�4˜ &Ñ)Ô)ˆØ�Š�CÑÔÐØ�Š�CÑÔÐØ�
Š
�4ÑÔÐð �s”x”Ò&Ð&Ð&Ð&à•C˜œÑ%Ô%Ò%Ð%Ð%Ð%Ø�
Š
‰ŒˆØ•C˜œÑ%Ô%Ò%Ð%Ð%Ð%ð
 ˜œ QœÒ'Ð'Ð'Ð'ð �s”x”Ò&Ð&Ð&Ð&ð
 ˜cœl¨1œoÒ-Ð-Ð-Ð-Ø˜cœl¨1œoÒ-Ð-Ð-Ð-Ð-Ð-r    N)r5   r6   r7   r8   rã   r9   r    r   r×   r×   ˆ  s)   € € € € € ØÐð&.ð &.ð &.ð &.ð &.r    r×   c                   ó   — e Zd ZdZd„ ZdS )Ú	TestIndexzTest Tag.indexc                 ó6  — |                       d¦  «        }|j        }t          |j        ¦  «        D ] \  }}||                     |¦  «        k    sJ ‚Œ!t          j        t          ¦  «        5  |                     d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nah  <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>r   )r   r‹   Ú	enumeraterà   ÚindexÚpytestÚraisesÚ
ValueError)r   rh   r‹   ÚiÚelements        r   Ú
test_indexzTestIndex.test_index¶  sã   € Ø�yŠyð &ñ 'ô 'ˆð ŒhˆÝ# C¤LÑ1Ô1ð 	+ð 	+‰JˆAˆwØ˜Ÿ	š	 'Ñ*Ô*Ò*Ð*Ð*Ð*Ð*ÝŒ]�:Ñ&Ô&ð 	ð 	Ø�JŠJ�q‰MŒMˆMð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   Á+BÂBÂBN)r5   r6   r7   r8   rî   r9   r    r   rå   rå   ´  s)   € € € € € ØÐðð ð ð ð r    rå   c                   óH   — 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S )ÚTestParentOperationsz;Test navigation and searching through an element's parents.c                 ó\   — |                       d¦  «        | _        | j        j        | _        d S )Na1  <ul id="empty"></ul>
                                 <ul id="top">
                                  <ul id="middle">
                                   <ul id="bottom">
                                    <b>Start here</b>
                                   </ul>
                                  </ul>)r   rh   r   Ústartri   s    r   rj   z!TestParentOperations.setup_methodÊ  s-   € Ø—I’Ið +ñ ,ô ,ˆŒ	ð ”Y”[ˆŒ
ˆ
ˆ
r    c                 ó´   — | j         j        d         dk    sJ ‚| j         j        j        d         dk    sJ ‚| j         j        j        j        d         dk    sJ ‚d S )Nr'   ÚbottomÚmiddleÚtop)rò   Úparentri   s    r   Útest_parentz TestParentOperations.test_parentÕ  sb   € ØŒzÔ  Ô&¨(Ò2Ð2Ð2Ð2ØŒzÔ Ô'¨Ô-°Ò9Ð9Ð9Ð9ØŒzÔ Ô'Ô.¨tÔ4¸Ò=Ð=Ð=Ð=Ð=Ð=r    c                 óN   — | j         j        d         }|j        | j         k    sJ ‚d S )Nr   )rh   rà   r÷   )r   Útop_tags     r   Ú%test_parent_of_top_tag_is_soup_objectz:TestParentOperations.test_parent_of_top_tag_is_soup_objectÚ  s,   € Ø”)Ô$ QÔ'ˆØŒ~ ¤Ò*Ð*Ð*Ð*Ð*Ð*r    c                 ó*   — d | j         j        k    sJ ‚d S ©N)rh   r÷   ri   s    r   Útest_soup_object_has_no_parentz3TestParentOperations.test_soup_object_has_no_parentÞ  s   € Ø�t”yÔ'Ò'Ð'Ð'Ð'Ð'Ð'r    c                 óÈ   — |                       | j                             d¦  «        g d¢¦  «         |                       | j                             dd¬¦  «        dg¦  «         d S )NÚul)rô   rõ   rö   rõ   r&   )Úassert_selects_idsrò   Úfind_parentsri   s    r   Útest_find_parentsz&TestParentOperations.test_find_parentsá  s|   € Ø×ÒØŒJ×#Ò# DÑ)Ô)Ð+FÐ+FÐ+Fñ	Hô 	Hð 	Hà×ÒØŒJ×#Ò# D¨XÐ#Ñ6Ô6¸¸
ñ	Dô 	Dð 	Dð 	Dð 	Dr    c                 ó¢   — | j                              d¦  «        d         dk    sJ ‚| j                              dd¬¦  «        d         dk    sJ ‚d S )Nr   r'   rô   rö   r&   )rò   Úfind_parentri   s    r   Útest_find_parentz%TestParentOperations.test_find_parentç  sY   € ØŒz×%Ò% dÑ+Ô+¨DÔ1°XÒ=Ð=Ð=Ð=ØŒz×%Ò% d¨uÐ%Ñ5Ô5°dÔ;¸uÒDÐDÐDÐDÐDÐDr    c                 ó`   — | j                              d¬¦  «        }|j        j        dk    sJ ‚d S )Nú
Start herer#   r   )rh   r   r÷   rb   ©r   r)   s     r   Útest_parent_of_text_elementz0TestParentOperations.test_parent_of_text_elementë  s3   € ØŒy�~Š~ \ˆ~Ñ2Ô2ˆØŒ{Ô 3Ò&Ð&Ð&Ð&Ð&Ð&r    c                 ó~   — | j                              d¬¦  «        }|                     d¦  «        d         dk    sJ ‚d S )Nr  r#   r   r'   rô   )rh   r   r  r	  s     r   Útest_text_element_find_parentz2TestParentOperations.test_text_element_find_parentï  sA   € ØŒy�~Š~ \ˆ~Ñ2Ô2ˆØ×Ò Ñ%Ô% dÔ+¨xÒ7Ð7Ð7Ð7Ð7Ð7r    c                 óV   — d„ | j         j        D ¦   «         }|sJ dddk    g¦   «         ‚d S )Nc                 ó4   — g | ]}|®d|j         v ¯|d         ‘ŒS r…   r`   )Ú.0r÷   s     r   ú
<listcomp>z>TestParentOperations.test_parent_generator.<locals>.<listcomp>ô  s:   € ð Cð Cð C FØÐ(¨T°V´\Ð-AÐ-Að ˜$”<Ø-AÐ-AÐ-Ar    rô   rõ   rö   )rò   Úparents)r   r  s     r   Útest_parent_generatorz*TestParentOperations.test_parent_generatoró  sM   € ðCð C¨d¬jÔ.@ð Cñ Cô CˆàÐ5Ð5˜ 8¨uÒ#4Ð5Ñ5Ô5Ð5Ð5Ð5r    N)r5   r6   r7   r8   rj   rø   rû   rþ   r  r  r
  r  r  r9   r    r   rð   rð   Ç  s§   € € € € € ØEÐEð!ð !ð !ð>ð >ð >ð
+ð +ð +ð(ð (ð (ðDð Dð DðEð Eð Eð'ð 'ð 'ð8ð 8ð 8ð6ð 6ð 6ð 6ð 6r    rð   c                   ó   — e Zd Zd„ ZdS )ÚProximityTestc                 ó:   — |                       d¦  «        | _        d S )Nzg<html id="start"><head></head><body><b id="1">One</b><b id="2">Two</b><b id="3">Three</b></body></html>rg   ri   s    r   rj   zProximityTest.setup_methodû  s    € Ø—I’IØuñwô wˆŒ	ˆ	ˆ	r    N©r5   r6   r7   rj   r9   r    r   r  r  ù  s(   € € € € € ðwð wð wð wð wr    r  c                   óH   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
ˆ xZS )	ÚTestNextOperationsc                 óx   •— t          t          | ¦  «                             ¦   «          | j        j        | _        d S rý   )Úsuperr  rj   rh   r   rò   ©r   Ú	__class__s    €r   rj   zTestNextOperations.setup_method  s/   ø€ ÝÕ  $Ñ'Ô'×4Ò4Ñ6Ô6Ð6Ø”Y”[ˆŒ
ˆ
ˆ
r    c                 ód   — | j         j        dk    sJ ‚| j         j        j        d         dk    sJ ‚d S )NÚOner'   r   )rò   Únext_elementri   s    r   Ú	test_nextzTestNextOperations.test_next  s<   € ØŒzÔ&¨%Ò/Ð/Ð/Ð/ØŒzÔ&Ô3°DÔ9¸SÒ@Ð@Ð@Ð@Ð@Ð@r    c                 óV   — | j                              d¬¦  «        }|j        d k    sJ ‚d S ©NÚThreer#   )rh   r   r  )r   Úlasts     r   Útest_next_of_last_item_is_nonez1TestNextOperations.test_next_of_last_item_is_none
  s1   € ØŒy�~Š~ Wˆ~Ñ-Ô-ˆØÔ  DÒ(Ð(Ð(Ð(Ð(Ð(r    c                 ó*   — | j         j        d k    sJ ‚d S rý   )rh   r  ri   s    r   Útest_next_of_root_is_nonez,TestNextOperations.test_next_of_root_is_none  s   € àŒyÔ%¨Ò-Ð-Ð-Ð-Ð-Ð-r    c                 óü   — |                       | j                             d¦  «        ddg¦  «         | j                             d¬¦  «         |                       | j                             d¬¦  «        dg¦  «         d S )Nr   ÚTwor#  rD   r&   )rM   rò   Úfind_all_nextri   s    r   Útest_find_all_nextz%TestNextOperations.test_find_all_next  sw   € Ø×Ò˜DœJ×4Ò4°SÑ9Ô9¸EÀ7Ð;KÑLÔLÐLØŒ
× Ò  AÐ Ñ&Ô&Ð&Ø×Ò˜DœJ×4Ò4¸Ð4Ñ:Ô:¸W¸IÑFÔFÐFÐFÐFr    c                 ó”   — | j                              d¦  «        d         dk    sJ ‚| j                              d¬¦  «        dk    sJ ‚d S )Nr   r'   r   r#  r#   )rò   Ú	find_nextri   s    r   Útest_find_nextz!TestNextOperations.test_find_next  sR   € ØŒz×#Ò# CÑ(Ô(¨Ô.°#Ò5Ð5Ð5Ð5ØŒz×#Ò#¨7Ð#Ñ3Ô3°wÒ>Ð>Ð>Ð>Ð>Ð>r    c                 óÒ   — | j                              d¬¦  «        }|                     d¦  «        j        dk    sJ ‚|                      |                     d¦  «        ddg¦  «         d S )Nr  r#   r   r)  r#  )rh   r   r-  r   rM   r*  r	  s     r   Útest_find_next_for_text_elementz2TestNextOperations.test_find_next_for_text_element  sf   € ØŒy�~Š~ Uˆ~Ñ+Ô+ˆØ�~Š~˜cÑ"Ô"Ô)¨UÒ2Ð2Ð2Ð2Ø×Ò˜D×.Ò.¨sÑ3Ô3°e¸WÐ5EÑFÔFÐFÐFÐFr    c                 ó”   — | j                              d¬¦  «        }d„ |j        D ¦   «         }|\  }}|d         dk    sJ ‚|dk    sJ ‚d S )Nr)  r#   c                 ó   — g | ]}|‘ŒS r9   r9   ©r  Únodes     r   r  z:TestNextOperations.test_next_generator.<locals>.<listcomp>"  s   € Ð;Ð;Ð;˜t�dÐ;Ð;Ð;r    r'   rH   r#  )rh   r   Únext_elements)r   rò   Ú
successorsrr   rà   s        r   Útest_next_generatorz&TestNextOperations.test_next_generator   sb   € Ø”	—’ e�Ñ,Ô,ˆØ;Ð; uÔ':Ð;Ñ;Ô;ˆ
à"‰ˆˆXØ�4Œy˜CÒÐÐÐØ˜7Ò"Ð"Ð"Ð"Ð"Ð"r    )r5   r6   r7   rj   r   r%  r'  r+  r.  r0  r7  Ú__classcell__©r  s   @r   r  r     sª   ø€ € € € € ð!ð !ð !ð !ð !ðAð Að Að)ð )ð )ð.ð .ð .ðGð Gð Gð
?ð ?ð ?ðGð Gð Gð
#ð #ð #ð #ð #ð #ð #r    r  c                   óH   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
ˆ xZS )	ÚTestPreviousOperationsc                 ó–   •— t          t          | ¦  «                             ¦   «          | j                             d¬¦  «        | _        d S r"  )r  r;  rj   rh   r   Úendr  s    €r   rj   z#TestPreviousOperations.setup_method*  s;   ø€ ÝÕ$ dÑ+Ô+×8Ò8Ñ:Ô:Ð:Ø”9—>’>¨�>Ñ1Ô1ˆŒˆˆr    c                 ód   — | j         j        d         dk    sJ ‚| j         j        j        dk    sJ ‚d S )Nr'   rH   r)  )r=  Úprevious_elementri   s    r   Útest_previousz$TestPreviousOperations.test_previous.  s<   € ØŒxÔ(¨Ô.°#Ò5Ð5Ð5Ð5ØŒxÔ(Ô9¸UÒBÐBÐBÐBÐBÐBr    c                 óT   — | j                              d¦  «        }|j        d k    sJ ‚d S )NÚhtml)rh   r   r?  )r   r”   s     r   Ú#test_previous_of_first_item_is_nonez:TestPreviousOperations.test_previous_of_first_item_is_none2  s/   € Ø”	—’˜vÑ&Ô&ˆØÔ%¨Ò-Ð-Ð-Ð-Ð-Ð-r    c                 ó*   — | j         j        d k    sJ ‚d S rý   )rh   r?  ri   s    r   Útest_previous_of_root_is_nonez4TestPreviousOperations.test_previous_of_root_is_none6  s   € àŒyÔ)¨TÒ1Ð1Ð1Ð1Ð1Ð1r    c                 óÆ   — |                       | j                             d¦  «        g d¢¦  «         |                       | j                             d¬¦  «        dg¦  «         d S )Nr   ©r#  r)  r  r   r&   r  )rM   r=  Úfind_all_previousri   s    r   Útest_find_all_previousz-TestPreviousOperations.test_find_all_previous:  sl   € ð 	×ÒØŒH×&Ò& sÑ+Ô+Ð-DÐ-DÐ-Dñ	Fô 	Fð 	Fà×Ò˜DœH×6Ò6¸!Ð6Ñ<Ô<¸u¸gÑFÔFÐFÐFÐFr    c                 ó”   — | j                              d¦  «        d         dk    sJ ‚| j                              d¬¦  «        dk    sJ ‚d S )Nr   r'   rH   r  r#   )r=  Úfind_previousri   s    r   Útest_find_previousz)TestPreviousOperations.test_find_previousB  sR   € ØŒx×%Ò% cÑ*Ô*¨4Ô0°CÒ7Ð7Ð7Ð7ØŒx×%Ò%¨UÐ%Ñ3Ô3°uÒ<Ð<Ð<Ð<Ð<Ð<r    c                 óÒ   — | j                              d¬¦  «        }|                     d¦  «        j        dk    sJ ‚|                      |                     d¦  «        g d¢¦  «         d S )Nr#  r#   r   rG  )rh   r   rK  r   rM   rH  r	  s     r   Ú#test_find_previous_for_text_elementz:TestPreviousOperations.test_find_previous_for_text_elementF  sz   € ØŒy�~Š~ Wˆ~Ñ-Ô-ˆØ×!Ò! #Ñ&Ô&Ô-°Ò8Ð8Ð8Ð8Ø×ÒØ×"Ò" 3Ñ'Ô'Ð)@Ð)@Ð)@ñ	Bô 	Bð 	Bð 	Bð 	Br    c                 óÖ   — | j                              d¬¦  «        }d„ |j        D ¦   «         }|\  }}}}|d         dk    sJ ‚|j        dk    sJ ‚|j        dk    sJ ‚|j        dk    sJ ‚d S )	Nr  r#   c                 ó   — g | ]}|‘ŒS r9   r9   r3  s     r   r  zBTestPreviousOperations.test_previous_generator.<locals>.<listcomp>N  s   € ÐAÐAÐA ˜ÐAÐAÐAr    r'   rG   ÚbodyÚheadrB  )rh   r   Úprevious_elementsrb   )r   rò   Úpredecessorsr   rQ  rR  rB  s          r   Útest_previous_generatorz.TestPreviousOperations.test_previous_generatorL  s�   € Ø”	—’ e�Ñ,Ô,ˆØAÐA¨Ô)@ÐAÑAÔAˆð +Ñˆˆ4��tØ�Œw˜#Š~ˆ~ˆ~ˆ~ØŒy˜FÒ"Ð"Ð"Ð"ØŒy˜FÒ"Ð"Ð"Ð"ØŒy˜FÒ"Ð"Ð"Ð"Ð"Ð"r    )r5   r6   r7   rj   r@  rC  rE  rI  rL  rN  rU  r8  r9  s   @r   r;  r;  (  sª   ø€ € € € € ð2ð 2ð 2ð 2ð 2ðCð Cð Cð.ð .ð .ð2ð 2ð 2ðGð Gð Gð=ð =ð =ðBð Bð Bð
#ð 
#ð 
#ð 
#ð 
#ð 
#ð 
#r    r;  c                   ó   — e Zd Zd„ ZdS )ÚSiblingTestc                 óŽ   — d}t          j        d¦  «                             d|¦  «        }|                      |¦  «        | _        d S )Na‰  <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>z\n\s*Ú )r@   rA   Úsubr   rh   )r   Úmarkups     r   rj   zSiblingTest.setup_method[  sA   € ðˆõ ”˜HÑ%Ô%×)Ò)¨"¨fÑ5Ô5ˆØ—I’I˜fÑ%Ô%ˆŒ	ˆ	ˆ	r    Nr  r9   r    r   rW  rW  Y  s#   € € € € € ð&ð &ð &ð &ð &r    rW  c                   óB   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	ˆ xZ
S )ÚTestNextSiblingc                 ó–   •— t          t          | ¦  «                             ¦   «          | j                             d¬¦  «        | _        d S )NrG   r&   )r  r]  rj   rh   r   rò   r  s    €r   rj   zTestNextSibling.setup_methodp  s:   ø€ Ý�o˜tÑ$Ô$×1Ò1Ñ3Ô3Ð3Ø”Y—^’^ s�^Ñ+Ô+ˆŒ
ˆ
ˆ
r    c                 ó*   — | j         j        d k    sJ ‚d S rý   )rh   Únext_siblingri   s    r   Ú!test_next_sibling_of_root_is_nonez1TestNextSibling.test_next_sibling_of_root_is_nonet  s   € ØŒyÔ%¨Ò-Ð-Ð-Ð-Ð-Ð-r    c                 ó    — | j         j        d         dk    sJ ‚| j         j        j        d         dk    sJ ‚| j         j        d         dk    sJ ‚d S )Nr'   r   rH   ú1.1)rò   r`  r  ri   s    r   Útest_next_siblingz!TestNextSibling.test_next_siblingw  s^   € ØŒzÔ& tÔ,°Ò3Ð3Ð3Ð3ØŒzÔ&Ô3°DÔ9¸SÒ@Ð@Ð@Ð@ð ŒzÔ& tÔ,°Ò5Ð5Ð5Ð5Ð5Ð5r    c                 óÔ   — | j         j        j        d k    sJ ‚| j                              d¬¦  «        }|j        d k    sJ ‚| j                              d¬¦  «        }|j        d k    sJ ‚d S )Nrc  r&   rJ   )rh   rB  r`  r   )r   Únested_spanÚ	last_spans      r   Útest_next_sibling_may_not_existz/TestNextSibling.test_next_sibling_may_not_exist~  sr   € ØŒyŒ~Ô*¨dÒ2Ð2Ð2Ð2à”i—n’n¨�nÑ.Ô.ˆØÔ'¨4Ò/Ð/Ð/Ð/à”I—N’N c�NÑ*Ô*ˆ	ØÔ%¨Ò-Ð-Ð-Ð-Ð-Ð-r    c                 óR   — | j                              d¦  «        d         dk    sJ ‚d S )NrÚ   r'   r   )rò   Úfind_next_siblingri   s    r   Útest_find_next_siblingz&TestNextSibling.test_find_next_sibling‡  s.   € ØŒz×+Ò+¨FÑ3Ô3°DÔ9¸SÒ@Ð@Ð@Ð@Ð@Ð@r    c                 óÆ   — |                       | j                             d¦  «        g d¢¦  «         |                       | j                             d¬¦  «        dg¦  «         d S )NrÚ   )r   rH   rJ   rH   r&   )r  rò   Úfind_next_siblingsri   s    r   Útest_next_siblingsz"TestNextSibling.test_next_siblingsŠ  sf   € Ø×Ò ¤
× =Ò =¸fÑ EÔ EØ-˜o˜oñ	/ô 	/ð 	/ð 	×Ò ¤
× =Ò =ÀÐ =Ñ EÔ EÈÀuÑMÔMÐMÐMÐMr    c                 óh  — |                       d¦  «        }|                     d¬¦  «        }|j        j        dk    sJ ‚|j        j        dk    sJ ‚|                      |                     d¦  «        dg¦  «         |                     d¬¦  «        dk    sJ ‚|                     d¬¦  «        d k    sJ ‚d S )NúFoo<b>bar</b>bazr>   r#   r   Úbazr=   Únonesuch)r   r   r`  rb   rM   rm  rj  ©r   r   rò   s      r   Ú"test_next_sibling_for_text_elementz2TestNextSibling.test_next_sibling_for_text_element�  sÅ   € Ø�yŠyÐ+Ñ,Ô,ˆØ—	’	 �	Ñ'Ô'ˆØÔ!Ô&¨#Ò-Ð-Ð-Ð-ØÔ!Ô.°%Ò7Ð7Ð7Ð7à×Ò˜E×4Ò4°SÑ9Ô9¸E¸7ÑCÔCÐCØ×&Ò&¨eÐ&Ñ4Ô4¸Ò=Ð=Ð=Ð=Ø×&Ò&¨jÐ&Ñ9Ô9¸TÒAÐAÐAÐAÐAÐAr    )r5   r6   r7   rj   ra  rd  rh  rk  rn  rt  r8  r9  s   @r   r]  r]  n  sŸ   ø€ € € € € ð,ð ,ð ,ð ,ð ,ð.ð .ð .ð6ð 6ð 6ð.ð .ð .ðAð Að AðNð Nð NðBð Bð Bð Bð Bð Bð Br    r]  c                   óB   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	ˆ xZ
S )ÚTestPreviousSiblingc                 ó–   •— t          t          | ¦  «                             ¦   «          | j                             d¬¦  «        | _        d S )NrJ   r&   )r  rv  rj   rh   r   r=  r  s    €r   rj   z TestPreviousSibling.setup_method�  s;   ø€ ÝÕ! 4Ñ(Ô(×5Ò5Ñ7Ô7Ð7Ø”9—>’> S�>Ñ)Ô)ˆŒˆˆr    c                 ó*   — | j         j        d k    sJ ‚d S rý   )rh   Úprevious_siblingri   s    r   Ú%test_previous_sibling_of_root_is_nonez9TestPreviousSibling.test_previous_sibling_of_root_is_none¡  s   € ØŒyÔ)¨TÒ1Ð1Ð1Ð1Ð1Ð1r    c                 ó    — | j         j        d         dk    sJ ‚| j         j        j        d         dk    sJ ‚| j         j        d         dk    sJ ‚d S )Nr'   rH   r   z3.1)r=  ry  r?  ri   s    r   Útest_previous_siblingz)TestPreviousSibling.test_previous_sibling¤  s^   € ØŒxÔ(¨Ô.°#Ò5Ð5Ð5Ð5ØŒxÔ(Ô9¸$Ô?À3ÒFÐFÐFÐFð ŒxÔ(¨Ô.°%Ò7Ð7Ð7Ð7Ð7Ð7r    c                 óÔ   — | j         j        j        d k    sJ ‚| j                              d¬¦  «        }|j        d k    sJ ‚| j                              d¬¦  «        }|j        d k    sJ ‚d S )Nrc  r&   rG   )rh   rB  ry  r   )r   rf  Ú
first_spans      r   Ú#test_previous_sibling_may_not_existz7TestPreviousSibling.test_previous_sibling_may_not_exist«  sr   € ØŒyŒ~Ô.°$Ò6Ð6Ð6Ð6à”i—n’n¨�nÑ.Ô.ˆØÔ+¨tÒ3Ð3Ð3Ð3à”Y—^’^ s�^Ñ+Ô+ˆ
ØÔ*¨dÒ2Ð2Ð2Ð2Ð2Ð2r    c                 óR   — | j                              d¦  «        d         dk    sJ ‚d S )NrÚ   r'   rH   )r=  Úfind_previous_siblingri   s    r   Útest_find_previous_siblingz.TestPreviousSibling.test_find_previous_sibling´  s.   € ØŒx×-Ò-¨fÑ5Ô5°dÔ;¸sÒBÐBÐBÐBÐBÐBr    c                 óÆ   — |                       | j                             d¦  «        g d¢¦  «         |                       | j                             d¬¦  «        dg¦  «         d S )NrÚ   )rH   r   rG   rG   r&   )r  r=  Úfind_previous_siblingsri   s    r   Útest_previous_siblingsz*TestPreviousSibling.test_previous_siblings·  sf   € Ø×Ò ¤× ?Ò ?ÀÑ GÔ GØ-˜o˜oñ	/ô 	/ð 	/ð 	×Ò ¤× ?Ò ?À3Ð ?Ñ GÔ GÈ#ÈÑOÔOÐOÐOÐOr    c                 óh  — |                       d¦  «        }|                     d¬¦  «        }|j        j        dk    sJ ‚|j        j        dk    sJ ‚|                      |                     d¦  «        dg¦  «         |                     d¬¦  «        dk    sJ ‚|                     d¬¦  «        d k    sJ ‚d S )Nrp  rq  r#   r   r>   r=   rr  )r   r   ry  rb   rM   r„  r�  rs  s      r   Ú&test_previous_sibling_for_text_elementz:TestPreviousSibling.test_previous_sibling_for_text_element½  sÅ   € Ø�yŠyÐ+Ñ,Ô,ˆØ—	’	 �	Ñ'Ô'ˆØÔ%Ô*¨cÒ1Ð1Ð1Ð1ØÔ%Ô6¸%Ò?Ð?Ð?Ð?à×Ò˜E×8Ò8¸Ñ=Ô=À¸wÑGÔGÐGØ×*Ò*°%Ð*Ñ8Ô8¸EÒAÐAÐAÐAØ×*Ò*°*Ð*Ñ=Ô=ÀÒEÐEÐEÐEÐEÐEr    )r5   r6   r7   rj   rz  r|  r  r‚  r…  r‡  r8  r9  s   @r   rv  rv  ›  sŸ   ø€ € € € € ð*ð *ð *ð *ð *ð2ð 2ð 2ð8ð 8ð 8ð3ð 3ð 3ðCð Cð CðPð Pð PðFð Fð Fð Fð Fð Fð Fr    rv  c                   óf  — 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ej                             dd„ d„ g¦  «        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.„ Z0d/„ Z1d0„ Z2d1S )2ÚTestTreeModificationc                 óv  — |                       d¦  «        }d|j        d<   |                     ¦   «         |                      d¦  «        k    sJ ‚|j        d= |                     ¦   «         |                      d¦  «        k    sJ ‚d|j        d<   |                     ¦   «         |                      d¦  «        k    sJ ‚d S )	Nz<a id="1"></a>r-   r'   z<a id="2"></a>rS   rP   Úid2z<a id2="foo"></a>)r   r3   r›   Údocument_forr   s     r   Útest_attribute_modificationz0TestTreeModification.test_attribute_modificationÊ  s°   € Ø�yŠyÐ)Ñ*Ô*ˆØˆŒˆt‰Ø�{Š{‰}Œ} × 1Ò 1Ð2BÑ CÔ CÒCÐCÐCÐCØŒF�4ˆLØ�{Š{‰}Œ} × 1Ò 1°)Ñ <Ô <Ò<Ð<Ð<Ð<ØˆŒˆu‰Ø�{Š{‰}Œ} × 1Ò 1Ð2EÑ FÔ FÒFÐFÐFÐFÐFÐFr    c                 ód  —  t          j        d¦  «        ¦   «         }|                      d|¬¦  «        }t          ||d¦  «        }t          ||d¦  «        }d|d<   |j                             d|¦  «         |j                             d	|¦  «         |j                             ¦   «         d
k    sJ ‚d S )NrB  z<body></body>©râ   r3   Úolzhttp://foo.com/Úhrefr   r   s4   <body><a href="http://foo.com/"></a><ol></ol></body>)r   Úlookupr   r   rQ  Úinsertrš   )r   râ   r   r3   r�  s        r   Útest_new_tag_creationz*TestTreeModification.test_new_tag_creationÓ  s±   € Ø1Õ"Ô)¨&Ñ1Ô1Ñ3Ô3ˆØ�yŠy˜°'ˆyÑ:Ô:ˆÝ��g˜sÑ#Ô#ˆÝ��w Ñ%Ô%ˆØ%ˆˆ&‰	ØŒ	×Ò˜˜AÑÔÐØŒ	×Ò˜˜BÑÔÐØŒy×ÒÑ!Ô!Ð%\Ò\Ð\Ð\Ð\Ð\Ð\r    c                 ó>  — d}|                       |¦  «        }|                     d¬¦  «        }|j        }|                     d¬¦  «                             |j        ¦  «         |j        |k    sJ ‚|                     ¦   «         |                      d¦  «        k    sJ ‚d S )NzT<p id="1">Don't leave me <b>here</b>.</p>
                <p id="2">Don't leave!</p>r   r&   zD<p id="1">Don't leave me .</p>
<p id="2">Don't leave!<b>here</b></p>)r   r   r   rT   r÷   r›   rŒ  )r   Údocr   Úsecond_paraÚbolds        r   Ú!test_append_to_contents_moves_tagz6TestTreeModification.test_append_to_contents_moves_tagÝ  s­   € ð/ˆà�yŠy˜‰~Œ~ˆØ—i’i 3�iÑ'Ô'ˆØŒvˆð 	�	Š	�Sˆ	ÑÔ× Ò  ¤Ñ(Ô(Ð(ð Œ{˜kÒ)Ð)Ð)Ð)à�{Š{‰}Œ} × 1Ò 1ð9ñ!
ô !
ò 
ð 
ð 
ð 
ð 
ð 
r    c                 ó†   — d}|                       |¦  «        }|j        }|                     |j        ¦  «        }||k    sJ ‚d S )Nz<a></a><b><c></c></b>)r   r3   Úreplace_withrv   ©r   r)   r   r3   Únew_as        r   Ú1test_replace_with_returns_thing_that_was_replacedzFTestTreeModification.test_replace_with_returns_thing_that_was_replacedï  sA   € Ø&ˆØ�yŠy˜‰ŒˆØŒFˆØ—’˜tœvÑ&Ô&ˆØ�EŠzˆzˆzˆzˆzˆzr    c                 óz   — d}|                       |¦  «        }|j        }|                     ¦   «         }||k    sJ ‚d S )Nú<a><b></b><c></c></a>)r   r3   Úunwraprœ  s        r   Ú+test_unwrap_returns_thing_that_was_replacedz@TestTreeModification.test_unwrap_returns_thing_that_was_replacedö  s;   € Ø&ˆØ�yŠy˜‰ŒˆØŒFˆØ—’‘
”
ˆØ�EŠzˆzˆzˆzˆzˆzr    c                 ó¢  — |                       d¦  «        }|j        }|                     ¦   «          d |j        k    sJ ‚t	          j        t          ¦  «        5  |                     ¦   «          d d d ¦  «         n# 1 swxY w Y   t	          j        t          ¦  «        5  |                     |j	        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nz<a><b>Foo</b></a><c>Bar</c>)
r   r3   Úextractr÷   ré   rê   rë   r¡  r›  rv   rÐ   s      r   ÚItest_replace_with_and_unwrap_give_useful_exception_when_tag_has_no_parentz^TestTreeModification.test_replace_with_and_unwrap_give_useful_exception_when_tag_has_no_parentý  s5  € Ø�yŠyÐ6Ñ7Ô7ˆØŒFˆØ	�	Š	‰ŒˆØ�q”xÒÐÐÐÝŒ]�:Ñ&Ô&ð 	ð 	Ø�HŠH‰JŒJˆJð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	åŒ]�:Ñ&Ô&ð 	#ð 	#Ø�NŠN˜4œ6Ñ"Ô"Ð"ð	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð 	#ð 	#s$   ÁA8Á8A<Á?A<ÂCÃCÃCc                 óÐ   — d}|                       |¦  «        }|j        }|j                             |¦  «         |                     ¦   «         |                      |¦  «        k    sJ ‚d S )Nz-<a><b></b><c>Foo<d></d></c></a><a><e></e></a>)r   rv   r›  r›   rŒ  )r   r)   r   rv   s       r   Útest_replace_tag_with_itselfz1TestTreeModification.test_replace_tag_with_itself  s`   € Ø>ˆØ�yŠy˜‰ŒˆØŒFˆØŒ×Ò˜AÑÔÐØ�{Š{‰}Œ} × 1Ò 1°$Ñ 7Ô 7Ò7Ð7Ð7Ð7Ð7Ð7r    c                 óÖ   — d}|                       |¦  «        }t          j        t          ¦  «        5  |j                             |j        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S ©Nú<a><b></b></a>)r   ré   rê   rë   r   r›  r3   ©r   r)   r   s      r   Ú1test_replace_tag_with_its_parent_raises_exceptionzFTestTreeModification.test_replace_tag_with_its_parent_raises_exception  s¢   € ØˆØ�yŠy˜‰ŒˆÝŒ]�:Ñ&Ô&ð 	(ð 	(ØŒF×Ò ¤Ñ'Ô'Ð'ð	(ð 	(ð 	(ñ 	(ô 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(øøøð 	(ð 	(ð 	(ð 	(ð 	(ð 	(s   ± AÁA"Á%A"c                 óØ   — d}|                       |¦  «        }t          j        t          ¦  «        5  |j                             d|j        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nrª  r   )r   ré   rê   rë   r3   r“  r«  s      r   Ú,test_insert_tag_into_itself_raises_exceptionzATestTreeModification.test_insert_tag_into_itself_raises_exception  s¢   € ØˆØ�yŠy˜‰ŒˆÝŒ]�:Ñ&Ô&ð 	%ð 	%ØŒF�MŠM˜!˜TœVÑ$Ô$Ð$ð	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%ð 	%ð 	%s   ±!AÁA#Á&A#c                 óf  — |                       d¦  «        }d}|                       |¦  «        }|                     d|¦  «         |j        D ]}t          |t          ¦  «        rJ ‚Œt          |j        ¦  «        \  }}}}d|j        k    sJ ‚d|j        k    sJ ‚d|j        k    sJ ‚d|j        k    sJ ‚dS )	z”Inserting one BeautifulSoup object into another actually inserts all
        of its children -- you'll never combine BeautifulSoup objects.
        z-<p>And now, a word:</p><p>And we're back.</p>z<p>p2</p><p>p3</p>r   zAnd now, a word:Úp2Úp3zAnd we're back.N)r   r“  ÚdescendantsÚ
isinstancer   ÚlistÚchildrenr   )	r   r   r)   Ú	to_insertrì   Úp1r°  r±  Úp4s	            r   Ú1test_insert_beautifulsoup_object_inserts_childrenzFTestTreeModification.test_insert_beautifulsoup_object_inserts_children  sÒ   € ð �yŠyÐHÑIÔIˆà#ˆØ—I’I˜d‘O”Oˆ	Ø�Š�A�yÑ!Ô!Ð!àÔ!ð 	4ð 	4ˆAÝ! !¥]Ñ3Ô3Ð3Ð3Ð3Ð3å˜dœmÑ,Ô,‰ˆˆB��BØ! R¤YÒ.Ð.Ð.Ð.Ø�r”yÒ Ð Ð Ð Ø�r”yÒ Ð Ð Ð Ø  B¤IÒ-Ð-Ð-Ð-Ð-Ð-r    c                 ó  — |                       d¦  «        }|j        }|j        d         }|                     dd¦  «         |j        \  }}|                     d¦  «         |                     d¦  «         d|j        j        k    sJ ‚d S )Nz<p><a>one</a><b>three</b></p>r   r   ÚtworY  Úthree)r   r3   rà   r“  ÚreplaceWithr   r   )r   r   r3   r   ÚleftÚrights         r   Ú3test_replace_with_maintains_next_element_throughoutzHTestTreeModification.test_replace_with_maintains_next_element_throughout.  sŒ   € Ø�yŠyÐ8Ñ9Ô9ˆØŒFˆØŒJ�qŒMˆà	�Š��EÑÔÐð ”j‰ˆˆeØ×Ò˜ÑÔÐØ×Ò˜"ÑÔÐð ˜$œ&œ-Ò'Ð'Ð'Ð'Ð'Ð'r    c                 ó.  — |                       d¦  «        }|                     d¬¦  «                             d¦  «         |                     d¬¦  «        }|j        }|j        |k    sJ ‚|j        |k    sJ ‚|j        j        |k    sJ ‚|j        d k    sJ ‚d S )Nz<b>Argh!</b>úArgh!r#   úHooray!)r   r   r›  r   r?  r÷   r  )r   r   Únew_textr   s       r   Útest_replace_final_nodez,TestTreeModification.test_replace_final_node=  s§   € Ø�yŠy˜Ñ(Ô(ˆØ�	Š	˜ˆ	Ñ!Ô!×.Ò.¨yÑ9Ô9Ð9Ø—9’9 I�9Ñ.Ô.ˆØŒFˆØÔ(¨AÒ-Ð-Ð-Ð-ØŒ !Ò#Ð#Ð#Ð#ØÔ(Ô5¸ÒAÐAÐAÐAØÔ$¨Ò,Ð,Ð,Ð,Ð,Ð,r    c                 ó¦  — |                       d¦  «        }|j                             dd¦  «         |                     ¦   «         |                      d¦  «        k    sJ ‚|                     d¬¦  «        }|j        dk    sJ ‚|j        j        |k    sJ ‚|j        dk    sJ ‚|j        j	        |k    sJ ‚|j	        d k    sJ ‚|j        |j
        k    sJ ‚d S )Nz<a><b>Argh!</b><c></c></a>r   rÃ  z!<a><b>Argh!Hooray!</b><c></c></a>r#   rÂ  )r   r   r“  r›   rŒ  r   r?  r  ry  r`  rv   )r   r   rÄ  s      r   Útest_consecutive_text_nodesz0TestTreeModification.test_consecutive_text_nodesG  sû   € ð �yŠyÐ5Ñ6Ô6ˆØŒ�Š�a˜Ñ#Ô#Ð#à�{Š{‰}Œ} × 1Ò 1Ø/ñ!
ô !
ò 
ð 
ð 
ð 
ð —9’9 I�9Ñ.Ô.ˆØÔ(¨GÒ3Ð3Ð3Ð3ØÔ(Ô5¸ÒAÐAÐAÐAàÔ(¨GÒ3Ð3Ð3Ð3ØÔ(Ô5¸ÒAÐAÐAÐAàÔ$¨Ò,Ð,Ð,Ð,ØÔ$¨¬Ò.Ð.Ð.Ð.Ð.Ð.r    c                 óþ   — |                       d¦  «        }|j                             dd¦  «         |j                             dd¦  «         ddg|j        j        k    sJ ‚|j        j        d         j        dk    sJ ‚d S )NrS   r   r=   rP   )r   r3   r“  rà   r  r   s     r   Útest_insert_stringz'TestTreeModification.test_insert_string\  s{   € Ø�yŠy˜Ñ#Ô#ˆØŒ�Š�a˜ÑÔÐØŒ�Š�a˜ÑÔÐà�uˆ~ ¤¤Ò0Ð0Ð0Ð0àŒvŒ˜qÔ!Ô.°%Ò7Ð7Ð7Ð7Ð7Ð7r    c                 ó˜  — |                       ¦   «         }|                      d|¬¦  «        }t          ||d¦  «        }|                     dd¦  «         |j                             d|¦  «         |                     ¦   «         |                      d¦  «        k    sJ ‚|j        }|j        |k    sJ ‚|j	        |k    sJ ‚| 
                    d¬	¦  «        }|j        |k    sJ ‚|j        |k    sJ ‚|j        }|j        |k    sJ ‚|j	        |k    sJ ‚| 
                    d¬	¦  «        }|j        |k    sJ ‚|j        |k    sJ ‚|j        |k    sJ ‚d S )
Nz%<a><b>Find</b><c>lady!</c><d></d></a>r�  Úmagictagr   Úther   z=<a><b>Find</b><magictag>the</magictag><c>lady!</c><d></d></a>ÚFindr#   )rß   r   r   r“  r3   r›   rŒ  r   r`  ry  r   r  r?  rv   r÷   )r   râ   r   Ú	magic_tagÚb_tagr   Úc_tagrÌ  s           r   Útest_insert_tagz$TestTreeModification.test_insert_tage  s’  € Ø×&Ò&Ñ(Ô(ˆØ�yŠyØ3¸Wð ñ Fô Fˆå˜˜g zÑ2Ô2ˆ	Ø×Ò˜˜EÑ"Ô"Ð"ØŒ�Š�a˜Ñ#Ô#Ð#à�{Š{‰}Œ} × 1Ò 1ØOñ!
ô !
ò 
ð 
ð 
ð 
ð
 ”ˆØÔ! YÒ.Ð.Ð.Ð.ØÔ)¨UÒ2Ð2Ð2Ð2à�zŠz ˆzÑ(Ô(ˆØÔ  IÒ-Ð-Ð-Ð-ØÔ)¨TÒ1Ð1Ð1Ð1à”ˆØÔ%¨Ò.Ð.Ð.Ð.ØÔ%¨Ò2Ð2Ð2Ð2à�nŠn EˆnÑ*Ô*ˆØŒz˜YÒ&Ð&Ð&Ð&ØÔ 5Ò(Ð(Ð(Ð(ØÔ%¨Ò,Ð,Ð,Ð,Ð,Ð,r    c                 ó¦   — d}|                       |¦  «        }|j                             |j        ¦  «         ||                     ¦   «         k    sJ ‚d S r©  )r   r3   rT   r   r›   ©r   r�   r   s      r   Ú*test_append_child_thats_already_at_the_endz?TestTreeModification.test_append_child_thats_already_at_the_endƒ  sK   € ØˆØ�yŠy˜‰ŒˆØŒ�Š�d”fÑÔÐØ�t—{’{‘}”}Ò$Ð$Ð$Ð$Ð$Ð$r    c                 óè   — d}|                       |¦  «        }|j        |j        |j        |j        |j        |j        g}|j                             |¦  «         d| 	                    ¦   «         k    sJ ‚d S )Nz1<a><b><c><d><e><f><g></g></f></e></d></c></b></a>z1<a><g></g><f></f><e></e><d></d><c></c><b></b></a>)
r   Úgr­   ÚerÙ   rv   r   r3   Úextendr›   )r   r�   r   rU   s       r   Útest_extendz TestTreeModification.test_extend‰  sg   € ØBˆØ�yŠy˜‰ŒˆØŒV�T”V˜TœV T¤V¨T¬V°T´VÐ<ˆØŒ�Š�aÑÔÐØBÀdÇkÂkÁmÄmÒSÐSÐSÐSÐSÐSr    Úget_tagsc                 ó   — | S rý   r9   r‡   s    r   ú<lambda>zTestTreeModification.<lambda>‘  s   €  € r    c                 ó   — | j         S rý   )rà   r‡   s    r   rÜ  zTestTreeModification.<lambda>‘  s   € °#´,€ r    c                 ó8  — d}|                       |¦  «        }|                     dd¬¦  «        }|                     dd¬¦  «        } ||¦  «        }|                     |¦  «         d|                     ¦   «         k    sJ ‚d|                     ¦   «         k    sJ ‚d S )NzS<body><div id="d1"><a>1</a><a>2</a><a>3</a><a>4</a></div><div id="d2"></div></body>r‹   Úd1r&   Úd2z<div id="d1"></div>z3<div id="d2"><a>1</a><a>2</a><a>3</a><a>4</a></div>)r   r   rØ  r›   )r   rÚ  r�   r   rß  rà  Útagss          r   Ú&test_extend_with_another_tags_contentsz;TestTreeModification.test_extend_with_another_tags_contents�  s—   € ð eˆØ�yŠy˜‰ŒˆØ�YŠY�u ˆYÑ&Ô&ˆØ�YŠY�u ˆYÑ&Ô&ˆØˆx˜‰|Œ|ˆØ
�	Š	�$‰ŒˆØ$¨¯	ª	©¬Ò3Ð3Ð3Ð3ØDÈÏ	Ê	ÉÌÒSÐSÐSÐSÐSÐSr    c                 ó¨   — d}|                       |¦  «        }|j                             d|j        ¦  «         d|                     ¦   «         k    sJ ‚d S )Nz<a><b></b><c></c><d></d></a>r   z<a><d></d><b></b><c></c></a>)r   r3   r“  rÙ   r›   rÓ  s      r   Ú$test_move_tag_to_beginning_of_parentz9TestTreeModification.test_move_tag_to_beginning_of_parent�  sM   € Ø-ˆØ�yŠy˜‰ŒˆØŒ�Š�a˜œÑ Ô Ð Ø-°·²±´Ò>Ð>Ð>Ð>Ð>Ð>r    c                 óš   — |                       d¦  «        }|j                             dd¦  «         t          |j        ¦  «        dk    sJ ‚d S )Nz<br/>r   ÚContentsz<br>Contents</br>)r   Úbrr“  r(   r   s     r   Ú&test_insert_works_on_empty_element_tagz;TestTreeModification.test_insert_works_on_empty_element_tag£  sK   € ð
 �yŠy˜Ñ!Ô!ˆØŒ�Š�q˜*Ñ%Ô%Ð%Ý�4”7‰|Œ|Ð2Ò2Ð2Ð2Ð2Ð2Ð2r    c                 ó\  — |                       d¦  «        }|j                             d¦  «         |j                             d¦  «         |                     ¦   «         |                      d¦  «        k    sJ ‚|j                             |j        ¦  «         |                     ¦   «         |                      d¦  «        k    sJ ‚|j        }t          j        t          ¦  «        5  |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   | 	                    ¦   «          t          j        t          ¦  «        5  |                     d¦  «         d d d ¦  «         n# 1 swxY w Y   |                       d¦  «        }|j                             | 
                    d¦  «        ¦  «         d S )	Nr,   ÚBAZÚQUUXzQUUX<a>foo</a>BAZ<b>bar</b>úQUUX<b>bar</b><a>foo</a>BAZÚnopeú<a>r3   )r   r   Úinsert_beforer3   r›   rŒ  ré   rê   rë   r¤  Únew_tag©r   r   r   s      r   Útest_insert_beforez'TestTreeModification.test_insert_before¬  s÷  € Ø�yŠyÐ/Ñ0Ô0ˆØŒ×Ò˜UÑ#Ô#Ð#ØŒ×Ò˜VÑ$Ô$Ð$Ø�{Š{‰}Œ} × 1Ò 1Ø)ñ!
ô !
ò 
ð 
ð 
ð 
ð 	Œ×Ò˜TœVÑ$Ô$Ð$Ø�{Š{‰}Œ} × 1Ò 1Ð2OÑ PÔ PÒPÐPÐPÐPð ŒFˆÝŒ]�:Ñ&Ô&ð 	ð 	Ø�OŠO˜AÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	
�	Š	‰ŒˆÝŒ]�:Ñ&Ô&ð 	$ð 	$Ø�OŠO˜FÑ#Ô#Ð#ð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$ð �yŠy˜ÑÔˆØŒ×Ò˜TŸ\š\¨#Ñ.Ô.Ñ/Ô/Ð/Ð/Ð/ó$   Ã#DÄD	ÄD	Ä=EÅE#Å&E#c                 ó”  — |                       d¦  «        }|j                             ddd¦  «         |j                             ddd¦  «         |                     ¦   «         |                      d¦  «        k    sJ ‚|j                             |j        d¦  «         |                     ¦   «         |                      d¦  «        k    sJ ‚d S )Nr,   rê  ú rë  z$QUUX BAZ<a>foo</a>BAZ QUUX<b>bar</b>ÚFOOz'QUUX BAZ<b>bar</b>FOO<a>foo</a>BAZ QUUX)r   r   rï  r3   r›   rŒ  r   s     r   Útest_insert_multiple_beforez0TestTreeModification.test_insert_multiple_beforeÇ  sÖ   € Ø�yŠyÐ/Ñ0Ô0ˆØŒ×Ò˜U C¨Ñ0Ô0Ð0ØŒ×Ò˜V S¨%Ñ0Ô0Ð0Ø�{Š{‰}Œ} × 1Ò 1Ø2ñ!
ô !
ò 
ð 
ð 
ð 
ð 	Œ×Ò˜TœV UÑ+Ô+Ð+Ø�{Š{‰}Œ} × 1Ò 1Ø5ñ!
ô !
ò 
ð 
ð 
ð 
ð 
ð 
r    c                 ó\  — |                       d¦  «        }|j                             d¦  «         |j                             d¦  «         |                     ¦   «         |                      d¦  «        k    sJ ‚|j                             |j        ¦  «         |                     ¦   «         |                      d¦  «        k    sJ ‚|j        }t          j        t          ¦  «        5  |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   | 	                    ¦   «          t          j        t          ¦  «        5  |                     d¦  «         d d d ¦  «         n# 1 swxY w Y   |                       d¦  «        }|j         
                    |                     d¦  «        ¦  «         d S )	Nr,   rê  rë  z<a>foo</a>QUUX<b>bar</b>BAZrì  rí  rî  r3   )r   r   Úinsert_afterr3   r›   rŒ  ré   rê   rë   r¤  rï  rð  rñ  s      r   Útest_insert_afterz&TestTreeModification.test_insert_afterÔ  s÷  € Ø�yŠyÐ/Ñ0Ô0ˆØŒ×Ò˜EÑ"Ô"Ð"ØŒ×Ò˜FÑ#Ô#Ð#Ø�{Š{‰}Œ} × 1Ò 1Ø)ñ!
ô !
ò 
ð 
ð 
ð 
ð 	Œ×Ò˜DœFÑ#Ô#Ð#Ø�{Š{‰}Œ} × 1Ò 1Ð2OÑ PÔ PÒPÐPÐPÐPð ŒFˆÝŒ]�:Ñ&Ô&ð 	ð 	Ø�NŠN˜1ÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	
�	Š	‰ŒˆÝŒ]�:Ñ&Ô&ð 	#ð 	#Ø�NŠN˜6Ñ"Ô"Ð"ð	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð �yŠy˜ÑÔˆØŒ×Ò˜TŸ\š\¨#Ñ.Ô.Ñ/Ô/Ð/Ð/Ð/ró  c                 ó”  — |                       d¦  «        }|j                             ddd¦  «         |j                             ddd¦  «         |                     ¦   «         |                      d¦  «        k    sJ ‚|j                             |j        d¦  «         |                     ¦   «         |                      d¦  «        k    sJ ‚d S )Nr,   rê  rõ  rë  z$<a>foo</a>QUUX BAZ<b>bar</b>BAZ QUUXzFOO z(QUUX BAZ<b>bar</b><a>foo</a>FOO BAZ QUUX)r   r   rù  r3   r›   rŒ  r   s     r   Útest_insert_multiple_afterz/TestTreeModification.test_insert_multiple_afterî  sÖ   € Ø�yŠyÐ/Ñ0Ô0ˆØŒ×Ò˜E 3¨Ñ/Ô/Ð/ØŒ×Ò˜F C¨Ñ/Ô/Ð/Ø�{Š{‰}Œ} × 1Ò 1Ø2ñ!
ô !
ò 
ð 
ð 
ð 
ð 	Œ×Ò˜DœF FÑ+Ô+Ð+Ø�{Š{‰}Œ} × 1Ò 1Ø6ñ!
ô !
ò 
ð 
ð 
ð 
ð 
ð 
r    c                 ó*  — |                       d¦  «        }|                     d¦  «        }|                     d¦  «        }t          j        t
          ¦  «        5  |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t          ¦  «        5  |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t
          ¦  «        5  |                     |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S ©NrY  r3   )r   rð  Ú
new_stringré   rê   rë   rù  ÚNotImplementedError©r   r   rr   r   s       r   Ú:test_insert_after_raises_exception_if_after_has_no_meaningzOTestTreeModification.test_insert_after_raises_exception_if_after_has_no_meaningú  s®  € Ø�yŠy˜‰}Œ}ˆØ�lŠl˜3ÑÔˆØ—’ Ñ$Ô$ˆÝŒ]�:Ñ&Ô&ð 	%ð 	%Ø×Ò Ñ$Ô$Ð$ð	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%åŒ]Õ.Ñ/Ô/ð 	#ð 	#Ø×Ò˜cÑ"Ô"Ð"ð	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#åŒ]�:Ñ&Ô&ð 	"ð 	"Ø×Ò˜SÑ!Ô!Ð!ð	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ó6   ÁA;Á;A?ÂA?ÂCÃCÃCÃ%DÄDÄDc                 ó*  — |                       d¦  «        }|                     d¦  «        }|                     d¦  «        }t          j        t
          ¦  «        5  |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t          ¦  «        5  |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t
          ¦  «        5  |                     |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S rþ  )r   rð  rÿ  ré   rê   rë   rï  r   r  s       r   ÚFtest_insert_before_raises_notimplementederror_if_before_has_no_meaningz[TestTreeModification.test_insert_before_raises_notimplementederror_if_before_has_no_meaning  s®  € Ø�yŠy˜‰}Œ}ˆØ�lŠl˜3ÑÔˆØ—’ Ñ$Ô$ˆÝŒ]�:Ñ&Ô&ð 	&ð 	&Ø× Ò  Ñ%Ô%Ð%ð	&ð 	&ð 	&ñ 	&ô 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&øøøð 	&ð 	&ð 	&ð 	&åŒ]Õ.Ñ/Ô/ð 	$ð 	$Ø×Ò˜sÑ#Ô#Ð#ð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$åŒ]�:Ñ&Ô&ð 	#ð 	#Ø×Ò˜cÑ"Ô"Ð"ð	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð 	#ð 	#r  c                 óV  — |                       d¦  «        }|                     d¦  «        \  }}|                     |¦  «         |                     ¦   «         |                      d¦  «        k    sJ ‚|j        d k    sJ ‚|j        |j        k    sJ ‚|j        dk    sJ ‚|j        dk    sJ ‚d S )Nz;<p>There's <b>no</b> business like <b>show</b> business</p>r   z0<p>There's  business like <b>no</b> business</p>Únoz	 business)	r   r0   r›  r›   rŒ  r÷   Úpr  r`  )r   r   r  Úshows       r   Útest_replace_withz&TestTreeModification.test_replace_with  sÍ   € Ø�yŠyØMñOô Oˆà—=’= Ñ%Ô%‰ˆˆDØ×Ò˜"ÑÔÐØ�{Š{‰}Œ} × 1Ò 1Ø>ñ!
ô !
ò 
ð 
ð 
ð 
ð Œ{˜dÒ"Ð"Ð"Ð"ØŒy˜DœFÒ"Ð"Ð"Ð"ØŒ $Ò&Ð&Ð&Ð&ØŒ +Ò-Ð-Ð-Ð-Ð-Ð-r    c                 ó  — t          d¬¦  «        }t          j        t          ¦  «        5  |                     d¦  «         d d d ¦  «         n# 1 swxY w Y   |                      d¦  «        j        }t          j        t          ¦  «        5  |j                             |¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t          ¦  «        5  |j                             d|d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr3   r¡   z
won't workrª  Ústring1Ústring2)r   ré   rê   rë   r›  r   r3   r   )r   Úa_tags     r   Útest_replace_with_errorsz-TestTreeModification.test_replace_with_errors  sª  € å˜�‘”ˆÝŒ]�:Ñ&Ô&ð 	-ð 	-Ø×Ò˜|Ñ,Ô,Ð,ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-ð —	’	Ð*Ñ+Ô+Ô-ˆÝŒ]�:Ñ&Ô&ð 	(ð 	(ØŒG× Ò  Ñ'Ô'Ð'ð	(ð 	(ð 	(ñ 	(ô 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(øøøð 	(ð 	(ð 	(ð 	(õ Œ]�:Ñ&Ô&ð 	>ð 	>ØŒG× Ò  ¨E°9Ñ=Ô=Ð=ð	>ð 	>ð 	>ñ 	>ô 	>ð 	>ð 	>ð 	>ð 	>ð 	>ð 	>ð 	>øøøð 	>ð 	>ð 	>ð 	>ð 	>ð 	>s5   ªAÁAÁAÂ
B1Â1B5Â8B5ÃC?Ã?DÄDc                 óÂ  — d}|                       |¦  «        }|                     d¦  «        }d|_        |                     d¦  «        }|                     d¦  «        }d}|j                             ||||¦  «         |                     ¦   «         dk    sJ ‚|j        j        |k    sJ ‚|j        j        |k    sJ ‚|j        j        |k    sJ ‚|j        j        |k    sJ ‚d S )Nr   rÙ   zText In D Tagr×  r­   zRandom Textz;<a><b></b><d>Text In D Tag</d><e></e>Random Text<f></f></a>)r   rð  r   rv   r›  r›   r   r  )r   r�   r   Úd_tagÚe_tagÚf_tagÚa_strings          r   Útest_replace_with_multiplez/TestTreeModification.test_replace_with_multiple-  së   € Ø&ˆØ�yŠy˜‰ŒˆØ—’˜SÑ!Ô!ˆØ&ˆŒØ—’˜SÑ!Ô!ˆØ—’˜SÑ!Ô!ˆØ ˆØŒ×Ò˜E 5¨(°EÑ:Ô:Ð:Ø�{Š{‰}Œ}Ð ]Ò]Ð]Ð]Ð]ØŒvÔ" eÒ+Ð+Ð+Ð+ØŒ|Ô(¨%Ò/Ð/Ð/Ð/ØÔ!Ô(¨HÒ4Ð4Ð4Ð4ØÔ!Ô.°%Ò7Ð7Ð7Ð7Ð7Ð7r    c                 ó¦   — d}|                       |¦  «        }|j                             |j        ¦  «         d|                     ¦   «         k    sJ ‚d S )Nr   z<a><c></c></a>)r   r   r›  rv   r›   rÓ  s      r   Útest_replace_first_childz-TestTreeModification.test_replace_first_child<  óM   € Ø&ˆØ�yŠy˜‰ŒˆØŒ×Ò˜DœFÑ#Ô#Ð#Ø 4§;¢;¡=¤=Ò0Ð0Ð0Ð0Ð0Ð0r    c                 ó¦   — d}|                       |¦  «        }|j                             |j        ¦  «         d|                     ¦   «         k    sJ ‚d S )Nr   rª  )r   rv   r›  r   r›   rÓ  s      r   Útest_replace_last_childz,TestTreeModification.test_replace_last_childB  r  r    c                 ó¢  — |                       d¦  «        }|j        }|j        }|                     |¦  «         |                     ¦   «         |                      d¦  «        k    sJ ‚|j        d k    sJ ‚|                     d¬¦  «        j        d k    sJ ‚|j	        d k    sJ ‚|j
        d k    sJ ‚|j        d k    sJ ‚|j        |j        k    sJ ‚|j	        dk    sJ ‚|j        j        |j        k    sJ ‚|j
        d k    sJ ‚|                     d¬¦  «        }|j        }|j        |k    sJ ‚|j
        |k    sJ ‚|j	        |k    sJ ‚|j        |k    sJ ‚d S )NzQ<a>We<b>reserve<c>the</c><d>right</d></b></a><e>to<f>refuse</f><g>service</g></e>z-<a>We<f>refuse</f></a><e>to<g>service</g></e>r¿  r#   ÚWeÚto)r   r   r­   r›  r›   rŒ  r÷   r   r  r?  r`  ry  r3   r×  rÖ  )r   r   Ú
remove_tagÚmove_tagÚto_textÚg_tags         r   Útest_nested_tag_replace_withz1TestTreeModification.test_nested_tag_replace_withH  s°  € Ø�yŠyØcñeô eˆð
 ”Vˆ
Ø”6ˆØ×Ò Ñ)Ô)Ð)à�{Š{‰}Œ} × 1Ò 1Ø;ñ!
ô !
ò 
ð 
ð 
ð 
ð
 Ô  DÒ(Ð(Ð(Ð(Ø�Š gˆÑ.Ô.Ô;¸tÒCÐCÐCÐCØÔ*¨dÒ2Ð2Ð2Ð2ØÔ&¨$Ò.Ð.Ð.Ð.ØÔ*¨dÒ2Ð2Ð2Ð2ð Œ $¤&Ò(Ð(Ð(Ð(ØÔ(¨DÒ0Ð0Ð0Ð0ØÔ$Ô1°T´VÒ;Ð;Ð;Ð;ØÔ$¨Ò,Ð,Ð,Ð,ð —)’) 4�)Ñ(Ô(ˆØ”ˆØÔ# uÒ,Ð,Ð,Ð,ØÔ# uÒ,Ð,Ð,Ð,ØÔ%¨Ò0Ð0Ð0Ð0ØÔ%¨Ò0Ð0Ð0Ð0Ð0Ð0r    c                 ó    — |                       d¦  «        }|j                             ¦   «          |j        d k    sJ ‚|j        j        dk    sJ ‚d S )NzI
            <p>Unneeded <em>formatting</em> is unneeded</p>
            zUnneeded formatting is unneeded)r   Úemr¡  r  r)   r•   s     r   Útest_unwrapz TestTreeModification.test_unwrapl  sY   € Ø�yŠyð ñ ô ˆð 	Œ�ŠÑÔÐØŒw˜$ŠˆˆˆØŒvŒ{Ð?Ò?Ð?Ð?Ð?Ð?Ð?r    c                 ó  — |                       d¦  «        }|j                             |                     d¦  «        ¦  «        }|                     ¦   «         dk    sJ ‚|                     ¦   «         |                      d¦  «        k    sJ ‚d S )NzI wish I was bold.r   ú<b>I wish I was bold.</b>)r   r   Úwraprð  r›   rŒ  )r   r   rµ   s      r   Ú	test_wrapzTestTreeModification.test_wrapt  s}   € Ø�yŠyÐ-Ñ.Ô.ˆØ”× Ò  §¢¨cÑ!2Ô!2Ñ3Ô3ˆØ�|Š|‰~Œ~Ð!<Ò<Ð<Ð<Ð<Ø�{Š{‰}Œ} × 1Ò 1Ð2MÑ NÔ NÒNÐNÐNÐNÐNÐNr    c                 óÒ   — |                       d¦  «        }|j        j                             |j        ¦  «         |                     ¦   «         |                      d¦  «        k    sJ ‚d S )Nz<b></b>I wish I was bold.r'  )r   r   r`  r(  r›   rŒ  r   s     r   Ú%test_wrap_extracts_tag_from_elsewherez:TestTreeModification.test_wrap_extracts_tag_from_elsewherez  s]   € Ø�yŠyÐ4Ñ5Ô5ˆØŒÔ× Ò  ¤Ñ(Ô(Ð(Ø�{Š{‰}Œ} × 1Ò 1Ð2MÑ NÔ NÒNÐNÐNÐNÐNÐNr    c                 ó  — |                       d¦  «        }|j        j                             |j        ¦  «         dt	          |j        j        ¦  «        k    sJ ‚|                     ¦   «         |                      d¦  «        k    sJ ‚d S )Nz+<b>I like being bold.</b>I wish I was bold.r-   z+<b>I like being bold.I wish I was bold.</b>)r   r   r`  r(  r/   rà   r›   rŒ  r   s     r   Ú&test_wrap_puts_new_contents_at_the_endz;TestTreeModification.test_wrap_puts_new_contents_at_the_end  sŠ   € Ø�yŠyÐFÑGÔGˆØŒÔ× Ò  ¤Ñ(Ô(Ð(Ø•C˜œœÑ(Ô(Ò(Ð(Ð(Ð(Ø�{Š{‰}Œ} × 1Ò 1Ø9ñ!
ô !
ò 
ð 
ð 
ð 
ð 
ð 
r    c                 ó|  — |                       d¦  «        }t          |j        j        ¦  «        dk    sJ ‚|                     d¬¦  «                             ¦   «         }|                     ¦   «         dk    sJ ‚|                     ¦   «         dk    sJ ‚t          |j        j        ¦  «        dk    sJ ‚|j        d k    sJ ‚|j        d k    sJ ‚|j	        j	        d k    sJ ‚|                     d¬	¦  «        }|                     d
¬	¦  «        }|j	        |k    sJ ‚|j
        |k    sJ ‚|j        |k    sJ ‚|j        |k    sJ ‚d S )NzR<html><body>Some content. <div id="nav">Nav crap</div> More content.</body></html>rD   Únavr&   z6<html><body>Some content.  More content.</body></html>z<div id="nav">Nav crap</div>r-   zSome content. r#   z More content.)r   r/   rQ  rà   r   r¤  r›   r÷   r?  r  r`  ry  )r   r   Ú	extractedÚ	content_1Ú	content_2s        r   Útest_extractz!TestTreeModification.test_extract‡  sp  € Ø�yŠyØ`ñbô bˆõ �4”9Ô%Ñ&Ô&¨!Ò+Ð+Ð+Ð+Ø—I’I �IÑ'Ô'×/Ò/Ñ1Ô1ˆ	à�{Š{‰}Œ}Ð XÒXÐXÐXÐXØ×ÒÑ!Ô!Ð%CÒCÐCÐCÐCõ �4”9Ô%Ñ&Ô&¨!Ò+Ð+Ð+Ð+ØÔ 4Ò'Ð'Ð'Ð'ØÔ)¨TÒ1Ð1Ð1Ð1ØÔ%Ô2°dÒ:Ð:Ð:Ð:ð —I’IÐ%5�IÑ6Ô6ˆ	Ø—I’IÐ%5�IÑ6Ô6ˆ	ØÔ%¨Ò2Ð2Ð2Ð2ØÔ%¨Ò2Ð2Ð2Ð2ØÔ)¨YÒ6Ð6Ð6Ð6ØÔ)¨YÒ6Ð6Ð6Ð6Ð6Ð6r    c                 ó´  — |                       d¦  «        }|j        j        }|j        j        }|                     d¦  «        }|                     d¦  «        }|j                             |¦  «         |j                             |¦  «         |                     ¦   «          |                     ¦   «          ||j        j        k    sJ ‚||j        j        k    sJ ‚d S )Nr,   rP   r=   )r   r3   r   r   rÿ  rT   r¤  )r   r   Úfoo_1Úbar_1Úfoo_2Úbar_2s         r   Ú4test_extract_distinguishes_between_identical_stringszITestTreeModification.test_extract_distinguishes_between_identical_stringsŸ  s¼   € Ø�yŠyÐ/Ñ0Ô0ˆØ””ˆØ””ˆØ—’ Ñ&Ô&ˆØ—’ Ñ&Ô&ˆØŒ�Š�eÑÔÐØŒ�Š�eÑÔÐð
 	�Š‰ŒˆØ�Š‰ŒˆØ˜œœÒ%Ð%Ð%Ð%Ø˜œœÒ%Ð%Ð%Ð%Ð%Ð%r    c                 ó¨   ‡— |                       d¦  «        Šˆfd„‰                     d¦  «        D ¦   «          dt          ‰j        ¦  «        k    sJ ‚d S )Nzv
<html>
<head>
<script>foo</script>
</head>
<body>
 <script>bar</script>
 <a></a>
</body>
<script>baz</script>
</html>c                 óB   •— g | ]}‰j                              ¦   «         ‘ŒS r9   )Úscriptr¤  )r  rì   r   s     €r   r  zKTestTreeModification.test_extract_multiples_of_same_tag.<locals>.<listcomp>¼  s'   ø€ Ð@Ð@Ð@ 1ˆŒ×	Ò	Ñ	Ô	Ð@Ð@Ð@r    r<  z<body>

<a></a>
</body>)r   r0   r(   rQ  r   s    @r   Ú"test_extract_multiples_of_same_tagz7TestTreeModification.test_extract_multiples_of_same_tag°  sc   ø€ Ø�yŠyð 
ñ 
ô 
ˆð 	AÐ@Ð@Ð@¨¯ª°hÑ(?Ô(?Ð@Ñ@Ô@Ð@Ø+­s°4´9©~¬~Ò=Ð=Ð=Ð=Ð=Ð=r    c                 ó´   — |                       d¦  «        }|                     d¦  «                             ¦   «          d |                     d¦  «        k    sJ ‚d S )Nz<html>
<body>hi</body>
</html>rQ  )r   r   r¤  r   s     r   ÚBtest_extract_works_when_element_is_surrounded_by_identical_stringszWTestTreeModification.test_extract_works_when_element_is_surrounded_by_identical_stringsÀ  s]   € Ø�yŠyðñô ˆð 	�	Š	�&ÑÔ×!Ò!Ñ#Ô#Ð#Ø�t—y’y Ñ(Ô(Ò(Ð(Ð(Ð(Ð(Ð(r    c                 ó@  — |                       d¦  «        }|j        }|j                             ¦   «          t	          |j        j        ¦  «        dk    sJ ‚t          |d¦  «        sJ ‚|j        }|                     d¬¦  «         dt	          |j        ¦  «        k    sJ ‚dS )zTag.clear()z4<p><a>String <em>Italicized</em></a> and another</p>r   rà   T)Ú	decomposeN)r   r3   r  Úclearr/   rà   rY   r$  )r   r   r3   r$  s       r   Ú
test_clearzTestTreeModification.test_clearÉ  s›   € à�yŠyÐOÑPÔPˆàŒFˆØŒ�Š‰ŒˆÝ�4”6”?Ñ#Ô# qÒ(Ð(Ð(Ð(Ý�q˜*Ñ%Ô%Ð%Ð%Ð%ð ŒTˆØ	�Š˜$ˆÑÔÐØ•C˜œÑ$Ô$Ò$Ð$Ð$Ð$Ð$Ð$r    c                 ó  — |                       d¦  «        }|                     d¦  «        \  }}|j        }|j        j        }||||fD ]}d|j        k    sJ ‚Œ|                     ¦   «          |||fD ]}d|j        k    sJ ‚Œd|j        k    sJ ‚d S )Nz;<p><a>String <em>Italicized</em></a></p><p>Another para</p>r  FT)r   r0   r3   r$  r   Ú
decomposedrA  )r   r   r·  r°  r3   r)   rì   s          r   Útest_decomposez#TestTreeModification.test_decomposeØ  sº   € à�yŠyÐVÑWÔWˆØ—’˜sÑ#Ô#‰ˆˆBØŒDˆØŒuŒ|ˆØ�b˜!˜TÐ"ð 	)ð 	)ˆAØ˜AœLÒ(Ð(Ð(Ð(Ð(ð 	�Š‰ŒˆØ�a˜�ð 	(ð 	(ˆAØ˜1œ<Ò'Ð'Ð'Ð'Ð'à˜œÒ%Ð%Ð%Ð%Ð%Ð%r    c                 ó¬   — |                       d¦  «        }d|j        _        |j        j        dgk    sJ ‚d|j        _        |j        j        dgk    sJ ‚dS )zTag.string = 'string'z<a></a> <b><c></c></b>rP   r=   N)r   r3   r   rà   r   r   s     r   Útest_string_setz$TestTreeModification.test_string_setè  sZ   € à�yŠyÐ1Ñ2Ô2ˆØˆŒŒØŒvŒ 5 'Ò)Ð)Ð)Ð)ØˆŒŒØŒvŒ 5 'Ò)Ð)Ð)Ð)Ð)Ð)r    c                 óš   — |                       d¦  «        }|j        j        |j        _        |j                             ¦   «         dk    sJ ‚d S )Nz<a><b>foo</b><c>bar</c>s   <a><b>bar</b><c>bar</c></a>)r   rv   r   r   r3   rš   r   s     r   Ú/test_string_set_does_not_affect_original_stringzDTestTreeModification.test_string_set_does_not_affect_original_stringð  sC   € Ø�yŠyÐ2Ñ3Ô3ˆØœœˆŒŒØŒv�}Š}‰ŒÐ"@Ò@Ð@Ð@Ð@Ð@Ð@r    c                 ó¨   — |                       d¦  «        }t          d¦  «        }||j        _        t	          |j        j        t          ¦  «        sJ ‚d S )NrS   rP   )r   r   r3   r   r³  )r   r   Úcdatas      r   Ú)test_set_string_preserves_class_of_stringz>TestTreeModification.test_set_string_preserves_class_of_stringõ  sG   € Ø�yŠy˜Ñ#Ô#ˆÝ�e‘”ˆØˆŒŒÝ˜$œ&œ-­Ñ/Ô/Ð/Ð/Ð/Ð/Ð/r    N)3r5   r6   r7   r�  r”  r™  rž  r¢  r¥  r§  r¬  r®  r¹  rÀ  rÅ  rÇ  rÉ  rÑ  rÔ  rÙ  ré   ÚmarkÚparametrizerâ  rä  rè  rò  r÷  rú  rü  r  r  r
  r  r  r  r  r"  r%  r)  r+  r-  r3  r9  r=  r?  rC  rF  rH  rJ  rM  r9   r    r   r‰  r‰  È  s  € € € € € ðGð Gð Gð]ð ]ð ]ð
ð 
ð 
ð$ð ð ðð ð ð#ð #ð #ð8ð 8ð 8ð(ð (ð (ð%ð %ð %ð.ð .ð .ð((ð (ð (ð-ð -ð -ð/ð /ð /ð*8ð 8ð 8ð-ð -ð -ð<%ð %ð %ðTð Tð Tð „[×ÒØ�_�_Ð&>Ð&>Ð?ñô ðTð Tñô ðTð?ð ?ð ?ð3ð 3ð 3ð0ð 0ð 0ð6
ð 
ð 
ð0ð 0ð 0ð4

ð 

ð 

ð	"ð 	"ð 	"ð	#ð 	#ð 	#ð.ð .ð .ð>ð >ð >ð8ð 8ð 8ð1ð 1ð 1ð1ð 1ð 1ð"1ð "1ð "1ðH@ð @ð @ðOð Oð OðOð Oð Oð

ð 
ð 
ð7ð 7ð 7ð0&ð &ð &ð">ð >ð >ð )ð )ð )ð%ð %ð %ð&ð &ð &ð *ð *ð *ðAð Að Að
0ð 0ð 0ð 0ð 0r    r‰  c                   ó`   — e Zd Zej                             dg d¢¦  «        d„ ¦   «         Zd„ ZdS )ÚTestDeprecatedArgumentsÚmethod_name)r   r0   r  r  r-  r*  rK  rH  rj  rm  r�  r„  c                 ó4  — |                       d¦  «        }t          |j        |¦  «        }t          j        d¬¦  «        5 } |d¬¦  «         |\  }|j        t          k    sJ ‚t          |j        ¦  «        }|dk    sJ ‚	 d d d ¦  «         d S # 1 swxY w Y   d S )Nz<a>some</a><b>markup</b>T©Úrecordr[  ©r)   zOThe 'text' argument to find()-type methods is deprecated. Use 'string' instead.)	r   Úgetattrr   ÚwarningsÚcatch_warningsÚfilenameÚ__file__r(   Úmessage)r   rR  r   ÚmethodÚwÚwarningÚmsgs          r   Útest_find_type_method_stringz4TestDeprecatedArguments.test_find_type_method_stringþ  s  € ð �yŠyÐ3Ñ4Ô4ˆÝ˜œ Ñ-Ô-ˆÝÔ$¨DÐ1Ñ1Ô1ð 	l°QØˆF˜Ð!Ñ!Ô!Ð!Ø‰IˆWØÔ#¥xÒ/Ð/Ð/Ð/Ý�g”oÑ&Ô&ˆCØÐkÒkÐkÐkÐkÐkð	lð 	lð 	lñ 	lô 	lð 	lð 	lð 	lð 	lð 	lð 	lð 	løøøð 	lð 	lð 	lð 	lð 	lð 	ls   Á ?BÂBÂBc                 ó  — t          j        d¬¦  «        5 }t          d¬¦  «        }|j        dk    sJ ‚|\  }t	          |j        ¦  «        }|j        t          k    sJ ‚|dk    sJ ‚	 d d d ¦  «         d S # 1 swxY w Y   d S )NTrT  r)   rV  zXThe 'text' argument to the SoupStrainer constructor is deprecated. Use 'string' instead.)rX  rY  r   r)   r(   r\  rZ  r[  )r   r^  rÀ   r_  r`  s        r   Ú$test_soupstrainer_constructor_stringz<TestDeprecatedArguments.test_soupstrainer_constructor_string  sì   € ÝÔ$¨DÐ1Ñ1Ô1ð 	u°QÝ#¨Ð0Ñ0Ô0ˆHØ”= FÒ*Ð*Ð*Ð*Ø‰IˆWÝ�g”oÑ&Ô&ˆCØÔ#¥xÒ/Ð/Ð/Ð/ØÐtÒtÐtÐtÐtÐtð	uð 	uð 	uñ 	uô 	uð 	uð 	uð 	uð 	uð 	uð 	uð 	uøøøð 	uð 	uð 	uð 	uð 	uð 	us   –AA4Á4A8Á;A8N)r5   r6   r7   ré   rN  rO  ra  rc  r9   r    r   rQ  rQ  ü  sk   € € € € € à„[×ÒØð 
ð 
ð 
ñô ðlð lñô ðlðuð uð uð uð ur    rQ  ))r8   Úpdbr   ré   r@   rX  Úbs4r   Úbs4.builderr   r   Úbs4.elementr   r   r	   r
   r   r   r   r   r   r   r   rY  r   r   r;   r]   re   r’   r×   rå   rð   r  r  r;  rW  r]  rv  r‰  rQ  r9   r    r   ú<module>rh     s  ððð ð Ð Ð Ð Ð Ð Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð,ð ,ð ,ð ,ð ,ˆxñ ,ô ,ð ,ð>6)ð 6)ð 6)ð 6)ð 6)�(ñ 6)ô 6)ð 6)ðrDð Dð Dð Dð D ñ Dô Dð DðK ð K ð K ð K ð K ˜ñ K ô K ð K ð\q7ð q7ð q7ð q7ð q7˜Xñ q7ô q7ð q7ðh).ð ).ð ).ð ).ð ).�ñ ).ô ).ð ).ðXð ð ð ð �ñ ô ð ð&/6ð /6ð /6ð /6ð /6˜8ñ /6ô /6ð /6ðdwð wð wð wð w�Hñ wô wð wð&#ð &#ð &#ð &#ð &#˜ñ &#ô &#ð &#ðP.#ð .#ð .#ð .#ð .#˜]ñ .#ô .#ð .#ðb&ð &ð &ð &ð &�(ñ &ô &ð &ð**Bð *Bð *Bð *Bð *B�kñ *Bô *Bð *BðZ*Fð *Fð *Fð *Fð *F˜+ñ *Fô *Fð *FðZq0ð q0ð q0ð q0ð q0˜8ñ q0ô q0ð q0ðhuð uð uð uð u˜hñ uô uð uð uð ur    