Ë
    ò¦1hö#  ã                   ó˜   — d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	 ej                  j                  e d¬«       G d	„ d
e	«      «       Zy)zDTests to ensure that the html5lib tree builder generates good trees.é    N)ÚBeautifulSoup)ÚSoupStraineré   )ÚHTML5LIB_PRESENTÚHTML5TreeBuilderSmokeTestz?html5lib seems not to be present, not testing its tree builder.)Úreasonc                   óÎ   — e Zd ZdZed„ «       Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zej,                  j/                  ddddgfg«      d„ «       Zd„ Zy)ÚTestHTML5LibBuilderz"See ``HTML5TreeBuilderSmokeTest``.c                 ó   — ddl m} |S )Nr   )ÚHTML5TreeBuilder)Úbs4.builderr   )Úselfr   s     úU/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/bs4/tests/test_html5lib.pyÚdefault_builderz#TestHTML5LibBuilder.default_builder   s   € å0àÐó    c                 ó<  — t        d«      }d}t        j                  d¬«      5 }t        |d|¬«      }d d d «       j	                  «       | j                  |«      k(  sJ ‚\  }|j                  t        k(  sJ ‚dt        |j                  «      v sJ ‚y # 1 sw Y   Œ`xY w)NÚbz<p>A <b>bold</b> statement.</p>T©ÚrecordÚhtml5lib)Ú
parse_onlyz4the html5lib tree builder doesn't support parse_only)
r   ÚwarningsÚcatch_warningsr   ÚdecodeÚdocument_forÚfilenameÚ__file__ÚstrÚmessage)r   ÚstrainerÚmarkupÚwÚsoupÚwarnings         r   Útest_soupstrainerz%TestHTML5LibBuilder.test_soupstrainer   s£   € ä Ó$ˆØ2ˆÜ×$Ñ$¨DÔ1ð 	J°QÜ  ¨ÀÔIˆD÷	Jà�{‰{‹} × 1Ñ 1°&Ó 9Ò9Ð9Ð9à‰	ˆØ×Ñ¤8Ò+Ð+Ð+ØEÌØ�O‰OóJ
ñ 
ð 	
ñ 
÷	Jð 	Jús   ¤BÂBc                 óN   — d}| j                  |d«       | j                  d«       y)z8html5lib inserts <tbody> tags where other parsers don't.z[<table id="1"><tr><td>Here's another table:<table id="2"><tr><td>foo</td></tr></table></td>z†<table id="1"><tbody><tr><td>Here's another table:<table id="2"><tbody><tr><td>foo</td></tr></tbody></table></td></tr></tbody></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>N)Úassert_soup)r   r!   s     r   Útest_correctly_nested_tablesz0TestHTML5LibBuilder.test_correctly_nested_tables)   s9   € ðð 	ð 	×ÑØð)ô	
ð 	×Ñð;õ	
r   c                 óh   — d}| j                  |«      }d|j                  j                  «       k(  sJ ‚y )Nzy<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
   <p>foo</p>
  </body>
</html>s
   <p>foo</p>)r#   ÚpÚencode©r   r!   r#   s      r   Ú(test_xml_declaration_followed_by_doctypez<TestHTML5LibBuilder.test_xml_declaration_followed_by_doctypeA   s1   € ðˆð �y‰y˜Ó ˆà §¡§¡£Ò/Ð/Ñ/r   c                 ó¦   — d}| j                  |«      }d|j                  j                  «       k(  sJ ‚dt        |j	                  d«      «      k(  sJ ‚y )Nz%<p><em>foo</p>
<p>bar<a></a></em></p>zD<body><p><em>foo</em></p><em>
</em><p><em>bar<a></a></em></p></body>é   r*   ©r#   Úbodyr   ÚlenÚfind_allr,   s      r   Útest_reparented_markupz*TestHTML5LibBuilder.test_reparented_markupO   sU   € Ø9ˆØ�y‰y˜Ó ˆàSØ�y‰y×ÑÓ!ò"ð	
ð"ð ”C˜Ÿ™ cÓ*Ó+Ò+Ð+Ñ+r   c                 ó¦   — d}| j                  |«      }d|j                  j                  «       k(  sJ ‚dt        |j	                  d«      «      k(  sJ ‚y )Nz&<p><em>foo</p>
<p>bar<a></a></em></p>
zE<body><p><em>foo</em></p><em>
</em><p><em>bar<a></a></em></p>
</body>r/   r*   r0   r,   s      r   Ú+test_reparented_markup_ends_with_whitespacez?TestHTML5LibBuilder.test_reparented_markup_ends_with_whitespaceX   sU   € Ø;ˆØ�y‰y˜Ó ˆàUØ�y‰y×ÑÓ!ò"ð	
ð"ð ”C˜Ÿ™ cÓ*Ó+Ò+Ð+Ñ+r   c                 ó¼   — d}| j                  |«      }|j                  d¬«      \  }}|j                  d«      \  }}|j                  |u sJ ‚|j                  |u sJ ‚y)zƒVerify that we keep the two whitespace nodes in this
        document distinct when reparenting the adjacent <tbody> tags.
        z,<table> <tbody><tbody><ims></tbody> </table>ú ©ÚstringÚtbodyN)r#   r3   Únext_element)r   r!   r#   Úspace1Úspace2Útbody1Útbody2s          r   Ú<test_reparented_markup_containing_identical_whitespace_nodeszPTestHTML5LibBuilder.test_reparented_markup_containing_identical_whitespace_nodesa   sf   € ð @ˆØ�y‰y˜Ó ˆØŸ™¨c˜Ó2‰ˆ�ØŸ™ wÓ/‰ˆ�Ø×"Ñ" fÑ,Ð,Ð,Ø×"Ñ" fÑ,Ð,Ñ,r   c                 óö   — d}| j                  |«      }|j                  }d|j                  k(  sJ ‚|j                  d¬«      }|j	                  d¬«      d   }||j                  k(  sJ ‚||j
                  k(  sJ ‚y )NzF<div><a>aftermath<p><noscript>target</noscript>aftermath</a></p></div>Útargetr9   Ú	aftermathéÿÿÿÿ)r#   Únoscriptr<   Úfindr3   Úprevious_element)r   r!   r#   rF   rC   Úfinal_aftermaths         r   Ú*test_reparented_markup_containing_childrenz>TestHTML5LibBuilder.test_reparented_markup_containing_childrenl   sˆ   € àTð 	ð �y‰y˜Ó ˆØ—=‘=ˆØ˜8×0Ñ0Ò0Ð0Ð0Ø—‘ (�Ó+ˆð Ÿ-™-¨{˜-Ó;¸BÑ?ˆð
  &×"5Ñ"5Ò5Ð5Ð5Ø˜×9Ñ9Ò9Ð9Ñ9r   c                 ób   — d}| j                  |«      }t        |«      j                  d«      sJ ‚y)z(Processing instructions become comments.s   <?PITarget PIContent?>z<!--?PITarget PIContent?-->N)r#   r   Ú
startswithr,   s      r   Útest_processing_instructionz/TestHTML5LibBuilder.test_processing_instruction~   s.   € à.ˆØ�y‰y˜Ó ˆÜ�4‹y×#Ñ#Ð$AÔBÐBÑBr   c                 ól   — d}| j                  |«      }|j                  d«      \  }}||k(  sJ ‚||usJ ‚y )Ns   <a class="my_class"><p></a>Úa)r#   r3   )r   r!   r#   Úa1Úa2s        r   Útest_cloned_multivalue_nodez/TestHTML5LibBuilder.test_cloned_multivalue_node„   s>   € Ø3ˆØ�y‰y˜Ó ˆØ—‘˜sÓ#‰ˆˆBØ�RŠxˆˆxØ˜‰|Ð‰|r   c                 óh   — d}| j                  |«      }d|j                  j                  «       k(  sJ ‚y )Ns   <table><td></tbody>Az><body>A<table><tbody><tr><td></td></tr></tbody></table></body>)r#   r1   r   r,   s      r   Útest_foster_parentingz)TestHTML5LibBuilder.test_foster_parenting‹   s7   € Ø,ˆØ�y‰y˜Ó ˆàLØ�y‰y×ÑÓ!ò"ð	
ñ"r   c                 ó  — d}| j                  |«      } |d«      D �cg c]  }|j                  «       ‘Œ c}  |d«      D �cg c]  }|j                  «       ‘Œ c} t        |j                  d«      «      dk(  sJ ‚yc c}w c c}w )z€
        Test that extraction does not destroy the tree.

        https://bugs.launchpad.net/beautifulsoup/+bug/1782928
        zW
<html><head></head>
<style>
</style><script></script><body><p>hello</p></body></html>
ÚscriptÚstyler*   r   N)r#   Úextractr2   r3   )r   r!   r#   Úss       r   Útest_extractionz#TestHTML5LibBuilder.test_extraction“   sm   € ðˆð
 �y‰y˜Ó ˆÙ" 8›nÖ-˜ˆ�‰�Ó-Ù" 7›mÖ,˜ˆ�‰�Ó,ä�4—=‘= Ó%Ó&¨!Ò+Ð+Ñ+ùò 	.ùÚ,s   žA<ÁBc                 óº   — d}| j                  |«      }g }|j                  d«      D ]"  }|j                  |j                  d«      «       Œ$ t        |«      dk(  sJ ‚y)z‚
        Test that empty comment does not break structure.

        https://bugs.launchpad.net/beautifulsoup/+bug/1806598
        zI
<html>
<body>
<form>
<!----><input type="text">
</form>
</body>
</html>
ÚformÚinputr   N)r#   r3   Úextendr2   )r   r!   r#   Úinputsr\   s        r   Útest_empty_commentz&TestHTML5LibBuilder.test_empty_comment¥   s]   € ðˆð �y‰y˜Ó ˆØˆØ—M‘M &Ó)ò 	2ˆDØ�M‰M˜$Ÿ-™-¨Ó0Õ1ð	2ä�6‹{˜aÒÐÑr   c                 óx  — d}| j                  |«      }d|j                  j                  k(  sJ ‚d|j                  j                  k(  sJ ‚d|j                  j	                  d«      j
                  k(  sJ ‚| j                  |d¬«      }d |j                  j                  u sJ ‚d |j                  j                  u sJ ‚y )Nz=
   <p>

