3
dP                 @   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rHd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 )TestLXMLTreeBuilderz!See ``HTMLTreeBuilderSmokeTest``.c             C   s   t S )N)r   )self r   =/tmp/pip-build-8z3xcdsh/beautifulsoup4/bs4/tests/test_lxml.pydefault_builder   s    z#TestLXMLTreeBuilder.default_builderc             C   s(   | j dd | j dd | j 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_soup)r   r   r   r   test_out_of_range_entity#   s    z,TestLXMLTreeBuilder.test_out_of_range_entityc             C   s   d S )Nr   )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(   | j d}|jd }d|j ks$td S )Nz
<!DOCTYPE>r    )soupcontentsstripAssertionError)r   r   doctyper   r   r   test_empty_doctype4   s    

z&TestLXMLTreeBuilder.test_empty_doctypec          
   C   s\   t jdd}td}W d Q R X dt|jks2t|\}|jtksFtdt|jksXtd S )NT)recordz<b />z<b/>z&BeautifulStoneSoup class is deprecated)	warningscatch_warningsr   strbr   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 td|jjjks2t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   r   test_tracking_line_numbersG   s
    z.TestLXMLTreeBuilder.test_tracking_line_numbersN)r   r   r   r   )__name__
__module____qualname____doc__propertyr   r   r   pytestmarkskipifr   r   r!   r,   r1   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 )TestLXMLXMLTreeBuilderz!See ``HTMLTreeBuilderSmokeTest``.c             C   s   t S )N)r   )r   r   r   r   r   ]   s    z&TestLXMLXMLTreeBuilder.default_builderc             C   sz   | j d}|jddddks t|jjddiks4t|jjdddksJt|jjdddks`t|jjdddksvt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prefix2r;   )r<   r;   )r=   r;   )r   _namespacesr   tagtag2subtagZ	subsubtag)r   r   r   r   r   test_namespace_indexinga   s"    
z.TestLXMLXMLTreeBuilder.test_namespace_indexingzSoup Sieve not installed)r   c             C   s   | j d}|jdjdkst|jdjdks2t|jdd ksDt|jd|jjdjdks`t|jjdjdksvt|jdjdkst|jdjdkst|jd	jdkst|jjd	jdkst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_oner0   r   rA   r>   find)r   r   r   r   r   /test_namespace_interaction_with_select_and_find   s    
zFTestLXMLXMLTreeBuilder.test_namespace_interaction_with_select_and_findc             C   sR   | j d}t|j| jsttj|}tj|}d|jj	ks@t|jd ksNtd S )Nz<a>some markup</a>zsome markup)
r   
isinstanceZbuilderr   r   pickledumpsloadsastring)r   r   ZpickledZ	unpickledr   r   r   test_pickle_removes_builder   s    


z2TestLXMLXMLTreeBuilder.test_pickle_removes_builderN)r2   r3   r4   r5   r6   r   rB   r7   r8   r9   r   rE   rL   r   r   r   r   r:   V   s   5)r:   )r5   rG   r7   rer#   r   r   r   Zbs4.builderr   r   Zbs4r   r   Zbs4.elementr	   r
   r   r   r   r   r   r8   r9   r   r:   r   r   r   r   <module>   s$   
: