Ë
    ò¦1h¿Í  ã                   ó  — 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%ejN                  jQ                  d«      duZ)	 ddl*Z+dZ,e+jZ                  j\                  Z.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«      Z8y# e&$ r dZ%Y ŒŒw xY w# e&$ r dZ,dZ.Y Œaw xY w)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y)ÚSoupTestÚreturnc                 ó   — t         S ©N)r   ©Úselfs    úP/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/bs4/tests/__init__.pyr   zSoupTest.default_builderf   s   € äÐó    ÚmarkupÚkwargsc                 óV   — |j                  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   s-   € à—*‘*˜Y¨×(<Ñ(<Ó=ˆÜ˜VÑ?¨WÐ?¸Ñ?Ð?r%   c                 óD   —  | j                   di |¤Žj                  |«      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ÐOr%   NÚto_parseÚcompare_parsed_toc                 ó†  — | j                   }t        ||¬«      }|€t        |t        «      sJ ‚|}|j	                  «       | j                  |«      k(  sJ ‚t        d„ t        |j                  j                  «       «      D «       «      sJ ‚|j                  g|j                  D �cg c]  }|j                  ‘Œ c}k(  sJ ‚yc c}w )ziParse some markup using Beautiful Soup and verify that
        the output markup is as expected.
        ©r)   Nc              3   ó&   K  — | ]	  }|d k(  –— Œ y­w)r   Nr-   )Ú.0Úvs     r$   ú	<genexpr>z'SoupTest.assert_soup.<locals>.<genexpr>Š   s   è ø€ ÒG˜a�1˜•6ÑGùs   ‚)r   r   Ú
isinstanceÚstrÚdecoder/   ÚallÚlistÚopen_tag_counterÚvaluesÚROOT_TAG_NAMEÚtagStackÚname)r#   r0   r1   r)   ÚobjÚxs         r$   Úassert_soupzSoupTest.assert_soupv   s²   € ð ×&Ñ&ˆÜ˜H¨gÔ6ˆØÐ$Ü˜h¬Ô,Ð,Ð,Ø (Ðð �z‰z‹|˜t×0Ñ0Ð1BÓCÒCÐCÐCô ÑG¤4¨×(<Ñ(<×(CÑ(CÓ(EÓ#FÔGÔGÐGÐGð ×!Ñ!Ð"°s·|±|Ö&D°! q§v£vÒ&DÒDÐDÑDùÒ&Ds   Â#B>Úelementc                 óv   — d}|j                   D ](  }|r"||j                  k(  sJ ‚||j                  k(  sJ ‚|}Œ* y)zyEnsure that next_element and previous_element are properly
        set for all descendants of the given element.
        N)ÚdescendantsÚnext_elementÚprevious_element)r#   rE   ÚearlierÚes       r$   ÚassertConnectednesszSoupTest.assertConnectedness’   sN   € ð ˆØ×$Ñ$ò 	ˆAÙØ˜G×0Ñ0Ò0Ð0Ð0Ø !×"4Ñ"4Ò4Ð4Ð4Ø‰Gñ		r%   ÚelÚ_recursive_callc           	      ó®  — d}|j                   €Š|j                  �"J dj                  ||j                  d«      «       ‚|j                  �"J dj                  ||j                  d«      «       ‚|j                  �"J dj                  ||j                  d«      «       ‚d}d}d}t        |j                  «      dz
  }|j                  D �]l  }d}|dk(  rœ|j                   ��¶|j                  |u s"J dj                  ||j                  |«      «       ‚|j                  |u s"J dj                  ||j                  |«      «       ‚|j                  ��IJ dj                  ||j                  d«      «       ‚|j                  |j                  |dz
     u s2J d	j                  ||j                  |j                  |dz
     «      «       ‚|j                  |dz
     j                  |u sBJ d
j                  |j                  |dz
     |j                  |dz
     j                  |«      «       ‚|�u|j                  |u s7J dj                  ||j                  ||j                   j                  «      «       ‚|j                  |u s"J dj                  ||j                  |«      «       ‚t        |t        «      rP|j                  rD| j                  |d«      }|€J ‚|j                  �"J d
j                  ||j                  d«      «       ‚|�|}n|}||k(  r.|j                  �"J d
j                  ||j                  d«      «       ‚|dz  }�Œo |�|n|}|€|}|s–|�”|}	 |€0|j                  �"J dj                  ||j                  d«      «       ‚	 y|j                  �F|j                  |j                  u s,J dj                  ||j                  |j                  «      «       ‚	 y|j                   }Œ‘|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)ÚparentrI   ÚformatÚprevious_siblingÚnext_siblingÚlenÚcontentsrH   r8   r   Úlinkage_validator)	r#   rM   rN   Ú
descendantÚidxÚchildÚ
last_childÚlast_idxÚtargets	            r$   rW   zSoupTest.linkage_validator�   ss  € ð ˆ
ð �9‰9Ðà×#Ñ#Ð+ðàG×NÑNØ�B×'Ñ'¨óóØ+ð
 ×#Ñ#Ð+ðàG×NÑNØ�B×'Ñ'¨óóØ+ð
 —‘Ð'ðàC×JÑJØ�B—O‘O TóóØ'ð
 ˆØˆØˆ
Ü�r—{‘{Ó# aÑ'ˆØ—[‘[ó H	ˆEØˆJð �aŠxØ—9‘9Ñ(àŸ™¨5Ñ0ðàK×RÑRØ˜BŸO™O¨UóóØ0ð
 ×.Ñ.°"Ñ4ðàO×VÑVØ˜u×5Ñ5°róóØ4ð
 ×.Ñ.Ñ6ðàN×UÑUØ˜u×5Ñ5°tóóØ6ð ×*Ñ*¨b¯k©k¸#À¹'Ñ.BÑBðàI×PÑPØ˜5×1Ñ1°2·;±;¸sÀQ¹wÑ3GóóØBð
 —K‘K  a¡Ñ(×5Ñ5¸Ñ>ðàE×LÑLØ—K‘K  a¡Ñ(¨"¯+©+°c¸A±gÑ*>×*KÑ*KÈUóóØ>ð
 Ð)à×.Ñ.°*Ñ<ðàZ×aÑaØ˜u×5Ñ5°zÀ5Ç<Á<×CXÑCXóóØ<ð
 #×/Ñ/°5Ñ8ðàI×PÑPØ" J×$;Ñ$;¸UóóØ8ô
 ˜%¤Ô%¨%¯.ª.Ø!×3Ñ3°E¸4Ó@�
Ø!Ð-Ð-Ð-ð ×+Ñ+Ð3ðàE×LÑLØ 
× 7Ñ 7¸óóØ3ð Ð%Ø'‘
à"�
ð �hŠà×&Ñ&Ð.ðàE×LÑLØ˜5×-Ñ-¨tóóØ.ð �1‰HŠCðQH	ðT )Ð4‘
¸%ˆØˆ=ØˆEá 5Ð#4Ø$&ˆFØØ�>à×*Ñ*Ð2ðàI×PÑPØ˜u×1Ñ1°4óóØ2ð ð ð ×(Ñ(Ð4à×*Ñ*¨f×.AÑ.AÑAðàI×PÑPØ˜u×1Ñ1°6×3FÑ3FóóØAð ð ð  Ÿ™�ð ð* ˆLr%   ÚtagsÚshould_matchc                 óL   — |D �cg c]  }|j                   ‘Œ c}|k(  sJ ‚yc c}w )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.
        N©Ústring©r#   r^   r_   Útags       r$   Úassert_selectszSoupTest.assert_selects   s$   € ð '+Ö+˜s�—
“
Ò+¨|Ò;Ð;Ñ;ùÒ+s   …!c                 ó>   — |D �cg c]  }|d   ‘Œ	 c}|k(  sJ ‚yc c}w )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.
        ÚidNr-   rc   s       r$   Úassert_selects_idszSoupTest.assert_selects_ids)  s$   € ð &*Ö*˜c��D“	Ò*¨lÒ:Ð:Ñ:ùÒ*s   …r!   )F)Ú__name__Ú
