3
dp                 @   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   s<   dddg}x,|D ]$}t jt | j|}W d Q R X qW d S )Ns	   
<![ s   <![n s   <![UNKNOWN[]]>)pytestZraisesr   soup)selfZ
bad_markupmarkupr    r   C/tmp/pip-build-8z3xcdsh/beautifulsoup4/bs4/tests/test_htmlparser.pytest_rejected_input   s    

z-TestHTMLParserTreeBuilder.test_rejected_inputc             C   s   d S )Nr   )r   r   r   r   test_namespaced_system_doctype*   s    z8TestHTMLParserTreeBuilder.test_namespaced_system_doctypec             C   s   d S )Nr   )r   r   r   r   test_namespaced_public_doctype.   s    z8TestHTMLParserTreeBuilder.test_namespaced_public_doctypec             C   s:   | j d}tj|d}tj|}t|jt|js6tdS )zfUnlike most tree builders, HTMLParserTreeBuilder and will
        be restored after pickling.
        z<a><b>foo</a>   N)r   pickledumpsloads
isinstanceZbuildertypeAssertionError)r   treeZdumpedZloadedr   r   r   test_builder_is_pickled2   s    

z1TestHTMLParserTreeBuilder.test_builder_is_pickledc             C   s   | j dd | j dd d S )Nz<br></br><br></br><br></br>z<br/><br/><br/>z</br></br></br> )assert_soup)r   r   r   r   )test_redundant_empty_element_closing_tags;   s    zCTestHTMLParserTreeBuilder.test_redundant_empty_element_closing_tagsc             C   s   | j dd d S )Nz
foo &# barzfoo &amp;# bar)r   )r   r   r   r   test_empty_element?   s    z,TestHTMLParserTreeBuilder.test_empty_elementc             C   sz   d}| j |}d|jjkstd|jjks.td|jjdjksDt| j |dd}d|jjjksdtd|jjjksvtd S )Nz=
   <p>

<sourceline>
<b>text</b></sourceline><sourcepos></p>r      
sourcelineF)Zstore_line_numbers	sourcepos)r   pr"   r   r#   findname)r   r   r   r   r   r   test_tracking_line_numbersD   s    
z4TestHTMLParserTreeBuilder.test_tracking_line_numbersc                s   d j  }d|jd ks tdg|jd ks4td|jd ksFt fdd}|d d |tjd |tjd	 d
d }||d	ddg d S )Nz;<a class="cls" href="url1" href="url2" href="url3" id="id">Zurl3hrefclsclassidc                sJ   j  | d}||jd ks tdg|jd ks4td|jd ksFtd S )N)on_duplicate_attributer(   r)   r*   r+   )r   ar   )r,   expectedr   )r   r   r   r   assert_attribute`   s
    
zOTestHTMLParserTreeBuilder.test_on_duplicate_attribute.<locals>.assert_attributeurl1c             S   s.   t | | ts| | g| |< | | j| d S )N)r   listappend)attrskeyvaluer   r   r   
accumulatep   s    zITestHTMLParserTreeBuilder.test_on_duplicate_attribute.<locals>.accumulateurl2)r   r-   r   r   ZREPLACEZIGNORE)r   r   r/   r6   r   )r   r   r   test_on_duplicate_attributeR   s    
	
z5TestHTMLParserTreeBuilder.test_on_duplicate_attributec       	      C   sn   xhd>D ]`\}}}d*| }| j |j}|j }d+|jd, }||ksFt|jd-d.}d+| }||kstqW d S )?N&RightArrowLeftArrow;   ⇄   &rlarr;&models;   ⊧   &models;&Nfr;   𝔑   &Nfr;&ngeqq;   ≧̸   &ngeqq;&not;   ¬   &not;&Not;   ⫬   &Not;&quot;"   "&there4;   ∴   &there4;&Therefore;&therefore;&fjlig;fj   fj&sqcup;   ⊔   &sqcup;&sqcups;   ⊔︀   &sqcups;&apos;'   '&verbar;|   |z<div>%s</div>s   <div>%s</div>utf8html)	formatterr9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rO   rP   rR   rO   rP   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   )re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   )r   divencoder   )	r   Zinput_elementZoutput_unicodeZoutput_elementr   rt   Zwithout_elementexpectZwith_elementr   r   r   test_html5_attributesv   s0                  z/TestHTMLParserTreeBuilder.test_html5_attributesN)__name__
__module____qualname__r   Zdefault_builderr   r   r   r   r   r    r'   r8   rw   r   r   r   r   r
      s   	$r
   )__doc__pdbr   r   r   warningsZbs4.builderr   r   r   Zbs4.builder._htmlparserr   r   r   r	   r
   r   r   r   r   <module>   s   