§
    ©öÉg,Ì  ã                   ó,  — U d Z dZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
mZmZmZmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZm Z m!Z!m"Z" 	 ddl#m$Z$ dZ%n# e&$ r dZ%Y nw xY wej'         (                    d¦  «        duZ)	 ddl*Z+dZ,e+j-        j.        Z.n# e&$ r dZ,dZ.Y nw xY weZ/e"e         e0d<   dZ1e2e0d<    G d„ de3¦  «        Z4 G d„ de4¦  «        Z5 G d„ de5¦  «        Z6 G d„ de5¦  «        Z7 G d„ de6¦  «        Z8dS )zHelper classes for tests.ÚMITé    N)ÚBeautifulSoup)
ÚAttributeValueListÚCharsetMetaAttributeValueÚCommentÚContentMetaAttributeValueÚDoctypeÚPageElementÚPYTHON_SPECIFIC_ENCODINGSÚScriptÚ
StylesheetÚTag)ÚSoupStrainer)ÚXMLParsedAsHTMLWarning)Ú_IncomingMarkup)ÚTreeBuilder)ÚHTMLParserTreeBuilder)ÚAnyÚIterableÚOptionalÚTupleÚType)ÚSelectorSyntaxErrorTFÚhtml5lib)r   Údefault_builderu-
  A bare string
<!DOCTYPE xsl:stylesheet SYSTEM "htmlent.dtd">
<!DOCTYPE xsl:stylesheet PUBLIC "htmlent.dtd">
<div><![CDATA[A CDATA section where it doesn't belong]]></div>
<div><svg><![CDATA[HTML5 does allow CDATA sections in SVG]]></svg></div>
<div>A <meta> tag</div>
<div>A <br> tag that supposedly has contents.</br></div>
<div>AT&T</div>
<div><textarea>Within a textarea, markup like <b> tags and <&<&amp; should be treated as literal</textarea></div>
<div><script>if (i < 2) { alert("<b>Markup within script tags should be treated as literal.</b>"); }</script></div>
<div>This numeric entity is missing the final semicolon: <x t="pi&#241ata"></div>
<div><a href="http://example.com/</a> that attribute value never got closed</div>
<div><a href="foo</a>, </a><a href="bar">that attribute value was closed by the subsequent tag</a></div>
<! This document starts with a bogus declaration ><div>a</div>
<div>This document contains <!an incomplete declaration <div>(do you see it?)</div>
<div>This document ends with <!an incomplete declaration
<div><a style={height:21px;}>That attribute value was bogus</a></div>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">The doctype is invalid because it contains extra whitespace
<div><table><td nowrap>That boolean attribute had no value</td></table></div>
<div>Here's a nonexistent entity: &#foo; (do you see it?)</div>
<div>This document ends before the entity finishes: &gt
<div><p>Paragraphs shouldn't contain block display elements, but this one does: <dl><dt>you see?</dt></p>
<b b="20" a="1" b="10" a="2" a="3" a="4">Multiple values for the same attribute.</b>
<div><table><tr><td>Here's a table</td></tr></table></div>
<div><table id="1"><tr><td>Here's a nested table:<table id="2"><tr><td>foo</td></tr></table></td></div>
<div>This tag contains nothing but whitespace: <b>    </b></div>
<div><blockquote><p><b>This p tag is cut off by</blockquote></p>the end of the blockquote tag</div>
<div><table><div>This table contains bare markup</div></table></div>
<div><div id="1">
 <a href="link1">This link is never closed.
</div>
<div id="2">
 <div id="3">
   <a href="link2">This link is closed.</a>
  </div>
</div></div>
<div>This document contains a <!DOCTYPE surprise>surprise doctype</div>
<div><a><B><Cd><EFG>Mixed case tags are folded to lowercase</efg></CD></b></A></div>
<div><ourâ˜ƒ>Tag name contains Unicode characters</ourâ˜ƒ></div>
<div><a â˜ƒ="snowman">Attribute name contains Unicode characters</a></div>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
ÚBAD_DOCUMENTc                   ó  — e Zd Zedee         fd„¦   «         Zdedede	fd„Z
dededefd„Z	 dded	ee         ddfd
„ZeZdeddfd„Z	 ddededee         fd„Zdee         dee         ddfd„Zdee         dee         ddfd„ZdS )ÚSoupTestÚreturnc                 ó   — t           S ©N)r   ©Úselfs    ú^/var/www/html/nodeJS/PythonScripts/venv3.11/lib/python3.11/site-packages/bs4/tests/__init__.pyr   zSoupTest.default_builderf   s   € åÐó    ÚmarkupÚkwargsc                 óV   — |                      d| j        ¦  «        }t          |fd|i|¤ŽS )z*Build a Beautiful Soup object from markup.Úbuilder)Úpopr   r   )r#   r&   r'   r)   s       r$   ÚsoupzSoupTest.soupj   s3   € à—*’*˜Y¨Ô(<Ñ=Ô=ˆÝ˜VÐ?Ð?¨WÐ?¸Ð?Ð?Ð?r%   c                 óB   —  | j         di |¤Ž                     |¦  «        S )z[Turn an HTML fragment into a document.

        The details depend on the builder.
        © )r   Útest_fragment_to_document)r#   r&   r'   s      r$   Údocument_forzSoupTest.document_foro   s+   € ð
 $ˆtÔ#Ð-Ð- fÐ-Ð-×GÒGÈÑOÔOÐOr%   NÚto_parseÚcompare_parsed_toc                 ó~  — | j         }t          ||¬¦  «        }|€t          |t          ¦  «        sJ ‚|}|                     ¦   «         |                      |¦  «        k    sJ ‚t          d„ t          |j         	                    ¦   «         ¦  «        D ¦   «         ¦  «        sJ ‚|j
        gd„ |j        D ¦   «         k    sJ ‚dS )ziParse some markup using Beautiful Soup and verify that
        the output markup is as expected.
        ©r)   Nc              3   ó"   K  — | ]
}|d k    V — ŒdS )r   Nr-   )Ú.0Úvs     r$   ú	<genexpr>z'SoupTest.assert_soup.<locals>.<genexpr>Š   s&   è è € ÐGÐG˜a�1˜’6ÐGÐGÐGÐGÐGÐGr%   c                 ó   — g | ]	}|j         ‘Œ
S r-   ©Úname©r5   Úxs     r$   ú
<listcomp>z(SoupTest.assert_soup.<locals>.<listcomp>Ž   s   € Ð&DÐ&DÐ&D°! q¤vÐ&DÐ&DÐ&Dr%   )r   r   Ú
isinstanceÚstrÚdecoder/   ÚallÚlistÚopen_tag_counterÚvaluesÚROOT_TAG_NAMEÚtagStack)r#   r0   r1   r)   Úobjs        r$   Úassert_soupzSoupTest.assert_soupv   sÖ   € ð Ô&ˆÝ˜H¨gÐ6Ñ6Ô6ˆØÐ$Ý˜h­Ñ,Ô,Ð,Ð,Ð,Ø (Ðð �zŠz‰|Œ|˜t×0Ò0Ð1BÑCÔCÒCÐCÐCÐCõ ÐGÐG¥4¨Ô(<×(CÒ(CÑ(EÔ(EÑ#FÔ#FÐGÑGÔGÑGÔGÐGÐGÐGð Ô!Ð"Ð&DÐ&D°s´|Ð&DÑ&DÔ&DÒDÐDÐDÐDÐDÐDr%   Úelementc                 óZ   — d}|j         D ] }|r||j        k    sJ ‚||j        k    sJ ‚|}Œ!dS )zyEnsure that next_element and previous_element are properly
        set for all descendants of the given element.
        N)ÚdescendantsÚnext_elementÚprevious_element)r#   rI   ÚearlierÚes       r$   ÚassertConnectednesszSoupTest.assertConnectedness’   s\   € ð ˆØÔ$ð 	ð 	ˆAØð 5Ø˜GÔ0Ò0Ð0Ð0Ð0Ø !Ô"4Ò4Ð4Ð4Ð4ØˆGˆGð		ð 	r%   FÚelÚ_recursive_callc           	      óò  — d}|j         €�|j        �$J d                     ||j        d¦  «        ¦   «         ‚|j        �$J d                     ||j        d¦  «        ¦   «         ‚|j        �$J d                     ||j        d¦  «        ¦   «         ‚d}d}d}t          |j        ¦  «        dz
  }|j        D �]>}d}|dk    rŽ|j         �…|j        |u s$J d                     ||j        |¦  «        ¦   «         ‚|j        |u s$J d                     ||j        |¦  «        ¦   «         ‚|j        �$J d                     ||j        d¦  «        ¦   «         ‚�n|j        |j        |dz
           u s2J d	                     ||j        |j        |dz
           ¦  «        ¦   «         ‚|j        |dz
           j        |u s@J d
                     |j        |dz
           |j        |dz
           j        |¦  «        ¦   «         ‚|�e|j        |u s/J d                     ||j        ||j         j        ¦  «        ¦   «         ‚|j        |u s$J d                     ||j        |¦  «        ¦   «         ‚t          |t          ¦  «        rL|j        rE|  
                    |d¦  «        }|€J ‚|j        �$J d
                     ||j        d¦  «        ¦   «         ‚|�|}n|}||k    r+|j        �$J d
                     ||j        d¦  «        ¦   «         ‚|dz  }�Œ@|�|n|}|€|}|s||�z|}	 |€,|j        �$J d                     ||j        d¦  «        ¦   «         ‚nG|j        �8|j        |j        u s)J d                     ||j        |j        ¦  «        ¦   «         ‚n|j         }ŒudS |S )z.Ensure proper linkage throughout the document.Nz3Bad previous_element