__module__Ú__qualname__Úpropertyr   r   r   r   r   r   r+   r9   r/   r   rD   ÚassertSoupEqualsr   rL   Úboolr
   rW   r   re   rh   r-   r%   r$   r   r   e   s  „ Øð  kÑ!2ò ó ðð@˜?ð @°cð @¸mó @ð
P 3ð P°#ð P¸#ó Pð MQñEØ'ðEØ<DÀS¹MðEà	óEð4 #Ðð	¨3ð 	°4ó 	ð 05ñAØðAØ(,ðAà	�+Ñ	óAðF< 8¨C¡=ð <ÀÈÁð <ÐRVó <ð	;Ø˜S‘Mð	;Ø19¸#±ð	;à	ô	;r%   r   c                   óä   — e Zd Zej                  j                  ddi  edg¬«      ddgig«      d„ «       Zej                  j                  d edg¬«      ddgig«      d	„ «       Zd
„ Z	d„ Z
d„ Zd„ Zy)ÚTreeBuilderSmokeTestÚmulti_valued_attributesNÚclass)ÚbÚ*Únotclassc                 óV   — d}| j                  ||¬«      }|j                  d   dk(  sJ ‚y )NzC<html xmlns="http://www.w3.org/1999/xhtml"><a class="a b c"></html>©rq   rr   za b c©r+   Úa©r#   rq   r&   r+   s       r$   Útest_attribute_not_multi_valuedz4TreeBuilderSmokeTest.test_attribute_not_multi_valued8  s3   € ð WˆØ�y‰y˜Ð9PˆyÓQˆØ�v‰v�g‰ 'Ò)Ð)Ñ)r%   )ry   c                 óZ   — d}| j                  ||¬«      }|j                  d   g d¢k(  sJ ‚y )Nz<a class="a b c">rw   rr   )ry   rs   Úcrx   rz   s       r$   Útest_attribute_multi_valuedz0TreeBuilderSmokeTest.test_attribute_multi_valued@  s2   € ð %ˆØ�y‰y˜Ð9PˆyÓQˆØ�v‰v�g‰¢/Ò1Ð1Ñ1r%   c                 óP   — d}| j                  |«       d}| j                  |«       y )Nz<![if word]>content<![endif]>z<!DOCTYPE html]ff>)r+   ©r#   r&   s     r$   Útest_invalid_doctypez)TreeBuilderSmokeTest.test_invalid_doctypeH  s&   € ð 1ˆØ�	‰	�&ÔØ%ˆØ�	‰	�&Õr%   c                 ó~   — d}| j                  |t        d¬«      ¬«      }t        d„ |j                  D «       «      rJ ‚y )Nz<!DOCTYPE html>
<html>
</html>Úhtml)rA   ©Ú
parse_onlyc              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr!   )r8   r	   )r5   rC   s     r$   r7   z=TreeBuilderSmokeTest.test_doctype_filtered.<locals>.<genexpr>S  s   è ø€ ÒH°!”z !¤W×-ÑHùs   ‚)r+   r   ÚanyrG   ©r#   r&   r+   s      r$   Útest_doctype_filteredz*TreeBuilderSmokeTest.test_doctype_filteredP  s;   € Ø3ˆØ�y‰y˜¬L¸fÔ,EˆyÓFˆÜÑH°t×7GÑ7GÔHÔHÐHÐHÐHr%   c                 ó  —  G d„ dt         «      }d}| j                  |¬«      }| j                  ||¬«      }|j                  }t	        |j
                  |«      sJ ‚d|d   k(  sJ ‚d|d	<   d|d	   k(  sJ ‚d
}||j                  «       k(  sJ ‚y )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                 ó&   •— t         ‰| �  |d«       y )NÚ
OVERRIDDEN)ÚsuperÚ__setitem__)r#   r�   rŽ   Ú	__class__s      €r$   r’   zZTreeBuilderSmokeTest.test_custom_attribute_dict_class.<locals>.MyAttributeDict.__setitem__W  s   ø€ ô ‘Ñ# C¨Õ6r%   )ri   rj   rk   r9   r   r’   Ú__classcell__©r“   s   @r$   ÚMyAttributeDictrŒ   V  s   ø„ ð7 sð 7°3÷ 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+   ry   r8   Úattrsr:   )r#   r–   r&   r)   r+   rd   Úexpects          r$   Ú test_custom_attribute_dict_classz5TreeBuilderSmokeTest.test_custom_attribute_dict_classU  s�   € ô	7œdô 	7ð 6ˆØ×&Ñ&¸OÐ&ÓLˆØ�y‰y˜¨ˆyÓ1ˆØ�f‰fˆÜ˜#Ÿ)™) _Ô5Ð5Ð5Ø˜s 7™|Ò+Ð+Ð+ØˆˆG‰Ø˜s 7™|Ò+Ð+Ð+àTˆØ˜Ÿ™›Ò%Ð%Ñ%r%   c                 óð   —  G d„ dt         «      }| j                  dt        dg«      i|¬«      }d}| j                  ||¬«      }|j                  }|d   d	k(  sJ ‚|d   d
dgk(  sJ ‚t        |d   |«      sJ ‚y )Nc                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )ú_TreeBuilderSmokeTest.test_custom_attribute_value_list_class.<locals>.MyCustomAttributeValueListc                 óF   •— t        ‰| �  |i |¤Ž | j                  d«       y )NÚextra)r‘   Ú__init__Úappend)r#   Úargsr'   r“   s      €r$   r¤   zhTreeBuilderSmokeTest.test_custom_attribute_value_list_class.<locals>.MyCustomAttributeValueList.__init__j  s!   ø€ Ü‘Ñ  $Ð1¨&Ò1Ø—‘˜GÕ$r%   )ri   rj   rk   r¤   r”   r•   s   @r$   ÚMyCustomAttributeValueListr¡   i  s   ø„ ÷%ð %r%   r§   rt   Úattr2)rq   Úattribute_value_list_classr—   r3   r™   Úval1Úval2r£   )r   r   Úsetr+   ry   r8   )r#   r§   r)   r&   r+   rd   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ˆØ�f‰fˆØ�7‰|˜vÒ%Ð%Ð%Ø�7‰| ¨Ð0Ò0Ð0Ð0Ü˜#˜g™,Ð(BÔCÐCÑCr%   )ri   rj   rk   ÚpytestÚmarkÚparametrizer›   r{   r~   r�   r‰   rž   r­   r-   r%   r$   rp   rp   5  s’   „ ð ‡[�[×ÑØ! D¨"©d°g°YÔ.?À#È
À|ÐATÐ#Uóñ*óð*ð
 ‡[�[×ÑØ!¡D¨G¨9Ô$5¸¸g¸YÐ7GÐ#Hóñ2óð2ò
òIò
&ó&Dr%   rp   c            	       ó¼  — e Zd 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.„ Z0d/„ Z1d0„ Z2d1„ Z3d2„ Z4d3„ Z5d4„ Z6d5„ Z7d6„ Z8d7„ Z9d8„ Z:d9„ Z;d:„ Z<d;„ Z=d<„ Z>d=„ Z?d>„ Z@d?„ ZAd@„ ZBdA„ ZCdB„ ZDdC„ ZEdD„ ZFdE„ ZGdF„ ZHy)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 ]4  }| j                  d«      }|j                  |«      }|j                  du rŒ4J ‚ | j                  dd«       | j                  dd«       y)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_elementrD   )r#   rA   r+   rÇ   s       r$   Útest_empty_element_tagsz0HTMLTreeBuilderSmokeTest.test_empty_element_tagsƒ  sj   € ð
ò 	4ˆDð( —9‘9˜R“=ˆDØ—l‘l 4Ó(ˆGØ×+Ñ+¨tÒ3Ð3Ð3ð-	4ð0 	×ÑÐ*Ð,=Ô>Ø×ÑÐ-Ð/@ÕAr%   c                 ó®  — | j                  d«      }t        |j                  j                  t        «      sJ ‚t        |j
                  j                  t        «      sJ ‚| j                  d«      }t        |j                  j                  t        «      sJ ‚|j                  j                  dk(  sJ ‚t        |j                  j                  t        «      sJ ‚y )Nz7<style>Some CSS</style><script>Some Javascript</script>z<style><!--Some CSS--></style>z<!--Some CSS-->)r+   r8   Ústylerb   r   Úscriptr   ©r#   r+   s     r$   Útest_special_string_containersz7HTMLTreeBuilderSmokeTest.test_special_string_containers¢  s£   € Ø�y‰yÐRÓSˆÜ˜$Ÿ*™*×+Ñ+¬ZÔ8Ð8Ð8Ü˜$Ÿ+™+×,Ñ,¬fÔ5Ð5Ð5à�y‰yÐ9Ó:ˆÜ˜$Ÿ*™*×+Ñ+¬ZÔ8Ð8Ð8ð �z‰z× Ñ Ð$5Ò5Ð5Ð5Ü˜$Ÿ*™*×+Ñ+¬ZÔ8Ð8Ñ8r%   c                 ó  — | j                  d«      }t        j                  |t        j                  «      }t        j                  |«      }|j
                  t        k(  sJ ‚|j                  «       |j                  «       k(  sJ ‚y )Nú<a><b>foo</a>)r+   ÚpickleÚdumpsÚHIGHEST_PROTOCOLÚloadsr“   r   r:   ©r#   ÚtreeÚdumpedÚloadeds       r$   Ú!test_pickle_and_unpickle_identityz:HTMLTreeBuilderSmokeTest.test_pickle_and_unpickle_identity®  sd   € ð �y‰y˜Ó)ˆÜ—‘˜d¤F×$;Ñ$;Ó<ˆÜ—‘˜fÓ%ˆØ×Ñ¤=Ò0Ð0Ð0Ø�}‰}‹ $§+¡+£-Ò/Ð/Ñ/r%   c                 óÐ   — d}| j                  |«      }t        j                  |t        j                  «      }t        j                  |«      }|j
                  j                  du sJ ‚y )Nz�
