
    Mh#                         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
                            e d           G d	 d
e	                      ZdS )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                            ddddgfg          d             Zd ZdS )TestHTML5LibBuilderz"See ``HTML5TreeBuilderSmokeTest``.c                     ddl m} |S )Nr   )HTML5TreeBuilder)bs4.builderr   )selfr   s     W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/bs4/tests/test_html5lib.pydefault_builderz#TestHTML5LibBuilder.default_builder   s    000000    c                 \   t          d          }d}t          j        d          5 }t          |d|          }d d d            n# 1 swxY w Y   |                                |                     |          k    sJ |\  }|j        t          k    sJ dt          |j	                  v sJ d S )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11 	JQ IIID	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J{{}} 1 1& 9 99999	8++++EOJ
 J
 
 
 
 
 
 
s   AA
A
c                 `    d}|                      |d           |                      d           dS )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)   sW     	 	)	
 	
 	
 	;	
 	
 	
 	
 	
r   c                 r    d}|                      |          }d|j                                        k    sJ d S )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   s=     yy  //////r   c                     d}|                      |          }d|j                                        k    sJ dt          |                    d                    k    sJ d S )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   sm    9yy  Sy!!" " " " Cc**++++++++r   c                     d}|                      |          }d|j                                        k    sJ dt          |                    d                    k    sJ d S )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   sm    ;yy  Uy!!" " " " Cc**++++++++r   c                     d}|                      |          }|                    d          \  }}|                    d          \  }}|j        |u sJ |j        |u sJ dS )zVerify 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   su     @yy  c22w//"f,,,,"f,,,,,,r   c                     d}|                      |          }|j        }d|j        k    sJ |                    d          }|                    d          d         }||j        k    sJ ||j        k    sJ d S )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 	 yy  =800000(++ --{-;;B?
 &"555559999999r   c                 |    d}|                      |          }t          |                              d          sJ dS )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?    .yy  4yy##$ABBBBBBBr   c                     d}|                      |          }|                    d          \  }}||k    sJ ||usJ d S )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   sK    3yy  s##BRxxxx||||||r   c                 r    d}|                      |          }d|j                                        k    sJ d S )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   sJ    ,yy  Ly!!" " " " " "r   c                     d}|                      |          }d  |d          D              d  |d          D              t          |                    d                    dk    sJ dS )	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>
c                 6    g | ]}|                                 S  extract.0ss     r   
<listcomp>z7TestHTML5LibBuilder.test_extraction.<locals>.<listcomp>   s     ------r   scriptc                 6    g | ]}|                                 S rW   rX   rZ   s     r   r]   z7TestHTML5LibBuilder.test_extraction.<locals>.<listcomp>   s     ,,,,,,r   styler*   r   N)r#   r2   r3   r,   s      r   test_extractionz#TestHTML5LibBuilder.test_extraction   s    
 yy  --dd8nn----,,dd7mm,,,,4==%%&&!++++++r   c                     d}|                      |          }g }|                    d          D ]*}|                    |                    d                     +t          |          dk    sJ dS )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#   inputsrc   s        r   test_empty_commentz&TestHTML5LibBuilder.test_empty_comment   sz     yy  MM&)) 	2 	2DMM$--0011116{{ar   c                 4   d}|                      |          }d|j        j        k    sJ d|j        j        k    sJ d|j                            d          j        k    sJ |                      |d          }d |j        j        u sJ d |j        j        u sJ d S )Nz=
   <p>

<sourceline>
<b>text</b></sourceline><sourcepos></p>r/      
sourcelineF)store_line_numbers)r#   r*   rj   	sourceposrG   namer,   s      r   test_tracking_line_numbersz.TestHTML5LibBuilder.test_tracking_line_numbers   s     Uyy  DF%%%%%DF$$$$$tv{{<88===== yyEy::tv(((((tv'''''''r   c                     d S NrW   r   s    r   test_special_string_containersz2TestHTML5LibBuilder.test_special_string_containers   s	     	r   c                    dD ]|\  }}}d|z  }|                      |          j        }|                                }d|                    d          z  }||k    sJ |                    d          }d|z  }||k    sJ }d S )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;rw   rx   )z&therefore;rw   rx   )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    >
 	* 	*9M>>" %}4F))F##'C!jjllO%(=(=f(E(EEF"f,,,,:::77L%6F6)))))3	* 	*r   z
name,value)document_declared_encodingr~   exclude_encodingsr~   c                    |                                  }||i}t          j        d          5 }t           |j        di |           d d d            n# 1 swxY w Y   |\  }t          |j                  }|d| d| dk    sJ d S )NTr   rO   zYou provided a value for z0, but the html5lib tree builder doesn't support .)rO   )r   r   r   listprepare_markupr   r   )r   rm   valuebuilderkwargsr"   r$   msgs           r   test_prepare_markup_warningsz0TestHTML5LibBuilder.test_prepare_markup_warnings   s     &&(($D111 	8Q''66v66777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8	'/""h4hhaehhhi i i i i is   AAAc                     d S rp   rW   rq   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   ra   rg   rn   rr   r   pytestmarkparametrizer   r   rW   r   r   r
   r
      sl       
 -,    X 

 
 

 
 
00 0 0, , ,, , ,	- 	- 	-: : :$C C C  
 
 
, , ,$     ,( ( (  "* "* "*H [	/2Ex1PQ 
 
	 
    r   r
   )r   r   r   bs4r   
bs4.filterr    r   r   r   skipifr
   rW   r   r   <module>r      s    J J         # # # # # #        L   v v v v v3 v v	 v v vr   