NODE: {}
PREV: {}
EXPECTED: {}z3Bad previous_sibling
NODE: {}
PREV: {}
EXPECTED: {}z/Bad next_sibling
NODE: {}
NEXT: {}
EXPECTED: {}r   é   z/Bad next_element
NODE: {}
NEXT: {}
EXPECTED: {}z2Bad previous_sibling
NODE: {}
PREV {}
EXPECTED: {}z1Bad previous_sibling
NODE: {}
PREV {}
EXPECTED {}z-Bad next_sibling
NODE: {}
NEXT {}
EXPECTED {}z=Bad previous_element
NODE: {}
PREV {}
EXPECTED {}
CONTENTS {}z-Bad next_element
NODE: {}
NEXT {}
EXPECTED {}T)ÚparentrM   ÚformatÚprevious_siblingÚnext_siblingÚlenÚcontentsrL   r>   r   Úlinkage_validator)	r#   rQ   rR   Ú
descendantÚidxÚchildÚ
last_childÚlast_idxÚtargets	            r$   r[   zSoupTest.linkage_validator�   s„  € ð ˆ
ð Œ9ÐàÔ#Ð+Ð+ØG×NÒNØ�BÔ'¨ñô ñ ,Ô+Ð+ð
 Ô#Ð+Ð+ØG×NÒNØ�BÔ'¨ñô ñ ,Ô+Ð+ð
 ”Ð'Ð'ØC×JÒJØ�B”O Tñô ñ (Ô'Ð'ð
 ˆØˆØˆ
Ý�r”{Ñ#Ô# aÑ'ˆØ”[ð H	ñ H	ˆEØˆJð �aŠxˆxØ”9Ð(àœ¨5Ð0Ð0Ð0ØK×RÒRØ˜BœO¨Uñô ñ 1Ô0Ð0ð
 Ô.°"Ð4Ð4Ð4ØO×VÒVØ˜uÔ5°rñô ñ 5Ô4Ð4ð
 Ô.Ð6Ð6ØN×UÒUØ˜uÔ5°tñô ñ 7Ô6Ð6ùð Ô*¨b¬k¸#À¹'Ô.BÐBÐBÐBØI×PÒPØ˜5Ô1°2´;¸sÀQ¹wÔ3Gñô ñ CÔBÐBð
 ”K  a¡Ô(Ô5¸Ð>Ð>Ð>ØE×LÒLØ”K  a¡Ô(¨"¬+°c¸A±gÔ*>Ô*KÈUñô ñ ?Ô>Ð>ð
 Ð)àÔ.°*Ð<Ð<Ð<ØZ×aÒaØ˜uÔ5°zÀ5Ä<ÔCXñô ñ =Ô<Ð<ð
 #Ô/°5Ð8Ð8Ð8ØI×PÒPØ" JÔ$;¸Uñô ñ 9Ô8Ð8õ
 ˜%¥Ñ%Ô%ð ¨%¬.ð Ø!×3Ò3°E¸4Ñ@Ô@�
Ø!Ð-Ð-Ð-ð Ô+Ð3Ð3ØE×LÒLØ 
Ô 7¸ñô ñ 4Ô3Ð3ð Ð%Ø'�
�
à"�
ð �hŠˆàÔ&Ð.Ð.ØE×LÒLØ˜5Ô-¨tñô ñ /Ô.Ð.ð �1‰HˆC‰Cà(Ð4�
�
¸%ˆØˆ=ØˆEàð 	 5Ð#4Ø$&ˆFð'Ø�>àÔ*Ð2Ð2ØI×PÒPØ˜uÔ1°4ñô ñ 3Ô2Ð2ð ØÔ(Ð4àÔ*¨fÔ.AÐAÐAÐAØI×PÒPØ˜uÔ1°6Ô3Fñô ñ BÔAÐAð Øœ�ð'ð$ �4ð ˆLr%   ÚtagsÚshould_matchc                 ó*   — d„ |D ¦   «         |k    sJ ‚dS )zÝMake sure that the given tags have the correct text.

        This is used in tests that define a bunch of tags, each
        containing a single string, and then select certain strings by
        some mechanism.
        c                 ó   — g | ]	}|j         ‘Œ
S r-   ©Ústring©r5   Útags     r$   r=   z+SoupTest.assert_selects.<locals>.<listcomp>'  s   € Ð+Ð+Ð+˜s�”
Ð+Ð+Ð+r%   Nr-   ©r#   rb   rc   s      r$   Úassert_selectszSoupTest.assert_selects   s)   € ð ,Ð+ dÐ+Ñ+Ô+¨|Ò;Ð;Ð;Ð;Ð;Ð;r%   c                 ó*   — d„ |D ¦   «         |k    sJ ‚dS )zÜMake sure that the given tags have the correct IDs.

        This is used in tests that define a bunch of tags, each
        containing a single string, and then select certain strings by
        some mechanism.
        c                 ó   — g | ]
}|d          ‘ŒS ©Úidr-   rh   s     r$   r=   z/SoupTest.assert_selects_ids.<locals>.<listcomp>2  s   € Ð*Ð*Ð*˜c��D”	Ð*Ð*Ð*r%   Nr-   rj   s      r$   Úassert_selects_idszSoupTest.assert_selects_ids)  s)   € ð +Ð* TÐ*Ñ*Ô*¨lÒ:Ð:Ð:Ð:Ð:Ð:r%   r!   )F)Ú__name__Ú
__module__Ú__qualname__Úpropertyr   r   r   r   r   r   r+   r?   r/   r   rH   ÚassertSoupEqualsr   rP   Úboolr
   r[   r   rk   rp   r-   r%   r$   r   r   e   s¶  € € € € € Øð  kÔ!2ð ð ð ñ „Xðð@˜?ð @°cð @¸mð @ð @ð @ð @ð
P 3ð P°#ð P¸#ð Pð Pð Pð Pð MQðEð EØ'ðEØ<DÀS¼MðEà	ðEð Eð Eð Eð4 #Ðð	¨3ð 	°4ð 	ð 	ð 	ð 	ð 05ðAð AØðAØ(,ðAà	�+Ô	ðAð Að Að AðF< 8¨C¤=ð <ÀÈÄð <ÐRVð <ð <ð <ð <ð	;Ø˜S”Mð	;Ø19¸#´ð	;à	ð	;ð 	;ð 	;ð 	;ð 	;ð 	;r%   r   c                   óú   — e Zd Zej                             ddi  edg¬¦  «        ddgig¦  «        d„ ¦   «         Zej                             d edg¬¦  «        ddgig¦  «        d	„ ¦   «         Zd
„ Z	d„ Z
d„ Zd„ ZdS )ÚTreeBuilderSmokeTestÚmulti_valued_attributesNÚclass)ÚbÚ*Únotclassc                 ó^   — d}|                       ||¬¦  «        }|j        d         dk    sJ ‚d S )NzC<html xmlns="http://www.w3.org/1999/xhtml"><a class="a b c"></html>©ry   rz   za b c©r+   Úa©r#   ry   r&   r+   s       r$   Útest_attribute_not_multi_valuedz4TreeBuilderSmokeTest.test_attribute_not_multi_valued8  s=   € ð WˆØ�yŠy˜Ð9PˆyÑQÔQˆØŒv�gŒ 'Ò)Ð)Ð)Ð)Ð)Ð)r%   )r�   c                 ób   — d}|                       ||¬¦  «        }|j        d         g d¢k    sJ ‚d S )Nz<a class="a b c">r   rz   )r�   r{   Úcr€   r‚   s       r$   Útest_attribute_multi_valuedz0TreeBuilderSmokeTest.test_attribute_multi_valued@  s@   € ð %ˆØ�yŠy˜Ð9PˆyÑQÔQˆØŒv�gŒ / / /Ò1Ð1Ð1Ð1Ð1Ð1r%   c                 ób   — d}|                       |¦  «         d}|                       |¦  «         d S )Nz<![if word]>content<![endif]>z<!DOCTYPE html]ff>)r+   ©r#   r&   s     r$   Útest_invalid_doctypez)TreeBuilderSmokeTest.test_invalid_doctypeH  s8   € ð 1ˆØ�	Š	�&ÑÔÐØ%ˆØ�	Š	�&ÑÔÐÐÐr%   c                 ó”   — d}|                       |t          d¬¦  «        ¬¦  «        }t          d„ |j        D ¦   «         ¦  «        rJ ‚d S )Nz<!DOCTYPE html>
<html>
</html>Úhtmlr9   ©Ú
parse_onlyc              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S r!   )r>   r	   r;   s     r$   r7   z=TreeBuilderSmokeTest.test_doctype_filtered.<locals>.<genexpr>S  s,   è è € ÐHÐH°!•z !¥WÑ-Ô-ÐHÐHÐHÐHÐHÐHr%   )r+   r   ÚanyrK   ©r#   r&   r+   s      r$   Útest_doctype_filteredz*TreeBuilderSmokeTest.test_doctype_filteredP  sS   € Ø3ˆØ�yŠy˜­L¸fÐ,EÑ,EÔ,EˆyÑFÔFˆÝÐHÐH°tÔ7GÐHÑHÔHÑHÔHÐHÐHÐHÐHÐHr%   c                 ó@  —  G d„ dt           ¦  «        }d}|                      |¬¦  «        }|                      ||¬¦  «        }|j        }t	          |j        |¦  «        sJ ‚d|d         k    sJ ‚d|d	<   d|d	         k    sJ ‚d
}||                     ¦   «         k    sJ ‚d S )Nc                   ó(   ‡ — e Zd Zdedefˆ fd„Zˆ xZS )úNTreeBuilderSmokeTest.test_custom_attribute_dict_class.<locals>.MyAttributeDictÚkeyÚvaluec                 óL   •— t          ¦   «                              |d¦  «         d S )NÚ
OVERRIDDEN)ÚsuperÚ__setitem__)r#   r•   r–   Ú	__class__s      €r$   rš   zZTreeBuilderSmokeTest.test_custom_attribute_dict_class.<locals>.MyAttributeDict.__setitem__W  s%   ø€ õ ‘”×#Ò# C¨Ñ6Ô6Ð6Ð6Ð6r%   )rq   rr   rs   r?   r   rš   Ú__classcell__©r›   s   @r$   ÚMyAttributeDictr”   V  sK   ø€ € € € € ð7 sð 7°3ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7r%   rž   ú"<a attr1="val1" attr2="val2">f</a>)Úattribute_dict_classr3   r˜   Úattr1TÚattr3zA<a attr1="OVERRIDDEN" attr2="OVERRIDDEN" attr3="OVERRIDDEN">f</a>)Údictr   r+   r�   r>   Úattrsr@   )r#   rž   r&   r)   r+   ri   Úexpects          r$   Ú test_custom_attribute_dict_classz5TreeBuilderSmokeTest.test_custom_attribute_dict_classU  sÔ   € ð	7ð 	7ð 	7ð 	7ð 	7�dñ 	7ô 	7ð 	7ð 6ˆØ×&Ò&¸OÐ&ÑLÔLˆØ�yŠy˜¨ˆyÑ1Ô1ˆØŒfˆÝ˜#œ) _Ñ5Ô5Ð5Ð5Ð5Ø˜s 7œ|Ò+Ð+Ð+Ð+ØˆˆG‰Ø˜s 7œ|Ò+Ð+Ð+Ð+àTˆØ˜Ÿš™œÒ%Ð%Ð%Ð%Ð%Ð%r%   c                 ó&  —  G d„ dt           ¦  «        }|                      dt          dg¦  «        i|¬¦  «        }d}|                      ||¬¦  «        }|j        }|d         d	k    sJ ‚|d         d
dgk    sJ ‚t          |d         |¦  «        sJ ‚d S )Nc                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )ú_TreeBuilderSmokeTest.test_custom_attribute_value_list_class.<locals>.MyCustomAttributeValueListc                 ód   •—  t          ¦   «         j        |i |¤Ž |                      d¦  «         d S )NÚextra)r™   Ú__init__Úappend)r#   Úargsr'   r›   s      €r$   r¬   zhTreeBuilderSmokeTest.test_custom_attribute_value_list_class.<locals>.MyCustomAttributeValueList.__init__j  s7   ø€ Ø •‘”Ô  $Ð1¨&Ð1Ð1Ð1Ø—’˜GÑ$Ô$Ð$Ð$Ð$r%   )rq   rr   rs   r¬   rœ   r�   s   @r$   ÚMyCustomAttributeValueListr©   i  s8   ø€ € € € € ð%ð %ð %ð %ð %ð %ð %ð %ð %r%   r¯   r|   Úattr2)ry   Úattribute_value_list_classrŸ   r3   r¡   Úval1Úval2r«   )r   r   Úsetr+   r�   r>   )r#   r¯   r)   r&   r+   ri   s         r$   Ú&test_custom_attribute_value_list_classz;TreeBuilderSmokeTest.test_custom_attribute_value_list_classh  sÏ   € ð	%ð 	%ð 	%ð 	%ð 	%Õ);ñ 	%ô 	%ð 	%ð
 ×&Ò&Ø%(­#¨w¨i©.¬.Ð$9Ø'Að 'ñ 
ô 
ˆð 6ˆØ�yŠy˜¨ˆyÑ1Ô1ˆØŒfˆØ�7Œ|˜vÒ%Ð%Ð%Ð%Ø�7Œ| ¨Ð0Ò0Ð0Ð0Ð0Ý˜#˜gœ,Ð(BÑCÔCÐCÐCÐCÐCÐCr%   )rq   rr   rs   ÚpytestÚmarkÚparametrizer£   rƒ   r†   r‰   r‘   r¦   rµ   r-   r%   r$   rx   rx   5  sü   € € € € € ð „[×ÒØ! D¨"¨d¨d°g°YÐ.?Ñ.?Ô.?À#È
À|ÐATÐ#Uñô ð*ð *ñô ð*ð
 „[×ÒØ! D D¨G¨9Ð$5Ñ$5Ô$5¸¸g¸YÐ7GÐ#Hñô ð2ð 2ñô ð2ð
ð ð ðIð Ið Ið
&ð &ð &ð&Dð Dð Dð Dð Dr%   rx   c            	       ó¾  — e Zd ZdZd„ Zd„ Zd„ Zdeddfd„Z	 dGded
ede	e
ef         fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d „ Z!d!„ Z"d"„ Z#d#„ Z$d$„ Z%d%„ Z&d&„ Z'd'„ Z(d(„ Z)d)„ Z*d*„ Z+d+„ Z,d,„ Z-d-„ Z.d.„ Z/d/„ Z0d0„ Z1d1„ Z2d2„ Z3d3„ Z4d4„ Z5d5„ Z6d6„ Z7d7„ Z8d8„ Z9d9„ Z:d:„ Z;d;„ Z<d<„ Z=d=„ Z>d>„ Z?d?„ Z@d@„ ZAdA„ ZBdB„ ZCdC„ ZDdD„ ZEdE„ ZFdF„ ZGdS )HÚHTMLTreeBuilderSmokeTestaC  A basic test of a treebuilder's competence.

    Any HTML treebuilder, present or future, should be able to pass
    these tests. With invalid markup, there's room for interpretation,
    and different parsers can handle it differently. But with the
    markup in these tests, there's not much room for interpretation.
    c                 óÒ   — dD ]7}|                       d¦  «        }|                     |¦  «        }|j        du sJ ‚Œ8|                      dd¦  «         |                      dd¦  «         dS )zmVerify that all HTML4 and HTML5 empty element (aka void element) tags
        are handled correctly.
        )ÚareaÚbaseÚbrÚcolÚembedÚhrÚimgÚinputÚkeygenÚlinkÚmenuitemÚmetaÚparamÚsourceÚtrackÚwbrÚspacerÚframeÚ Tz<br/><br/><br/>z<br /><br /><br />N)r+   Únew_tagÚis_empty_elementrH   )r#   r:   r+   rÏ   s       r$   Útest_empty_element_tagsz0HTMLTreeBuilderSmokeTest.test_empty_element_tagsƒ  s‚   € ð
ð 	4ð 	4ˆDð( —9’9˜R‘=”=ˆDØ—l’l 4Ñ(Ô(ˆGØÔ+¨tÐ3Ð3Ð3Ð3Ð3à×ÒÐ*Ð,=Ñ>Ô>Ð>Ø×ÒÐ-Ð/@ÑAÔAÐAÐAÐAr%   c                 ó†  — |                       d¦  «        }t          |j        j        t          ¦  «        sJ ‚t          |j        j        t          ¦  «        sJ ‚|                       d¦  «        }t          |j        j        t          ¦  «        sJ ‚|j        j        dk    sJ ‚t          |j        j        t          ¦  «        sJ ‚d S )Nz7<style>Some CSS</style><script>Some Javascript</script>z<style><!--Some CSS--></style>z<!--Some CSS-->)r+   r>   Ústylerg   r   Úscriptr   ©r#   r+   s     r$   Útest_special_string_containersz7HTMLTreeBuilderSmokeTest.test_special_string_containers¢  s±   € Ø�yŠyÐRÑSÔSˆÝ˜$œ*Ô+­ZÑ8Ô8Ð8Ð8Ð8Ý˜$œ+Ô,­fÑ5Ô5Ð5Ð5Ð5à�yŠyÐ9Ñ:Ô:ˆÝ˜$œ*Ô+­ZÑ8Ô8Ð8Ð8Ð8ð ŒzÔ Ð$5Ò5Ð5Ð5Ð5Ý˜$œ*Ô+­ZÑ8Ô8Ð8Ð8Ð8Ð8Ð8r%   c                 óþ   — |                       d¦  «        }t          j        |d¦  «        }t          j        |¦  «        }|j        t
          k    sJ ‚|                     ¦   «         |                     ¦   «         k    sJ ‚d S ©Nz<a><b>foo</a>é   ©r+   ÚpickleÚdumpsÚloadsr›   r   r@   ©r#   ÚtreeÚdumpedÚloadeds       r$   Ú!test_pickle_and_unpickle_identityz:HTMLTreeBuilderSmokeTest.test_pickle_and_unpickle_identity®  óp   € ð �yŠy˜Ñ)Ô)ˆÝ”˜d AÑ&Ô&ˆÝ”˜fÑ%Ô%ˆØÔ¥=Ò0Ð0Ð0Ð0Ø�}Š}‰Œ $§+¢+¡-¤-Ò/Ð/Ð/Ð/Ð/Ð/r%   Údoctype_fragmentr   Nc                 ó&  — |                       |¦  «        \  }}|j        d         }|j        t          k    sJ ‚||k    sJ ‚|                     d¦  «        dt          |¦  «        …         |k    sJ ‚|j        €J ‚|j        j        d         dk    sJ ‚dS )z8Assert that a given doctype string is handled correctly.r   Úutf8NÚfoo©Ú_document_with_doctyperZ   r›   r	   ÚencoderY   Úp©r#   rä   Údoctype_strr+   Údoctypes        r$   ÚassertDoctypeHandledz-HTMLTreeBuilderSmokeTest.assertDoctypeHandled·  s¯   € à ×7Ò7Ð8HÑIÔIÑˆ�Tð ”- Ô"ˆØÔ ¥GÒ+Ð+Ð+Ð+ØÐ*Ò*Ð*Ð*Ð*Ø�{Š{˜6Ñ"Ô"Ð#5¥S¨Ñ%5Ô%5Ð#5Ô6¸+ÒEÐEÐEÐEð ŒvÐ!Ð!Ð!ØŒvŒ˜qÔ! UÒ*Ð*Ð*Ð*Ð*Ð*r%   ÚDOCTYPEÚdoctype_stringc                 óv   — d|›d|›d�}|dz   }|                       |¦  «        }|                     d¦  «        |fS )z5Generate and parse a document with the given doctype.z<!ú ú>z
<p>foo</p>ræ   ©r+   rê   )r#   rä   rñ   rî   r&   r+   s         r$   ré   z/HTMLTreeBuilderSmokeTest._document_with_doctypeÆ  sM   € € ð !/  Ð0@Ð0@Ð0@ÐAˆØ˜>Ñ)ˆØ�yŠy˜Ñ Ô ˆØ�~Š~˜fÑ%Ô% tÐ+Ð+r%   c                 óZ   — |                       d¦  «         |                       d¦  «         dS )z?Make sure normal, everyday HTML doctypes are handled correctly.r‹   z4html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"N©rï   r"   s    r$   Útest_normal_doctypesz-HTMLTreeBuilderSmokeTest.test_normal_doctypesÏ  s;   € à×!Ò! &Ñ)Ô)Ð)Ø×!Ò!ØBñ	
ô 	
ð 	
ð 	
ð 	
r%   c                 ó~   — |                       d¦  «        }|j        d         }d|                     ¦   «         k    sJ ‚d S )Nz
<!DOCTYPE>r   rÎ   )r+   rZ   Ústrip)r#   r+   rî   s      r$   Útest_empty_doctypez+HTMLTreeBuilderSmokeTest.test_empty_doctypeÖ  s>   € Ø�yŠy˜Ñ&Ô&ˆØ”- Ô"ˆØ�W—]’]‘_”_Ò$Ð$Ð$Ð$Ð$Ð$r%   c                 ó   — dD ]Š}|                       d|¦  «        \  }}|j        d         }|j        t          k    sJ ‚|dk    sJ ‚|                     d¦  «        d t          |¦  «        …         dk    sJ ‚|j        j        d         dk    sJ ‚Œ‹d S )N)rî   ÚDocTyper‹   r   ræ   s   <!DOCTYPE html>rç   rè   rì   s        r$   Útest_mixed_case_doctypez0HTMLTreeBuilderSmokeTest.test_mixed_case_doctypeÛ  sº   € à 6ð 	/ð 	/ÐØ $× ;Ò ;¸FÐDTÑ UÔ UÑˆK˜ð ”m AÔ&ˆGØÔ$­Ò/Ð/Ð/Ð/Ø˜fÒ$Ð$Ð$Ð$Ø—;’;˜vÑ&Ô&Ð'9­¨[Ñ)9Ô)9Ð'9Ô:Ð>PÒPÐPÐPÐPð ”6”? 1Ô%¨Ò.Ð.Ð.Ð.Ð.ð	/ð 	/r%   c                 ó4   — d}|                       |¦  «         d S )Nznhtml PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"r÷   )r#   rî   s     r$   Útest_public_doctype_with_urlz5HTMLTreeBuilderSmokeTest.test_public_doctype_with_urlë  s$   € ð CˆØ×!Ò! 'Ñ*Ô*Ð*Ð*Ð*r%   c                 ó0   — |                       d¦  «         d S )Nz$foo SYSTEM "http://www.example.com/"r÷   r"   s    r$   Útest_system_doctypez,HTMLTreeBuilderSmokeTest.test_system_doctypeï  s   € Ø×!Ò!Ð"HÑIÔIÐIÐIÐIr%   c                 ó0   — |                       d¦  «         d S )Nz#xsl:stylesheet SYSTEM "htmlent.dtd"r÷   r"   s    r$   Útest_namespaced_system_doctypez7HTMLTreeBuilderSmokeTest.test_namespaced_system_doctypeò  ó   € à×!Ò!Ð"GÑHÔHÐHÐHÐHr%   c                 ó0   — |                       d¦  «         d S )Nz#xsl:stylesheet PUBLIC "htmlent.dtd"r÷   r"   s    r$   Útest_namespaced_public_doctypez7HTMLTreeBuilderSmokeTest.test_namespaced_public_doctypeö  r  r%   c                 ó$  — d}t          j        d¬¦  «        5 }|                      |¦  «        }ddd¦  «         n# 1 swxY w Y   |                     d¦  «                             dd¦  «        |                     dd¦  «        k    sJ ‚|g k    sJ ‚dS )zJA real XHTML document should come out more or less the same as it went in.óÓ   <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>Hello.</title></head>
<body>Goodbye.</body>
</html>T©ÚrecordNúutf-8ó   
r%   )ÚwarningsÚcatch_warningsr+   rê   Úreplace©r#   r&   Úwr+   s       r$   Útest_real_xhtml_documentz1HTMLTreeBuilderSmokeTest.test_real_xhtml_documentú  sÑ   € ðˆõ Ô$¨DÐ1Ñ1Ô1ð 	%°QØ—9’9˜VÑ$Ô$ˆDð	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%à�{Š{˜7Ñ#Ô#×+Ò+¨E°3Ñ7Ô7¸6¿>º>È%ÐQTÑ;UÔ;UÒUÐUÐUÐUð �BŠwˆwˆwˆwˆwˆwó   ˜:º>Á>c                 óî   — d}t          j        d¬¦  «        5 }|                      |¦  «        }d d d ¦  «         n# 1 swxY w Y   dt          |                     d¦  «        ¦  «        k    sJ ‚g |k    sJ ‚d S )Ns.   <ns1:foo>content</ns1:foo><ns1:foo/><ns2:foo/>Tr
  rÙ   zns1:foo)r  r  r+   rY   Úfind_allr  s       r$   Útest_namespaced_htmlz-HTMLTreeBuilderSmokeTest.test_namespaced_html
  s»   € ð GˆÝÔ$¨DÐ1Ñ1Ô1ð 	%°QØ—9’9˜VÑ$Ô$ˆDð	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%ð •C˜Ÿš iÑ0Ô0Ñ1Ô1Ò1Ð1Ð1Ð1ð �QŠwˆwˆwˆwˆwˆwr  c                 ó<  — d}t          j        d¬¦  «        5 }|                      |¦  «        }|j        j        dk    sJ ‚	 d d d ¦  «         n# 1 swxY w Y   |\  }t          |j        t          ¦  «        sJ ‚t          |j        ¦  «        t          j	        k    sJ ‚d S )Ns7   <?xml version="1.0" encoding="utf-8"?><tag>string</tag>Tr
  rg   )
