
    Owgp                     t    d Z ddlmZ ddl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mZ  G d d	ee      Zy)
zGTests to ensure that the html.parser tree builder generates good
trees.    )	set_traceN)HTMLParserTreeBuilderParserRejectedMarkupXMLParsedAsHTMLWarning)BeautifulSoupHTMLParser   )SoupTestHTMLTreeBuilderSmokeTestc                   F    e Zd ZeZd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Zy
)TestHTMLParserTreeBuilderc                     g d}|D ]5  }t        j                  t              5  | j                  |      }d d d        7 y # 1 sw Y   BxY w)N)s	   
<![ s   <![n s   <![UNKNOWN[]]>)pytestraisesr   soup)self
bad_markupmarkupr   s       P/var/www/horilla/myenv/lib/python3.12/site-packages/bs4/tests/test_htmlparser.pytest_rejected_inputz-TestHTMLParserTreeBuilder.test_rejected_input   sO    

 ! 	)F34 )yy() )	)) )s   A  A		c                      y N r   s    r   test_namespaced_system_doctypez8TestHTMLParserTreeBuilder.test_namespaced_system_doctype*           c                      y r   r   r   s    r   test_namespaced_public_doctypez8TestHTMLParserTreeBuilder.test_namespaced_public_doctype.   r   r   c                     | j                  d      }t        j                  |d      }t        j                  |      }t	        |j
                  t        |j
                              sJ y)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_pickled2   sM     yy)dA&f%&..$t||*<===r   c                 L    | j                  dd       | j                  dd       y )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_tags;   s%    68IJ*B/r   c                 (    | j                  dd       y )Nz
foo &# barzfoo &amp;# barr-   r   s    r   test_empty_elementz,TestHTMLParserTreeBuilder.test_empty_element?   s     	'78r   c                    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                  j
                  k(  sJ d|j                  j                  j
                  k(  sJ y )Nz=
   <p>

<sourceline>
<b>text</b></sourceline><sourcepos></p>r       
sourcelineF)store_line_numbers	sourcepos)r   pr4   r6   findname)r   r   r   s      r   test_tracking_line_numbersz4TestHTMLParserTreeBuilder.test_tracking_line_numbersD   s     Uyy DFF%%%%%DFF$$$$$tvv{{<8===== yyEy:tvv0055555dff..33333r   c                 >    d j                        }d|j                  d   k(  sJ dg|j                  d   k(  sJ d|j                  d   k(  sJ  fd} |d d        |t        j                  d        |t        j                  d       d	 } ||g d
       y )Nz;<a class="cls" href="url1" href="url2" href="url3" id="id">url3hrefclsclassidc                     j                  |       }||j                  d   k(  sJ dg|j                  d   k(  sJ d|j                  d   k(  sJ y )N)on_duplicate_attributer=   r>   r?   r@   )r   a)rB   expectedr   r   r   s      r   assert_attributezOTestHTMLParserTreeBuilder.test_on_duplicate_attribute.<locals>.assert_attribute`   sd    99/E  D tvvf~--- 7dffWo---466$<'''r   url1c                 d    t        | |   t              s	| |   g| |<   | |   j                  |       y r   )r$   listappend)attrskeyvalues      r   
accumulatezITestHTMLParserTreeBuilder.test_on_duplicate_attribute.<locals>.accumulatep   s1    eCj$/#Cj\c
#Je$r   )rF   url2r<   )r   rC   r   REPLACEIGNORE)r   r   rE   rM   r   s   `   @r   test_on_duplicate_attributez5TestHTMLParserTreeBuilder.test_on_duplicate_attributeR   s     O yy '''w$&&/)))tvvd|###	( 	v&088&A 	077@	% 	%=>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;rV   rW   )z&therefore;rV   rW   )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   r`   without_elementexpectwith_elements	            r   test_html5_attributesz/TestHTMLParserTreeBuilder.test_html5_attributesv   s    
>
 	*9M>>" %}4F))F#''C!jjlO%(=(=f(EEF"f,,,:::7L%6F6)))3	*r   N)__name__
__module____qualname__r   default_builderr   r   r   r*   r/   r1   r:   rQ   rh   r   r   r   r   r      s5    +O),>09
4"?H*r   r   )__doc__pdbr   r!   r   warningsbs4.builderr   r   r   bs4.builder._htmlparserr   r,   r	   r
   r   r   r   r   <module>rr      s;   
     
 < 0D**B D*r   