B
    `e                 @   sf   d Z ddlmZ ddlZddlmZmZ ddlmZ ddl	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)SoupTestHTMLTreeBuilderSmokeTest)HTMLParserTreeBuilder)BeautifulSoupHTMLParserc               @   sH   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S )HTMLParserTreeBuilderSmokeTestc             C   s   d S )N )selfr   r   a/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/bs4/tests/test_htmlparser.pytest_namespaced_system_doctype   s    z=HTMLParserTreeBuilderSmokeTest.test_namespaced_system_doctypec             C   s   d S )Nr   )r	   r   r   r
   test_namespaced_public_doctype   s    z=HTMLParserTreeBuilderSmokeTest.test_namespaced_public_doctypec             C   s<   |  d}t|d}t|}| t|jt|j dS )zfUnlike most tree builders, HTMLParserTreeBuilder and will
        be restored after pickling.
        z<a><b>foo</a>   N)souppickledumpsloads
assertTrue
isinstanceZbuildertype)r	   treeZdumpedZloadedr   r   r
   test_builder_is_pickled   s    

z6HTMLParserTreeBuilderSmokeTest.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> )assertSoupEquals)r	   r   r   r
   )test_redundant_empty_element_closing_tags   s    zHHTMLParserTreeBuilderSmokeTest.test_redundant_empty_element_closing_tagsc             C   s   |  dd d S )Nz
foo &# barzfoo &amp;# bar)r   )r	   r   r   r
   test_empty_element#   s    z1HTMLParserTreeBuilderSmokeTest.test_empty_elementc             C   sz   d}|  |}| d|jj | d|jj | d|jdj | j |dd}| d|jjj | d|jjj d S )Nz=
   <p>

<sourceline>
<b>text</b></sourceline><sourcepos></p>r      
sourcelineF)Zstore_line_numbers	sourcepos)r   assertEqualpr   r   findname)r	   markupr   r   r   r
   test_tracking_line_numbers(   s    
z9HTMLParserTreeBuilderSmokeTest.test_tracking_line_numbersc                s   d   }d|jd  dg|jd  d|jd   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  dg|jd  d|jd  d S )N)on_duplicate_attributer$   r%   r&   r'   )r   r   a)r(   expectedr   )r"   r	   r   r
   assert_attributeD   s
    
zTHTMLParserTreeBuilderSmokeTest.test_on_duplicate_attribute.<locals>.assert_attributeurl1c             S   s.   t | | ts| | g| |< | | | d S )N)r   listappend)attrskeyvaluer   r   r
   
accumulateT   s    zNHTMLParserTreeBuilderSmokeTest.test_on_duplicate_attribute.<locals>.accumulateurl2)r   r   r)   r   ZREPLACEZIGNORE)r	   r   r+   r2   r   )r"   r	   r
   test_on_duplicate_attribute6   s    
	
z:HTMLParserTreeBuilderSmokeTest.test_on_duplicate_attributeN)__name__
__module____qualname__r   Zdefault_builderr   r   r   r   r   r#   r4   r   r   r   r
   r   
   s   	r   c               @   s   e Zd Zdd ZdS )TestHTMLParserSubclassc             C   s   t  }|d dS )zlVerify that our HTMLParser subclass implements error() in a way
        that doesn't cause a crash.
        zdon't crashN)r   error)r	   parserr   r   r
   
test_error\   s    z!TestHTMLParserSubclass.test_errorN)r5   r6   r7   r;   r   r   r   r
   r8   [   s   r8   )__doc__pdbr   r   Zbs4.testingr   r   Zbs4.builderr   Zbs4.builder._htmlparserr   r   r8   r   r   r   r
   <module>   s   Q