r  r  r+   ri   rg   r>   Úmessager   r?   ÚMESSAGE)r#   r&   r  r+   Úwarnings        r$   Útest_detect_xml_parsed_as_htmlz7HTMLTreeBuilderSmokeTest.test_detect_xml_parsed_as_html  sà   € ð PˆÝÔ$¨DÐ1Ñ1Ô1ð 	/°QØ—9’9˜VÑ$Ô$ˆDØ”8”? hÒ.Ð.Ð.Ð.Ð.ð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/ð ‰	ˆÝ˜'œ/Õ+AÑBÔBÐBÐBÐBÝ�7”?Ñ#Ô#Õ'=Ô'EÒEÐEÐEÐEÐEÐEs   ˜(AÁAÁAc                 óÌ   — d}|                       |¦  «        }||                     ¦   «         k    sJ ‚d}|                       |¦  «        }||                     d¦  «        k    sJ ‚d S )Nz<?PITarget PIContent?>s   <?PITarget PIContent?>ræ   )r+   r@   rê   r�   s      r$   Útest_processing_instructionz4HTMLTreeBuilderSmokeTest.test_processing_instruction'  sl   € ð
 .ˆØ�yŠy˜Ñ Ô ˆØ˜Ÿš™œÒ&Ð&Ð&Ð&à.ˆØ�yŠy˜Ñ Ô ˆØ˜Ÿš VÑ,Ô,Ò,Ð,Ð,Ð,Ð,Ð,r%   c                 ó8   — t          j        | j        ¦  «         dS )z°Make sure you can copy the tree builder.

        This is important because the builder is part of a
        BeautifulSoup object, and we want to be able to copy that.
        N)ÚcopyÚdeepcopyr   r"   s    r$   Útest_deepcopyz&HTMLTreeBuilderSmokeTest.test_deepcopy4  s   € õ 	Œ�dÔ*Ñ+Ô+Ð+Ð+Ð+r%   c                 ó€   — |                       d¦  «        }|j        j        rJ ‚t          |j        ¦  «        dk    sJ ‚dS )z©A <p> tag is never designated as an empty-element tag.

        Even if the markup shows it as an empty-element tag, it
        shouldn't be presented that way.
        ú<p/>ú<p></p>N)r+   rë   rÐ   r?   rÕ   s     r$   Ú!test_p_tag_is_never_empty_elementz:HTMLTreeBuilderSmokeTest.test_p_tag_is_never_empty_element<  sE   € ð �yŠy˜Ñ Ô ˆØ”6Ô*Ð*Ð*Ð*Ý�4”6‰{Œ{˜iÒ'Ð'Ð'Ð'Ð'Ð'r%   c                 óŠ   — |                       dd¦  «         |                       dd¦  «         |                       dd¦  «         dS )zŠA tag that's not closed by the end of the document should be closed.

        This applies to all tags except empty-element tags.
        ú<p>r%  z<b>z<b></b>z<br>ú<br/>N©rH   r"   s    r$   Útest_unclosed_tags_get_closedz6HTMLTreeBuilderSmokeTest.test_unclosed_tags_get_closedF  sL   € ð
 	×Ò˜ 	Ñ*Ô*Ð*Ø×Ò˜ 	Ñ*Ô*Ð*à×Ò˜ Ñ)Ô)Ð)Ð)Ð)r%   c                 ó€   — |                       d¦  «        }|j        j        sJ ‚t          |j        ¦  «        dk    sJ ‚dS )zÂA <br> tag is designated as an empty-element tag.

        Some parsers treat <br></br> as one <br/> tag, some parsers as
        two tags, but it should always be an empty-element tag.
        z	<br></br>r)  N)r+   r¾   rÐ   r?   rÕ   s     r$   Ú#test_br_is_always_empty_element_tagz<HTMLTreeBuilderSmokeTest.test_br_is_always_empty_element_tagP  sE   € ð �yŠy˜Ñ%Ô%ˆØŒwÔ'Ð'Ð'Ð'Ý�4”7‰|Œ|˜wÒ&Ð&Ð&Ð&Ð&Ð&r%   c                 ó0   — |                       d¦  «         d S )Nz<em><em></em></em>r*  r"   s    r$   Útest_nested_formatting_elementsz8HTMLTreeBuilderSmokeTest.test_nested_formatting_elementsZ  s   € Ø×ÒÐ-Ñ.Ô.Ð.Ð.Ð.r%   c                 óv   — d}|                       |¦  «        }d|                     d¦  «        d         k    sJ ‚d S )Nz¯<!DOCTYPE html>
<html>
<head>
<title>Ordinary HEAD element test</title>
</head>
<script type="text/javascript">
alert("Help!");
</script>
<body>
Hello, world!
</body>
</html>
ztext/javascriptrÔ   Útype)r+   Úfind)r#   r‹   r+   s      r$   Útest_double_headz)HTMLTreeBuilderSmokeTest.test_double_head]  sB   € ðˆð �yŠy˜‰ŒˆØ  D§I¢I¨hÑ$7Ô$7¸Ô$?Ò?Ð?Ð?Ð?Ð?Ð?r%   c                 ó:  — d}|                       |¦  «         |                      |¦  «        }|                     d¬¦  «        }|j        t          k    sJ ‚|                     d¬¦  «        }||j        k    sJ ‚|                     d¬¦  «        }||j        k    sJ ‚d S )Nz<p>foo<!--foobar-->baz</p>Úfoobarrf   rç   Úbaz)rH   r+   r2  r›   r   rL   rM   )r#   r&   r+   Úcommentrç   r6  s         r$   Útest_commentz%HTMLTreeBuilderSmokeTest.test_commentn  s©   € à-ˆØ×Ò˜Ñ Ô Ð à�yŠy˜Ñ Ô ˆØ—)’) 8�)Ñ,Ô,ˆØÔ ¥GÒ+Ð+Ð+Ð+ð �iŠi˜uˆiÑ%Ô%ˆØ˜#Ô*Ò*Ð*Ð*Ð*Ø�iŠi˜uˆiÑ%Ô%ˆØ˜#Ô.Ò.Ð.Ð.Ð.Ð.Ð.r%   c                 óš  — d}d}|                       |¦  «         |                       |¦  «         |                      |¦  «        }|j                             ¦   «         |k    sJ ‚|                      |¦  «        }|j                             ¦   «         |k    sJ ‚|                      d¦  «        }|j                             ¦   «         dk    sJ ‚dS )zWhitespace must be preserved in <pre> and <textarea> tags,
        even if that would mean not prettifying the markup.
        z<pre>a   z</pre>
