o
    bp,                     @   s  d dl mZ 	 zd dlZW n ey   edw d dlmZ d dlZd dlZd dlZd dl	Z	ddl
mZmZ d dlmZ d dlmZ d dlZdd	lmZ d dlZd d
lmZmZ G dd deZG dd deZG dd deZG dd deZG dd deZdS )    )absolute_importNz"lxml is required to run the tests.)BytesIO   )HelperTestCaseskipIf)xmlfile)LxmlSyntaxError)compare_xml)Elementparsec                   @   s"  e Zd Z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ejjdd Zejjdd Zd d! Zd"d# Zejjd$d% Zejjd&d' Zejjd(d) Zd*d+ Zd,d- Zd.d/ Zejjd0d1 Zd2d3 Zd4d5 Z d6d7 Z!d;d9d:Z"dS )<_XmlFileTestCaseBaseNc                 C      t  | _d S Nr   _fileself r   h/var/www/secure340b-portal/env/lib/python3.10/site-packages/et_xmlfile/tests/test_incremental_xmlfile.pysetUp!      z_XmlFileTestCaseBase.setUpc              	   C   b   t | j}|d W d    n1 sw   Y  W d    n1 s%w   Y  | d d S )Ntestz<test></test>r   r   element	assertXmlr   xfr   r   r   test_element$      z!_XmlFileTestCaseBase.test_elementc              	   C   sl   t | j"}|d |d W d    n1 sw   Y  W d    n1 s*w   Y  | d d S )Nr   toast<test>toast</test>r   r   r   writer   r   r   r   r   test_element_write_text*   s   z,_XmlFileTestCaseBase.test_element_write_textc                 C   s   t | jL}|d7 |d" |d |d W d    n1 s'w   Y  W d    n1 s6w   Y  W d    n1 sEw   Y  W d    n1 sTw   Y  | d d S )Nr   r    tasteZconTentz2<test><toast><taste>conTent</taste></toast></test>r"   r   r   r   r   test_element_nested0   s   z(_XmlFileTestCaseBase.test_element_nestedc                 C   s   t | j`}|dK |d |d, |d |d |d W d    n1 s1w   Y  |d W d    n1 sEw   Y  |d W d    n1 sYw   Y  W d    n1 shw   Y  | d	 d S )
Nr   conr    tentr%   ZinsideZtnetZnocz?<test>con<toast>tent<taste>inside</taste>tnet</toast>noc</test>r"   r   r   r   r   test_element_nested_with_text8   s   

	z2_XmlFileTestCaseBase.test_element_nested_with_textc                 C   sF   t | j}|td W d    n1 sw   Y  | d d S )Nr   z<test/>)r   r   r#   r
   r   r   r   r   r   test_write_ElementE   s   z'_XmlFileTestCaseBase.test_write_Elementc              	   C   s   t d}t| j)}|d tdD ]}|| qW d    n1 s&w   Y  W d    n1 s5w   Y  |  }| |d u | dt	|
  | tdgtdd |
 D  d S )Nr   d   c                 s   s    | ]}|j V  qd S r   )tag).0elr   r   r   	<genexpr>T   s    zE_XmlFileTestCaseBase.test_write_Element_repeatedly.<locals>.<genexpr>)r
   r   r   r   ranger#   _parse_file
assertTrueassertEquallengetrootset)r   r   r   itreer   r   r   test_write_Element_repeatedlyJ   s   (z2_XmlFileTestCaseBase.test_write_Element_repeatedlyc              	   C   j   t | j!}|jdddid W d    n1 sw   Y  W d    n1 s)w   Y  | d d S )N{nsURI}testxnsURIZnsmapz!<x:test xmlns:x="nsURI"></x:test>r   r   r   r   r   test_namespace_nsmapV      z)_XmlFileTestCaseBase.test_namespace_nsmapc              
   C   s   t | j6}|jdddid |d W d    n1 s w   Y  W d    n1 s/w   Y  W d    n1 s>w   Y  | d d S )Nr   r<   r=   r>   {nsURI}toastz0<test xmlns:x="nsURI"><x:toast></x:toast></test>r   r   r   r   r   test_namespace_nested_nsmap\      z0_XmlFileTestCaseBase.test_namespace_nested_nsmapc              	   C   r   )Nr;   z'<ns0:test xmlns:ns0="nsURI"></ns0:test>r   r   r   r   r   test_anonymous_namespacec   r   z-_XmlFileTestCaseBase.test_anonymous_namespacec              
   C   s   t | j2}|d |d W d    n1 sw   Y  W d    n1 s+w   Y  W d    n1 s:w   Y  | d d S )Nr   rA   z6<test><ns0:toast xmlns:ns0="nsURI"></ns0:toast></test>r   r   r   r   r   test_namespace_nested_anonymousi   s   z4_XmlFileTestCaseBase.test_namespace_nested_anonymousc              	   C   sj   t | j!}|jdd did W d    n1 sw   Y  W d    n1 s)w   Y  | d d S )Nr;   r=   r>   z<test xmlns="nsURI"></test>r   r   r   r   r   test_default_namespacep   r@   z+_XmlFileTestCaseBase.test_default_namespacec              
   C   s   t | j6}|jdd did |d W d    n1 s w   Y  W d    n1 s/w   Y  W d    n1 s>w   Y  | d d S )Nr;   r=   r>   rA   z*<test xmlns="nsURI"><toast></toast></test>r   r   r   r   r   test_nested_default_namespacev   rC   z2_XmlFileTestCaseBase.test_nested_default_namespacec              	   C   s|   ddl m} t| j$}||d |d W d    n1 s#w   Y  W d    n1 s2w   Y  | d d S )Nr   )ProcessingInstructionpypir   z<?pypi ?><test></test>)et_xmlfile.xmlfilerH   r   r   r#   r   r   )r   rH   r   r   r   r   test_pi}   s   z_XmlFileTestCaseBase.test_pic              	   C   sr   t | j%}|td |d W d    n1 sw   Y  W d    n1 s-w   Y  | d d S )Nz	a commentr   z<!--a comment--><test></test>)r   r   r#   etreeCommentr   r   r   r   r   r   test_comment   s   z!_XmlFileTestCaseBase.test_commentc              	   C   r:   )Nr   kv)attribz<test k="v"></test>r   r   r   r   r   test_attribute   r@   z#_XmlFileTestCaseBase.test_attributec              	   C   sv   t | j'}|d |d |d W d    n1 s w   Y  W d    n1 s/w   Y  | d d S )Nr   zComments: <!-- text -->
