403Webshell
Server IP : 209.209.40.120  /  Your IP : 216.73.217.112
Web Server : Microsoft-IIS/10.0
System : Windows NT NEWWWW 10.0 build 17763 (Windows Server 2019) i586
User : NEWWWW$ ( 0)
PHP Version : 8.3.30
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  C:/Python312/Lib/site-packages/bs4/tests/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : C:/Python312/Lib/site-packages/bs4/tests/__pycache__/test_tree.cpython-312.pyc
�

V	�g7�����dZddlZddlZddlZddlmZddlmZddlm	Z	m
Z
mZmZm
Z
ddlmZddlmZGd	�d
e�ZGd�de�ZGd
�de�ZGd�de�ZGd�de�ZGd�de�ZGd�de�ZGd�de�ZGd�de�ZGd�de�ZGd�de�ZGd�d e�ZGd!�d"e�ZGd#�d$e�ZGd%�d&e�Z gd'�Z!Gd(�d)e�Z"Gd*�d+e�Z#y),a8Tests 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.
�N)�
BeautifulSoup)�builder_registry)�!AttributeResemblesVariableWarning�CData�Comment�NavigableString�Tag)�SoupStrainer�)�SoupTestc�:�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
y	)
�TestFindz&Basic tests of the find() method.
    c�f�|jd�}|jd�jdk(sJ�y)Nz <a>1</a><b>2</b><a>3</a><b>4</b>�b�2)�soup�find�string��selfrs  �5C:\Python312\Lib\site-packages\bs4/tests/test_tree.py�
test_find_tagzTestFind.test_find_tag"s-���y�y�;�<���y�y��~�$�$��+�+�+�c�T�|jd�}|jd��dk(sJ�y)Nu<h1>Räksmörgås</h1>�
Räksmörgås�r)rrrs  r�test_unicode_text_findzTestFind.test_unicode_text_find&s*���y�y�1�2���y�y��y�0�O�C�C�Crc�~�|jd�}t|�d|jd��jk(sJ�y)Nu&<h1 id="Räksmörgås">here it is</h1>z
here it isr��id)r�strr�textrs  r�test_unicode_attribute_findz$TestFind.test_unicode_attribute_find*s7���y�y�A�B���D�	��t�y�y�O�y�<�A�A�A�A�Arc�b�|jd�}dt|j��k(sJ�y)z)Test an optimization that finds all tags.�<a>foo</a><b>bar</b>�N�r�len�find_allrs  r�test_find_everythingzTestFind.test_find_everything/s*���y�y�/�0���C��
�
��(�(�(�(rc�d�|jd�}dt|jd��k(sJ�y)z;Test an optimization that finds all tags with a given name.z<a>foo</a><b>bar</b><a>baz</a>r&�aNr'rs  r�test_find_everything_with_namez'TestFind.test_find_everything_with_name4s-���y�y�9�:���C��
�
�c�*�+�+�+�+rc��|jd�}d|j�jk(sJ�d|jd�j�jk(sJ�d|jd�j	�jk(sJ�y)Nz<div></div><p></p>�div�p�rr�name�find_previous_sibling�find_next_siblingrs  r�test_find_with_no_argumentsz$TestFind.test_find_with_no_arguments9sv���y�y�-�.����	�	��(�(�(�(�(���	�	�#��<�<�>�C�C�C�C�C��d�i�i��&�8�8�:�?�?�?�?�?rc��|jd�}d|j�jk(sJ�d|jd�j�jk(sJ�d|jd�j	�jk(sJ�y)Nz"text<div>text</div>text<p>text</p>r/r0r1rs  r�+test_find_with_no_arguments_only_finds_tagsz4TestFind.test_find_with_no_arguments_only_finds_tags?sv���y�y�=�>����	�	��(�(�(�(�(���	�	�#��<�<�>�C�C�C�C�C��d�i�i��&�8�8�:�?�?�?�?�?rN)�__name__�
__module__�__qualname__�__doc__rrr#r*r-r5r7�rrrrs.���,�D�B�
)�
,�
@�@rrc�4�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	y)	�TestFindAllz%Basic tests of the find_all() method.c�*�|jd�}dt|jj��k(sJ�dt|j	d�j��k(sJ�dt|j	d�j
��k(sJ�y)Nz/<body>text<div>text</div>text<p>text</p></body>r&rr0r/)rr(�bodyr)r�find_previous_siblings�find_next_siblingsrs  r�/test_find_all_with_no_arguments_only_finds_tagsz;TestFindAll.test_find_all_with_no_arguments_only_finds_tagsIsz���y�y�J�K���C��	�	�*�*�,�-�-�-�-��C��	�	�#��=�=�?�@�@�@�@��C��	�	�%�(�;�;�=�>�>�>�>rc��|jd�}|jd��dgk(sJ�|jddg��ddgk(sJ�|jtjd���gd�k(sJ�|jd��gd�k(sJ�y)	z'You can search the tree for text nodes.u<html>Foo<b>bar</b>»</html>�barr�Fooz.*)rFrE�»TN)rr)�re�compilers  r�test_find_all_text_nodesz$TestFindAll.test_find_all_text_nodesOs����y�y�9�:���}�}�E�}�*�u�g�5�5�5��}�}�U�E�N�}�3��u�~�E�E�E��}�}�B�J�J�t�$4�}�5�9O�O�O�O��}�}�D�}�)�-C�C�C�Crc�L�|jd�}|j|jdd��gd��|j|jdd��dg�|j|jdd��gd	��|j|jdd
��gd	��y)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>r,���limit)�1r�3rrO�
)rOrrP�4�5rN�r�assert_selectsr)rs  r�test_find_all_limitzTestFindAll.test_find_all_limit\s����y�y�C�D�����D�M�M�#�Q�M�7��I����D�M�M�#�Q�M�7�#��?����D�M�M�#�R�M�8�:S�T�	
���D�M�M�#�Q�M�7�9R�Src��|jd�}|j|dd��dg�|j|jd��dg�y)	Nz!<a>1</a><b>2<a id='foo'>3</a></b>r,rrMrO�foorrP)rrUrrs  r�%test_calling_a_tag_is_calling_findallz1TestFindAll.test_calling_a_tag_is_calling_findallfsG���y�y�<�=�����D��A�.���6����D�F�F�e�F�,�s�e�4rc�:�|jd�}g}|j|�tjd��5}g|j	|�k(sJ�|\}|j
tk(sJ�t|j�}|dk(sJ�	ddd�y#1swYyxYw)N�<a></a>T��recordzLIgnoring nested list [[...]] to avoid the possibility of infinite recursion.)	r�append�warnings�catch_warningsr)�filename�__file__r!�message)rr�selfref�w�warning�msgs      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_recursionks����y�y��#�������w���
$�
$�D�
1�	�Q�����w�/�/�/�/��I�W��#�#�x�/�/�/��g�o�o�&�C��a�b�
�b�
	�	�	�s�AB�Bc���|jd�}|jd�}t|d�sJ�|jd�}t|d�sJ�|jd��}t|d�sJ�y)z%All find_all calls return a ResultSetr[r,�sourceTrXrN)rr)�hasattr�rr�results   r�test_find_all_resultsetz#TestFindAll.test_find_all_resultsetsl���y�y��#�����s�#���v�x�(�(�(����t�$���v�x�(�(�(����e��,���v�x�(�(�(rN)
r8r9r:r;rCrJrVrYrhrnr<rrr>r>Fs%��/�?�D�T�5�
�(
)rr>c��eZdZd�Zy)�TestFindAllBasicNamespacesc��|jd�}d|jd�jk(sJ�d|jddi��jk(sJ�y)Nz0<mathml:msqrt>4</mathml:msqrt><a svg:fill="red">rRzmathml:msqrtr,zsvg:fill�red��attrs)rrrr2rs  r�test_find_by_namespaced_namez7TestFindAllBasicNamespaces.test_find_by_namespaced_name�sR���y�y�K�L���d�i�i��/�6�6�6�6�6��d�i�i�z�5�&9�i�:�?�?�?�?�?rN)r8r9r:rur<rrrprp�s��@rrpc�T�eZdZdZdd�Zd�Zd�Zd�Zd�Zd�Z	d	�Z
d
�Zd�Zd�Z
d
�Zy)�TestFindAllByNamez&Test ways of finding tags by tag name.Nc�0�|jd�|_y)Nz�<a>First tag.</a>
                                  <b>Second tag.</b>
                                  <c>Third <a>Nested tag.</a> tag.</c>�r�tree�rs r�setup_methodzTestFindAllByName.setup_method�s���I�I�J�K��	rc�^�|j|jjd�ddg�y�Nr,�
First tag.�Nested tag.�rUrzr)r{s r�test_find_all_by_tag_namez+TestFindAllByName.test_find_all_by_tag_name�s&�����D�I�I�.�.�s�3�l�M�5R�Src�B�|j|jjdd��dg�|j|jjdd��ddg�|j|jjdtjd���ddg�y)Nr,rrTr��tag�rUrzr)rHrIr{s r�test_find_all_by_name_and_textz0TestFindAllByName.test_find_all_by_name_and_text�s�������I�I���s�<��8�<�.�	
�	
����I�I���s�4��0�<��2O�	
�	
����I�I���s�2�:�:�e�+<��=�
�=�)�	
rc�p�|j|jjjd�dg�y)Nr,r�)rUrz�cr)r{s r�!test_find_all_on_non_root_elementz3TestFindAllByName.test_find_all_on_non_root_element�s'�����D�I�I�K�K�0�0��5�
��Grc�J�|j|jd�ddg�yr~)rUrzr{s r�%test_calling_element_invokes_find_allz7TestFindAllByName.test_calling_element_invokes_find_all�s�����D�I�I�c�N�\�=�,I�Jrc�p�|j|jjtd��ddg�yr~)rUrzr)r
r{s r�test_find_all_by_tag_strainerz/TestFindAllByName.test_find_all_by_tag_strainer�s.������I�I���|�C�0�1�L�-�3P�	
rc�b�|j|jjddg�gd��y)Nr,r�rzSecond tag.r�r�r{s r�test_find_all_by_tag_namesz,TestFindAllByName.test_find_all_by_tag_names�s)������I�I����S�z�*�,X�	
rc�d�|j|jjddd��gd��y)NT)r,rr�r�r{s r�test_find_all_by_tag_dictz+TestFindAllByName.test_find_all_by_tag_dict�s*������I�I���T��5�6�8�	
rc��|j|jjtjd��gd��y)Nz^[ab]$r�r�r{s r�test_find_all_by_tag_rez)TestFindAllByName.test_find_all_by_tag_re�s.������I�I���r�z�z�(�3�4�8�	
rc�r�d�}|jd�}|j|j|�ddg�y)Nc�>�|j|jd�k(S)Nr )r2�get�r�s r�id_matches_namezRTestFindAllByName.test_find_all_with_tags_matching_method.<locals>.id_matches_name�s���8�8�s�w�w�t�}�,�,rz�<a id="a">Match 1.</a>
                            <a id="1">Does not match.</a>
                            <b id="b">Match 2.</a>zMatch 1.zMatch 2.rT)rr�rzs   r�'test_find_all_with_tags_matching_methodz9TestFindAllByName.test_find_all_with_tags_matching_method�s<��	-��y�y�6�7��	
���D�M�M�/�:�Z��<T�Urc�J�|jd�}|jdd�}|jdtjd��}|j	dddg�\}}d|j
k(sJ�d|j
k(sJ�d|j
k(sJ�d|j
k(sJ�y)NzH<div class='a b'>1</div><div class='a c'>2</div><div class='a d'>3</div>r/za dza brPrO)rrrHrIr)r)rr�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�j��0�
1�����u�u�e�n�5���B��b�i�i�����b�i�i�����b�i�i�����b�i�i���r��returnN)r8r9r:r;r|r�r�r�r�r�r�r�r�r�r�r<rrrwrw�sA��0�K�
T�
�H�K�
�

�

�
�
V�
 rrwc�l�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zy)�TestFindAllByAttributec�n�|jd�}|j|jd��ddg�y)Nz�
                         <a id="first">Matching a.</a>
                         <a id="second">
                          Non-matching <b id="first">Matching b.</b>a.
                         </a>�firstrzMatching a.zMatching b.rT�rrzs  r�test_find_all_by_attribute_namez6TestFindAllByAttribute.test_find_all_by_attribute_name�s9���y�y�!�"��
	
���D�M�M�W�M�5�
�}�7U�Vrc�\�djd�}djd�}|j|�}|jg|j|��k(sJ�|jg|j|j	d���k(sJ�|jgsJ|j|dg����y)Nuםולש�utf8u<a title="םולש"></a>)�titlezsomething else)�encoderr,r)�decode)r�peace�datars    r�%test_find_all_by_utf8_attribute_valuez<TestFindAllByAttribute.test_find_all_by_utf8_attribute_value�s����!�!�&�)��)�0�0��8���y�y�������x�4�=�=�u�=�5�5�5�5����x�4�=�=�u�|�|�F�/C�=�D�D�D�D����x�G����e�5E�-F��G�G�xrc��|jd�}|j|jd��dg�|j|jddi��dg�|j|jdd	i��d
g�y)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�r2zA tag called 'name1'.r2rszName match.�class�class2zClass match.rTr�s  r�test_find_all_by_attribute_dictz6TestFindAllByAttribute.test_find_all_by_attribute_dict�s}���y�y����	
���D�M�M�w�M�7�:Q�9R�S����D�M�M���0A�M�B�]�O�T����D�M�M��(�0C�M�D�~�FV�Wrc��|jd�}|j|jdd��dg�|j|jdd��dg�|j|jdd	��dg�|j|jdd�dg�|j|jd�
�ddg�|j|jdd�dg�|j|jdd	�dg�y)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>
                         r,rO��class_zClass 1.r�rPzClass 3 and 4.rRrsrTr�s  r�test_find_all_by_classz-TestFindAllByAttribute.test_find_all_by_classs����y�y����	
���D�M�M�#�c�M�:�Z�L�I����D�M�M�#�c�M�:�=M�<N�O����D�M�M�#�c�M�:�=M�<N�O�	
���D�M�M�#�s�3�j�\�B����D�M�M��M�4�z�:�6N�O����D�M�M�#�s�3�6F�5G�H����D�M�M�#�s�3�6F�5G�Hrc�|�|jd�}|jdtjd���}|j	|dg�|jdtjd���}|j	|dg�|jdtjd���}|j	|dg�y)Nz#<gar class='foo bar'>Found it</gar>�gar�or��Found itr,zo b)rr)rHrIrU)rrz�fs   r�0test_find_by_class_when_multiple_classes_presentzGTestFindAllByAttribute.test_find_by_class_when_multiple_classes_presents����y�y�>�?���M�M�%��
�
�3��M�8�����A�
�|�,��M�M�%��
�
�3��M�8�����A�
�|�,�
�M�M�%��
�
�5�(9�M�:�����A�
�|�,rc�(�|jd�}|j|jdtjd��dg�d�}|j|jd|�g�d�}|j|jd|�dg�y)Nz<a class='bar'>Found it</a>r,�bar�c��t|�dkDS�NrL�r(��values r�big_attribute_valueznTestFindAllByAttribute.test_find_all_with_non_dictionary_for_attrs_finds_by_class.<locals>.big_attribute_value/s���u�:��>�!rc��t|�dkSr�r�r�s r�small_attribute_valuezpTestFindAllByAttribute.test_find_all_with_non_dictionary_for_attrs_finds_by_class.<locals>.small_attribute_value4s���u�:��?�"r�rrUr)rHrI)rrr�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�����D�M�M�#�r�z�z�$�/?�@�:�,�O�	"�	
���D�M�M�#�/B�C�R�H�	#�	
���D�M�M�#�/D�E�
�|�Trc�H�|jd�}|jd�\}}||gsJ|jdd���|gsJ|jdd���|g|jdd��k(sJ�|g|jdd�k(sJ�g|jdd�k(sJ�y)Nz*<a class="foo bar"></a><a class="foo"></a>r,rXrEzfoo barr�zbar foo�rr))rrr,�a2s    r�:test_find_all_with_string_for_attrs_finds_multiple_classeszQTestFindAllByAttribute.test_find_all_with_string_for_attrs_finds_multiple_classes9s����y�y�E�F���
�
�c�"���2��2�w�1��
�
�c�5�1�1�w��s�-�D�M�M�#�u�-�-�s��s�d�m�m�C�	�m�:�:�:�:��s�d�m�m�C��3�3�3�3��T�]�]�3�	�2�2�2�2rc��|jd�}tddi��}|j|j|�dg�y)Nzi
                         <a id="first">Match.</a>
                         <a id="second">Non-match.</a>r r�rszMatch.)rr
rUr))rrz�strainers   r�'test_find_all_by_attribute_soupstrainerz>TestFindAllByAttribute.test_find_all_by_attribute_soupstrainerEs@���y�y�:�;�� �t�W�o�6�����D�M�M�(�3�h�Z�@rc�n�|jd�}|j|jdd��dg�y)N��<a id="1">ID present.</a>
                            <a>No ID present.</a>
                            <a id="">ID is empty.</a>r,rzNo ID present.rTr�s  r�$test_find_all_with_missing_attributez;TestFindAllByAttribute.test_find_all_with_missing_attributeMs:���y�y�9�:��	