z <textarea> woo
woo  </textarea>
z<textarea></textarea>z<textarea></textarea>
N)rH   r+   ÚpreÚprettifyÚtextarea)r#   Ú
pre_markupÚtextarea_markupr+   s       r$   Ú-test_preserved_whitespace_in_pre_and_textareazFHTMLTreeBuilderSmokeTest.test_preserved_whitespace_in_pre_and_textarea}  sÎ   € ð *ˆ
Ø>ˆØ×Ò˜Ñ$Ô$Ð$Ø×Ò˜Ñ)Ô)Ð)à�yŠy˜Ñ$Ô$ˆØŒx× Ò Ñ"Ô" jÒ0Ð0Ð0Ð0à�yŠy˜Ñ)Ô)ˆØŒ}×%Ò%Ñ'Ô'¨?Ò:Ð:Ð:Ð:à�yŠyÐ0Ñ1Ô1ˆØŒ}×%Ò%Ñ'Ô'Ð+DÒDÐDÐDÐDÐDÐDr%   c                 ó�   — d}|                       |¦  «         d}|                       |¦  «         d}|                       |¦  «         dS )z+Inline elements can be nested indefinitely.z<b>Inside a B tag</b>z!<p>A <i>nested <b>tag</b></i></p>z/<p>A <a>doubly <i>nested <b>tag</b></i></a></p>Nr*  )r#   Úb_tagÚnested_b_tagÚdouble_nested_b_tags       r$   Útest_nested_inline_elementsz4HTMLTreeBuilderSmokeTest.test_nested_inline_elements�  sU   € à'ˆØ×Ò˜ÑÔÐà:ˆØ×Ò˜Ñ&Ô&Ð&àOÐØ×ÒÐ,Ñ-Ô-Ð-Ð-Ð-r%   c                 ó�   — |                       d¦  «        }|j        }|j        j        j        dk    sJ ‚|j        j        dk    sJ ‚dS )zBlock elements can be nested.z*<blockquote><p><b>Foo</b></p></blockquote>ÚFooN)r+   Ú
blockquoterë   r{   rg   )r#   r+   rG  s      r$   Ú test_nested_block_level_elementsz9HTMLTreeBuilderSmokeTest.test_nested_block_level_elementsš  sO   € à�yŠyÐEÑFÔFˆØ”_ˆ
ØŒ|Œ~Ô$¨Ò-Ð-Ð-Ð-ØŒ|Ô" eÒ+Ð+Ð+Ð+Ð+Ð+r%   c                 ó`   — d}|                       |d¦  «         |                       d¦  «         dS )z$One table can go inside another one.z[<table id="1"><tr><td>Here's another table:<table id="2"><tr><td>foo</td></tr></table></td>zh<table id="1"><tr><td>Here's another table:<table id="2"><tr><td>foo</td></tr></table></td></tr></table>z{<table><thead><tr><td>Foo</td></tr></thead><tbody><tr><td>Bar</td></tr></tbody><tfoot><tr><td>Baz</td></tr></tfoot></table>Nr*  rˆ   s     r$   Útest_correctly_nested_tablesz5HTMLTreeBuilderSmokeTest.test_correctly_nested_tables¡  sW   € ðð 	ð 	×ÒØð!ñ	
ô 	
ð 	
ð 	×Òð;ñ	
ô 	
ð 	
ð 	
ð 	
r%   c                 ó¢   — d}|                       |¦  «        }ddg|j        d         k    sJ ‚|j        |                     dd¬¦  «        k    sJ ‚d S )Nz<div class=" foo bar	 "></a>rç   Úbarrz   Údivzfoo bar)Úclass_)r+   rM  r2  r�   s      r$   Ú*test_multivalued_attribute_with_whitespacezCHTMLTreeBuilderSmokeTest.test_multivalued_attribute_with_whitespace¹  sa   € ð 0ˆØ�yŠy˜Ñ Ô ˆØ�uˆ~ ¤¨'Ô!2Ò2Ð2Ð2Ð2ð Œx˜4Ÿ9š9 U°9˜9Ñ=Ô=Ò=Ð=Ð=Ð=Ð=Ð=r%   c                 óf   — d}|                       |¦  «        }dg|j        j        d         k    sJ ‚d S )Nz1<table><div><div class="css"></div></div></table>Úcssrz   )r+   rM  r�   s      r$   Ú(test_deeply_nested_multivalued_attributezAHTMLTreeBuilderSmokeTest.test_deeply_nested_multivalued_attributeÅ  s=   € ð EˆØ�yŠy˜Ñ Ô ˆØˆw˜$œ(œ, wÔ/Ò/Ð/Ð/Ð/Ð/Ð/r%   c                 ó^   — d}|                       |¦  «        }ddg|j        d         k    sJ ‚d S )Nz<html class="a b"></html>r�   r{   rz   )r+   r‹   r�   s      r$   Ú"test_multivalued_attribute_on_htmlz;HTMLTreeBuilderSmokeTest.test_multivalued_attribute_on_htmlÍ  s<   € ð -ˆØ�yŠy˜Ñ Ô ˆØ�Sˆz˜TœY wÔ/Ò/Ð/Ð/Ð/Ð/Ð/r%   c                 ó2   — |                       dd¦  «         d S )Nz<a b="<a>"></a>z<a b="&lt;a&gt;"></a>r*  r"   s    r$   Ú3test_angle_brackets_in_attribute_values_are_escapedzLHTMLTreeBuilderSmokeTest.test_angle_brackets_in_attribute_values_are_escapedÕ  s    € Ø×ÒÐ*Ð,CÑDÔDÐDÐDÐDr%   c                 ó2   — |                       dd¦  «         d S )Nz$<p>&bull; AT&T is in the s&p 500</p>u)   <p>â€¢ AT&amp;T is in the s&amp;p 500</p>r*  r"   s    r$   Ú3test_strings_resembling_character_entity_referenceszLHTMLTreeBuilderSmokeTest.test_strings_resembling_character_entity_referencesØ  s,   € ð 	×ÒØ2Ø:ñ	
ô 	
ð 	
ð 	
ð 	
r%   c                 ó2   — |                       dd¦  «         d S )Nz<p>Bob&apos;s Bar</p>z<p>Bob's Bar</p>r*  r"   s    r$   Útest_apos_entityz)HTMLTreeBuilderSmokeTest.test_apos_entityà  s*   € Ø×ÒØ#Øñ	
ô 	
ð 	
ð 	
ð 	
r%   c                 óX   — d}|                       |¦  «        }d|j        j        k    sJ ‚d S )Nz%<p>&#147;Hello&#148; &#45;&#9731;</p>u   â€œHelloâ€� -â˜ƒ©r+   rë   rg   r�   s      r$   Ú*test_entities_in_foreign_document_encodingzCHTMLTreeBuilderSmokeTest.test_entities_in_foreign_document_encodingæ  s5   € ð 9ˆØ�yŠy˜Ñ Ô ˆØ! T¤V¤]Ò2Ð2Ð2Ð2Ð2Ð2r%   c                 óº   — d}|                       d|¦  «         |                       d|¦  «         |                       d|¦  «         |                       d|¦  «         d S )Nu   <p id="piÃ±ata"></p>z<p id="pi&#241;ata"></p>z<p id="pi&#xf1;ata"></p>z<p id="pi&#Xf1;ata"></p>z<p id="pi&ntilde;ata"></p>r*  ©r#   r¥   s     r$   Ú0test_entities_in_attributes_converted_to_unicodezIHTMLTreeBuilderSmokeTest.test_entities_in_attributes_converted_to_unicodeò  si   € ØHˆØ×ÒÐ3°VÑ<Ô<Ð<Ø×ÒÐ3°VÑ<Ô<Ð<Ø×ÒÐ3°VÑ<Ô<Ð<Ø×ÒÐ5°vÑ>Ô>Ð>Ð>Ð>r%   c                 óº   — d}|                       d|¦  «         |                       d|¦  «         |                       d|¦  «         |                       d|¦  «         d S )Nu   <p>piÃ±ata</p>z<p>pi&#241;ata</p>z<p>pi&#xf1;ata</p>z<p>pi&#Xf1;ata</p>z<p>pi&ntilde;ata</p>r*  r_  s     r$   Ú*test_entities_in_text_converted_to_unicodezCHTMLTreeBuilderSmokeTest.test_entities_in_text_converted_to_unicodeù  si   € ØBˆØ×ÒÐ-¨vÑ6Ô6Ð6Ø×ÒÐ-¨vÑ6Ô6Ð6Ø×ÒÐ-¨vÑ6Ô6Ð6Ø×ÒÐ/°Ñ8Ô8Ð8Ð8Ð8r%   c                 ó2   — |                       dd¦  «         d S )Nz#<p>I said &quot;good day!&quot;</p>z<p>I said "good day!"</p>r*  r"   s    r$   Ú,test_quot_entity_converted_to_quotation_markzEHTMLTreeBuilderSmokeTest.test_quot_entity_converted_to_quotation_mark   s*   € Ø×ÒØ1Ð3Nñ	
ô 	
ð 	
ð 	
ð 	
r%   c                 óŽ   — d}|                       d|¦  «         |                       d|¦  «         |                       d|¦  «         d S )Nu   ï¿½z&#10000000000000;z&#x10000000000000;z&#1000000000;r*  r_  s     r$   Útest_out_of_range_entityz1HTMLTreeBuilderSmokeTest.test_out_of_range_entity  sQ   € Ø,ˆØ×ÒÐ,¨fÑ5Ô5Ð5Ø×ÒÐ-¨vÑ6Ô6Ð6Ø×Ò˜¨&Ñ1Ô1Ð1Ð1Ð1r%   c                 ó¶   — |                       d¦  «        }d|j        j        j        j        k    sJ ‚d|j        j        k    sJ ‚|                      |¦  «         dS )zDMostly to prevent a recurrence of a bug in the html5lib treebuilder.z!<html><h2>
foo</h2><p></p></html>rë   N)r+   Úh2rg   rL   r:   rë   rP   rÕ   s     r$   Útest_multipart_stringsz/HTMLTreeBuilderSmokeTest.test_multipart_strings  s^   € à�yŠyÐ=Ñ>Ô>ˆØ�d”g”nÔ1Ô6Ò6Ð6Ð6Ð6Ø�d”f”kÒ!Ð!Ð!Ð!Ø× Ò  Ñ&Ô&Ð&Ð&Ð&r%   c                 óÞ   — d}|                       |¦  «        }d|j                             ¦   «         k    sJ ‚d}|                       |¦  «        }d|j                             ¦   «         k    sJ ‚d S )Nz<p>a &nosuchentity b</p>z<p>a &amp;nosuchentity b</p>z<p>a &nosuchentity; b</p>z<p>a &amp;nosuchentity; b</p>)r+   rë   r@   r�   s      r$   Útest_invalid_html_entityz1HTMLTreeBuilderSmokeTest.test_invalid_html_entity  sl   € ð
 ,ˆØ�yŠy˜Ñ Ô ˆØ-°´·²±´Ò@Ð@Ð@Ð@à,ˆØ�yŠy˜Ñ Ô ˆØ.°$´&·-²-±/´/ÒAÐAÐAÐAÐAÐAr%   c                 óz   — d}|                       |¦  «        }|j        j        €J ‚|                      |¦  «         dS )ú8Prevent recurrence of a bug in the html5lib treebuilder.z?<html><head></head>
  <link></link>
  <body>foo</body>
</html>
N)r+   r‹   ÚbodyrP   ©r#   Úcontentr+   s      r$   Ú#test_head_tag_between_head_and_bodyz<HTMLTreeBuilderSmokeTest.test_head_tag_between_head_and_body  sF   € ðˆð
 �yŠy˜Ñ!Ô!ˆØŒyŒ~Ð)Ð)Ð)Ø× Ò  Ñ&Ô&Ð&Ð&Ð&r%   c                 óh   — d}|                       |¦  «        }|                      |j        ¦  «         dS )rm  z�<!DOCTYPE html>
<html>
 <body>
   <article id="a" >
   <div><a href="1"></div>
   <footer>
     <a href="2"></a>
   </footer>
  </article>
  </body>
</html>
N)r+   rP   Úarticlero  s      r$   Útest_multiple_copies_of_a_tagz6HTMLTreeBuilderSmokeTest.test_multiple_copies_of_a_tag*  s8   € ðˆð �yŠy˜Ñ!Ô!ˆØ× Ò  ¤Ñ.Ô.Ð.Ð.Ð.r%   c                 óÚ   — d}|                       |¦  «        }||                     ¦   «         k    sJ ‚d|j        d         k    sJ ‚d|j        d         k    sJ ‚d|j        d         k    sJ ‚dS )	z†Parsers don't need to *understand* namespaces, but at the
        very least they should not choke on namespaces or lose
        data.sÙ   <html xmlns="http://www.w3.org/1999/xhtml" xmlns:mathml="http://www.w3.org/1998/Math/MathML" xmlns:svg="http://www.w3.org/2000/svg"><head></head><body><mathml:msqrt>4</mathml:msqrt><b svg:fill="red"></b></body></html>úhttp://www.w3.org/1999/xhtmlÚxmlnsú"http://www.w3.org/1998/Math/MathMLzxmlns:mathmlúhttp://www.w3.org/2000/svgz	xmlns:svgN)r+   rê   r‹   r�   s      r$   Útest_basic_namespacesz.HTMLTreeBuilderSmokeTest.test_basic_namespaces;  s‚   € ð
 nˆØ�yŠy˜Ñ Ô ˆØ˜Ÿš™œÒ&Ð&Ð&Ð&Ø-°´¸7Ô1CÒCÐCÐCÐCØ3°t´yÀÔ7PÒPÐPÐPÐPØ+¨t¬y¸Ô/EÒEÐEÐEÐEÐEÐEr%   c                 ó^   — d}|                       |¦  «        }ddg|j        d         k    sJ ‚d S )Ns   <a class="foo bar">rç   rL  rz   r€   r�   s      r$   Ú-test_multivalued_attribute_value_becomes_listzFHTMLTreeBuilderSmokeTest.test_multivalued_attribute_value_becomes_listG  s9   € Ø'ˆØ�yŠy˜Ñ Ô ˆØ�uˆ~ ¤¨¤Ò0Ð0Ð0Ð0Ð0Ð0r%   c                 óX   — d}|                       |¦  «        }d|j        j        k    sJ ‚d S )NuD   <html><head><meta encoding="euc-jp"></head><body>SacrÃ© bleu!</body>õ   SacrÃ© bleu!)r+   rn  rg   r�   s      r$   Útest_can_parse_unicode_documentz8HTMLTreeBuilderSmokeTest.test_can_parse_unicode_documentS  s7   € ð yˆØ�yŠy˜Ñ Ô ˆØ 4¤9Ô#3Ò3Ð3Ð3Ð3Ð3Ð3r%   c                 ó†   — t          d¦  «        }|                      d|¬¦  «        }|                     ¦   «         dk    sJ ‚dS )z2Parsers should be able to work with SoupStrainers.r{   z&A <b>bold</b> <meta/> <i>statement</i>rŒ   z<b>bold</b>N)r   r+   r@   )r#   Ústrainerr+   s      r$   Útest_soupstrainerz*HTMLTreeBuilderSmokeTest.test_soupstrainer[  sD   € å Ñ$Ô$ˆØ�yŠyÐAÈhˆyÑWÔWˆØ�{Š{‰}Œ} Ò-Ð-Ð-Ð-Ð-Ð-r%   c                 ó2   — |                       dd¦  «         d S )Nz<foo attr='bar'></foo>z<foo attr="bar"></foo>r*  r"   s    r$   Ú7test_single_quote_attribute_values_become_double_quoteszPHTMLTreeBuilderSmokeTest.test_single_quote_attribute_values_become_double_quotesa  s    € Ø×ÒÐ1Ð3KÑLÔLÐLÐLÐLr%   c                 ó4   — d}|                       |¦  «         d S )Nú'<foo attr='bar "brawls" happen'>a</foo>r*  )r#   Útexts     r$   Ú7test_attribute_values_with_nested_quotes_are_left_alonezPHTMLTreeBuilderSmokeTest.test_attribute_values_with_nested_quotes_are_left_aloned  s!   € Ø<ˆØ×Ò˜ÑÔÐÐÐr%   c                 ó¢   — d}|                       |¦  «        }d|j        d<   |                      |j                             ¦   «         d¦  «         d S )Nr†  zBrawls happen at "Bob's Bar"Úattrz:<foo attr="Brawls happen at &quot;Bob's Bar&quot;">a</foo>)r+   rç   rH   r@   )r#   r‡  r+   s      r$   Ú:test_attribute_values_with_double_nested_quotes_get_quotedzSHTMLTreeBuilderSmokeTest.test_attribute_values_with_double_nested_quotes_get_quotedh  sV   € Ø<ˆØ�yŠy˜‰ŒˆØ:ˆŒ�ÑØ×ÒØŒH�OŠOÑÔØMñ	
