a
    #.c                  
   @   s   d Z ddlZddlZddlZzddlZdZejjZW n, e	y` Z
 zdZdZW Y dZ
[
n
dZ
[
0 0 ervddlmZmZ ddlmZmZ ddlmZmZmZ d	d
lmZmZmZmZ ee dG dd deeZee dG dd deeZdS )z@Tests to ensure that the lxml tree builder generates good trees.    NTF)r   )LXMLTreeBuilderLXMLTreeBuilderForXML)BeautifulSoupBeautifulStoneSoup)CommentDoctypeSoupStrainer   )HTMLTreeBuilderSmokeTestXMLTreeBuilderSmokeTestSoupTestskipIfz;lxml seems not to be present, not testing its tree builder.c                   @   sX   e Zd ZdZedd Zdd Zdd Zee	 p6e
dk d	d
d Zdd Zdd ZdS )TestLXMLTreeBuilder!See ``HTMLTreeBuilderSmokeTest``.c                 C   s   t S N)r   self r   M/var/www/brookimports/venv/lib/python3.9/site-packages/bs4/tests/test_lxml.pydefault_builder$   s    z#TestLXMLTreeBuilder.default_builderc                 C   s(   |  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>)Zassert_soupr   r   r   r   test_out_of_range_entity(   s    z,TestLXMLTreeBuilder.test_out_of_range_entityc                 C   s   d S r   r   r   r   r   r   *test_entities_in_foreign_document_encoding0   s    z>TestLXMLTreeBuilder.test_entities_in_foreign_document_encoding)         r   z@Skipping doctype test for old version of lxml to avoid segfault.c                 C   s(   |  d}|jd }d| ks$J d S )Nz
<!DOCTYPE>r    )soupcontentsstrip)r   r   doctyper   r   r   test_empty_doctype9   s    

z&TestLXMLTreeBuilder.test_empty_doctypec                 C   s`   t jdd}td}W d    n1 s*0    Y  dt|jksFJ dt|d jv s\J d S )NT)recordz<b />z<b/>z&BeautifulStoneSoup class is deprecatedr   )warningscatch_warningsr   strbmessage)r   wr   r   r   r   %test_beautifulstonesoup_is_xml_parserA   s    &z9TestLXMLTreeBuilder.test_beautifulstonesoup_is_xml_parserc                 C   s6   | j ddd}d|jjjks J d|jjjks2J d S )Nz=
   <p>

<sourceline>
<b>text</b></sourceline><sourcepos></p>T)Zstore_line_numbers
sourceline	sourcepos)r   pr)   namer*   r   r   r   r   r   test_tracking_line_numbersI   s    z.TestLXMLTreeBuilder.test_tracking_line_numbersN)__name__
__module____qualname____doc__propertyr   r   r   r   LXML_PRESENTLXML_VERSIONr    r(   r.   r   r   r   r   r      s   
	
r   z?lxml seems not to be present, not testing its XML tree builder.c                   @   s4   e Zd ZdZedd Zdd Zdd Zdd	 Zd
S )TestLXMLXMLTreeBuilderr   c                 C   s   t S r   )r   r   r   r   r   r   ^   s    z&TestLXMLXMLTreeBuilder.default_builderc                 C   sz   |  d}|jddddks J |jjddiks4J |jjdddksJJ |jjdddks`J |jjdddksvJ 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prefix2r7   )r8   r7   )r9   r7   )r   _namespacestagtag2subtagZ	subsubtagr-   r   r   r   test_namespace_indexingb   s.    
z.TestLXMLXMLTreeBuilder.test_namespace_indexingc                 C   s   |  d}|djdksJ |djdks2J |dd u sDJ |jd|jjdjdks`J |jdjdksvJ |djdksJ |djdksJ |d	jdksJ |jd	jdksJ 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>r;   zprefix|tag2r<   zprefix|tag3)
namespacesZtag3zprefix:tag2zprefix:tag3)r   Z
select_oner,   r=   r:   findr-   r   r   r   /test_namespace_interaction_with_select_and_find   s     zFTestLXMLXMLTreeBuilder.test_namespace_interaction_with_select_and_findc                 C   sR   |  d}t|j| jsJ t|}t|}d|jjks@J |jd u sNJ d S )Nz<a>some markup</a>zsome markup)	r   
isinstanceZbuilderr   pickledumpsloadsastring)r   r   ZpickledZ	unpickledr   r   r   test_pickle_removes_builder   s    


z2TestLXMLXMLTreeBuilder.test_pickle_removes_builderN)	r/   r0   r1   r2   r3   r   r>   rA   rH   r   r   r   r   r6   X   s   
5'r6   )r2   rC   rer"   Z
lxml.etreeZlxmlr4   etreer5   ImportErroreZbs4.builderr   r   Zbs4r   r   Zbs4.elementr   r   r   r   r
   r   r   r   r   r6   r   r   r   r   <module>   s2   7