<!DOCTYPE html>
<html lang="en">
<head><title>blabla</title></head>
<body><?xml encoding="utf-8" ?><html></html></body>
</html>
F)r+   rÑ   rÒ   rÓ   rÔ   r)   Úis_xml)r#   r&   r+   Úpickleds       r$   Ú#test_pickle_and_unpickle_bad_markupz<HTMLTreeBuilderSmokeTest.test_pickle_and_unpickle_bad_markup·  sU   € ðˆð �y‰y˜Ó ˆÜ—,‘,˜t¤V×%<Ñ%<Ó=ˆÜ�|‰|˜GÓ$ˆØ�|‰|×"Ñ" eÑ+Ð+Ñ+r%   Údoctype_fragmentr   Nc                 ó  — | j                  |«      \  }}|j                  d   }|j                  t        k(  sJ ‚||k(  sJ ‚|j	                  d«      dt        |«       |k(  sJ ‚|j                  €J ‚|j                  j                  d   dk(  sJ ‚y)z8Assert that a given doctype string is handled correctly.r   Úutf8NÚfoo©Ú_document_with_doctyperV   r“   r	   ÚencoderU   Úp©r#   rÞ   Údoctype_strr+   Údoctypes        r$   ÚassertDoctypeHandledz-HTMLTreeBuilderSmokeTest.assertDoctypeHandledÄ  sœ   € à ×7Ñ7Ð8HÓIÑˆ�Tð —-‘- Ñ"ˆØ× Ñ ¤GÒ+Ð+Ð+ØÐ*Ò*Ð*Ð*Ø�{‰{˜6Ó"Ð#5¤S¨Ó%5Ð6¸+ÒEÐEÐEð �v‰vÐ!Ð!Ð!Ø�v‰v�‰˜qÑ! UÒ*Ð*Ñ*r%   Údoctype_stringc                 óf   — d|›d|›d�}|dz   }| j                  |«      }|j                  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Ó  s;   � ò !/Ò0@ÐAˆØ˜>Ñ)ˆØ�y‰y˜Ó ˆØ�~‰~˜fÓ% tÐ+Ð+r%   c                 óH   — | j                  d«       | j                  d«       y)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                 ón   — | j                  d«      }|j                  d   }d|j                  «       k(  sJ ‚y )Nz
<!DOCTYPE>r   rÆ   )r+   rV   Ústrip)r#   r+   rè   s      r$   Útest_empty_doctypez+HTMLTreeBuilderSmokeTest.test_empty_doctypeã  s2   € Ø�y‰y˜Ó&ˆØ—-‘- Ñ"ˆØ�W—]‘]“_Ò$Ð$Ñ$r%   c                 ó  — dD ]‚  }| j                  d|«      \  }}|j                  d   }|j                  t        k(  sJ ‚|dk(  sJ ‚|j	                  d«      d t        |«       dk(  sJ ‚|j                  j                  d   dk(  rŒ‚J ‚ y )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ÑˆK˜ð —m‘m AÑ&ˆGØ×$Ñ$¬Ò/Ð/Ð/Ø˜fÒ$Ð$Ð$Ø—;‘;˜vÓ&Ð'9¬¨[Ó)9Ð:Ð>PÒPÐPÐPð —6‘6—?‘? 1Ñ%¨Ó.Ð.Ð.ñ	/r%   c                 ó*   — d}| j                  |«       y )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                 ó&   — | j                  d«       y )Nz$foo SYSTEM "http://www.example.com/"rð   r"   s    r$   Útest_system_doctypez,HTMLTreeBuilderSmokeTest.test_system_doctypeü  s   € Ø×!Ñ!Ð"HÕIr%   c                 ó&   — | j                  d«       y )Nz#xsl:stylesheet SYSTEM "htmlent.dtd"rð   r"   s    r$   Útest_namespaced_system_doctypez7HTMLTreeBuilderSmokeTest.test_namespaced_system_doctypeÿ  ó   € à×!Ñ!Ð"GÕHr%   c                 ó&   — | j                  d«       y )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 }| j                  |«      }ddd«       j                  d«      j	                  dd«      |j	                  dd«      k(  sJ ‚g k(  sJ ‚y# 1 sw Y   ŒGxY w)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ð 	%°QØ—9‘9˜VÓ$ˆD÷	%à�{‰{˜7Ó#×+Ñ+¨E°3Ó7¸6¿>¹>È%ÐQTÓ;UÒUÐUÐUð �BŠwˆ‰w÷	%ð 	%ús   ™A1Á1A:c                 óÌ   — d}t        j                  d¬«      5 }| j                  |«      }d d d «       dt        j	                  d«      «      k(  sJ ‚g k(  sJ ‚y # 1 sw Y   Œ0xY w)Ns.   <ns1:foo>content</ns1:foo><ns1:foo/><ns2:foo/>Tr  é   zns1:foo)r  r  r+   rU   Úfind_allr
  s       r$   Útest_namespaced_htmlz-HTMLTreeBuilderSmokeTest.test_namespaced_html  sh   € ð GˆÜ×$Ñ$¨DÔ1ð 	%°QØ—9‘9˜VÓ$ˆD÷	%ð ”C˜Ÿ™ iÓ0Ó1Ò1Ð1Ð1ð �QŠwˆ‰w÷	%ð 	%ús   ™AÁA#c                 óH  — d}t        j                  d¬«      5 }| j                  |«      }|j                  j                  dk(  sJ ‚	 d d d «       \  }t        |j                  t        «      sJ ‚t        |j                  «      t        j                  k(  sJ ‚y # 1 sw Y   ŒRxY w)Ns7   <?xml version="1.0" encoding="utf-8"?><tag>string</tag>Tr  rb   )
r  r  r+   rd   rb   r8   Úmessager   r9   ÚMESSAGE)r#   r&   r  r+   Úwarnings        r$   Útest_detect_xml_parsed_as_htmlz7HTMLTreeBuilderSmokeTest.test_detect_xml_parsed_as_html$  s�   € ð PˆÜ×$Ñ$¨DÔ1ð 	/°QØ—9‘9˜VÓ$ˆDØ—8‘8—?‘? hÒ.Ð.Ñ.÷	/ð ‰	ˆÜ˜'Ÿ/™/Ô+AÔBÐBÐBÜ�7—?‘?Ó#Ô'=×'EÑ'EÒEÐEÑE÷	/ð 	/ús   ™-BÂB!c                 ó¦   — d}| j                  |«      }||j                  «       k(  sJ ‚d}| j                  |«      }||j                  d«      k(  sJ ‚y )Nz<?PITarget PIContent?>s   <?PITarget PIContent?>rà   )r+   r:   rä   rˆ   s      r$   Útest_processing_instructionz4HTMLTreeBuilderSmokeTest.test_processing_instruction4  sU   € ð
 .ˆØ�y‰y˜Ó ˆØ˜Ÿ™›Ò&Ð&Ð&à.ˆØ�y‰y˜Ó ˆØ˜Ÿ™ VÓ,Ò,Ð,Ñ,r%   c                 óB   — t        j                  | j                  «       y)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_deepcopyA  s   € ô 	�‰�d×*Ñ*Õ+r%   c                 óŠ   — | j                  d«      }|j                  j                  rJ ‚t        |j                  «      dk(  sJ ‚y)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È   r9   rÍ   s     r$   Ú!test_p_tag_is_never_empty_elementz:HTMLTreeBuilderSmokeTest.test_p_tag_is_never_empty_elementI  s;   € ð �y‰y˜Ó ˆØ—6‘6×*Ò*Ð*Ð*Ü�4—6‘6‹{˜iÒ'Ð'Ñ'r%   c                 óp   — | j                  dd«       | j                  dd«       | j                  dd«       y)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©rD   r"   s    r$   Útest_unclosed_tags_get_closedz6HTMLTreeBuilderSmokeTest.test_unclosed_tags_get_closedS  s4   € ð
 	×Ñ˜ 	Ô*Ø×Ñ˜ 	Ô*à×Ñ˜ Õ)r%   c                 óŠ   — | j                  d«      }|j                  j                  sJ ‚t        |j                  «      dk(  sJ ‚y)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È   r9   rÍ   s     r$   Ú#test_br_is_always_empty_element_tagz<HTMLTreeBuilderSmokeTest.test_br_is_always_empty_element_tag]  s;   € ð �y‰y˜Ó%ˆØ�w‰w×'Ò'Ð'Ð'Ü�4—7‘7‹|˜wÒ&Ð&Ñ&r%   c                 ó&   — | j                  d«       y )Nz<em><em></em></em>r#  r"   s    r$   Útest_nested_formatting_elementsz8HTMLTreeBuilderSmokeTest.test_nested_formatting_elementsg  s   € Ø×ÑÐ-Õ.r%   c                 ó\   — d}| j                  |«      }d|j                  d«      d   k(  sJ ‚y )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_headj  s4   € ðˆð �y‰y˜‹ˆØ  D§I¡I¨hÓ$7¸Ñ$?Ò?Ð?Ñ?r%   c                 ó&  — d}| j                  |«       | j                  |«      }|j                  d¬«      }|j                  t        k(  sJ ‚|j                  d¬«      }||j
                  k(  sJ ‚|j                  d¬«      }||j                  k(  sJ ‚y )Nz<p>foo<!--foobar-->baz</p>Úfoobarra   rá   Úbaz)rD   r+   r+  r“   r   rH   rI   )r#   r&   r+   Úcommentrá   r/  s         r$   Útest_commentz%HTMLTreeBuilderSmokeTest.test_comment{  s‘   € à-ˆØ×Ñ˜Ô à�y‰y˜Ó ˆØ—)‘) 8�)Ó,ˆØ× Ñ ¤GÒ+Ð+Ð+ð �i‰i˜uˆiÓ%ˆØ˜#×*Ñ*Ò*Ð*Ð*Ø�i‰i˜uˆiÓ%ˆØ˜#×.Ñ.Ò.Ð.Ñ.r%   c                 óp  — d}d}| j                  |«       | j                  |«       | j                  |«      }|j                  j                  «       |k(  sJ ‚| j                  |«      }|j                  j                  «       |k(  sJ ‚| j                  d«      }|j                  j                  «       dk(  sJ ‚y)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)rD   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‰x× Ñ Ó" jÒ0Ð0Ð0à�y‰y˜Ó)ˆØ�}‰}×%Ñ%Ó'¨?Ò:Ð:Ð:à�y‰yÐ0Ó1ˆØ�}‰}×%Ñ%Ó'Ð+DÒDÐDÑDr%   c                 óv   — d}| j                  |«       d}| j                  |«       d}| j                  |«       y)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œ  s=   € à'ˆØ×Ñ˜Ôà:ˆØ×Ñ˜Ô&àOÐØ×ÑÐ,Õ-r%   c                 ó¾   — | j                  d«      }|j                  }|j                  j                  j                  dk(  sJ ‚|j                  j                  dk(  sJ ‚y)zBlock elements can be nested.z*<blockquote><p><b>Foo</b></p></blockquote>ÚFooN)r+   Ú
blockquoterå   rs   rb   )r#   r+   r@  s      r$   Ú test_nested_block_level_elementsz9HTMLTreeBuilderSmokeTest.test_nested_block_level_elements§  sN   € à�y‰yÐEÓFˆØ—_‘_ˆ
Ø�|‰|�~‰~×$Ñ$¨Ò-Ð-Ð-Ø�|‰|×"Ñ" eÒ+Ð+Ñ+r%   c                 óN   — d}| j                  |d«       | j                  d«       y)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®  s9   € ðð 	ð 	×ÑØð!ô	
ð 	×Ñð;õ	
r%   c                 óš   — d}| j                  |«      }ddg|j                  d   k(  sJ ‚|j                  |j                  dd¬«      k(  sJ ‚y )Nz<div class=" foo bar	 "></a>rá   Úbarrr   Údivzfoo bar)Úclass_)r+   rF  r+  rˆ   s      r$   Ú*test_multivalued_attribute_with_whitespacezCHTMLTreeBuilderSmokeTest.test_multivalued_attribute_with_whitespaceÆ  sS   € ð 0ˆØ�y‰y˜Ó ˆØ�uˆ~ §¡¨'Ñ!2Ò2Ð2Ð2ð �x‰x˜4Ÿ9™9 U°9˜9Ó=Ò=Ð=Ñ=r%   c                 óh   — d}| j                  |«      }dg|j                  j                  d   k(  sJ ‚y )Nz1<table><div><div class="css"></div></div></table>Úcssrr   )r+   rF  rˆ   s      r$   Ú(test_deeply_nested_multivalued_attributezAHTMLTreeBuilderSmokeTest.test_deeply_nested_multivalued_attributeÒ  s5   € ð EˆØ�y‰y˜Ó ˆØˆw˜$Ÿ(™(Ÿ,™, wÑ/Ò/Ð/Ñ/r%   c                 óV   — d}| j                  |«      }ddg|j                  d   k(  sJ ‚y )Nz<html class="a b"></html>ry   rs   rr   )r+   rƒ   rˆ   s      r$   Ú"test_multivalued_attribute_on_htmlz;HTMLTreeBuilderSmokeTest.test_multivalued_attribute_on_htmlÚ  s2   € ð -ˆØ�y‰y˜Ó ˆØ�Sˆz˜TŸY™Y wÑ/Ò/Ð/Ñ/r%   c                 ó(   — | j                  dd«       y )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ÕDr%   c                 ó(   — | j                  dd«       y )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                 ó(   — | j                  dd«       y )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                 ó`   — d}| j                  |«      }d|j                  j                  k(  sJ ‚y )Nz%<p>&#147;Hello&#148; &#45;&#9731;</p>u   â€œHelloâ€� -â˜ƒ©r+   rå   rb   rˆ   s      r$   Ú*test_entities_in_foreign_document_encodingzCHTMLTreeBuilderSmokeTest.test_entities_in_foreign_document_encodingó  s-   € ð 9ˆØ�y‰y˜Ó ˆØ! T§V¡V§]¡]Ò2Ð2Ñ2r%   c                 ó˜   — d}| j                  d|«       | j                  d|«       | j                  d|«       | j                  d|«       y )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ÿ  sK   € ØHˆØ×ÑÐ3°VÔ<Ø×ÑÐ3°VÔ<Ø×ÑÐ3°VÔ<Ø×ÑÐ5°vÕ>r%   c                 ó˜   — d}| j                  d|«       | j                  d|«       | j                  d|«       | j                  d|«       y )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#  rX  s     r$   Ú*test_entities_in_text_converted_to_unicodezCHTMLTreeBuilderSmokeTest.test_entities_in_text_converted_to_unicode  sK   € ØBˆØ×ÑÐ-¨vÔ6Ø×ÑÐ-¨vÔ6Ø×ÑÐ-¨vÔ6Ø×ÑÐ/°Õ8r%   c                 ó(   — | j                  dd«       y )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                 ót   — d}| j                  d|«       | j                  d|«       | j                  d|«       y )Nu   ï¿½z&#10000000000000;z&#x10000000000000;z&#1000000000;r#  rX  s     r$   Útest_out_of_range_entityz1HTMLTreeBuilderSmokeTest.test_out_of_range_entity  s9   € Ø,ˆØ×ÑÐ,¨fÔ5Ø×ÑÐ-¨vÔ6Ø×Ñ˜¨&Õ1r%   c                 óÜ   — | j                  d«      }d|j                  j                  j                  j                  k(  sJ ‚d|j
                  j                  k(  sJ ‚| j                  |«       y)zDMostly to prevent a recurrence of a bug in the html5lib treebuilder.z!<html><h2>
foo</h2><p></p></html>rå   N)r+   Úh2rb   rH   rA   rå   rL   rÍ   s     r$   Útest_multipart_stringsz/HTMLTreeBuilderSmokeTest.test_multipart_strings  sW   € à�y‰yÐ=Ó>ˆØ�d—g‘g—n‘n×1Ñ1×6Ñ6Ò6Ð6Ð6Ø�d—f‘f—k‘kÒ!Ð!Ð!Ø× Ñ  Õ&r%   c                 óÌ   — d}| j                  |«      }d|j                  j                  «       k(  sJ ‚d}| j                  |«      }d|j                  j                  «       k(  sJ ‚y )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  sZ   € ð
 ,ˆØ�y‰y˜Ó ˆØ-°·±·±³Ò@Ð@Ð@à,ˆØ�y‰y˜Ó ˆØ.°$·&±&·-±-³/ÒAÐAÑAr%   c                 ó|   — d}| j                  |«      }|j                  j                  €J ‚| j                  |«       y)ú8Prevent recurrence of a bug in the html5lib treebuilder.z?<html><head></head>
  <link></link>
  <body>foo</body>