zEntities: &amp;z><test>Comments: &lt;!-- text --&gt;
Entities: &amp;amp;</test>r"   r   r   r   r   test_escaping   s   
z"_XmlFileTestCaseBase.test_escapingc              	   C   st   t | jdd"}|d |d W d    n1 sw   Y  W d    n1 s,w   Y  | jddd d S )Nutf16)encodingr   r    r!   r"   r   r   r   r   test_encoding   s   z"_XmlFileTestCaseBase.test_encodingc              
   C   s   t | jddi}|dO | d |d | d |d | d |d	td
d | d W d    n1 sAw   Y  | d |d | d W d    n1 s_w   Y  | d W d    n1 ssw   Y  | d d S )NFbufferedr   z<test>r    z<test>toastr%   <test>toast<taste>Zsomemorez"<test>toast<taste>some<more/>toastz*<test>toast<taste>some<more/>toast</taste>endz-<test>toast<taste>some<more/>toast</taste>endz4<test>toast<taste>some<more/>toast</taste>end</test>)r   r   r   r   r#   rL   r
   r   r   r   r   test_buffering   s"   





z#_XmlFileTestCaseBase.test_bufferingc              
   C   s   t | jddY}|d? | d |d | d |d | d |  | d W d    n1 s;w   Y  | d W d    n1 sOw   Y  | d W d    n1 scw   Y  | d d S )	NTrW   r    r    r%   rY   z!<test>toast<taste></taste></test>)r   r   r   r   r#   flushr   r   r   r   
test_flush   s   



	z_XmlFileTestCaseBase.test_flushc                 C   sf   zt | j}|d W d    n1 sw   Y  W n ty+   | d Y d S w | d d S )Nr    TF)r   r   r#   r   r2   r   r   r   r   test_failure_preceding_text   s   z0_XmlFileTestCaseBase.test_failure_preceding_textc              	   C   s   t | jA}|d W d    n1 sw   Y  z|d W n ty0   | d Y nw | d W d    d S W d    d S 1 sIw   Y  d S )Nr   r    TF)r   r   r   r#   r   r2   r   r   r   r   test_failure_trailing_text   s   "z/_XmlFileTestCaseBase.test_failure_trailing_textc              	   C   s   t | jC}|d W d    n1 sw   Y  z	|td W n ty2   | d Y nw | d W d    d S W d    d S 1 sKw   Y  d S )Nr   TF)r   r   r   r#   r
   r   r2   r   r   r   r   test_failure_trailing_Element   s   "z2_XmlFileTestCaseBase.test_failure_trailing_Elementc                 C   s   d }z t | j}|d}|j}|  td1 sw   Y  W n/ tyQ   | | z
|ttdd  W n tyH   | d Y Y d S w | d Y d S w | d d S )Nr   Z123ZhuhuTF)r   r   r   __exit__	__enter__
ValueErrorr2   r   )r   cm_exitr   r<   r   r   r   'test_closing_out_of_order_in_error_case   s$   

	z<_XmlFileTestCaseBase.test_closing_out_of_order_in_error_casec              	   C   s>   | j  }| j d z| j  W | j | S | j | w Nr   )r   tellseekreadr   posr   r   r   
_read_file   
   

z_XmlFileTestCaseBase._read_filec              	   C   s>   | j  }| j d zt| j W | j | S | j | w rh   )r   ri   rj   r   rl   r   r   r   r1      ro   z _XmlFileTestCaseBase._parse_filec                 C   s   | j d ur| j   d S d S r   )r   closer   r   r   r   tearDown  s   
z_XmlFileTestCaseBase.tearDownutf8c                 C   s(   t |  ||}|d u sJ |d S r   )r	   rn   decode)r   expectedrU   diffr   r   r   r   
  s   z_XmlFileTestCaseBase.assertXml)rr   )#__name__
