a
    #.c                     @   sr   d Z ddlmZ ddlZddlZddlmZmZ ddlm	Z	 ddl
mZmZ G dd	 d	eeZG d
d deZdS )zGTests to ensure that the html.parser tree builder generates good
trees.    )	set_traceN)HTMLParserTreeBuilderXMLParsedAsHTMLWarning)BeautifulSoupHTMLParser   )SoupTestHTMLTreeBuilderSmokeTestc                   @   sP   e Zd ZeZdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd ZdS )TestHTMLParserTreeBuilderc                 C   s   d S N selfr   r   S/var/www/brookimports/venv/lib/python3.9/site-packages/bs4/tests/test_htmlparser.pytest_namespaced_system_doctype   s    z8TestHTMLParserTreeBuilder.test_namespaced_system_doctypec                 C   s   d S r
   r   r   r   r   r   test_namespaced_public_doctype   s    z8TestHTMLParserTreeBuilder.test_namespaced_public_doctypec                 C   s:   |  d}t|d}t|}t|jt|js6J dS )zfUnlike most tree builders, HTMLParserTreeBuilder and will
        be restored after pickling.
        z<a><b>foo</a>   N)souppickledumpsloads
isinstanceZbuildertype)r   treeZdumpedZloadedr   r   r   test_builder_is_pickled   s    

z1TestHTMLParserTreeBuilder.test_builder_is_pickledc                 C   s   |  dd |  dd d S )Nz<br></br><br></br><br></br>z<br/><br/><br/>z</br></br></br> Zassert_soupr   r   r   r   )test_redundant_empty_element_closing_tags#   s    zCTestHTMLParserTreeBuilder.test_redundant_empty_element_closing_tagsc                 C   s   |  dd d S )Nz
foo &# barzfoo &amp;# barr   r   r   r   r   test_empty_element'   s    z,TestHTMLParserTreeBuilder.test_empty_elementc                 C   sz   d}|  |}d|jjksJ d|jjks.J d|jdjksDJ | j |dd}d|jjjksdJ d|jjjksvJ d S )Nz=
   <p>

<sourceline>
<b>text</b></sourceline><sourcepos></p>r      
sourcelineF)Zstore_line_numbers	sourcepos)r   pr   r    findname)r   markupr   r   r   r   test_tracking_line_numbers,   s    
z4TestHTMLParserTreeBuilder.test_tracking_line_numbersc                    s   d   }d|jd ks J dg|jd ks4J d|jd ksFJ  fdd}|d d |tjd |tjd	 d
d }||g d d S )Nz;<a class="cls" href="url1" href="url2" href="url3" id="id">url3hrefclsclassidc                    sJ   j  | d}||jd ks J dg|jd ks4J d|jd ksFJ d S )N)on_duplicate_attributer'   r(   r)   r*   )r   a)r+   expectedr   r$   r   r   r   assert_attributeH   s    zOTestHTMLParserTreeBuilder.test_on_duplicate_attribute.<locals>.assert_attributeurl1c                 S   s.   t | | ts| | g| |< | | | d S r
   )r   listappend)attrskeyvaluer   r   r   
accumulateX   s    zITestHTMLParserTreeBuilder.test_on_duplicate_attribute.<locals>.accumulate)r0   url2r&   )r   r,   r   ZREPLACEZIGNORE)r   r   r/   r6   r   r.   r   test_on_duplicate_attribute:   s    
	
z5TestHTMLParserTreeBuilder.test_on_duplicate_attributec           	      C   sj   dD ]`\}}}d| }|  |j}| }d|d }||ksDJ |jdd}d| }||ksJ q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;r<   r=   )z&therefore;r<   r=   )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   Zinput_elementZoutput_unicodeZoutput_elementr$   rF   Zwithout_elementexpectZwith_elementr   r   r   test_html5_attributes^   s    z/TestHTMLParserTreeBuilder.test_html5_attributesN)__name__
__module____qualname__r   Zdefault_builderr   r   r   r   r   r%   r8   rI   r   r   r   r   r	      s   	$r	   c                   @   s   e Zd Zdd ZdS )TestHTMLParserSubclassc                 C   sX   t  }tjdd}|d W d   n1 s20    Y  |\}dt|jksTJ dS )zlVerify that our HTMLParser subclass implements error() in a way
        that doesn't cause a crash.
        T)recordzdon't crashN)r   warningscatch_warningserrorstrmessage)r   parserZwarnswarningr   r   r   
test_error   s
    (z!TestHTMLParserSubclass.test_errorN)rJ   rK   rL   rV   r   r   r   r   rM   ~   s   rM   )__doc__pdbr   r   rO   Zbs4.builderr   r   Zbs4.builder._htmlparserr   r   r   r   r	   rM   r   r   r   r   <module>   s   p