ô 	
ð 	
ð 	
ð 	
r%   c                 ó^   — |                       dd¦  «         |                       dd¦  «         d S )Nz+<this is="really messed up & stuff"></this>z/<this is="really messed up &amp; stuff"></this>z.<a href="http://example.org?a=1&b=2;3">foo</a>z2<a href="http://example.org?a=1&amp;b=2;3">foo</a>r*  r"   s    r$   Ú.test_ampersand_in_attribute_value_gets_escapedzGHTMLTreeBuilderSmokeTest.test_ampersand_in_attribute_value_gets_escapedq  sJ   € Ø×ÒØ9Ø=ñ	
ô 	
ð 	
ð
 	×ÒØ<Ø@ñ	
ô 	
ð 	
ð 	
ð 	
r%   c                 ó0   — |                       d¦  «         d S )Nz/<a href="http://example.org?a=1&amp;b=2;3"></a>r*  r"   s    r$   Ú7test_escaped_ampersand_in_attribute_value_is_left_alonezPHTMLTreeBuilderSmokeTest.test_escaped_ampersand_in_attribute_value_is_left_alone|  s   € Ø×ÒÐJÑKÔKÐKÐKÐKr%   c                 ó:   — d}d}|                       ||¦  «         d S )Nú-<p>&lt;&lt;sacr&eacute;&#32;bleu!&gt;&gt;</p>õ#   <p>&lt;&lt;sacrÃ© bleu!&gt;&gt;</p>r*  )r#   r‡  Úexpecteds      r$   Ú1test_entities_in_strings_converted_during_parsingzJHTMLTreeBuilderSmokeTest.test_entities_in_strings_converted_during_parsing  s/   € ð ?ˆàRð 	ð 	×Ò˜˜xÑ(Ô(Ð(Ð(Ð(r%   c                 ó\   — d}|                       |d¬¦  «        }|j        j        dk    sJ ‚d S )Ns   <p>‘Foo’</p>zwindows-1252©Úfrom_encodingu	   â€˜Fooâ€™r\  )r#   Úquoter+   s      r$   Ú)test_smart_quotes_converted_on_the_way_inzBHTMLTreeBuilderSmokeTest.test_smart_quotes_converted_on_the_way_inˆ  sL   € ð &ˆØ�yŠy˜¨nˆyÑ=Ô=ˆàŒFŒMØQòRð Rð Rð Rð Rð Rr%   c                 óT   — |                       d¦  «        }|j        j        dk    sJ ‚d S )Nz<a>&nbsp;&nbsp;</a>u   Â Â )r+   r�   rg   rÕ   s     r$   Ú0test_non_breaking_spaces_converted_on_the_way_inzIHTMLTreeBuilderSmokeTest.test_non_breaking_spaces_converted_on_the_way_in’  s0   € Ø�yŠyÐ.Ñ/Ô/ˆØŒvŒ}Ð 8Ò8Ð8Ð8Ð8Ð8Ð8r%   c                 óž   — d}d                      d¦  «        }|                      |¦  «        }|j                              d¦  «        |k    sJ ‚d S )Nr‘  r’  r  )rê   r+   rë   )r#   r‡  r“  r+   s       r$   Ú&test_entities_converted_on_the_way_outz?HTMLTreeBuilderSmokeTest.test_entities_converted_on_the_way_out–  sU   € Ø>ˆØY×`Ò`Øñ
ô 
ˆð �yŠy˜‰ŒˆØŒv�}Š}˜WÑ%Ô%¨Ò1Ð1Ð1Ð1Ð1Ð1r%   c                 óî   — d}|                      d¦  «        }|                      |¦  «        }|                      d¦  «        }|                     dd¦  «        }|                      d¦  «        }||k    sJ ‚d S )Nuƒ   <html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-type"/></head><body><p>SacrÃ© bleu!</p></body></html>z
iso-8859-1r  z
ISO-8859-1)rê   r+   r  )r#   Úunicode_htmlÚiso_latin_htmlr+   Úresultr“  s         r$   Útest_real_iso_8859_documentz4HTMLTreeBuilderSmokeTest.test_real_iso_8859_documentž  sˆ   € ð
 ~ˆð &×,Ò,¨\Ñ:Ô:ˆð �yŠy˜Ñ(Ô(ˆð —’˜WÑ%Ô%ˆð
  ×'Ò'¨°gÑ>Ô>ˆð —?’? 7Ñ+Ô+ˆð ˜Ò!Ð!Ð!Ð!Ð!Ð!r%   c                 ó  — d}|                      d¦  «        }|                      |¦  «        }|                     d¦  «        |                     d¦  «        k    sJ ‚|                     d¦  «        |                     d¦  «        k    sJ ‚d S )Nsk   <html><head></head><body><pre>‚±‚ê‚ÍShift-JIS‚ÅƒR�[ƒfƒBƒ“ƒO‚³‚ê‚½“ú–{Œê‚Ìƒtƒ@ƒCƒ‹‚Å‚·�B</pre></body></html>ú	shift-jisr  Úeuc_jp)r@   r+   rê   )r#   Úshift_jis_htmlrŸ  r+   s       r$   Útest_real_shift_jis_documentz5HTMLTreeBuilderSmokeTest.test_real_shift_jis_documentº  s�   € ð$ð 	ð &×,Ò,¨[Ñ9Ô9ˆØ�yŠy˜Ñ&Ô&ˆð �{Š{˜7Ñ#Ô# |×':Ò':¸7Ñ'CÔ'CÒCÐCÐCÐCØ�{Š{˜8Ñ$Ô$¨×(;Ò(;¸HÑ(EÔ(EÒEÐEÐEÐEÐEÐEr%   c                 óÐ   — d}|                       |d¬¦  «        }|j        dv sJ ‚|                     d¦  «        |                     d¦  «                             d¦  «        k    sJ ‚d S )Ns›   <html><head><title>Hebrew (ISO 8859-8) in Visual Directionality</title></head><body><h1>Hebrew (ISO 8859-8) in Visual Directionality</h1>íåìù</body></html>ú	iso8859-8r–  )r©  z
iso-8859-8r  )r+   Úoriginal_encodingrê   r@   )r#   Úhebrew_documentr+   s      r$   Útest_real_hebrew_documentz2HTMLTreeBuilderSmokeTest.test_real_hebrew_documentÌ  s‚   € ð EˆØ�yŠy˜¸ˆyÑDÔDˆð Ô%Ð)DÐDÐDÐDÐDØ�{Š{˜7Ñ#Ô#Ø×"Ò" ;Ñ/Ô/×6Ò6°wÑ?Ô?ò
ð 
ð 
ð 
ð 
ð 
r%   c                 óV  — d}d|z  }|                       |¦  «        }|                     dddi¦  «        }|d         }d|k    sJ ‚t          |t          ¦  «        sJ ‚d|                     d	¦  «        k    sJ ‚d
|                     d	¦  «        v sJ ‚d|                     d¦  «        v sJ ‚d S )NzE<meta content="text/html; charset=x-sjis" http-equiv="Content-type"/>új<html><head>
%s
<meta http-equiv="Content-language" content="ja"/></head><body>Shift-JIS markup goes here.rÇ   z
http-equivzContent-typerp  ztext/html; charset=x-sjisztext/html; charset=utf8ræ   s   charset=utf8s   charset=shift-jisr¤  )r+   r2  r>   r   Úsubstitute_encodingrê   )r#   Úmeta_tagr¦  r+   Úparsed_metarp  s         r$   Ú'test_meta_tag_reflects_current_encodingz@HTMLTreeBuilderSmokeTest.test_meta_tag_reflects_current_encodingØ  sæ   € ð Wð 	ð7ð ñ	ˆð
 �yŠy˜Ñ(Ô(ˆð —i’i ¨°~Ð(FÑGÔGˆØ˜iÔ(ˆØ*¨gÒ5Ð5Ð5Ð5õ ˜'Õ#<Ñ=Ô=Ð=Ð=Ð=ð )¨G×,GÒ,GÈÑ,OÔ,OÒOÐOÐOÐOð  +×"4Ò"4°VÑ"<Ô"<Ð<Ð<Ð<Ð<Ø# {×'9Ò'9¸+Ñ'FÔ'FÐFÐFÐFÐFÐFÐFr%   c                 óT  — d}d|z  }|                       |¦  «        }|                     dd¬¦  «        }|d         }d|k    sJ ‚t          |t          ¦  «        sJ ‚d|                     d¦  «        k    sJ ‚d	|                     d¦  «        v sJ ‚d
|                     d¦  «        v sJ ‚d S )Nz'<meta id="encoding" charset="x-sjis" />r®  rÇ   Úencodingrn   Úcharsetzx-sjisræ   s   charset="utf8"s   charset="shift-jis"r¤  )r+   r2  r>   r   r¯  rê   )r#   r°  r¦  r+   r±  rµ  s         r$   Ú3test_html5_style_meta_tag_reflects_current_encodingzLHTMLTreeBuilderSmokeTest.test_html5_style_meta_tag_reflects_current_encodingû  sß   € ð =ˆð7ð ñ	ˆð
 �yŠy˜Ñ(Ô(ˆð —i’i ¨:�iÑ6Ô6ˆØ˜iÔ(ˆØ˜7Ò"Ð"Ð"Ð"õ ˜'Õ#<Ñ=Ô=Ð=Ð=Ð=ð ˜×4Ò4°VÑ<Ô<Ò<Ð<Ð<Ð<ð ! K×$6Ò$6°vÑ$>Ô$>Ð>Ð>Ð>Ð>Ø%¨×);Ò);¸KÑ)HÔ)HÐHÐHÐHÐHÐHÐHr%   c                 óÀ   — dD ]Z}|                       |¦  «        }t          D ];}|dv rŒ|                     |¦  «        }d|v sJ ‚|                     d¦  «        |vsJ ‚Œ<Œ[d S )N)sB   <meta charset="utf8"></head><meta id="encoding" charset="utf-8" />©ÚidnaÚmbcsÚoemÚ	undefinedÚstring_escapezstring-escapes   meta charset=""Úascii©r+   r   rê   ©r#   r&   r+   r´  Úencodeds        r$   Ú2test_python_specific_encodings_not_used_in_charsetzKHTMLTreeBuilderSmokeTest.test_python_specific_encodings_not_used_in_charset  s�   € ð

ð 	?ð 	?ˆFð —9’9˜VÑ$Ô$ˆDÝ5ð ?ð ?�Øð  ð ð ð ØŸ+š+ hÑ/Ô/�Ø)¨WÐ4Ð4Ð4Ð4Ø—’ wÑ/Ô/°wÐ>Ð>Ð>Ð>Ð>ð?ð		?ð 	?r%   c                 ó‚   — |                       d¦  «        }d|j        d<   d|j                             ¦   «         k    sJ ‚d S )Nz<a>text</a>rL  rç   z<a foo="bar">text</a>)r+   r�   r@   )r#   Údatas     r$   Ú5test_tag_with_no_attributes_can_have_attributes_addedzNHTMLTreeBuilderSmokeTest.test_tag_with_no_attributes_can_have_attributes_added3  s?   € Ø�yŠy˜Ñ'Ô'ˆØˆŒˆu‰Ø&¨$¬&¯-ª-©/¬/Ò9Ð9Ð9Ð9Ð9Ð9r%   c                 ón   — |                       d¦  «        }d|j                             ¦   «         k    sJ ‚d S )Nz0<body><div><p>text1</p></span>text2</div></body>z)<body><div><p>text1</p>text2</div></body>)r+   rn  r@   rÕ   s     r$   Ú$test_closing_tag_with_no_opening_tagz=HTMLTreeBuilderSmokeTest.test_closing_tag_with_no_opening_tag8  s;   € ð
 �yŠyÐKÑLÔLˆØ:¸d¼i×>NÒ>NÑ>PÔ>PÒPÐPÐPÐPÐPÐPr%   c                 ód   — |                       t          ¦  «        }|                      |¦  «         dS ©z3Test the worst case (currently) for linking issues.N©r+   r   r[   rÕ   s     r$   Útest_worst_casez(HTMLTreeBuilderSmokeTest.test_worst_case@  ó/   € ð �yŠy�Ñ&Ô&ˆØ×Ò˜tÑ$Ô$Ð$Ð$Ð$r%   )rð   )Hrq   rr   rs   Ú__doc__rÑ   rÖ   râ   r?   rï   r   Úbytesr   ré   rø   rû   rþ   r   r  r  r  r  r  r  r  r"  r&  r+  r-  r/  r3  r8  r?  rD  rH  rJ  rO  rR  rT  rV  rX  rZ  r]  r`  rb  rd  rf  ri  rk  rq  rt  rz  r|  r  r‚  r„  rˆ  r‹  r�  r�  r”  r™  r›  r�  r¢  r§  r¬  r²  r¶  rÂ  rÅ  rÇ  rË  r-   r%   r$   rº   rº   z  sT  € € € € € ðð ðBð Bð Bð>
