
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!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 )zƒVerify 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   