
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
6]+                 @   s   d Z ddlZyddlmZ dZW n& ek
rF Z z
dZW Y ddZ[X nX ddlmZ ddl	m
Z
mZmZ ee dG d	d
 d
ee
ZdS )zDTests to ensure that the html5lib tree builder generates good trees.    N)HTML5TreeBuilderTF)SoupStrainer)HTML5TreeBuilderSmokeTestSoupTestskipIfz?html5lib seems not to be present, not testing its tree builder.c               @   sl   e Zd ZdZe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d Zdd ZdS )HTML5LibBuilderSmokeTestz"See ``HTML5TreeBuilderSmokeTest``.c             C   s   t  S )N)r   )self r	   #/usr/lib/python3.6/test_html5lib.pydefault_builder   s    z(HTML5LibBuilderSmokeTest.default_builderc             C   sd   t d}d}tjdd}| j||d}W d Q R X | j|j | j| | jdt|d j	k d S )Nbz<p>A <b>bold</b> statement.</p>T)record)Z
parse_onlyz4the html5lib tree builder doesn't support parse_onlyr   )
r   warningscatch_warningssoupassertEqualdecodeZdocument_forZ
assertTruestrmessage)r   Zstrainermarkupwr   r	   r	   r
   test_soupstrainer   s    z*HTML5LibBuilderSmokeTest.test_soupstrainerc             C   s   d}| j |d | j d dS )z8html5lib inserts <tbody> tags where other parsers don't.z[<table id="1"><tr><td>Here's another table:<table id="2"><tr><td>foo</td></tr></table></td>z<table id="1"><tbody><tr><td>Here's another table:<table id="2"><tbody><tr><td>foo</td></tr></tbody></table></td></tr></tbody></table>z{<table><thead><tr><td>Foo</td></tr></thead><tbody><tr><td>Bar</td></tr></tbody><tfoot><tr><td>Baz</td></tr></tfoot></table>N)ZassertSoupEquals)r   r   r	   r	   r
   test_correctly_nested_tables(   s    z5HTML5LibBuilderSmokeTest.test_correctly_nested_tablesc             C   s$   d}| j |}| jd|jj  d S )Nzy<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
   <p>foo</p>
  </body>
</html>s
   <p>foo</p>)r   r   pencode)r   r   r   r	   r	   r
   (test_xml_declaration_followed_by_doctype<   s    	
zAHTML5LibBuilderSmokeTest.test_xml_declaration_followed_by_doctypec             C   s:   d}| j |}| jd|jj  | jdt|jd d S )Nz%<p><em>foo</p>
<p>bar<a></a></em></p>zD<body><p><em>foo</em></p><em>
</em><p><em>bar<a></a></em></p></body>   r   )r   r   bodyr   lenfind_all)r   r   r   r	   r	   r
   test_reparented_markupJ   s    
z/HTML5LibBuilderSmokeTest.test_reparented_markupc             C   s:   d}| j |}| jd|jj  | jdt|jd d S )Nz&<p><em>foo</p>
<p>bar<a></a></em></p>
zE<body><p><em>foo</em></p><em>
</em><p><em>bar<a></a></em></p>
</body>r   r   )r   r   r   r   r   r   )r   r   r   r	   r	   r
   +test_reparented_markup_ends_with_whitespaceQ   s    
zDHTML5LibBuilderSmokeTest.test_reparented_markup_ends_with_whitespacec             C   sL   d}| j |}|jdd\}}|jd\}}|j|ks:t|j|ksHtdS )zVerify that we keep the two whitespace nodes in this
        document distinct when reparenting the adjacent <tbody> tags.
        z,<table> <tbody><tbody><ims></tbody> </table> )stringZtbodyN)r   r   next_elementAssertionError)r   r   r   Zspace1Zspace2Ztbody1Ztbody2r	   r	   r
   <test_reparented_markup_containing_identical_whitespace_nodesW   s    
zUHTML5LibBuilderSmokeTest.test_reparented_markup_containing_identical_whitespace_nodesc             C   s^   d}| j |}|j}| jd|j |jdd}|jddd }| j||j | j||j d S )NzF<div><a>aftermath<p><noscript>target</noscript>aftermath</a></p></div>target)r#   Z	aftermath   )r   noscriptr   r$   findr   Zprevious_element)r   r   r   r*   r'   Zfinal_aftermathr	   r	   r
   *test_reparented_markup_containing_childrenb   s    
zCHTML5LibBuilderSmokeTest.test_reparented_markup_containing_childrenc             C   s$   d}| j |}t|jds tdS )z(Processing instructions become comments.s   <?PITarget PIContent?>z<!--?PITarget PIContent?-->N)r   r   
startswithr%   )r   r   r   r	   r	   r
   test_processing_instructionr   s    
z4HTML5LibBuilderSmokeTest.test_processing_instructionc             C   s8   d}| j |}|jd\}}| j|| ||k	s4td S )Ns   <a class="my_class"><p></a>a)r   r   r   r%   )r   r   r   Za1Za2r	   r	   r
   test_cloned_multivalue_nodex   s
    
z4HTML5LibBuilderSmokeTest.test_cloned_multivalue_nodec             C   s$   d}| j |}| jd|jj  d S )Ns   <table><td></tbody>Az><body>A<table><tbody><tr><td></td></tr></tbody></table></body>)r   r   r   r   )r   r   r   r	   r	   r
   test_foster_parenting   s    
z.HTML5LibBuilderSmokeTest.test_foster_parentingN)__name__
__module____qualname____doc__propertyr   r   r   r   r    r!   r&   r,   r.   r0   r1   r	   r	   r	   r
   r      s   r   )r5   r   Zbs4.builderr   ZHTML5LIB_PRESENTImportErroreZbs4.elementr   Zbs4.testingr   r   r   r   r	   r	   r	   r
   <module>   s   