__module____qualname__r   r   r   r$   r&   r)   r*   r9   r?   rB   rD   rE   rF   rG   pytestmarkZxfailrK   rN   rR   rS   rV   r\   r_   r`   ra   rb   rg   rn   r1   rq   r   r   r   r   r   r      sH    




	
r   c                   @      e Zd Zdd Zdd ZdS )BytesIOXmlFileTestCasec                 C   r   r   r   r   r   r   r   r     r   zBytesIOXmlFileTestCase.setUpc              	   C   sl   t | jdd}|d W d    n1 sw   Y  W d    n1 s'w   Y  | t| jj d S NT)rp   r   )r   r   r   assertRaisesre   getvaluer   r   r   r   test_filelike_close  s   z*BytesIOXmlFileTestCase.test_filelike_closeN)rv   rw   rx   r   r   r   r   r   r   r|     s    r|   c                   @   s   e Zd Zdd ZdS )TempXmlFileTestCasec                 C   s   t  | _d S r   )tempfileTemporaryFiler   r   r   r   r   r     s   zTempXmlFileTestCase.setUpN)rv   rw   rx   r   r   r   r   r   r     s    r   c                   @   sP   e Zd Zdd Zdd Zdd Zdd Zed	d
dd Zed	d
dd Z	dS )TempPathXmlFileTestCasec                 C   s   t jdd| _| jj| _d S )NF)delete)r   NamedTemporaryFile_tmpfilenamer   r   r   r   r   r      s   zTempPathXmlFileTestCase.setUpc              	   C   sV   z| j   W tj| j jrt| j j d S d S tj| j jr*t| j j w w r   )r   rp   ospathexistsr   unlinkr   r   r   r   rq   $  s   z TempPathXmlFileTestCase.tearDownc                 C   s   | j d | j  S rh   )r   rj   rk   r   r   r   r   rn   +     
z"TempPathXmlFileTestCase._read_filec                 C   s   | j d t| j S rh   )r   rj   r   r   r   r   r   r1   /  r   z#TempPathXmlFileTestCase._parse_fileTz1temp file behaviour is too platform specific herec                 C      d S r   r   r   r   r   r   r\   3     z&TempPathXmlFileTestCase.test_bufferingc                 C   r   r   r   r   r   r   r   r_   7  r   z"TempPathXmlFileTestCase.test_flushN)
rv   rw   rx   r   rq   rn   r1   r   r\   r_   r   r   r   r   r     s    
r   c                   @   sD   e Zd ZG dd deZdd Zdd Zdd Zd	d
 Zdd Z	dS )SimpleFileLikeXmlFileTestCasec                   @   r{   )z,SimpleFileLikeXmlFileTestCase.SimpleFileLikec                 C   s(   || _ |j| _|j| _|j| _d| _d S )NF)_targetr#   ri   rj   closed)r   targetr   r   r   __init__>  s
   
z5SimpleFileLikeXmlFileTestCase.SimpleFileLike.__init__c                 C   s   | j rJ d| _ | j  d S )NT)r   r   rp   r   r   r   r   rp   E  s   
z2SimpleFileLikeXmlFileTestCase.SimpleFileLike.closeN)rv   rw   rx   r   rp   r   r   r   r   SimpleFileLike=  s    r   c                 C   s   t  | _| | j| _d S r   )r   r   r   r   r   r   r   r   r   J  s   z#SimpleFileLikeXmlFileTestCase.setUpc                 C   s
   | j  S r   )r   r   r   r   r   r   rn   N  s   
z(SimpleFileLikeXmlFileTestCase._read_filec              	   C   s>   | j  }| jd zt| jW | j| S | j| w rh   )r   ri   r   rj   r   rl   r   r   r   r1   Q  ro   z)SimpleFileLikeXmlFileTestCase._parse_filec              	   C   sf   t | j}|d W d    n1 sw   Y  W d    n1 s%w   Y  | | jj d S )Nr   )r   r   r   ZassertFalser   r   r   r   r   test_filelike_not_closingY  s   z7SimpleFileLikeXmlFileTestCase.test_filelike_not_closingc              	   C   sp   t | jdd}|d W d    n1 sw   Y  W d    n1 s'w   Y  | | jj d | _d S r}   )r   r   r   r2   r   r   r   r   r   r   _  s   
z1SimpleFileLikeXmlFileTestCase.test_filelike_closeN)
rv   rw   rx   objectr   r   rn   r1   r   r   r   r   r   r   r   <  s    r   )
__future__r   lxmlImportErrorior   Zunittestr   r   sysZcommon_importsr   r   Z
et_xmlfiler   rJ   r   ry   helperr	   xml.etree.ElementTreexmlr
   r   r   r|   r   r   r   r   r   r   r   <module>   s.     r