
    Mh                     n    d Z ddlZddlZddlmZmZmZ ddlmZ ddl	m
Z
 ddlmZ  G d d	e          ZdS )
zGTests to ensure that the html.parser tree builder generates good
trees.    N)_DuplicateAttributeHandlerBeautifulSoupHTMLParserHTMLParserTreeBuilder)ParserRejectedMarkup)Any   )HTMLTreeBuilderSmokeTestc                   N    e Zd ZeZd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 ZdS )TestHTMLParserTreeBuilderc                     g d}|D ]H}t          j        t                    5  |                     |           d d d            n# 1 swxY w Y   Id S )N)s	   
<![ s   <![n s   <![UNKNOWN[]]>)pytestraisesr   soup)self
bad_markupmarkups      Y/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/bs4/tests/test_htmlparser.pytest_rejected_inputz-TestHTMLParserTreeBuilder.test_rejected_input   s    

 

 


 ! 	" 	"F344 " "		&!!!" " " " " " " " " " " " " " "	" 	"s   AA	A	c                     d S N r   s    r   test_namespaced_system_doctypez8TestHTMLParserTreeBuilder.test_namespaced_system_doctype(           c                     d S r   r   r   s    r   test_namespaced_public_doctypez8TestHTMLParserTreeBuilder.test_namespaced_public_doctype,   r   r   c                     |                      d          }t          j        |d          }t          j        |          }t	          |j        t          |j                            sJ dS )zfUnlike most tree builders, HTMLParserTreeBuilder and will
        be restored after pickling.
        z<a><b>foo</a>   N)r   pickledumpsloads
isinstancebuildertype)r   treedumpedloadeds       r   test_builder_is_pickledz1TestHTMLParserTreeBuilder.test_builder_is_pickled0   s]     yy))dA&&f%%&.$t|*<*<=======r   c                 ^    |                      dd           |                      dd           d S )Nz<br></br><br></br><br></br>z<br/><br/><br/>z</br></br></br> assert_soupr   s    r   )test_redundant_empty_element_closing_tagszCTestHTMLParserTreeBuilder.test_redundant_empty_element_closing_tags9   s7    68IJJJ*B/////r   c                 2    |                      dd           d S )Nz
foo &# barzfoo &amp;# barr,   r   s    r   test_empty_elementz,TestHTMLParserTreeBuilder.test_empty_element=   s!     	'788888r   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   pr3   	sourceposfindnamer   r   r   s      r   test_tracking_line_numbersz4TestHTMLParserTreeBuilder.test_tracking_line_numbersB   s     Uyy  DF%%%%%DF$$$$$tv{{<88===== yyEy::tv(((((tv'''''''r   c                 l    d                                }d|j        d         k    sJ dg|j        d         k    sJ d|j        d         k    sJ dt          dt          d	d f fd
} |d d            |t          j        d            |t          j        d           d } ||g d           d S )Nz;<a class="cls" href="url1" href="url2" href="url3" id="id">url3hrefclsclassidon_duplicate_attributeexpectedreturnc                                          |           }|j        J ||j        d         k    sJ dg|j        d         k    sJ d|j        d         k    sJ d S )N)rA   r=   r>   r?   r@   )r   a)rA   rB   r   r   r   s      r   assert_attributezOTestHTMLParserTreeBuilder.test_on_duplicate_attribute.<locals>.assert_attribute^   sx     99V<R9SSD6%%%tvf~---- 7dfWo----46$<''''''r   url1c                     t          | |         t                    s| |         g| |<   | |                             |           d S r   )r#   listappend)attrskeyvalues      r   
accumulatezITestHTMLParserTreeBuilder.test_on_duplicate_attribute.<locals>.accumulatep   sE    eCj$// *#Cj\c
#Je$$$$$r   )rG   url2r<   )r   rE   r   r   r   REPLACEIGNORE)r   r   rF   rN   r   s   `   @r   test_on_duplicate_attributez5TestHTMLParserTreeBuilder.test_on_duplicate_attributeP   s    O yy  ''''w$&/))))tvd|####		($>		(JM		(		( 		( 		( 		( 		( 		( 		( 	v&&&08&AAA 	07@@@	% 	% 	%
 	%=%=%=>>>>>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   divencode)	r   input_elementoutput_unicodeoutput_elementr   ra   without_elementexpectwith_elements	            r   test_html5_attributesz/TestHTMLParserTreeBuilder.test_html5_attributesw   s    
>
 	* 	*9M>>" %}4F))F##'C!jjllO%(=(=f(E(EEF"f,,,,:::77L%6F6)))))3	* 	*r   c                     d}|                      |          }d|j                                        k    sJ d}|                      |          }d|j                                        k    sJ d S )Nz<p>a &nosuchentity b</p>z<p>a &amp;nosuchentity b</p>z<p>a &nosuchentity; b</p>)r   r5   decoder9   s      r   test_invalid_html_entityz2TestHTMLParserTreeBuilder.test_invalid_html_entity   sl     ,yy  -@@@@,yy  -@@@@@@r   N)__name__
__module____qualname__r   default_builderr   r   r   r)   r.   r0   r:   rR   ri   rl   r   r   r   r   r      s        +O" " "*    > > >0 0 09 9 9
( ( (%? %? %?N* * *@
A 
A 
A 
A 
Ar   r   )__doc__r    r   bs4.builder._htmlparserr   r   r   bs4.exceptionsr   typingr   r+   r	   r   r   r   r   <module>ru      s   
 
           
 0 / / / / /       & & & & & &QA QA QA QA QA 8 QA QA QA QA QAr   