o
    üe]  ã                
   @   sŒ   d Z ddlZz
ddlmZ dZW n ey$ Z zdZW Y dZ[ndZ[ww 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                   @   s„   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d„ Zdd„ Zdd„ ZdS )ÚHTML5LibBuilderSmokeTestz"See ``HTML5TreeBuilderSmokeTest``.c                 C   s   t S )Nr   )Úself© r
   úGD:\Projects\ConvertPro\env\Lib\site-packages\bs4/tests/test_html5lib.pyÚdefault_builder   s   z(HTML5LibBuilderSmokeTest.default_builderc                 C   sx   t dƒ}d}tjdd}| j||d}W d   ƒ n1 sw   Y  |  | ¡ |  |¡¡ |  dt|d j	ƒv ¡ 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_forÚ
assertTrueÚstrÚmessage)r	   ZstrainerÚmarkupÚwr   r
   r
   r   Útest_soupstrainer   s   ÿÿÿÿz*HTML5LibBuilderSmokeTest.test_soupstrainerc                 C   s   d}|   |d¡ |   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   ó$   d}|   |¡}|  d|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   ó:   d}|   |¡}|  d|j ¡ ¡ |  dt| 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_allr   r
   r
   r   Útest_reparented_markupJ   ó   
z/HTML5LibBuilderSmokeTest.test_reparented_markupc                 C   r    )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   Ú+test_reparented_markup_ends_with_whitespaceQ   r'   zDHTML5LibBuilderSmokeTest.test_reparented_markup_ends_with_whitespacec                 C   sL   d}|   |¡}|jdd\}}| d¡\}}|j|u sJ ‚|j|u s$J ‚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)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}|  d|j¡ |jdd}|jddd }|  ||j¡ |  ||j¡ d S )NzF<div><a>aftermath<p><noscript>target</noscript>aftermath</a></p></div>Útargetr*   Z	aftermathéÿÿÿÿ)r   Únoscriptr   r,   Úfindr%   Zprevious_element)r	   r   r   r0   r.   Zfinal_aftermathr
   r
   r   Ú*test_reparented_markup_containing_childrenb   s   
zCHTML5LibBuilderSmokeTest.test_reparented_markup_containing_childrenc                 C   s$   d}|   |¡}t|ƒ d¡sJ ‚dS )z(Processing instructions become comments.s   <?PITarget PIContent?>z<!--?PITarget PIContent?-->N)r   r   Ú
startswithr   r
   r
   r   Útest_processing_instructionr   s   
z4HTML5LibBuilderSmokeTest.test_processing_instructionc                 C   s8   d}|   |¡}| d¡\}}|  ||¡ ||usJ ‚d S )Ns   <a class="my_class"><p></a>Úa)r   r%   r   )r	   r   r   Za1Za2r
   r
   r   Útest_cloned_multivalue_nodex   s
   
z4HTML5LibBuilderSmokeTest.test_cloned_multivalue_nodec                 C   r   )Ns   <table><td></tbody>Az><body>A<table><tbody><tr><td></td></tr></tbody></table></body>)r   r   r#   r   r   r
   r
   r   Útest_foster_parenting   s   
z.HTML5LibBuilderSmokeTest.test_foster_parentingc                 C   sL   d}|   |¡}dd„ |dƒD ƒ dd„ |dƒD ƒ |  t| d¡ƒd¡ d	S )
z€
        Test that extraction does not destroy the tree.

        https://bugs.launchpad.net/beautifulsoup/+bug/1782928
        zW
<html><head></head>
<style>
</style><script></script><body><p>hello</p></body></html>
c                 S   ó   g | ]}|  ¡ ‘qS r
   ©Úextract©Ú.0Úsr
   r
   r   Ú
<listcomp>‘   ó    z<HTML5LibBuilderSmokeTest.test_extraction.<locals>.<listcomp>Úscriptc                 S   r8   r
   r9   r;   r
   r
   r   r>   ’   r?   Ústyler   é   N)r   r   r$   r%   r   r
   r
   r   Útest_extraction„   s
   
z(HTML5LibBuilderSmokeTest.test_extractionc                 C   sF   d}|   |¡}g }| d¡D ]
}| | d¡¡ q|  t|ƒd¡ dS )z‚
        Test that empty comment does not break structure.

        https://bugs.launchpad.net/beautifulsoup/+bug/1806598
        zI
<html>
<body>
<form>
<!----><input type="text">
</form>
</body>
</html>
ÚformÚinputrB   N)r   r%   Úextendr   r$   )r	   r   r   ZinputsrD   r
   r
   r   Útest_empty_comment–   s   
	z+HTML5LibBuilderSmokeTest.test_empty_commentc                 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   r   r   rI   rJ   r1   Únamer   r
   r
   r   Útest_tracking_line_numbers¬   s   
z3HTML5LibBuilderSmokeTest.test_tracking_line_numbersN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr   r   r   r   r&   r(   r-   r2   r4   r6   r7   rC   rG   rL   r
   r
   r
   r   r      s"    
r   )rP   r   Zbs4.builderr   ZHTML5LIB_PRESENTÚImportErrorÚeZbs4.elementr   Zbs4.testingr   r   r   r   r
   r
   r
   r   Ú<module>   s     €ÿþ