o
    \h                     @   s   d Z ddl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mZ ddlmZmZmZ ddlmZmZmZmZ ejje d	d
G dd deeZejje dd
G dd deeZdS )z@Tests to ensure that the lxml tree builder generates good trees.    N   )LXML_PRESENTLXML_VERSION)LXMLTreeBuilderLXMLTreeBuilderForXML)BeautifulSoupBeautifulStoneSoup)CommentDoctypeSoupStrainer)HTMLTreeBuilderSmokeTestXMLTreeBuilderSmokeTestSOUP_SIEVE_PRESENTSoupTestz;lxml seems not to be present, not testing its tree builder.reasonc                   @   s^   e Zd ZdZedd Zdd Zdd Zej	j
e pedk d	d
dd Zdd Zdd ZdS )TestLXMLTreeBuilder!See ``HTMLTreeBuilderSmokeTest``.c                 C      t S N)r   self r   V/home/air/segue/gemini/backup/venv/lib/python3.10/site-packages/bs4/tests/test_lxml.pydefault_builder      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>)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_encoding+   s   z>TestLXMLTreeBuilder.test_entities_in_foreign_document_encoding)         r   z@Skipping doctype test for old version of lxml to avoid segfault.r   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_doctype4   s   

z&TestLXMLTreeBuilder.test_empty_doctypec                 C   sp   t jdd}td}W d    n1 sw   Y  dt|jks#J |\}|jtks-J dt|jv s6J d S )NT)recordz<b />z<b/>z&BeautifulStoneSoup class is deprecated)warningscatch_warningsr   strbfilename__file__message)r   wr#   warningr   r   r   %test_beautifulstonesoup_is_xml_parser=   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sJ d S )Nz=
   <p>

<sourceline>
<b>text</b></sourceline><sourcepos></p>T)store_line_numbers
sourceline	sourcepos)r#   pr4   namer5   r   r#   r   r   r   test_tracking_line_numbersG   s   z.TestLXMLTreeBuilder.test_tracking_line_numbersN)__name__
__module____qualname____doc__propertyr   r   r   pytestmarkskipifr   r   r'   r2   r9   r   r   r   r   r      s    
	

r   z?lxml seems not to be present, not testing its XML tree builder.c                   @   sF   e Zd ZdZedd Zdd Zejj	e
 dddd	 Zd
d ZdS )TestLXMLXMLTreeBuilderr   c                 C   r   r   )r   r   r   r   r   r   ]   r   z&TestLXMLXMLTreeBuilder.default_builderc                 C   sz   |  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s0J |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prefix2rC   )rD   rC   )rE   rC   )r#   _namespacestagtag2subtag	subsubtagr8   r   r   r   test_namespace_indexinga   s.   
z.TestLXMLXMLTreeBuilder.test_namespace_indexingzSoup Sieve not installedr   c                 C   s   |  d}|djdksJ |djdksJ |dd u s"J |jd|jjdjdks0J |jdjdks;J |djdksEJ |djdksOJ |d	jdksYJ |jd	jdksdJ 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>rG   zprefix|tag2rH   zprefix|tag3)
namespacestag3zprefix:tag2zprefix:tag3)r#   
select_oner7   rI   rF   findr8   r   r   r   /test_namespace_interaction_with_select_and_find   s    zFTestLXMLXMLTreeBuilder.test_namespace_interaction_with_select_and_findc                 C   sf   |  d}t|j| jsJ t|}t|}d|jjks J |j|jks(J t|j| js1J d S )Nz<a>some markup</a>zsome markup)	r#   
isinstancebuilderr   pickledumpsloadsastring)r   r#   pickled	unpickledr   r   r   test_pickle_restores_builder   s   


z3TestLXMLXMLTreeBuilder.test_pickle_restores_builderN)r:   r;   r<   r=   r>   r   rK   r?   r@   rA   r   rP   rZ   r   r   r   r   rB   V   s    
5
'rB   )r=   rS   r?   rer)   r"   r   r   bs4.builderr   r   bs4r   r   bs4.elementr	   r
   r   r   r   r   r   r@   rA   r   rB   r   r   r   r   <module>   s*    :