</html>
N)r+   rƒ   ÚbodyrL   ©r#   Úcontentr+   s      r$   Ú#test_head_tag_between_head_and_bodyz<HTMLTreeBuilderSmokeTest.test_head_tag_between_head_and_body,  s;   € ðˆð
 �y‰y˜Ó!ˆØ�y‰y�~‰~Ð)Ð)Ð)Ø× Ñ  Õ&r%   c                 ó`   — d}| j                  |«      }| j                  |j                  «       y)rf  z�<!DOCTYPE html>
<html>
 <body>
   <article id="a" >
   <div><a href="1"></div>
   <footer>
     <a href="2"></a>
   </footer>
  </article>
  </body>
</html>
N)r+   rL   Úarticlerh  s      r$   Útest_multiple_copies_of_a_tagz6HTMLTreeBuilderSmokeTest.test_multiple_copies_of_a_tag7  s+   € ðˆð �y‰y˜Ó!ˆØ× Ñ  §¡Õ.r%   c                 óÌ   — d}| j                  |«      }||j                  «       k(  sJ ‚d|j                  d   k(  sJ ‚d|j                  d   k(  sJ ‚d|j                  d   k(  sJ ‚y)	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_namespacesH  sq   € ð
 nˆØ�y‰y˜Ó ˆØ˜Ÿ™›Ò&Ð&Ð&Ø-°·±¸7Ñ1CÒCÐCÐCØ3°t·y±yÀÑ7PÒPÐPÐPØ+¨t¯y©y¸Ñ/EÒEÐEÑEr%   c                 óV   — d}| j                  |«      }ddg|j                  d   k(  sJ ‚y )Ns   <a class="foo bar">rá   rE  rr   rx   rˆ   s      r$   Ú-test_multivalued_attribute_value_becomes_listzFHTMLTreeBuilderSmokeTest.test_multivalued_attribute_value_becomes_listT  s/   € Ø'ˆØ�y‰y˜Ó ˆØ�uˆ~ §¡¨¡Ò0Ð0Ñ0r%   c                 ó`   — d}| j                  |«      }d|j                  j                  k(  sJ ‚y )NuD   <html><head><meta encoding="euc-jp"></head><body>SacrÃ© bleu!</body>õ   SacrÃ© bleu!)r+   rg  rb   rˆ   s      r$   Útest_can_parse_unicode_documentz8HTMLTreeBuilderSmokeTest.test_can_parse_unicode_document`  s0   € ð yˆØ�y‰y˜Ó ˆØ 4§9¡9×#3Ñ#3Ò3Ð3Ñ3r%   c                 ój   — t        d«      }| j                  d|¬«      }|j                  «       dk(  sJ ‚y)z2Parsers should be able to work with SoupStrainers.rs   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_soupstrainerh  s3   € ä Ó$ˆØ�y‰yÐAÈhˆyÓWˆØ�{‰{‹} Ò-Ð-Ñ-r%   c                 ó(   — | j                  dd«       y )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_quotesn  s   € Ø×ÑÐ1Ð3KÕLr%   c                 ó*   — d}| j                  |«       y )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_aloneq  s   € Ø<ˆØ×Ñ˜Õr%   c                 óœ   — d}| j                  |«      }d|j                  d<   | j                  |j                  j                  «       d«       y )Nr  zBrawls happen at "Bob's Bar"Úattrz:<foo attr="Brawls happen at &quot;Bob's Bar&quot;">a</foo>)r+   rá   rD   r:   )r#   r€  r+   s      r$   Ú:test_attribute_values_with_double_nested_quotes_get_quotedzSHTMLTreeBuilderSmokeTest.test_attribute_values_with_double_nested_quotes_get_quotedu  sA   € Ø<ˆØ�y‰y˜‹ˆØ:ˆ�‰�ÑØ×ÑØ�H‰H�O‰OÓØMõ	
r%   c                 óL   — | j                  dd«       | j                  dd«       y )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_escaped~  s,   € Ø×ÑØ9Ø=ô	
ð
 	×ÑØ<Ø@õ	
r%   c                 ó&   — | j                  d«       y )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ÕKr%   c                 ó0   — d}d}| j                  ||«       y )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                  |d¬«      }|j                  j                  dk(  sJ ‚y )Ns   <p>‘Foo’</p>zwindows-1252©Úfrom_encodingu	   â€˜Fooâ€™rU  )r#   Úquoter+   s      r$   Ú)test_smart_quotes_converted_on_the_way_inzBHTMLTreeBuilderSmokeTest.test_smart_quotes_converted_on_the_way_in•  s:   € ð &ˆØ�y‰y˜¨nˆyÓ=ˆà�F‰F�M‰MØQòRð	
ñRr%   c                 ó\   — | j                  d«      }|j                  j                  dk(  sJ ‚y )Nz<a>&nbsp;&nbsp;</a>u   Â Â )r+   ry   rb   rÍ   s     r$   Ú0test_non_breaking_spaces_converted_on_the_way_inzIHTMLTreeBuilderSmokeTest.test_non_breaking_spaces_converted_on_the_way_inŸ  s(   € Ø�y‰yÐ.Ó/ˆØ�v‰v�}‰}Ð 8Ò8Ð8Ñ8r%   c                 óŒ   — d}dj                  d«      }| j                  |«      }|j                  j                  d«      |k(  sJ ‚y )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£  sD   € Ø>ˆØY×`Ñ`Øó
ˆð �y‰y˜‹ˆØ�v‰v�}‰}˜WÓ%¨Ò1Ð1Ñ1r%   c                 óÂ   — d}|j                  d«      }| j                  |«      }|j                  d«      }|j                  dd«      }|j                  d«      }||k(  sJ ‚y )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«  sp   € ð
 ~ˆð &×,Ñ,¨\Ó:ˆð �y‰y˜Ó(ˆð —‘˜WÓ%ˆð
  ×'Ñ'¨°gÓ>ˆð —?‘? 7Ó+ˆð ˜Ò!Ð!Ñ!r%   c                 óà   — d}|j                  d«      }| j                  |«      }|j                  d«      |j                  d«      k(  sJ ‚|j                  d«      |j                  d«      k(  sJ ‚y )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Ç  sr   € ð$ð 	ð &×,Ñ,¨[Ó9ˆØ�y‰y˜Ó&ˆð �{‰{˜7Ó# |×':Ñ':¸7Ó'CÒCÐCÐCØ�{‰{˜8Ó$¨×(;Ñ(;¸HÓ(EÒEÐEÑEr%   c                 ó¶   — d}| j                  |d¬«      }|j                  dv sJ ‚|j                  d«      |j                  d«      j                  d«      k(  sJ ‚y )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Ù  sg   € ð EˆØ�y‰y˜¸ˆyÓDˆð ×%Ñ%Ð)DÑDÐDÐDØ�{‰{˜7Ó#Ø×"Ñ" ;Ó/×6Ñ6°wÓ?ò
ð 	
ñ 
r%   c                 ó  — d}d|z  }| j                  |«      }|j                  dddi«      }|d   }d|k(  sJ ‚t        |t        «      sJ ‚d|j	                  d	«      k(  sJ ‚d
|j                  d	«      v sJ ‚d|j                  d«      v sJ ‚y )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-typeri  ztext/html; charset=x-sjisztext/html; charset=utf8rà   s   charset=utf8s   charset=shift-jisr�  )r+   r+  r8   r   Úsubstitute_encodingrä   )r#   Úmeta_tagrŸ  r+   Úparsed_metari  s         r$   Ú'test_meta_tag_reflects_current_encodingz@HTMLTreeBuilderSmokeTest.test_meta_tag_reflects_current_encodingå  s¿   € ð Wð 	ð7ð ñ	ˆð
 �y‰y˜Ó(ˆð —i‘i ¨°~Ð(FÓGˆØ˜iÑ(ˆØ*¨gÒ5Ð5Ð5ô ˜'Ô#<Ô=Ð=Ð=ð )¨G×,GÑ,GÈÓ,OÒOÐOÐOð  +×"4Ñ"4°VÓ"<Ñ<Ð<Ð<Ø# {×'9Ñ'9¸+Ó'FÑFÐFÑFr%   c                 ó  — d}d|z  }| j                  |«      }|j                  dd¬«      }|d   }d|k(  sJ ‚t        |t        «      sJ ‚d|j	                  d«      k(  sJ ‚d	|j                  d«      v sJ ‚d
|j                  d«      v sJ ‚y )Nz'<meta id="encoding" charset="x-sjis" />r§  r¿   Úencoding)rg   Úcharsetzx-sjisrà   s   charset="utf8"s   charset="shift-jis"r�  )r+   r+  r8   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ˆØ˜iÑ(ˆØ˜7Ò"Ð"Ð"ô ˜'Ô#<Ô=Ð=Ð=ð ˜×4Ñ4°VÓ<Ò<Ð<Ð<ð ! K×$6Ñ$6°vÓ$>Ñ>Ð>Ð>Ø%¨×);Ñ);¸KÓ)HÑHÐHÑHr%   c                 ó¬   — dD ]O  }| j                  |«      }t        D ]3  }|dv rŒ|j                  |«      }d|v sJ ‚|j                  d«      |vrŒ3J ‚ ŒQ y )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&  sw   € ð

ò 	?ˆFð —9‘9˜VÓ$ˆDÜ5ò ?�Øð  ñ ð ØŸ+™+ hÓ/�Ø)¨WÑ4Ð4Ð4Ø—‘ wÓ/°wÒ>Ð>Ð>ñ?ñ		?r%   c                 ó‚   — | j                  d«      }d|j                  d<   d|j                  j                  «       k(  sJ ‚y )Nz<a>text</a>rE  rá   z<a foo="bar">text</a>)r+   ry   r:   )r#   Údatas     r$   Ú5test_tag_with_no_attributes_can_have_attributes_addedzNHTMLTreeBuilderSmokeTest.test_tag_with_no_attributes_can_have_attributes_added@  s5   € Ø�y‰y˜Ó'ˆØˆ�‰ˆu‰Ø&¨$¯&©&¯-©-«/Ò9Ð9Ñ9r%   c                 ód   — | j                  d«      }d|j                  j                  «       k(  sJ ‚y )Nz0<body><div><p>text1</p></span>text2</div></body>z)<body><div><p>text1</p>text2</div></body>)r+   rg  r:   rÍ   s     r$   Ú$test_closing_tag_with_no_opening_tagz=HTMLTreeBuilderSmokeTest.test_closing_tag_with_no_opening_tagE  s.   € ð
 �y‰yÐKÓLˆØ:¸d¿i¹i×>NÑ>NÓ>PÒPÐPÑPr%   c                 óP   — | j                  t        «      }| j                  |«       y©z3Test the worst case (currently) for linking issues.N©r+   r   rW   rÍ   s     r$   Útest_worst_casez(HTMLTreeBuilderSmokeTest.test_worst_caseM  ó    € ð �y‰yœÓ&ˆØ×Ñ˜tÕ$r%   )ÚDOCTYPE)Iri   rj   rk   Ú__doc__rÉ   rÎ   rÙ   rÝ   r9   ré   r   Úbytesr   rã   rñ   rô   r÷   rù   rû   rý   r   r  r  r  r  r  r  r$  r&  r(  r,  r1  r8  r=  rA  rC  rH  rK  rM  rO  rQ  rS  rV  rY  r[  r]  r_  rb  rd  rj  rm  rs  ru  rx  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  s“  „ ñòBò>
9ò0ò,ð+°Sð +¸Tó +ð  <Eñ,Ø #ð,Ø58ð,à	ˆu�mÐ#Ñ	$ó,ò
ò%ò
/ò +òJòIòIòò ò	Fò -ò,ò(ò*ò'ò/ò@ò"/òEò$	.ò,ò
ò0
>ò0ò0òEò
ò
ò
3ò?ò9ò
ò
2ò'òBò	'ò/ò"
Fò1ò4ò.òMòò
ò	
òLò)ò
ò9ò2ò"ò8Fò$

òGòFIò<?ò4:ò
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y)ÚXMLTreeBuilderSmokeTestc                 óì   — | j                  d«      }t        j                  |d«      }t        j                  |«      }|j                  t
        k(  sJ ‚|j                  «       |j                  «       k(  sJ ‚y )NrÐ   r  )r+   rÑ   rÒ   rÔ   r“   r   r:   rÕ   s       r$   rÙ   z9XMLTreeBuilderSmokeTest.test_pickle_and_unpickle_identityU  s^   € ð �y‰y˜Ó)ˆÜ—‘˜d AÓ&ˆÜ—‘˜fÓ%ˆØ×Ñ¤=Ò0Ð0Ð0Ø�}‰}‹ $§+¡+£-Ò/Ð/Ñ/r%   c                 óP   — | j                  d«      }|j                  «       dk(  sJ ‚y )Nú<root/>s.   <?xml version="1.0" encoding="utf-8"?>
<root/>rî   rÍ   s     r$   Útest_docstring_generatedz0XMLTreeBuilderSmokeTest.test_docstring_generated^  s%   € Ø�y‰y˜Ó#ˆØ�{‰{‹}Ð RÒRÐRÑRr%   c                 óV   — d}| j                  |«      }||j                  d«      k(  sJ ‚y )Ns,   <?xml version="1.0" encoding="utf8"?>
<foo/>rà   rî   rˆ   s      r$   Útest_xml_declarationz,XMLTreeBuilderSmokeTest.test_xml_declarationb  s,   € ØEˆØ�y‰y˜Ó ˆØ˜Ÿ™ VÓ,Ò,Ð,Ñ,r%   c                 ó¢   — d}| j                  |«      }t        D ]3  }|dv rŒ|j                  |«      }d|v sJ ‚|j                  d«      |vrŒ3J ‚ y )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_declarationg  sk   € ð 6ˆØ�y‰y˜Ó ˆÜ1ò 	;ˆHØð ñ ð Ø—k‘k (Ó+ˆGØ+¨wÑ6Ð6Ð6Ø—?‘? 7Ó+°7Ò:Ð:Ð:ñ	;r%   c                 óV   — d}| j                  |«      }||j                  d«      k(  sJ ‚y )Ns<   <?xml version="1.0" encoding="utf8"?>
<?PITarget PIContent?>rà   rî   rˆ   s      r$   r  z3XMLTreeBuilderSmokeTest.test_processing_instruction~  s,   € ØUˆØ�y‰y˜Ó ˆØ˜Ÿ™ VÓ,Ò,Ð,Ñ,r%   c                 óV   — d}| j                  |«      }|j                  d«      |k(  sJ ‚y)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_documentƒ  s0   € ðˆð �y‰y˜Ó ˆØ�{‰{˜7Ó# vÒ-Ð-Ñ-r%   c                 óT   — d}| j                  |«      }||j                  «       k(  sJ ‚y )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Ž  s,   € ðˆð �y‰y˜‹~ˆØ�d—k‘k“mÒ#Ð#Ñ#r%   c                 ón   — d}t        |d«      }d|j                  _        |j                  «       }d|v sJ ‚y )Nz/
  <script type="text/javascript">
  </script>
zlxml-xmlzconsole.log("< < hey > > ");s   &lt; &lt; hey &gt; &gt;)r   rÌ   rb   rä   )r#   r×  r+   rº  s       r$   Ú5test_formatter_processes_script_tag_for_xml_documentszMXMLTreeBuilderSmokeTest.test_formatter_processes_script_tag_for_xml_documents™  s>   € ðˆô ˜S *Ó-ˆð <ˆ�‰ÔØ—+‘+“-ˆØ)¨WÑ4Ð4Ñ4r%   c                 ó`   — d}| j                  |«      }d|j                  j                  k(  sJ ‚y )Nu?   <?xml version="1.0" encoding="euc-jp"><root>SacrÃ© bleu!</root>rw  ©r+   Úrootrb   rˆ   s      r$   rx  z7XMLTreeBuilderSmokeTest.test_can_parse_unicode_document¥  s-   € ØsˆØ�y‰y˜Ó ˆØ 4§9¡9×#3Ñ#3Ò3Ð3Ñ3r%   c                 ó`   — d}| j                  |«      }d|j                  j                  k(  sJ ‚y )NuB   ï»¿<?xml version="1.0" encoding="euc-jp"><root>SacrÃ© bleu!</root>rw  rÜ  rˆ   s      r$   Ú1test_can_parse_unicode_document_begining_with_bomzIXMLTreeBuilderSmokeTest.test_can_parse_unicode_document_begining_with_bomª  s0   € ð GˆØ�y‰y˜Ó ˆØ 4§9¡9×#3Ñ#3Ò3Ð3Ñ3r%   c                 ó^   — d}| j                  |«      }t        |j                  «      |k(  sJ ‚y )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+   r9   Úrssrˆ   s      r$   Útest_popping_namespaced_tagz3XMLTreeBuilderSmokeTest.test_popping_namespaced_tag¯  s.   € ð WˆØ�y‰y˜Ó ˆÜ�4—8‘8‹} Ò&Ð&Ñ&r%   c                 óR   — | j                  d«      }|j                  d«      dk(  sJ ‚y )NrÍ  Úlatin1s/   <?xml version="1.0" encoding="latin1"?>
<root/>rî   rÍ   s     r$   Ú(test_docstring_includes_correct_encodingz@XMLTreeBuilderSmokeTest.test_docstring_includes_correct_encoding´  s*   € Ø�y‰y˜Ó#ˆà�K‰K˜Ó!Ð%XÒXð	
ÙXr%   c                 óV   — d}| j                  |«      }|j                  d«      |k(  sJ ‚y)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º  s3   € ðð 	ð
 �y‰y˜Ó ˆØ�{‰{˜7Ó# vÒ-Ð-Ñ-r%   c                 óJ   — | j                  dd«       | j                  d«       y )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Ä  s    € Ø×Ñ˜ Ô'Ø×Ñ˜Õ&r%   c                 ój   — d}| j                  |«      }|j                  }d|d   k(  sJ ‚d|d   k(  sJ ‚y )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È  sE   € ð wˆØ�y‰y˜Ó ˆØ�y‰yˆØ$¨¨Y©Ò7Ð7Ð7Ø$¨¨Y©Ò7Ð7Ñ7r%   c                 ó^   — d}| j                  |«      }t        |j                  «      |k(  sJ ‚y )NzN<p xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>20010504</dc:date></p>)r+   r9   rå   rˆ   s      r$   Útest_closing_namespaced_tagz3XMLTreeBuilderSmokeTest.test_closing_namespaced_tagÏ  s+   € ØaˆØ�y‰y˜Ó ˆÜ�4—6‘6‹{˜fÒ$Ð$Ñ$r%   c                 ó^   — d}| j                  |«      }t        |j                  «      |k(  sJ ‚y )Nzs<foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><bar xsi:schemaLocation="http://www.example.com"/></foo>©r+   r9   rá   rˆ   s      r$   Útest_namespaced_attributesz2XMLTreeBuilderSmokeTest.test_namespaced_attributesÔ  s.   € ð GˆØ�y‰y˜Ó ˆÜ�4—8‘8‹} Ò&Ð&Ñ&r%   c                 ó^   — d}| j                  |«      }t        |j                  «      |k(  sJ ‚y )Nz<foo xml:lang="fr">bar</foo>rï  rˆ   s      r$   Ú(test_namespaced_attributes_xml_namespacez@XMLTreeBuilderSmokeTest.test_namespaced_attributes_xml_namespaceÙ  s+   € Ø/ˆØ�y‰y˜Ó ˆÜ�4—8‘8‹} Ò&Ð&Ñ&r%   c                 óæ   — d}| j                  |«      }dt        |j                  d«      «      k(  sJ ‚dt        |j                  d«      «      k(  sJ ‚dt        |j                  d«      «      k(  sJ ‚	 y )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>
é   rd   r  zns1:tagrP   zns2:tag)r+   rU   r  rÖ  s      r$   Útest_find_by_prefixed_namez2XMLTreeBuilderSmokeTest.test_find_by_prefixed_nameÞ  sv   € ðˆð �y‰y˜‹~ˆð ”C˜Ÿ™ eÓ,Ó-Ò-Ð-Ð-ð ”C˜Ÿ™ iÓ0Ó1Ò1Ð1Ð1Ø”C˜Ÿ™ iÓ0Ó1Ò1Ð1Ð1àØr%   c                 ó¢   — d}| j                  |«      }|j                  }t        j                  |«      }|j                  |j                  k(  sJ ‚y )Nzf<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:w="http://example.com/ns0"/>)r+   Údocumentr  Úprefix)r#   Úxmlr+   rd   Ú	duplicates        r$   Ú!test_copy_tag_preserves_namespacez9XMLTreeBuilderSmokeTest.test_copy_tag_preserves_namespaceô  sH   € ð2ˆð �y‰y˜‹~ˆØ�m‰mˆÜ—I‘I˜c“Nˆ	ð �z‰z˜Y×-Ñ-Ò-Ð-Ñ-r%   c                 óP   — | j                  t        «      }| j                  |«       yrÂ  rÃ  rÍ   s     r$   rÄ  z'XMLTreeBuilderSmokeTest.test_worst_caseÿ  rÅ  r%   N)ri   rj   rk   rÙ   rÎ  rÐ  rÒ  r  r  rØ  rÚ  rx  rß  râ  rå  rç  ré  rë  rí  rð  rò  rõ  rû  rÄ  r-   r%   r$   rÊ  rÊ  T  sl   „ ò0òSò-ò
;ò.-ò
	.ò	$ò
