
    Mh                     *   d Z ddlZddlZddlZddlmZmZ erddlmZm	Z	 ddl
mZ ddlmZmZmZ ej                            e d	           G d
 de                      Zej                            e d	           G d de                      ZdS )z@Tests to ensure that the lxml tree builder generates good trees.    N   )LXML_PRESENTLXML_VERSION)LXMLTreeBuilderLXMLTreeBuilderForXML)BeautifulStoneSoup)HTMLTreeBuilderSmokeTestXMLTreeBuilderSmokeTestSOUP_SIEVE_PRESENTz;lxml seems not to be present, not testing its tree builder.reasonc                       e Zd ZdZed             Zd Zd Zej	        
                    e pedk     d          d             Zd	 Zd
 ZdS )TestLXMLTreeBuilder!See ``HTMLTreeBuilderSmokeTest``.c                     t           S N)r   selfs    S/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/bs4/tests/test_lxml.pydefault_builderz#TestLXMLTreeBuilder.default_builder   s        c                     |                      dd           |                      dd           |                      dd           d S )Nz<p>foo&#10000000000000;bar</p>z<p>foobar</p>z<p>foo&#x10000000000000;bar</p>z<p>foo&#1000000000;bar</p>)assert_soupr   s    r   test_out_of_range_entityz,TestLXMLTreeBuilder.test_out_of_range_entity    sM    9?KKK:OLLL5GGGGGr   c                     d S r    r   s    r   *test_entities_in_foreign_document_encodingz>TestLXMLTreeBuilder.test_entities_in_foreign_document_encoding%   s	     	r   )         r   z@Skipping doctype test for old version of lxml to avoid segfault.r   c                 ~    |                      d          }|j        d         }d|                                k    sJ d S )Nz
<!DOCTYPE>r    )soupcontentsstrip)r   r#   doctypes      r   test_empty_doctypez&TestLXMLTreeBuilder.test_empty_doctype.   s@    
 yy&&-"W]]__$$$$$$r   c                    t          j        d          5 }t          d          }d d d            n# 1 swxY w Y   dt          |j                  k    sJ |\  }|j        t          k    sJ dt          |j                  v sJ d S )NT)recordz<b />z<b/>z+The BeautifulStoneSoup class was deprecated)warningscatch_warningsr   strbfilename__file__message)r   wr#   warnings       r   %test_beautifulstonesoup_is_xml_parserz9TestLXMLTreeBuilder.test_beautifulstonesoup_is_xml_parser7   s     $D111 	/Q%g..D	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/TV$$$$	8++++<GO@T@TTTTTTTs   266c                 t    |                      dd          }d |j        j        u sJ d |j        j        u sJ d S )Nz=
   <p>

<sourceline>
<b>text</b></sourceline><sourcepos></p>T)store_line_numbers)r#   p
sourceline	sourceposr   r#   s     r   test_tracking_line_numbersz.TestLXMLTreeBuilder.test_tracking_line_numbersA   sV     yyO#  
 
 tv(((((tv'''''''r   N)__name__
__module____qualname____doc__propertyr   r   r   pytestmarkskipifr   r   r'   r3   r:   r   r   r   r   r      s        
 ,+  XH H H
   [7L<7Q   % %	 %
U U U( ( ( ( (r   r   z?lxml seems not to be present, not testing its XML tree builder.c                       e Zd ZdZed             Zd Zej        	                    e
 d          d             Zd ZdS )	TestLXMLXMLTreeBuilderr   c                     t           S r   )r   r   s    r   r   z&TestLXMLXMLTreeBuilder.default_builderX   s    $$r   c                     |                      d          }|j        ddddk    sJ |j        j        ddik    sJ |j        j        dddk    sJ |j        j        dddk    sJ |j        j        dddk    sJ d S )	Nam  <?xml version="1.1"?>
<root><tag xmlns="http://unprefixed-namespace.com">content</tag><prefix:tag2 xmlns:prefix="http://prefixed-namespace.com">content</prefix:tag2><prefix2:tag3 xmlns:prefix2="http://another-namespace.com"><subtag xmlns="http://another-unprefixed-namespace.com"><subsubtag xmlns="http://yet-another-unprefixed-namespace.com"></prefix2:tag3></root>z$http://www.w3.org/XML/1998/namespacezhttp://prefixed-namespace.comzhttp://another-namespace.com)xmlprefixprefix2rG   )rH   rG   )rI   rG   )r#   _namespacestagtag2subtag	subsubtagr9   s     r   test_namespace_indexingz.TestLXMLXMLTreeBuilder.test_namespace_indexing\   s   yy

 

& 955$
 $
 
 
 
 
 x#9(
 
 
 
 
 y$59)
 )
 
 
 
 

 {&59+
 +
 
 
 
 

 ~)59.
 .
 
 
 
 
 
 
r   zSoup Sieve not installedr   c                    |                      d          }|                    d          j        dk    sJ |                    d          j        dk    sJ |                    d          J |                    d|j        j                  j        dk    sJ |j                            d          j        dk    sJ |                    d          j        dk    sJ |                    d          j        dk    sJ |                    d	          j        dk    sJ |j                            d	          j        dk    sJ d S )
Nz<?xml version="1.1"?>
<root><tag xmlns="http://unprefixed-namespace.com">content</tag><prefix:tag2 xmlns:prefix="http://prefixed-namespace.com">content</tag><subtag xmlns:prefix="http://another-namespace-same-prefix.com"><prefix:tag3></subtag></root>rK   zprefix|tag2rL   zprefix|tag3)
namespacestag3zprefix:tag2zprefix:tag3)r#   
select_onenamerM   rJ   findr9   s     r   /test_namespace_interaction_with_select_and_findzFTestLXMLXMLTreeBuilder.test_namespace_interaction_with_select_and_find   s^   
 yy	
 	
 u%%*e3333}--2f<<<< }--555 OOMdk6MONNS    {%%m449VCCCC yy$----yy'',6666yy'',6666{..3v======r   c                 8   |                      d          }t          |j        | j                  sJ t	          j        |          }t	          j        |          }d|j        j        k    sJ |j        |j        k    sJ t          |j        | j                  sJ d S )Nz<a>some markup</a>zsome markup)	r#   
isinstancebuilderr   pickledumpsloadsastring)r   r#   pickled	unpickleds       r   test_pickle_restores_builderz3TestLXMLXMLTreeBuilder.test_pickle_restores_builder   s     yy-..$,(<=====,t$$L))		 22222 DL0000)+T-ABBBBBBBr   N)r;   r<   r=   r>   r?   r   rO   r@   rA   rB   r   rV   ra   r   r   r   rD   rD   Q   s        
 ,+% % X%2
 2
 2
h [..7QRR&> &> SR&>PC C C C Cr   rD   )r>   rZ   r@   r*   r"   r   r   bs4.builder._lxmlr   r   bs4r   r	   r
   r   rA   rB   r   rD   r   r   r   <module>rd      s   F F    ( ( ( ( ( ( ( ( IHHHHHHHH               H   5( 5( 5( 5( 5(2 5( 5(	 5(p L   oC oC oC oC oC4 oC oC	 oC oC oCr   