���D�M�M�#�$�M�7�:J�9K�Lrc�n�|jd�}|j|jd��ddg�y)Nr�TrzID present.zID is empty.rTr�s  r�$test_find_all_with_defined_attributez;TestFindAllByAttribute.test_find_all_with_defined_attributeUs9���y�y�9�:��	
���D�M�M�T�M�2�]�N�4S�Trc��|jd�}ddg}|j|jd��|�|j|jd��|�y)Nz[<a id=1>Unquoted attribute.</a>
                            <a id="1">Quoted attribute.</a>zUnquoted attribute.zQuoted attribute.rrrOrT)rrz�expecteds   r�$test_find_all_with_numeric_attributez;TestFindAllByAttribute.test_find_all_with_numeric_attribute]sY���y�y�?�@��*�+>�?�����D�M�M�Q�M�/��:����D�M�M�S�M�1�8�<rc��|jd�}|j|jgd���ddg�|j|jg��g�y)Nz�<a id="1">1</a>
                            <a id="2">2</a>
                            <a id="3">3</a>
                            <a>No ID.</a>)rOrPrRrrOrPrTr�s  r�(test_find_all_with_list_attribute_valuesz?TestFindAllByAttribute.test_find_all_with_list_attribute_valuesfsU���y�y�-�.��	
���D�M�M�_�M�=��S�z�J�	
���D�M�M�R�M�0�"�5rc��|jd�}|j|jtjd���ddg�y)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+$rzOne a.zTwo as.r�r�s  r�5test_find_all_with_regular_expression_attribute_valuezLTestFindAllByAttribute.test_find_all_with_regular_expression_attribute_valuersB���y�y�-�.��	
���D�M�M�R�Z�Z��-?�M�@�8�Y�BW�Xrc��|jd�}|j}|g|jdd��k(sJ�g|jdd��k(sJ�y)Nz<b>foo</b><b>bar</b><a>foo</a>r,rXrrE�rr,r)�rrr,s   r�'test_find_by_name_and_containing_stringz>TestFindAllByAttribute.test_find_by_name_and_containing_string~sR���y�y�9�:���F�F���s�d�m�m�C��m�6�6�6�6��T�]�]�3�u�]�5�5�5�5rc�t�|jd�}|jd�|jdd��k(sJ�y)Nz"<a>foo</a><a><b><c>foo</c></b></a>r,rXrr�rs  r�=test_find_by_name_and_containing_string_when_string_is_buriedzTTestFindAllByAttribute.test_find_by_name_and_containing_string_when_string_is_buried�s5���y�y�=�>���}�}�S�!�T�]�]�3�u�]�%E�E�E�Erc��|jd�}|j}|g|jdd��k(sJ�g|jdd��k(sJ�y)Nz"<b id="1">foo</b><a id="2">foo</a>r&rX)r rrrEr�r�s   r�,test_find_by_attribute_and_containing_stringzCTestFindAllByAttribute.test_find_by_attribute_and_containing_string�sR���y�y�=�>���F�F���s�d�m�m�q��m�7�7�7�7��T�]�]�a��]�6�6�6�6rN)r8r9r:r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r<rrr�r��s\��W�H�X�$I�(-�
U�
3�A�M�U�=�
6�
Y�6�F�7rr�c��eZdZdZd�Zy)�
TestSmoothzTest Tag.smooth.c��|jd�}|j}|jd�|jd�|jtd��|jtd��|jd�|j	�}t||d�}|jd�|jd	�|j|�d|jjusJ�d
t|j�k(sJ�|j�dt|j�k(sJ�d|jd
k(sJ�d|jjk(sJ�d|jdk(sJ�d|jdk(sJ�y)Nz<div>a</div>rr�z	Comment 1z	Comment 2�d�spanrOr���abcr�12rr&)rr/r^r�default_builderr	r�rr(�contents�smooth)rrr/�builderr�s     r�test_smoothzTestSmooth.test_smooth�sI���y�y��(���h�h���
�
�3���
�
�3���
�
�7�;�'�(��
�
�7�;�'�(��
�
�3���&�&�(���4��&�)�����C�����C���
�
�4���s�x�x���&�&�&��C����%�%�%�%��
�
���C����%�%�%�%�
����Q��'�'�'��s�x�x���&�&�&�
�c�l�l�1�o�-�-�-��c�l�l�1�o�-�-�-rN)r8r9r:r;r�r<rrr�r��s
���&.rr�c��eZdZdZd�Zy)�	TestIndexzTest Tag.indexc�"�|jd�}|j}t|j�D]\}}||j	|�k(r�J�tjt�5|j	d�ddd�y#1swYyxYw)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)rr/�	enumerater��index�pytest�raises�
ValueError)rrzr/�i�elements     r�
test_indexzTestIndex.test_index�s���y�y�&�'���h�h��#�C�L�L�1�	+�J�A�w���	�	�'�*�*�*�*�	+�
�]�]�:�
&�	��J�J�q�M�	�	�	�s�*B�BN)r8r9r:r;rr<rrr�r��s
���rr�c�N�eZdZdZd
d�Zd�Zd�Zd�Zd�Zd�Z	d	�Z
d
�Zd�Zd�Z
y)�TestParentOperationsz;Test navigation and searching through an element's parents.Nc�f�|jd�|_|jj|_y)Na<<ul id="empty"></ul>
                                 <ul id="top">
                                  <ul id="middle">
                                   <ul id="bottom">
                                    <b id="start">Start here</b>
                                   </ul>
                                  </ul>)rrzr�startr{s rr|z!TestParentOperations.setup_method�s(���I�I�+�,��	��Y�Y�[�[��
rc���|jjddk(sJ�|jjjddk(sJ�|jjjjddk(sJ�y)Nr �bottom�middle�top)r�parentr{s r�test_parentz TestParentOperations.test_parent�sk���z�z� � ��&�(�2�2�2��z�z� � �'�'��-��9�9�9��z�z� � �'�'�.�.�t�4��=�=�=rc�l�|jjd}|j|jk(sJ�y)Nr)rzr�r	)r�top_tags  r�%test_parent_of_top_tag_is_soup_objectz:TestParentOperations.test_parent_of_top_tag_is_soup_object�s,���)�)�$�$�Q�'���~�~����*�*�*rc�8�d|jjusJ�y�N)rzr	r{s r�test_soup_object_has_no_parentz3TestParentOperations.test_soup_object_has_no_parent�s���t�y�y�'�'�'�'�'rc��|j|jjd�gd��|j|jjdd��dg�|jjd��gk(sJ�y)N�ul�rrrrrr)�assert_selects_idsr�find_parentsr{s r�test_find_parentsz&TestParentOperations.test_find_parents�sm������J�J�#�#�D�)�+F�	
�	
����
�
� 7� 7��� 7� J�X�J�W��z�z�&�&�'�&�2�b�8�8�8rc��|jjdd��ddk(sJ�|jjd���J�y)Nrrrr r)r�find_parentr{s r�test_find_parentz%TestParentOperations.test_find_parent�sG���z�z�%�%�d�u�%�5�d�;�u�D�D�D��z�z�%�%��%�1�9�9�9rc�r�|jjd��}|jjdk(sJ�y)N�
Start hererr)rzrr	r2�rr"s  r�test_parent_of_text_elementz0TestParentOperations.test_parent_of_text_element�s.���y�y�~�~�\�~�2���{�{���3�&�&�&rc�n�|jjd��}|jd�ddk(sJ�y)Nrrrr r)rzrrrs  r�test_text_element_find_parentz2TestParentOperations.test_text_element_find_parent�s4���y�y�~�~�\�~�2������%�d�+�x�7�7�7rc��|jjD�cgc]}|�d|jvr|d��}}|gd�k(sJ�ycc}w)Nr r)r�parentsrt)rr	r!s   r�test_parent_generatorz*TestParentOperations.test_parent_generator�sV���*�*�,�,�
���!�d�f�l�l�&:�
�4�L�
��
�
�5�5�5�5��
��Ac��|jjD�cgc]}|�d|jvr|d��}}|gd�k(sJ�ycc}w)Nr )rrrr)r�self_and_parentsrt)rr	�resultss   r�test_self_and_parent_generatorz3TestParentOperations.test_self_and_parent_generatorsV���*�*�5�5�
���!�d�f�l�l�&:�
�4�L�
��
�
�>�>�>�>��
r#r�)r8r9r:r;r|r
r
rrrrrr"r'r<rrrr�s7��E�!�>�
+�(�9�:�'�8�6�?rrc��eZdZdd�Zy)�
ProximityTestNc�0�|jd�|_y)Nz�<html id="start"><head id="headtag"></head><body id="bodytag"><b id="1">One</b><b id="2">Two</b><b id="3">Three</b></body></html>ryr{s rr|zProximityTest.setup_methods���I�I�
P�
��	rr��r8r9r:r|r<rrr)r)s��
rr)c�J��eZdZd	�fd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
�xZS)
�TestNextOperationsc�`��tt|��|jj|_yr)�superr-r|rzrr�r�	__class__s �rr|zTestNextOperations.setup_methods ���
� �$�4�6��Y�Y�[�[��
rc��|jjdk(sJ�|jjjddk(sJ�y)N�Oner r)r�next_elementr{s r�	test_nextzTestNextOperations.test_nexts=���z�z�&�&�%�/�/�/��z�z�&�&�3�3�D�9�S�@�@�@rc�X�|jjd��}|j�J�y�N�Threer)rzrr4)r�lasts  r�test_next_of_last_item_is_nonez1TestNextOperations.test_next_of_last_item_is_none s(���y�y�~�~�W�~�-��� � �(�(�(rc�4�|jj�J�yr)rzr4r{s r�test_next_of_root_is_nonez,TestNextOperations.test_next_of_root_is_none$s���y�y�%�%�-�-�-rc���|j|jjd�ddg�|jjd��|j|jjd��dg�y)Nr�Twor8rLr)rUr�
find_all_nextr{s r�test_find_all_nextz%TestNextOperations.test_find_all_next(s_�����D�J�J�4�4�S�9�E�7�;K�L��
�
� � �A� �&����D�J�J�4�4��4�:�W�I�Frc��|jjd�ddk(sJ�|jjd��dk(sJ�y)Nrr rr8r)r�	find_nextr{s r�test_find_nextz!TestNextOperations.test_find_next-sD���z�z�#�#�C�(��.�#�5�5�5��z�z�#�#�7�#�3�w�>�>�>rc���|jjd��}|jd�jdk(sJ�|j	|jd�ddg�y)Nr3rrr>r8)rzrrBrrUr?rs  r�test_find_next_for_text_elementz2TestNextOperations.test_find_next_for_text_element1sS���y�y�~�~�U�~�+���~�~�c�"�)�)�U�2�2�2����D�.�.�s�3�e�W�5E�Frc��|jjd��}|jD�cgc]}|��}}|\}}|ddk(sJ�|dk(sJ�|jD�cgc]}|��}}|dd|k(sJ�|d|k(sJ�ycc}wcc}w)Nr>rr rPr8rr)rzr�
next_elements�self_and_next_elements)rr�node�
successorsr�r��successors2s       r�test_next_generatorsz'TestNextOperations.test_next_generators6s����	�	���e��,��',�':�':�;�t�d�;�
�;�"�
��X��4�y�C�����7�"�"�"�(-�(D�(D�E��t�E��E��1�2��*�,�,�,��1�~��&�&�&��<��Fs�	A:�	A?r�)r8r9r:r|r5r:r<r@rCrErL�
__classcell__�r1s@rr-r-s.���!�A�)�.�G�
?�G�

'rr-c�J��eZdZd	�fd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
�xZS)
�TestPreviousOperationsc�l��tt|��|jj	d��|_yr7)r/rPr|rzr�endr0s �rr|z#TestPreviousOperations.setup_methodDs'���
�$�d�8�:��9�9�>�>��>�1��rc��|jjddk(sJ�|jjjdk(sJ�y)Nr rPr>)rR�previous_elementr{s r�
test_previousz$TestPreviousOperations.test_previousHs=���x�x�(�(��.�#�5�5�5��x�x�(�(�9�9�U�B�B�Brc�V�|jjd�}|j�J�y)N�html)rzrrT)rr�s  r�#test_previous_of_first_item_is_nonez:TestPreviousOperations.test_previous_of_first_item_is_noneLs&���	�	���v�&���%�%�-�-�-rc�4�|jj�J�yr)rzrTr{s r�test_previous_of_root_is_nonez4TestPreviousOperations.test_previous_of_root_is_nonePs���y�y�)�)�1�1�1rc��|j|jjd�gd��|j|jjd��dg�y)Nr�r8r>r3rrr3)rUrR�find_all_previousr{s r�test_find_all_previousz-TestPreviousOperations.test_find_all_previousTsH��	
���D�H�H�6�6�s�;�=T�U����D�H�H�6�6�!�6�<�u�g�Frc��|jjd�ddk(sJ�|jjd��dk(sJ�y)Nrr rPr3r)rR�
find_previousr{s r�test_find_previousz)TestPreviousOperations.test_find_previous[sD���x�x�%�%�c�*�4�0�C�7�7�7��x�x�%�%�U�%�3�u�<�<�<rc���|jjd��}|jd�jdk(sJ�|j	|jd�gd��y)Nr8rrr\)rzrr`rrUr]rs  r�#test_find_previous_for_text_elementz:TestPreviousOperations.test_find_previous_for_text_element_sQ���y�y�~�~�W�~�-���!�!�#�&�-�-��8�8�8����D�2�2�3�7�9P�Qrc��|jjdd��}|j|jgd��|j|jgd��y)Nrr3r)�bodytag�headtagr)rOrerfr)rzrr�previous_elements�self_and_previous_elements)rrs  r�test_previous_generatorsz/TestPreviousOperations.test_previous_generatorsdsF���	�	���s�5��1������ 7� 7�9X�Y����� @� @�Bf�grr�)r8r9r:r|rUrXrZr^rarcrirMrNs@rrPrPCs/���2�C�.�2�G�=�R�
hrrPc��eZdZdd�Zy)�SiblingTestNc�~�d}tjd�jd|�}|j|�|_y)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*�)rHrI�subrrz)r�markups  rr|zSiblingTest.setup_methodks6�������H�%�)�)�"�f�5���I�I�f�%��	rr�r+r<rrrkrkjs��&rrkc�J��eZdZd	�fd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
�xZS)
�TestNextSiblingc�l��tt|��|jj	d��|_y)NrOr)r/rqr|rzrrr0s �rr|zTestNextSibling.setup_methods&���
�o�t�1�3��Y�Y�^�^�s�^�+��
rc�4�|jj�J�yr)rz�next_siblingr{s r�!test_next_sibling_of_root_is_nonez1TestNextSibling.test_next_sibling_of_root_is_none�s���y�y�%�%�-�-�-rc���|jjddk(sJ�|jjjddk(sJ�|jjddk(sJ�y)Nr rrP�1.1)rrtr4r{s r�test_next_siblingz!TestNextSibling.test_next_sibling�sa���z�z�&�&�t�,��3�3�3��z�z�&�&�3�3�D�9�S�@�@�@��z�z�&�&�t�,��5�5�5rc���|jjj�J�|jjd��}|j�J�|jjd��}|j�J�y)NrwrrR)rzrWrtr)r�nested_span�	last_spans   r�test_next_sibling_may_not_existz/TestNextSibling.test_next_sibling_may_not_exist�sh���y�y�~�~�*�*�2�2�2��i�i�n�n��n�.���'�'�/�/�/��I�I�N�N�c�N�*�	��%�%�-�-�-rc�J�|jjd�ddk(sJ�y)Nr�r r)rr4r{s r�test_find_next_siblingz&TestNextSibling.test_find_next_sibling�s$���z�z�+�+�F�3�D�9�S�@�@�@rc��|j|jjd�gd��|j|jjd��dg�y)Nr��rrPrRrPr)rrrBr{s r�test_next_siblingsz"TestNextSibling.test_next_siblings�sE������
�
� =� =�f� E��W�����
�
� =� =�� =� E��u�Mrc��|j|jjgd��|j|jjgd��y)Nr�)rOrrPrR)rr�
next_siblings�self_and_next_siblingsr{s r�test_next_siblings_generatorsz-TestNextSibling.test_next_siblings_generators�s7������
�
� 8� 8�/�J�����
�
� A� A�CW�Xrc�P�|jd�}|jd��}|jjdk(sJ�|jjdk(sJ�|j	|jd�dg�|j
d��dk(sJ�|j
d���J�y)N�Foo<b>bar</b>bazrFrr�bazrE�nonesuch)rrrtr2rUrBr4�rrrs   r�"test_next_sibling_for_text_elementz2TestNextSibling.test_next_sibling_for_text_element�s����y�y�+�,���	�	��	�'���!�!�&�&�#�-�-�-��!�!�.�.�%�7�7�7����E�4�4�S�9�E�7�C��&�&�e�&�4��=�=�=��&�&�j�&�9�A�A�Arr�)r8r9r:r|rurxr|r~r�r�r�rMrNs@rrqrq~s/���,�.�6�.�A�N�
Y�Brrqc�J��eZdZd	�fd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
�xZS)
�TestPreviousSiblingc�l��tt|��|jj	d��|_y)NrRr)r/r�r|rzrrRr0s �rr|z TestPreviousSibling.setup_method�s'���
�!�4�5�7��9�9�>�>�S�>�)��rc�4�|jj�J�yr)rz�previous_siblingr{s r�%test_previous_sibling_of_root_is_nonez9TestPreviousSibling.test_previous_sibling_of_root_is_none�s���y�y�)�)�1�1�1rc���|jjddk(sJ�|jjjddk(sJ�|jjddk(sJ�y)Nr rPrz3.1)rRr�rTr{s r�test_previous_siblingz)TestPreviousSibling.test_previous_sibling�sa���x�x�(�(��.�#�5�5�5��x�x�(�(�9�9�$�?�3�F�F�F��x�x�(�(��.�%�7�7�7rc���|jjj�J�|jjd��}|j�J�|jjd��}|j�J�y)NrwrrO)rzrWr�r)rrz�
first_spans   r�#test_previous_sibling_may_not_existz7TestPreviousSibling.test_previous_sibling_may_not_exist�sh���y�y�~�~�.�.�6�6�6��i�i�n�n��n�.���+�+�3�3�3��Y�Y�^�^�s�^�+�
��*�*�2�2�2rc�J�|jjd�ddk(sJ�y)Nr�r rP)rRr3r{s r�test_find_previous_siblingz.TestPreviousSibling.test_find_previous_sibling�s$���x�x�-�-�f�5�d�;�s�B�B�Brc��|j|jjd�gd��|j|jjd��dg�y)Nr��rPrrOrOr)rrRrAr{s r�test_previous_siblingsz*TestPreviousSibling.test_previous_siblings�sJ������H�H�+�+�F�3�_�	
�	
������ ?� ?�3� ?� G�#��Orc��|j|jjgd��|j|jjgd��y)Nr�)rRrPrrO)rrR�previous_siblings�self_and_previous_siblingsr{s r�!test_previous_siblings_generatorsz5TestPreviousSibling.test_previous_siblings_generators�s7�������� :� :�O�L������� C� C�EY�Zrc�P�|jd�}|jd��}|jjdk(sJ�|jjdk(sJ�|j	|jd�dg�|j
d��dk(sJ�|j
d���J�y)Nr�r�rrrFrEr�)rrr�r2rUrAr3r�s   r�&test_previous_sibling_for_text_elementz:TestPreviousSibling.test_previous_sibling_for_text_element�s����y�y�+�,���	�	��	�'���%�%�*�*�c�1�1�1��%�%�6�6�%�?�?�?����E�8�8��=��w�G��*�*�%�*�8�E�A�A�A��*�*�*�*�=�E�E�Err�)r8r9r:r|r�r�r�r�r�r�r�rMrNs@rr�r��s/���*�2�8�3�C�P�[�Frr�c� �eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zej4j7dd�d�g�d��Zej4j7dd�dgd�dgf�d ��Zd!�Zd"�Zd#�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,d0�Z-d1�Z.d2�Z/d3�Z0d4�Z1d5�Z2d6�Z3d7�Z4ej4j7d8gd9��d:��Z5d;�Z6d<�Z7d=�Z8d>�Z9d?�Z:y@)A�TestTreeModificationc�T�|jd�}d|jd<|j�|jd�k(sJ�|jd=|j�|jd�k(sJ�d|jd<|j�|jd�k(sJ�y)	Nz<a id="1"></a>r&r z<a id="2"></a>r[rX�id2z<a id2="foo"></a>)rr,r��document_forrs  r�test_attribute_modificationz0TestTreeModification.test_attribute_modification�s����y�y�)�*������t���{�{�}�� 1� 1�2B� C�C�C�C��F�F�4�L��{�{�}�� 1� 1�)� <�<�<�<�����u�
��{�{�}�� 1� 1�2E� F�F�F�Frc�J�tjd��}|jd|��}t||d�}t||d�}d|d<|jjd|�|jjd	|�|jj
�d
k(sJ�y)NrWz
<body></body>�r�r,�olzhttp://foo.com/�hrefrrs4<body><a href="http://foo.com/"></a><ol></ol></body>)r�lookuprr	r@�insertr�)rr�rr,r�s     r�test_new_tag_creationz*TestTreeModification.test_new_tag_creation�s���1�"�)�)�&�1�3���y�y��'�y�:����g�s�#��
��w��
%��%��&�	��	�	����A���	�	����B���I�I����F�
G�	
�
Grc�&�d}|j|�}|jd��}|j}|jd��j|j�|j|k(sJ�|j�|j
d�k(sJ�y)NzT<p id="1">Don't leave me <b>here</b>.</p>
                <p id="2">Don't leave!</p>rrzD<p id="1">Don't leave me .</p>
<p id="2">Don't leave!<b>here</b></p>)rrrr^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�v��	
�	�	�S�	�� � ����(��{�{�k�)�)�)��{�{�}�� 1� 1�X�!
�
�	
�
rc��|jd�}|jd�}|j|jd��}|jdk(sJ�|jd|jd��\}|jdk(sJ�|jd�}|dk(sJ�|j
dd�}|ddgk(sJ�|jd	d
�}|d	d
gk(sJ�|jddg�}|ddgk(sJ�|j�d
k(sJ�y)Nz
<html></html>rW�headrr�rSrPrR�6�7�8�9�3456789)
rrr^�new_tagr2r��
insert_before�insert_after�extend�get_text)	rrrWr�r��text5�text34�text67�text89s	         r�&test_insertion_returns_inserted_thingsz;TestTreeModification.test_insertion_returns_inserted_thingss���y�y��)���y�y�� ���{�{�4�<�<��/�0���y�y�F�"�"�"��+�+�a����g�!6�7����z�z�W�$�$�$����S�!����|��|��$�$�S�#�.���#�s��#�#�#��#�#�C��-���#�s��#�#�#����s�C�j�)���#�s��#�#�#��~�~��9�,�,�,rc��d}|j|�}|j}|j|j�}||k(sJ�y)Nz<a></a><b><c></c></b>)rr,�replace_withr��rr"rr,�new_as     r�1test_replace_with_returns_thing_that_was_replacedzFTestTreeModification.test_replace_with_returns_thing_that_was_replaceds;��&���y�y�����F�F�����t�v�v�&���E�z��zrc�p�d}|j|�}|j}|j�}||k(sJ�y)N�<a><b></b><c></c></a>)rr,�unwrapr�s     r�+test_unwrap_returns_thing_that_was_replacedz@TestTreeModification.test_unwrap_returns_thing_that_was_replaced s4��&���y�y�����F�F�����
���E�z��zrc��|jd�}|j}|j�d|jusJ�t	j
t�5|j�ddd�t	j
t�5|j|j�ddd�y#1swY�GxYw#1swYyxYw)Nz<a><b>Foo</b></a><c>Bar</c>)
rr,�extractr	r�r�r�r�r�r�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's����y�y�6�7���F�F��	�	�	���q�x�x����
�]�]�:�
&�	�
�H�H�J�	�
�]�]�:�
&�	#�
�N�N�4�6�6�"�	#�	#�	�	��	#�	#�s�B.�	B:�.B7�:Cc���d}|j|�}|j}|jj|�}||k(sJ�|j�|j	|�k(sJ�y)Nz-<a><b></b><c>Foo<d></d></c></a><a><e></e></a>)rr�r�r�r�)rr"rr�rms     r�test_replace_tag_with_itselfz1TestTreeModification.test_replace_tag_with_itself1s\��>���y�y�����F�F�����$�$�Q�'����{��{��{�{�}�� 1� 1�$� 7�7�7�7rc���d}|j|�}tjt�5|jj|j�ddd�y#1swYyxYw�N�<a><b></b></a>)rr�r�r�rr�r,�rr"rs   r�1test_replace_tag_with_its_parent_raises_exceptionzFTestTreeModification.test_replace_tag_with_its_parent_raises_exception9sK�����y�y����
�]�]�:�
&�	(��F�F������'�	(�	(�	(�s�&A�A%c���d}|j|�}tjt�5|jjd|j�ddd�y#1swYyxYw)Nr�r)rr�r�r�r,r�r�s   r�,test_insert_tag_into_itself_raises_exceptionzATestTreeModification.test_insert_tag_into_itself_raises_exception?sK�����y�y����
�]�]�:�
&�	%��F�F�M�M�!�T�V�V�$�	%�	%�	%�s�'A�A&c��|jd�}|jd|jdd��|jdd���\}}d|jk(sJ�d|jk(sJ�t	|j
�\}}}}d|jk(sJ�d|jk(sJ�d|jk(sJ�d|jk(sJ�y)	N�-<p>And now, a word:</p><p>And we're back.</p>rr0�p2r�p3�And now, a word:�And we're back.)rr�r�r�list�children)rrr�r��p1�p4s      r�test_insert_multiple_elementsz2TestTreeModification.test_insert_multiple_elementsEs����y�y�H�I�����Q����S��� >����S�Y]��@^�_���B��r�y�y� � � ��r�y�y� � � ��d�m�m�,���B��B�!�R�Y�Y�.�.�.��r�y�y� � � ��r�y�y� � � � �B�I�I�-�-�-rc��|jd�}d}|j|�}|jd|�\}}d|jk(sJ�d|jk(sJ�|jD]}t	|t
�s�J�t
|j�\}}}}d|jk(sJ�d|jk(sJ�d|jk(sJ�d|jk(sJ�y)	z�Inserting one BeautifulSoup object into another actually inserts all
        of its children -- you'll never combine BeautifulSoup objects.
        r�z<p>p2</p><p>p3</p>rr�r�r�r�N)rr�r�descendants�
isinstancerr�r�)	rrr"�	to_insertr�r�r�r�r�s	         r�1test_insert_beautifulsoup_object_inserts_childrenzFTestTreeModification.test_insert_beautifulsoup_object_inserts_childrenQs����y�y�H�I��#���I�I�d�O�	����Q�	�*���B��r�y�y� � � ��r�y�y� � � ��!�!�	4�A�!�!�]�3�3�3�	4��d�m�m�,���B��B�!�R�Y�Y�.�.�.��r�y�y� � � ��r�y�y� � � � �B�I�I�-�-�-rc��|jd�}|j}|jdd�|j\}}|j	d�|j	d�d|j
jk(sJ�y)Nz<p><a>one</a><b>three</b></p>r�tworm�three)rr,r�r�r�rr)rrr,�left�rights     r�3test_replace_with_maintains_next_element_throughoutzHTestTreeModification.test_replace_with_maintains_next_element_throughoutfsk���y�y�8�9���F�F��	����E���j�j���e����"��
���2���$�&�&�-�-�'�'�'rc�:�|jd�}|jd��jd�|jd��}|j}|j|k(sJ�|j
|k(sJ�|jj|k(sJ�|j�J�y)Nz<b>Argh!</b>�Argh!r�Hooray!)rrr�rrTr	r4)rr�new_textrs    r�test_replace_final_nodez,TestTreeModification.test_replace_final_nodets����y�y��(���	�	��	�!�.�.�y�9��9�9�I�9�.���F�F���(�(�A�-�-�-����!�#�#�#��(�(�5�5��A�A�A��$�$�,�,�,rc���|jd�}|jjdd�|j�|j	d�k(sJ�|jd��}|jdk(sJ�|jj|k(sJ�|jdk(sJ�|jj|k(sJ�|j�J�|j|jk(sJ�y)Nz<a><b>Argh!</b><c></c></a>rr�z!<a><b>Argh!Hooray!</b><c></c></a>rr�)rrr�r�r�rrTr4r�rtr�)rrr�s   r�test_consecutive_text_nodesz0TestTreeModification.test_consecutive_text_nodes~s����y�y�5�6�����
�
�a��#��{�{�}�� 1� 1�2U� V�V�V�V��9�9�I�9�.���(�(�G�3�3�3��(�(�5�5��A�A�A��(�(�G�3�3�3��(�(�5�5��A�A�A��$�$�,�,�,��$�$����.�.�.rc� �|jd�}|jjdd�|jjdd�ddg|jjk(sJ�|jjdjdk(sJ�y)Nr[rrErX)rr,r�r�r4rs  r�test_insert_stringz'TestTreeModification.test_insert_string�so���y�y��#�����
�
�a������
�
�a����u�~������0�0�0��v�v���q�!�.�.�%�7�7�7rc��|jd�}|jjd�}|dk(sJ�|jj�dk(sJ�y)Nz<b>1</b>rz	<b>12</b>)rrr^r�rls   r�test_appendz TestTreeModification.test_append�sF���y�y��$�������s�#����}��}��v�v�}�}��+�-�-�-rc��|j�}|jd|��}t||d�}|jdd�|jjd|�|j�|j
d�k(sJ�|j}|j|k(sJ�|j|k(sJ�|jd�	�}|j|k(sJ�|j|k(sJ�|j}|j|k(sJ�|j|k(sJ�|jd�	�}|j|k(sJ�|j|k(sJ�|j|k(sJ�y)
Nz%<a><b>Find</b><c>lady!</c><d></d></a>r��magictagr�therz=<a><b>Find</b><magictag>the</magictag><c>lady!</c><d></d></a>�Findr)r�rr	r�r,r�r�rrtr�rr4rTr�r	)rr�r�	magic_tag�b_tagr�c_tagr�s        r�test_insert_tagz$TestTreeModification.test_insert_tag�sa���&�&�(���y�y�@�'�y�R����g�z�2�	�����E�"����
�
�a��#��{�{�}�� 1� 1�K�!
�
�	
�
�
�����!�!�Y�.�.�.��)�)�U�2�2�2��z�z��z�(��� � �I�-�-�-��)�)�T�1�1�1������%�%��.�.�.��%�%��2�2�2��n�n�E�n�*���z�z�Y�&�&�&����5�(�(�(��%�%��,�,�,rc��d}|j|�}|jjd|j�||j	�k(sJ�y)Nz<a>b<c></c>d</a>r)rr,r�r�r��rr�rs   r�%test_insert_into_the_current_locationz:TestTreeModification.test_insert_into_the_current_location�s>��!���y�y�������
�
�a���� ��t�{�{�}�$�$�$rc��d}|j|�}|jj|j�||j	�k(sJ�yr�)rr,r^rr�rs   r�*test_append_child_thats_already_at_the_endz?TestTreeModification.test_append_child_thats_already_at_the_end�s<�����y�y�������
�
�d�f�f���t�{�{�}�$�$�$rc��d}|j|�}|j|j|j|j|j
|jg}|jj|�d|j�k(sJ�y)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�r�rr,r�r��rr�r�elementss    r�#test_extend_with_a_list_of_elementsz8TestTreeModification.test_extend_with_a_list_of_elements�sb��B���y�y�����F�F�D�F�F�D�F�F�D�F�F�D�F�F�D�F�F�C�����
�
�h��B�d�k�k�m�S�S�Src��d}|j|�}ddtd�dg}|jj|�d|j	�k(sJ�y)Nr[rr�r�r
z<a>bcde</a>)rrr,r�r�rs    r�"test_extend_with_a_list_of_stringsz7TestTreeModification.test_extend_with_a_list_of_strings�sK�����y�y������o�c�2�C�8�����
�
�h������
�-�-�-r�get_tagsc��|Srr<r�s r�<lambda>zTestTreeModification.<lambda>�s��c�rc��|jSr)r�r�s rrzTestTreeModification.<lambda>�s
��s�|�|�rc��d}|j|�}|jdd��}|jdd��}||�}|j|�d|j�k(sJ�d|j�k(sJ�y)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>)rrr�r�)rrr�rrr�tagss       r�&test_extend_with_another_tags_contentsz;TestTreeModification.test_extend_with_another_tags_contents�st��d���y�y����
�Y�Y�u��Y�
&��
�Y�Y�u��Y�
&����|��
�	�	�$��$��	�	��3�3�3�D��	�	��S�S�Srzstring_source,resultc�.�|jjSr)r,r�rs rrzTestTreeModification.<lambda>�s��$�&�&�-�-�rz<a></a><b>1</b>c��y)N�abcder<rs rrzTestTreeModification.<lambda>�s�rz<a>1</a><b>abcde</b>c�p�d}|j|�}tjd��5}||�}|jj	|�|j
j
�|k(sJ�|\}|jtk(sJ�t|j�}|dk(sJ�	ddd�y#1swYyxYw)Nz<div><a>1</a><b></b></div>Tr\zIA single non-Tag item was passed into Tag.extend. Use Tag.append instead.)rr_r`rr�r/�decode_contentsrarbr!rc)	r�
string_sourcermr�rrerrfrgs	         r�)test_extend_with_a_single_non_tag_elementz>TestTreeModification.test_extend_with_a_single_non_tag_element�s���,���y�y����
�
$�
$�D�
1�
	�Q�"�4�(�F��F�F�M�M�&�!��8�8�+�+�-��7�7�7��I�W��#�#�x�/�/�/��g�o�o�&�C��^�_�
�_�
	�
	�
	�s�A8B,�,B5c��d}|j|�}|jjd|j�d|j	�k(sJ�y)Nz<a><b></b><c></c><d></d></a>rz<a><d></d><b></b><c></c></a>)rr,r�r�r�rs   r�$test_move_tag_to_beginning_of_parentz9TestTreeModification.test_move_tag_to_beginning_of_parent�s>��-���y�y�������
�
�a���� �-�����>�>�>rc��|jd�}|jjdd�t|j�dk(sJ�y)Nz<br/>r�Contentsz<br>Contents</br>)r�brr�r!rs  r�&test_insert_works_on_empty_element_tagz;TestTreeModification.test_insert_works_on_empty_element_tag�s;��
�y�y��!�������q�*�%��4�7�7�|�2�2�2�2rc��|jd�}|jjd�|jjd�|j	�|jd�k(sJ�|jj|j�|j	�|jd�k(sJ�|j}t
jt�5|j|�ddd�|j�t
jt�5|jd�ddd�|jd�}|jj|jd��y#1swY��xYw#1swY�QxYw)	Nr%�BAZ�QUUXzQUUX<a>foo</a>BAZ<b>bar</b>�QUUX<b>bar</b><a>foo</a>BAZ�nope�<a>r,)rrr�r,r�r�r�r�r�r�r��rrrs   r�test_insert_beforez'TestTreeModification.test_insert_befores&���y�y�/�0�������U�#������V�$��{�{�}�� 1� 1�2O� P�P�P�P������T�V�V�$��{�{�}�� 1� 1�2O� P�P�P�P�
�F�F��
�]�]�:�
&�	�
�O�O�A��	�	
�	�	��
�]�]�:�
&�	$�
�O�O�F�#�	$��y�y���������T�\�\�#�.�/�	�	��
	$�	$���E3�E?�3E<�?Fc�v�|jd�}|jjddd�|jjddd�|j	�|jd�k(sJ�|jj|jd�|j	�|jd�k(sJ�y)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)rrr�r,r�r�rs  r�test_insert_multiple_beforez0TestTreeModification.test_insert_multiple_before s����y�y�/�0�������U�C��0������V�S�%�0��{�{�}�� 1� 1�2�!
�
�	
�
�	
�����T�V�V�U�+��{�{�}�� 1� 1�5�!
�
�	
�
rc��|jd�}|jjd�|jjd�|j	�|jd�k(sJ�|jj|j�|j	�|jd�k(sJ�|j}t
jt�5|j|�ddd�|j�t
jt�5|jd�ddd�|jd�}|jj|jd��y#1swY��xYw#1swY�QxYw)	Nr%r(r)z<a>foo</a>QUUX<b>bar</b>BAZr*r+r,r,)rrr�r,r�r�r�r�r�r�r�r�r-s   r�test_insert_afterz&TestTreeModification.test_insert_after-s&���y�y�/�0�������E�"������F�#��{�{�}�� 1� 1�2O� P�P�P�P������D�F�F�#��{�{�}�� 1� 1�2O� P�P�P�P�
�F�F��
�]�]�:�
&�	�
�N�N�1��	�	
�	�	��
�]�]�:�
&�	#�
�N�N�6�"�	#��y�y���������T�\�\�#�.�/�	�	��
	#�	#�r/c�v�|jd�}|jjddd�|jjddd�|j	�|jd�k(sJ�|jj|jd�|j	�|jd�k(sJ�y)Nr%r(r1r)z$<a>foo</a>QUUX BAZ<b>bar</b>BAZ QUUXzFOO z(QUUX BAZ<b>bar</b><a>foo</a>FOO BAZ QUUX)rrr�r,r�r�rs  r�test_insert_multiple_afterz/TestTreeModification.test_insert_multiple_afterEs����y�y�/�0�������E�3��/������F�C��/��{�{�}�� 1� 1�2�!