5ò4ò
4ò
'ò

ò.ò'ò8ò%ò
'ò
'ò
=ò,	.ó%r%   rÊ  c                   ó.   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚHTML5TreeBuilderSmokeTestz2Smoke test for a tree builder that supports HTML5.c                  ó   — y r!   r-   r"   s    r$   r  z2HTML5TreeBuilderSmokeTest.test_real_xhtml_document	  s   € ð 	r%   c                 ó`   — d}| j                  |«      }d|j                  j                  k(  sJ ‚y )Nz<a>ro  )r+   ry   Ú	namespacerˆ   s      r$   Útest_html_tags_have_namespacez7HTML5TreeBuilderSmokeTest.test_html_tags_have_namespace  s-   € ØˆØ�y‰y˜Ó ˆØ-°·±×1AÑ1AÒAÐAÑAr%   c                 óš   — d}| j                  |«      }d}||j                  j                  k(  sJ ‚||j                  j                  k(  sJ ‚y )Nz<svg><circle/></svg>rr  )r+   Úsvgr  Úcircle©r#   r&   r+   r  s       r$   Útest_svg_tags_have_namespacez6HTML5TreeBuilderSmokeTest.test_svg_tags_have_namespace  sJ   € Ø'ˆØ�y‰y˜Ó ˆØ0ˆ	Ø˜DŸH™H×.Ñ.Ò.Ð.Ð.Ø˜DŸK™K×1Ñ1Ò1Ð1Ñ1r%   c                 óš   — d}| j                  |«      }d}||j                  j                  k(  sJ ‚||j                  j                  k(  sJ ‚y )Nz<math><msqrt>5</msqrt></math>rq  )r+   Úmathr  Úmsqrtr  s       r$   Útest_mathml_tags_have_namespacez9HTML5TreeBuilderSmokeTest.test_mathml_tags_have_namespace  sJ   € Ø0ˆØ�y‰y˜Ó ˆØ8ˆ	Ø˜DŸI™I×/Ñ/Ò/Ð/Ð/Ø˜DŸJ™J×0Ñ0Ò0Ð0Ñ0r%   c                 óà   — d}| j                  |«      }t        |j                  d   t        «      sJ ‚|j                  d   dk(  sJ ‚d|j                  d   j                  j
                  k(  sJ ‚y )Nz3<?xml version="1.0" encoding="utf-8"?><html></html>r   z$?xml version="1.0" encoding="utf-8"?rƒ   )r+   r8   rV   r   rH   rA   rˆ   s      r$   Ú$test_xml_declaration_becomes_commentz>HTML5TreeBuilderSmokeTest.test_xml_declaration_becomes_comment!  si   € ØFˆØ�y‰y˜Ó ˆÜ˜$Ÿ-™-¨Ñ*¬GÔ4Ð4Ð4Ø�}‰}˜QÑÐ#IÒIÐIÐIØ˜Ÿ™ qÑ)×6Ñ6×;Ñ;Ò;Ð;Ñ;r%   N)	ri   rj   rk   rÇ  r  r  r  r  r  r-   r%   r$   rþ  rþ    s   „ Ù<òò
Bò
2ò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   r9   Úobjectr   rp   r²   rÊ  rþ  r-   r%   r$   ú<module>r$     s4  ðâ ð €ã Û Û Û Û Ý ÷÷ ÷ õ $õõ (å #Ý 9÷õ ðÝ-àÐð —>‘>×+Ñ+¨JÓ7¸tÐCÐ ðÛØ€LØ—:‘:×*Ñ*€Lð
 &;€��kÑ"Ó :ð"€ˆcó "ôJM;ˆvô M;ô`BD˜8ô BDôJW%Ð3ô W%ôto%Ð2ô o%ôd <Ð 8õ  <øðk& ò ØÒðûð ò Ø€LØ‚Lðús$   Á%C0 ÂC= Ã0C:Ã9C:Ã=	D	ÄD	