9ð 
9ð 
9ð0ð 0ð 0ð+°Sð +¸Tð +ð +ð +ð +ð  <Eð,ð ,Ø #ð,Ø58ð,à	ˆu�mÐ#Ô	$ð,ð ,ð ,ð ,ð
ð 
ð 
ð%ð %ð %ð
/ð /ð /ð +ð +ð +ðJð Jð JðIð Ið IðIð Ið Iðð ð ð ð ð ð	Fð 	Fð 	Fð -ð -ð -ð,ð ,ð ,ð(ð (ð (ð*ð *ð *ð'ð 'ð 'ð/ð /ð /ð@ð @ð @ð"/ð /ð /ðEð Eð Eð$	.ð 	.ð 	.ð,ð ,ð ,ð
ð 
ð 
ð0
>ð 
>ð 
>ð0ð 0ð 0ð0ð 0ð 0ðEð Eð Eð
ð 
ð 
ð
ð 
ð 
ð
3ð 
3ð 
3ð?ð ?ð ?ð9ð 9ð 9ð
ð 
ð 
ð
2ð 2ð 2ð'ð 'ð 'ðBð Bð Bð	'ð 	'ð 	'ð/ð /ð /ð"
Fð 
Fð 
Fð1ð 1ð 1ð4ð 4ð 4ð.ð .ð .ðMð Mð Mðð ð ð
ð 
ð 
ð	
ð 	
ð 	
ðLð Lð Lð)ð )ð )ð
ð 
ð 
ð9ð 9ð 9ð2ð 2ð 2ð"ð "ð "ð8Fð Fð Fð$

ð 

ð 

ðGð Gð GðFIð Ið Ið<?ð ?ð ?ð4:ð :ð :ð
Qð Qð Qð%ð %ð %ð %ð %r%   rº   c                   óŒ   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚXMLTreeBuilderSmokeTestc                 óþ   — |                       d¦  «        }t          j        |d¦  «        }t          j        |¦  «        }|j        t
          k    sJ ‚|                     ¦   «         |                     ¦   «         k    sJ ‚d S rØ   rÚ   rÞ   s       r$   râ   z9XMLTreeBuilderSmokeTest.test_pickle_and_unpickle_identityH  rã   r%   c                 ód   — |                       d¦  «        }|                     ¦   «         dk    sJ ‚d S )Nú<root/>s.   <?xml version="1.0" encoding="utf-8"?>
<root/>rõ   rÕ   s     r$   Útest_docstring_generatedz0XMLTreeBuilderSmokeTest.test_docstring_generatedQ  s3   € Ø�yŠy˜Ñ#Ô#ˆØ�{Š{‰}Œ}Ð RÒRÐRÐRÐRÐRÐRr%   c                 ój   — d}|                       |¦  «        }||                     d¦  «        k    sJ ‚d S )Ns,   <?xml version="1.0" encoding="utf8"?>
<foo/>ræ   rõ   r�   s      r$   Útest_xml_declarationz,XMLTreeBuilderSmokeTest.test_xml_declarationU  s;   € ØEˆØ�yŠy˜Ñ Ô ˆØ˜Ÿš VÑ,Ô,Ò,Ð,Ð,Ð,Ð,Ð,r%   c                 óº   — d}|                       |¦  «        }t          D ];}|dv rŒ|                     |¦  «        }d|v sJ ‚|                     d¦  «        |vsJ ‚Œ<d S )Ns   <?xml version="1.0"?>
<foo/>r¸  s   <?xml version="1.0"?>r¾  r¿  rÀ  s        r$   Ú:test_python_specific_encodings_not_used_in_xml_declarationzRXMLTreeBuilderSmokeTest.test_python_specific_encodings_not_used_in_xml_declarationZ  sŒ   € ð 6ˆØ�yŠy˜Ñ Ô ˆÝ1ð 	;ð 	;ˆHØð ð ð ð Ø—k’k (Ñ+Ô+ˆGØ+¨wÐ6Ð6Ð6Ð6Ø—?’? 7Ñ+Ô+°7Ð:Ð:Ð:Ð:Ð:ð	;ð 	;r%   c                 ój   — d}|                       |¦  «        }||                     d¦  «        k    sJ ‚d S )Ns<   <?xml version="1.0" encoding="utf8"?>
<?PITarget PIContent?>ræ   rõ   r�   s      r$   r  z3XMLTreeBuilderSmokeTest.test_processing_instructionq  s;   € ØUˆØ�yŠy˜Ñ Ô ˆØ˜Ÿš VÑ,Ô,Ò,Ð,Ð,Ð,Ð,Ð,r%   c                 ój   — d}|                       |¦  «        }|                     d¦  «        |k    sJ ‚dS )zGA real XHTML document should come out *exactly* the same as it went in.r	  r  Nrõ   r�   s      r$   r  z0XMLTreeBuilderSmokeTest.test_real_xhtml_documentv  s?   € ðˆð �yŠy˜Ñ Ô ˆØ�{Š{˜7Ñ#Ô# vÒ-Ð-Ð-Ð-Ð-Ð-r%   c                 óh   — d}|                       |¦  «        }||                     ¦   «         k    sJ ‚d S )Ns  <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<parent xmlns="http://ns1/">
<child xmlns="http://ns2/" xmlns:ns3="http://ns3/">
<grandchild ns3:attr="value" xmlns="http://ns4/"/>
</child>
</parent>rõ   ©r#   Údocr+   s      r$   Útest_nested_namespacesz.XMLTreeBuilderSmokeTest.test_nested_namespaces�  s9   € ðˆð �yŠy˜‰~Œ~ˆØ�d—k’k‘m”mÒ#Ð#Ð#Ð#Ð#Ð#r%   c                 óv   — d}t          |d¦  «        }d|j        _        |                     ¦   «         }d|v sJ ‚d S )Nz/
  <script type="text/javascript">
  </script>
zlxml-xmlzconsole.log("< < hey > > ");s   &lt; &lt; hey &gt; &gt;)r   rÔ   rg   rê   )r#   rÝ  r+   rÁ  s       r$   Ú5test_formatter_processes_script_tag_for_xml_documentszMXMLTreeBuilderSmokeTest.test_formatter_processes_script_tag_for_xml_documentsŒ  sJ   € ðˆõ ˜S *Ñ-Ô-ˆð <ˆŒÔØ—+’+‘-”-ˆØ)¨WÐ4Ð4Ð4Ð4Ð4Ð4r%   c                 óX   — d}|                       |¦  «        }d|j        j        k    sJ ‚d S )Nu?   <?xml version="1.0" encoding="euc-jp"><root>SacrÃ© bleu!</root>r~  ©r+   Úrootrg   r�   s      r$   r  z7XMLTreeBuilderSmokeTest.test_can_parse_unicode_document˜  s4   € ØsˆØ�yŠy˜Ñ Ô ˆØ 4¤9Ô#3Ò3Ð3Ð3Ð3Ð3Ð3r%   c                 óX   — d}|                       |¦  «        }d|j        j        k    sJ ‚d S )NuB   ï»¿<?xml version="1.0" encoding="euc-jp"><root>SacrÃ© bleu!</root>r~  râ  r�   s      r$   Ú1test_can_parse_unicode_document_begining_with_bomzIXMLTreeBuilderSmokeTest.test_can_parse_unicode_document_begining_with_bom�  s7   € ð GˆØ�yŠy˜Ñ Ô ˆØ 4¤9Ô#3Ò3Ð3Ð3Ð3Ð3Ð3r%   c                 óh   — d}|                       |¦  «        }t          |j        ¦  «        |k    sJ ‚d S )Nzƒ<rss xmlns:dc="foo"><dc:creator>b</dc:creator><dc:date>2012-07-02T20:33:42Z</dc:date><dc:rights>c</dc:rights><image>d</image></rss>)r+   r?   Úrssr�   s      r$   Útest_popping_namespaced_tagz3XMLTreeBuilderSmokeTest.test_popping_namespaced_tag¢  s:   € ð WˆØ�yŠy˜Ñ Ô ˆÝ�4”8‰}Œ} Ò&Ð&Ð&Ð&Ð&Ð&r%   c                 óf   — |                       d¦  «        }|                     d¦  «        dk    sJ ‚d S )NrÓ  Úlatin1s/   <?xml version="1.0" encoding="latin1"?>
<root/>rõ   rÕ   s     r$   Ú(test_docstring_includes_correct_encodingz@XMLTreeBuilderSmokeTest.test_docstring_includes_correct_encoding§  s7   € Ø�yŠy˜Ñ#Ô#ˆà�KŠK˜Ñ!Ô!Ð%XÒXÐXÐXÐXÐXÐXr%   c                 ój   — d}|                       |¦  «        }|                     d¦  «        |k    sJ ‚dS )z<A large XML document should come out the same as it went in.s4  <?xml version="1.0" encoding="utf-8"?>
<root>0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</root>r  Nrõ   r�   s      r$   Útest_large_xml_documentz/XMLTreeBuilderSmokeTest.test_large_xml_document­  sB   € ðð 	ð
 �yŠy˜Ñ Ô ˆØ�{Š{˜7Ñ#Ô# vÒ-Ð-Ð-Ð-Ð-Ð-r%   c                 ó\   — |                       dd¦  «         |                       d¦  «         d S )Nr(  r$  z
<p>foo</p>r*  r"   s    r$   Ú9test_tags_are_empty_element_if_and_only_if_they_are_emptyzQXMLTreeBuilderSmokeTest.test_tags_are_empty_element_if_and_only_if_they_are_empty·  s2   € Ø×Ò˜ Ñ'Ô'Ð'Ø×Ò˜Ñ&Ô&Ð&Ð&Ð&r%   c                 óz   — d}|                       |¦  «        }|j        }d|d         k    sJ ‚d|d         k    sJ ‚d S )Nz£<root xmlns:a="http://example.com/" xmlns:b="http://example.net/"><a:foo>This tag is in the a namespace</a:foo><b:foo>This tag is in the b namespace</b:foo></root>zhttp://example.com/zxmlns:azhttp://example.net/zxmlns:b)r+   rã  )r#   r&   r+   rã  s       r$   Útest_namespaces_are_preservedz5XMLTreeBuilderSmokeTest.test_namespaces_are_preserved»  sR   € ð wˆØ�yŠy˜Ñ Ô ˆØŒyˆØ$¨¨Y¬Ò7Ð7Ð7Ð7Ø$¨¨Y¬Ò7Ð7Ð7Ð7Ð7Ð7r%   c                 óh   — d}|                       |¦  «        }t          |j        ¦  «        |k    sJ ‚d S )NzN<p xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>20010504</dc:date></p>)r+   r?   rë   r�   s      r$   Útest_closing_namespaced_tagz3XMLTreeBuilderSmokeTest.test_closing_namespaced_tagÂ  s7   € ØaˆØ�yŠy˜Ñ Ô ˆÝ�4”6‰{Œ{˜fÒ$Ð$Ð$Ð$Ð$Ð$r%   c                 óh   — d}|                       |¦  «        }t          |j        ¦  «        |k    sJ ‚d S )Nzs<foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><bar xsi:schemaLocation="http://www.example.com"/></foo>©r+   r?   rç   r�   s      r$   Útest_namespaced_attributesz2XMLTreeBuilderSmokeTest.test_namespaced_attributesÇ  s:   € ð GˆØ�yŠy˜Ñ Ô ˆÝ�4”8‰}Œ} Ò&Ð&Ð&Ð&Ð&Ð&r%   c                 óh   — d}|                       |¦  «        }t          |j        ¦  «        |k    sJ ‚d S )Nz<foo xml:lang="fr">bar</foo>rõ  r�   s      r$   Ú(test_namespaced_attributes_xml_namespacez@XMLTreeBuilderSmokeTest.test_namespaced_attributes_xml_namespaceÌ  s7   € Ø/ˆØ�yŠy˜Ñ Ô ˆÝ�4”8‰}Œ} Ò&Ð&Ð&Ð&Ð&Ð&r%   c                 ó&  — d}|                       |¦  «        }dt          |                     d¦  «        ¦  «        k    sJ ‚dt          |                     d¦  «        ¦  «        k    sJ ‚dt          |                     d¦  «        ¦  «        k    sJ ‚	 d S )Na  <?xml version="1.0" encoding="utf-8"?>
<Document xmlns="http://example.com/ns0"
    xmlns:ns1="http://example.com/ns1"
    xmlns:ns2="http://example.com/ns2">
    <ns1:tag>foo</ns1:tag>
    <ns1:tag>bar</ns1:tag>
    <ns2:tag key="value">baz</ns2:tag>
</Document>
é   ri   rÙ   zns1:tagrT   zns2:tag)r+   rY   r  rÜ  s      r$   Útest_find_by_prefixed_namez2XMLTreeBuilderSmokeTest.test_find_by_prefixed_nameÑ  s–   € ðˆð �yŠy˜‰~Œ~ˆð •C˜Ÿš eÑ,Ô,Ñ-Ô-Ò-Ð-Ð-Ð-ð •C˜Ÿš iÑ0Ô0Ñ1Ô1Ò1Ð1Ð1Ð1Ø•C˜Ÿš iÑ0Ô0Ñ1Ô1Ò1Ð1Ð1Ð1à<Ø<Ð<r%   c                 óŽ   — d}|                       |¦  «        }|j        }t          j        |¦  «        }|j        |j        k    sJ ‚d S )Nzf<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:w="http://example.com/ns0"/>)r+   Údocumentr   Úprefix)r#   Úxmlr+   ri   Ú	duplicates        r$   Ú!test_copy_tag_preserves_namespacez9XMLTreeBuilderSmokeTest.test_copy_tag_preserves_namespaceç  sL   € ð2ˆð �yŠy˜‰~Œ~ˆØŒmˆÝ”I˜c‘N”Nˆ	ð Œz˜YÔ-Ò-Ð-Ð-Ð-Ð-Ð-r%   c                 ód   — |                       t          ¦  «        }|                      |¦  «         dS rÉ  rÊ  rÕ   s     r$   rË  z'XMLTreeBuilderSmokeTest.test_worst_caseò  rÌ  r%   N)rq   rr   rs   râ   rÔ  rÖ  rØ  r  r  rÞ  rà  r  rå  rè  rë  rí  rï  rñ  ró  rö  rø  rû  r  rË  r-   r%   r$   rÐ  rÐ  G  sR  € € € € € ð0ð 0ð 0ðSð Sð Sð-ð -ð -ð
;ð ;ð ;ð.-ð -ð -ð
	.ð 	.ð 	.ð	$ð 	$ð 	$ð
