o
    \hp                     @   sn   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	 d	eeZdS )
zGTests to ensure that the html.parser tree builder generates good
trees.    )	set_traceN)HTMLParserTreeBuilderParserRejectedMarkupXMLParsedAsHTMLWarning)BeautifulSoupHTMLParser   )SoupTestHTMLTreeBuilderSmokeTestc                   @   sX   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d ZdS )TestHTMLParserTreeBuilderc              	   C   sJ   g d}|D ]}t t | |}W d    n1 sw   Y  qd S )N)s	   
<![ s   <![n s   <![UNKNOWN[]]>)pytestraisesr   soup)self
bad_markupmarkupr    r   \/home/air/segue/gemini/backup/venv/lib/python3.10/site-packages/bs4/tests/test_htmlparser.pytest_rejected_input   s   z-TestHTMLParserTreeBuilder.test_rejected_inputc                 C      d S Nr   r   r   r   r   test_namespaced_system_doctype*      z8TestHTMLParserTreeBuilder.test_namespaced_system_doctypec                 C   r   r   r   r   r   r   r   test_namespaced_public_doctype.   r   z8TestHTMLParserTreeBuilder.test_namespaced_public_doctypec                 C   s:   |  d}t|d}t|}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loadedr   r   r   test_builder_is_pickled2   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> 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s"J | j |dd}d|jjjks2J d|jjjks;J d S )Nz=
   <p>

<sourceline>
<b>text</b></sourceline><sourcepos></p>r      
sourcelineF)store_line_numbers	sourcepos)r   pr+   r-   findname)r   r   r   r   r   r   test_tracking_line_numbersD   s   
z4TestHTMLParserTreeBuilder.test_tracking_line_numbersc                    s   d   }d|jd ksJ dg|jd ksJ d|jd ks#J  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sJ d|jd ks#J d S )N)on_duplicate_attributer3   r4   r5   r6   )r   a)r7   expectedr   r   r   r   r   assert_attribute`   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   
accumulatep   s   zITestHTMLParserTreeBuilder.test_on_duplicate_attribute.<locals>.accumulate)r<   url2r2   )r   r8   r   REPLACEIGNORE)r   r   r;   rB   r   r:   r   test_on_duplicate_attributeR   s   

	z5TestHTMLParserTreeBuilder.test_on_duplicate_attributec           	      C   sj   dD ]0\}}}d| }|  |j}| }d|d }||ks"J |jdd}d| }||ks2J 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;rJ   rK   )z&therefore;rJ   rK   )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   rT   without_elementexpectwith_elementr   r   r   test_html5_attributesv   s   z/TestHTMLParserTreeBuilder.test_html5_attributesN)__name__
__module____qualname__r   default_builderr   r   r   r$   r(   r)   r1   rF   r\   r   r   r   r   r
      s    	$r
   )__doc__pdbr   r   r   warningsbs4.builderr   r   r   bs4.builder._htmlparserr   r%   r   r	   r
   r   r   r   r   <module>   s    