�
�	
�
�	
�����D�F�F�F�+��{�{�}�� 1� 1�6�!
�
�	
�
rc���|jd�}|jd�}|jd�}tjt
�5|j
|�ddd�tjt�5|j
|�ddd�tjt
�5|j
|�ddd�y#1swY�pxYw#1swY�IxYw#1swYyxYw�Nrmr,)rr��
new_stringr�r�r�r��NotImplementedError�rrr�rs    r�:test_insert_after_raises_exception_if_after_has_no_meaningzOTestTreeModification.test_insert_after_raises_exception_if_after_has_no_meaningQs����y�y��}���l�l�3�������$��
�]�]�:�
&�	%�����$�	%�
�]�]�.�
/�	#����c�"�	#�
�]�]�:�
&�	"����S�!�	"�	"�		%�	%��	#�	#��	"�	"��$�
C�C�3C&�C�C#�&C/c���|jd�}|jd�}|jd�}tjt
�5|j
|�ddd�tjt�5|j
|�ddd�tjt
�5|j
|�ddd�y#1swY�pxYw#1swY�IxYw#1swYyxYwr9)rr�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�N�|jd�}|jd�\}}|j|�|j�|j	d�k(sJ�|j
�J�|j
|jk(sJ�|jdk(sJ�|jdk(sJ�y)Nz;<p>There's <b>no</b> business like <b>show</b> business</p>rz0<p>There's  business like <b>no</b> business</p>�noz	 business)	rr)r�r�r�r	r0r4rt)rrrB�shows    r�test_replace_withz&TestTreeModification.test_replace_withgs����y�y�V�W���=�=��%���D����"���{�{�}�� 1� 1�>�!
�
�	
�
��{�{�"�"�"��y�y�D�F�F�"�"�"����$�&�&�&����+�-�-�-rc��td��}tjt�5|j	d�ddd�|jd�j}tjt�5|jj	|�ddd�tjt�5|jj	d|d�ddd�y#1swY��xYw#1swY�UxYw#1swYyxYw)Nr,r�z
won't workr��string1�string2)r	r�r�r�r�rr,r)r�a_tags  r�test_replace_with_errorsz-TestTreeModification.test_replace_with_errorsts�����
��
�]�]�:�
&�	-����|�,�	-��	�	�*�+�-�-��
�]�]�:�
&�	(��G�G� � ��'�	(��]�]�:�
&�	>��G�G� � ��E�9�=�	>�	>�	-�	-��
	(�	(��	>�	>�s#�C�4C$�1C0�C!�$C-�0C9c���d}|j|�}|jd�}d|_|jd�}|jd�}d}|jj	||||�|j�dk(sJ�|jj|k(sJ�|jj|k(sJ�|jj|k(sJ�|jj|k(sJ�y)Nr�r�z
Text In D Tagr
r�zRandom Textz;<a><b></b><d>Text In D Tag</d><e></e>Random Text<f></f></a>)rr�rr�r�r�rr4)rr�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�:��K�K�M�L�
M�	
�
M��v�v�"�"�e�+�+�+��|�|�(�(�E�1�1�1��!�!�(�(�H�4�4�4��!�!�.�.�%�7�7�7rc��d}|j|�}|jj|j�d|j	�k(sJ�y)Nr�z<a><c></c></a>)rrr�r�r�rs   r�test_replace_first_childz-TestTreeModification.test_replace_first_child��>��&���y�y���������D�F�F�#��4�;�;�=�0�0�0rc��d}|j|�}|jj|j�d|j	�k(sJ�y)Nr�r�)rr�r�rr�rs   r�test_replace_last_childz,TestTreeModification.test_replace_last_child�rRrc���|jd�}|j}|j}|j|�|j	�|jd�k(sJ�|j�J�|jd��j�J�|j�J�|j�J�|j�J�|j|jk(sJ�|jdk(sJ�|jj|jk(sJ�|j�J�|jd��}|j}|j|k(sJ�|j|k(sJ�|j|k(sJ�|j|k(sJ�y)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)rrr�r�r�r�r	rr4rTrtr�r,r
r	)rr�
remove_tag�move_tag�to_text�g_tags      r�test_nested_tag_replace_withz1TestTreeModification.test_nested_tag_replace_with�s����y�y�c�
���V�V�
��6�6������)��{�{�}�� 1� 1�;�!
�
�	
�
�
� � �(�(�(����g��.�;�;�C�C�C��*�*�2�2�2��&�&�.�.�.��*�*�2�2�2����$�&�&�(�(�(��(�(�D�0�0�0��$�$�1�1�T�V�V�;�;�;��$�$�,�,�,��)�)�4�)�(�������#�#�u�,�,�,��#�#�u�,�,�,��%�%��0�0�0��%�%��0�0�0rc��|jd�}|jj�|j�J�|jjdk(sJ�y)NzI
            <p>Unneeded <em>formatting</em> is unneeded</p>
            zUnneeded formatting is unneeded)r�emr�r0r"r�s  r�test_unwrapz TestTreeModification.test_unwrap�sJ���y�y����	
�������w�w�����v�v�{�{�?�?�?�?rc���|jd�}|jj|jd��}|j	�dk(sJ�|j	�|jd�k(sJ�y)NzI wish I was bold.r�<b>I wish I was bold.</b>)rr�wrapr�r�r�)rrr�s   r�	test_wrapzTestTreeModification.test_wrap�sc���y�y�-�.����� � ����c�!2�3���|�|�~�!<�<�<�<��{�{�}�� 1� 1�2M� N�N�N�Nrc���|jd�}|jjj|j�|j	�|jd�k(sJ�y)Nz<b></b>I wish I was bold.ra)rrrtrbr�r�rs  r�%test_wrap_extracts_tag_from_elsewherez:TestTreeModification.test_wrap_extracts_tag_from_elsewhere�sM���y�y�4�5������� � ����(��{�{�}�� 1� 1�2M� N�N�N�Nrc��|jd�}|jjj|j�dt	|jj
�k(sJ�|j
�|jd�k(sJ�y)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>)rrrtrbr(r�r�r�rs  r�&test_wrap_puts_new_contents_at_the_endz;TestTreeModification.test_wrap_puts_new_contents_at_the_end�sp���y�y�F�G������� � ����(��C������(�(�(�(��{�{�}�� 1� 1�9�!
�
�	
�
rc��|jd�}t|jj�dk(sJ�|j	d��j�}|j
�dk(sJ�|j
�dk(sJ�t|jj�dk(sJ�|j�J�|j�J�|jj�J�|j	d�	�}|j	d
�	�}|j|k(sJ�|j|k(sJ�|j|k(sJ�|j|k(sJ�y)NzR<html><body>Some content. <div id="nav">Nav crap</div> More content.</body></html>rL�navrz6<html><body>Some content.  More content.</body></html>z<div id="nav">Nav crap</div>r&zSome content. rz More content.)rr(r@r�rr�r�r	rTr4rtr�)rr�	extracted�	content_1�	content_2s     r�test_extractz!TestTreeModification.test_extract�sG���y�y�`�
���4�9�9�%�%�&�!�+�+�+��I�I��I�'�/�/�1�	��{�{�}� X�X�X�X����!�%C�C�C�C��4�9�9�%�%�&�!�+�+�+����'�'�'��)�)�1�1�1��%�%�2�2�:�:�:��I�I�%5�I�6�	��I�I�%5�I�6�	��%�%��2�2�2��%�%��2�2�2��)�)�Y�6�6�6��)�)�Y�6�6�6rc��|jd�}|jj}|jd�}|jd�}|jj	|�|j
j	|�|j
�|j
�||jjk(sJ�||j
jk(sJ�y)Nr%rXrE)rr,rr:r^rr�)rr�foo_1�foo_2�bar_2s     r�4test_extract_distinguishes_between_identical_stringszITestTreeModification.test_extract_distinguishes_between_identical_strings�s����y�y�/�0�����
�
������&������&�����
�
�e�����
�
�e��
	�
�
��
�
�
������
�
�%�%�%�����
�
�%�%�%rc���|jd�}|jd�D�cgc]}|jj���c}dt	|j
�k(sJ�ycc}w)Nzv
<html>
<head>
<script>foo</script>
</head>
<body>
 <script>bar</script>
 <a></a>
</body>
<script>baz</script>
</html>�scriptz<body>

<a></a>
</body>)rr)rtr�r!r@)rrr�s   r�"test_extract_multiples_of_same_tagz7TestTreeModification.test_extract_multiples_of_same_tag
sW���y�y�
�
��)-�
�
�h�(?�@�1����	�	�	�@�+�s�4�9�9�~�=�=�=��	As�!A$c��|jd�}|jd�j�d|jd�usJ�y)Nz<html>
<body>hi</body>
</html>r@)rrr�rs  r�Btest_extract_works_when_element_is_surrounded_by_identical_stringszWTestTreeModification.test_extract_works_when_element_is_surrounded_by_identical_stringss=���y�y�A�B���	�	�&��!�!�#��t�y�y��(�(�(�(rc�F�|jd�}|j}|jj�t	|jj
�dk(sJ�t
|d�sJ�|j}|jd��dt	|j
�k(sJ�y)zTag.clear()z4<p><a>String <em>Italicized</em></a> and another</p>rr�T)�	decomposeN)rr,r0�clearr(r�rkr^)rrr,r^s    r�
test_clearzTestTreeModification.test_clears����y�y�O�P���F�F���������4�6�6�?�?�#�q�(�(�(��q�*�%�%�%��T�T��	���$����C����$�$�$�$rzmethod_name,expected_result))r��9<div><em>child1</em><p id="start"></p><p>child3</p></div>)r�zH<div><em>child1</em><p id="start"><a>Second <em>child</em></a></p></div>)rGr|)r�r|)rgrm)r�zF<div><p id="start"><a>Second <em>child</em></a></p><p>child3</p></div>)r!rmc��|jd�}t|j|�}|D]}|j��||j	�k(sJ�y)NzU<div><em>child1</em><p id='start'><a>Second <em>child</em></a></p><p>child3</p></div>)r�getattrr0r�r�)r�method_name�expected_resultr�iteratorr�s      r�test_extract_during_iterationz2TestTreeModification.test_extract_during_iteration,sS��:�y�y�c�
���4�6�6�;�/���	�A�
�I�I�K�	��$�+�+�-�/�/�/rc�<�|jd�}|jd�\}}|j}|jj}||||fD]}d|j
ur�J�|j
�|||fD]}d|j
ur�J�d|j
usJ�y)Nz;<p><a>String <em>Italicized</em></a></p><p>Another para</p>r0FT)rr)r,r^r�
decomposedry)rrr�r�r,r"r�s       r�test_decomposez#TestTreeModification.test_decomposeQs����y�y�V�W�����s�#���B��D�D���u�u�|�|���b�!�T�"�	)�A��A�L�L�(�(�(�	)�	�����a���	(�A��1�<�<�'�'�'�	(���
�
�%�%�%rc���|jd�}|j}|jj}d|jusJ�|j�d|jusJ�d|j
�k(sJ�y)Nz'<div><p>String 1</p><p>String 2</p></p>FTz!<div><p></p><p>String 2</p></div>)rr/r0rr�ryr�)rrr/r"s    r�test_decompose_stringz*TestTreeModification.test_decompose_stringasi���y�y�B�C���h�h���u�u�|�|������'�'�'������t���&�&�&�2�c�j�j�l�B�B�Brc���|jd�}d|j_|jjdgk(sJ�d|j_|jjdgk(sJ�y)zTag.string = 'string'z<a></a> <b><c></c></b>rXrEN)rr,rr�rrs  r�test_string_setz$TestTreeModification.test_string_setjsW���y�y�1�2������
��v�v���5�'�)�)�)�����
��v�v���5�'�)�)�)rc��|jd�}|jj|j_|jj�dk(sJ�y)Nz<a><b>foo</b><c>bar</c>s<a><b>bar</b><c>bar</c></a>)rr�rrr,r�rs  r�/test_string_set_does_not_affect_original_stringzDTestTreeModification.test_string_set_does_not_affect_original_stringrs=���y�y�2�3�����
�
����
��v�v�}�}��"@�@�@�@rc��|jd�}td�}||j_t	|jjt�sJ�y)Nr[rX)rrr,rr�)rr�cdatas   r�)test_set_string_preserves_class_of_stringz>TestTreeModification.test_set_string_preserves_class_of_stringws<���y�y��#���e�������
��$�&�&�-�-��/�/�/rN);r8r9r:r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr
rr��mark�parametrizerr r"r&r.r3r5r7r=r@rDrIrOrQrTr\r_rcrergrmrrrurwr{r�r�r�r�r�r�r<rrr�r��s���G�
�
�"-�&��#�8�(�%�
.�.�*(�-�/�&8�.�-�:%�%�T�.��[�[���Z�/�;S�)T�U�T�V�T��[�[����
'�):�;�
!�#9�:�	
��
��
�?�3�0�2
�0�0

�	"�	#�.�
>�8�$1�1�#1�J@�O�O�

�7�2&� 
>�)�
%��[�[���%�	
��2
0�3�2
0�&� C�*�A�
0rr�)rr)rrrBr?r`r]r4rBr3rAc�P�eZdZejjde�d��Zy)�TestDeprecatedArgumentsrc�&�|jd�}t|j|�}tjd��5}|d��|\}|j
tk(sJ�t|j�}|dk(sJ�	ddd�y#1swYyxYw)N�<a>some</a><b>markup</b>Tr\ro)r"zOThe 'text' argument to find()-type methods is deprecated. Use 'string' instead.)	rr~rr_r`rarbr!rc�rrr�methodrerfrgs       r�test_find_type_method_stringz4TestDeprecatedArguments.test_find_type_method_string�s����y�y�3�4�������-��
�
$�
$�D�
1�	�Q���!��I�W��#�#�x�/�/�/��g�o�o�&�C��d�e�
�e�
	�	�	�s�?B�BN)r8r9r:r�r�r��all_find_type_methodsr�r<rrr�r��s'���[�[���]�,A�B��C�rr�c�P�eZdZejjde�d��Zy)�TestWarningsrc�\�|jd�}t|j|�}tjd��5}|d��|\}|j
tk(sJ�t|jt�sJ�t|j�}d|vsJ�	ddd�y#1swYyxYw)Nr�Tr\�u)�_classzN'_class' is an unusual attribute name and is a common misspelling for 'class_')rr~rr_r`rarbr�rcrr!r�s       r�test_suspicious_syntax_warningz+TestWarnings.test_suspicious_syntax_warning�s����y�y�3�4�������-��
�
$�
$�D�
1�		�Q��#���I�W��#�#�x�/�/�/��g�o�o�/P�Q�Q�Q��g�o�o�&�C�`���
��		�		�		�s�AB"�"B+N)r8r9r:r�r�r�r�r�r<rrr�r��s'���[�[���]�,A�B��C�rr�)$r;r�rHr_�bs4r�bs4.builderr�bs4.elementrrrrr	�
bs4.filterr
rmrrr>rprwr�r�r�rr)r-rPrkrqr�r�r�r�r�r<rr�<module>r�s ����	���(���$��
%@�x�%@�PC)�(�C)�L@��@�M ��M �`k7�X�k7�\).��).�X���(<?�8�<?�~
�H�
�)'��)'�X$h�]�$h�N&�(�&�(,B�k�,B�^.F�+�.F�b]
0�8�]
0�@
�� 
�h�
� �8�r

Youez - 2016 - github.com/yon3zu
LinuXploit