5ð 
5ð 
5ð4ð 4ð 4ð
4ð 4ð 4ð
'ð 'ð 'ð

ð 
ð 
ð.ð .ð .ð'ð 'ð 'ð8ð 8ð 8ð%ð %ð %ð
'ð 'ð 'ð
'ð 'ð 'ð
=ð =ð =ð,	.ð 	.ð 	.ð%ð %ð %ð %ð %r%   rÐ  c                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚHTML5TreeBuilderSmokeTestz2Smoke test for a tree builder that supports HTML5.c                 ó   — d S r!   r-   r"   s    r$   r  z2HTML5TreeBuilderSmokeTest.test_real_xhtml_documentü  s	   € ð 	ˆr%   c                 óX   — d}|                       |¦  «        }d|j        j        k    sJ ‚d S )Nz<a>rv  )r+   r�   Ú	namespacer�   s      r$   Útest_html_tags_have_namespacez7HTML5TreeBuilderSmokeTest.test_html_tags_have_namespace  s4   € ØˆØ�yŠy˜Ñ Ô ˆØ-°´Ô1AÒAÐAÐAÐAÐAÐAr%   c                 ó€   — d}|                       |¦  «        }d}||j        j        k    sJ ‚||j        j        k    sJ ‚d S )Nz<svg><circle/></svg>ry  )r+   Úsvgr  Úcircle©r#   r&   r+   r  s       r$   Útest_svg_tags_have_namespacez6HTML5TreeBuilderSmokeTest.test_svg_tags_have_namespace  sO   € Ø'ˆØ�yŠy˜Ñ Ô ˆØ0ˆ	Ø˜DœHÔ.Ò.Ð.Ð.Ð.Ø˜DœKÔ1Ò1Ð1Ð1Ð1Ð1Ð1r%   c                 ó€   — d}|                       |¦  «        }d}||j        j        k    sJ ‚||j        j        k    sJ ‚d S )Nz<math><msqrt>5</msqrt></math>rx  )r+   Úmathr  Úmsqrtr  s       r$   Útest_mathml_tags_have_namespacez9HTML5TreeBuilderSmokeTest.test_mathml_tags_have_namespace  sO   € Ø0ˆØ�yŠy˜Ñ Ô ˆØ8ˆ	Ø˜DœIÔ/Ò/Ð/Ð/Ð/Ø˜DœJÔ0Ò0Ð0Ð0Ð0Ð0Ð0r%   c                 óØ   — d}|                       |¦  «        }t          |j        d         t          ¦  «        sJ ‚|j        d         dk    sJ ‚d|j        d         j        j        k    sJ ‚d S )Nz3<?xml version="1.0" encoding="utf-8"?><html></html>r   z$?xml version="1.0" encoding="utf-8"?r‹   )r+   r>   rZ   r   rL   r:   r�   s      r$   Ú$test_xml_declaration_becomes_commentz>HTML5TreeBuilderSmokeTest.test_xml_declaration_becomes_comment  sr   € ØFˆØ�yŠy˜Ñ Ô ˆÝ˜$œ-¨Ô*­GÑ4Ô4Ð4Ð4Ð4ØŒ}˜QÔÐ#IÒIÐIÐIÐIØ˜œ qÔ)Ô6Ô;Ò;Ð;Ð;Ð;Ð;Ð;r%   N)	rq   rr   rs   rÍ  r  r  r  r  r  r-   r%   r$   r  r  ù  sh   € € € € € Ø<Ð<ðð ð ð
Bð Bð Bð
2ð 2ð 2ð1ð 1ð 1ð<ð <ð <ð <ð <r%   r  )9rÍ  Ú__license__rÛ   Ú	importlibr   r  r¶   Úbs4r   Úbs4.elementr   r   r   r   r	   r
   r   r   r   r   Ú
bs4.filterr   Úbs4.builderr   Úbs4._typingr   r   Úbs4.builder._htmlparserr   Útypingr   r   r   r   r   Ú	soupsiever   ÚSOUP_SIEVE_PRESENTÚImportErrorÚutilÚ	find_specÚHTML5LIB_PRESENTÚ
lxml.etreeÚlxmlÚLXML_PRESENTÚetreeÚLXML_VERSIONr   Ú__annotations__r   r?   Úobjectr   rx   rº   rÐ  r  r-   r%   r$   ú<module>r*     si  ðà Ð Ð ð €à €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð $Ð #Ð #Ð #Ð #Ð #ðð ð ð ð ð ð (Ð 'Ð 'Ð 'Ð 'Ð 'à #Ð #Ð #Ð #Ð #Ð #Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð ð ðØ-Ð-Ð-Ð-Ð-Ð-àÐÐøØð ð ð ØÐÐÐðøøøð ”>×+Ò+¨JÑ7Ô7¸tÐCÐ ðØÐÐÐØ€LØ”:Ô*€L€LøØð ð ð Ø€LØ€L€L€Lðøøøð &;€��kÔ"Ð :Ð :Ñ :ð"€ˆcð "ð "ñ "ðJM;ð M;ð M;ð M;ð M;ˆvñ M;ô M;ð M;ð`BDð BDð BDð BDð BD˜8ñ BDô BDð BDðJJ%ð J%ð J%ð J%ð J%Ð3ñ J%ô J%ð J%ðZo%ð o%ð o%ð o%ð o%Ð2ñ o%ô o%ð o%ðd <ð  <ð  <ð  <ð  <Ð 8ñ  <ô  <ð  <ð  <ð  <s$   Á%A. Á.A8Á7A8ÂB+ Â+	B7Â6B7