<sourceline>
<b>text</b></sourceline><sourcepos></p>r/   é   Ú
sourcelineF)Ústore_line_numbers)r#   r*   rc   Ú	sourceposrG   Únamer,   s      r   Útest_tracking_line_numbersz.TestHTML5LibBuilder.test_tracking_line_numbers»   s­   € ð UˆØ�y‰y˜Ó ˆØ�D—F‘F×%Ñ%Ò%Ð%Ð%Ø�D—F‘F×$Ñ$Ò$Ð$Ð$Ø˜tŸv™vŸ{™{¨<Ó8×=Ñ=Ò=Ð=Ð=ð �y‰y˜°EˆyÓ:ˆØ�t—v‘v×(Ñ(Ñ(Ð(Ð(Ø�t—v‘v×'Ñ'Ñ'Ð'Ñ'r   c                  ó   — y ©N© ©r   s    r   Útest_special_string_containersz2TestHTML5LibBuilder.test_special_string_containersÉ   s   € ð 	r   c                 óì   — dD ]o  \  }}}d|z  }| j                  |«      j                  }|j                  «       }d|j                  d«      z  }||k(  sJ ‚|j                  d¬«      }d|z  }||k(  rŒoJ ‚ y )N))z&RightArrowLeftArrow;u   â‡„s   &rlarr;)z&models;u   âŠ§s   &models;)z&Nfr;u   ð�”‘s   &Nfr;)z&ngeqq;u   â‰§Ì¸s   &ngeqq;)z&not;õ   Â¬s   &not;)z&Not;u   â«¬s   &Not;)z&quot;ú"ó   ")z&there4;õ   âˆ´ó   &there4;)z&Therefore;rq   rr   )z&therefore;rq   rr   )z&fjlig;Úfjs   fj)z&sqcup;u   âŠ”s   &sqcup;)z&sqcups;u   âŠ”ï¸€s   &sqcups;)z&apos;ú'ó   ')z&verbar;ú|ó   |z<div>%s</div>s   <div>%s</div>Úutf8Úhtml)Ú	formatter)r#   Údivr+   )	r   Úinput_elementÚoutput_unicodeÚoutput_elementr!   r{   Úwithout_elementÚexpectÚwith_elements	            r   Útest_html5_attributesz)TestHTML5LibBuilder.test_html5_attributesÏ   s�   € ð>
ò 	*Ñ9ˆM˜>¨>ð" % }Ñ4ˆFØ—)‘)˜FÓ#×'Ñ'ˆCØ!Ÿj™j›lˆOØ%¨×(=Ñ(=¸fÓ(EÑEˆFØ" fÒ,Ð,Ð,àŸ:™:°˜:Ó7ˆLØ%¨Ñ6ˆFØ 6Ó)Ð)Ð)ñ3	*r   z
name,value)Údocument_declared_encodingrx   Úexclude_encodingsrx   c                 ó  — | j                  «       }||i}t        j                  d¬«      5 }t         |j                  di |¤Ž«       d d d «       \  }t        |j                  «      }|d|› d|› d�k(  sJ ‚y # 1 sw Y   Œ1xY w)NTr   zYou provided a value for z0, but the html5lib tree builder doesn't support ú.)rO   )r   r   r   ÚlistÚprepare_markupr   r   )r   rf   ÚvalueÚbuilderÚkwargsr"   r$   Úmsgs           r   Útest_prepare_markup_warningsz0TestHTML5LibBuilder.test_prepare_markup_warningsó   s˜   € ð ×&Ñ&Ó(ˆØ˜�ˆÜ×$Ñ$¨DÔ1ð 	8°QÜÐ'�×'Ñ'Ñ6¨vÑ6Ô7÷	8à‰	ˆÜ�'—/‘/Ó"ˆàØ*¨4¨&Ð0`ÐaeÐ`fÐfgÐhòið	
ñi÷	8ð 	8ús   «A7Á7B c                  ó   — y ri   rj   rk   s    r   Útest_doctype_filteredz)TestHTML5LibBuilder.test_doctype_filtered  s   € ð 	r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr   r%   r(   r-   r4   r6   rA   rJ   rM   rR   rT   rZ   r`   rg   rl   r‚   ÚpytestÚmarkÚparametrizer�   r�   rj   r   r   r
   r
      s¡   „ ñ
 -àñ ó ð ò

ò
ò00ò,ò,ò	-ò:ò$Còò
ò,ò$ ò,(òò"*ðH ‡[�[×ÑØØ	/Ð2EÈÀxÐ1PÐQóñ
ó	ð
ór   r
   )r“   r•   r   Úbs4r   Ú
bs4.filterr   Ú r   r   r–   Úskipifr
   rj   r   r   ú<module>rœ      sU   ðÙ Jã Û å Ý #÷ð ‡�×ÑØÐØLð ó ôvÐ3ó vó	ñvr   