o
    SUp,  ã                   @   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   ú[/var/www/html/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    ÚtasteÚ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%   ÚinsideÚtnetÚ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©Ú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@   rA   rB   ú{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   rF   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?   rA   rB   z<test xmlns="nsURI"></test>r   r   r   r   r   Útest_default_namespacep   rE   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?   rA   rB   rF   z*<test xmlns="nsURI"><toast></toast></test>r   r   r   r   r   Útest_nested_default_namespacev   rH   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.xmlfilerM   r   r   r#   r   r   )r   rM   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Ž   rE   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>Ú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#   rQ   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 )	NTr\   r   Ú r    r%   r^   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   r6   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   r6   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   r6   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   Ú123ÚhuhuTF)r   r   r   Ú__exit__Ú	__enter__Ú
ValueErrorr6   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 rp   )r   rq   rr   r   rt   r   r   r   r5   þ   rw   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	   rv   Údecode)r   ÚexpectedrZ   Údiffr   r   r   r   
  s   z_XmlFileTestCaseBase.assertXml)rz   )#Ú__name__Ú
__module__Ú__qualname__r   r   r   r$   r'   r-   r.   r=   rD   rG   rI   rJ   rK   rL   ÚpytestÚmarkÚxfailrP   rS   rW   rX   r[   rb   re   rf   rg   rh   ro   rv   r5   ry   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)rx   r   )r   r   r   ÚassertRaisesrm   Úgetvaluer   r   r   r   Útest_filelike_close  s   ÿ€ÿz*BytesIOXmlFileTestCase.test_filelike_closeN)r~   r   r€   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)r~   r   r€   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�   rx   ÚosÚpathÚexistsr‘   Úunlinkr   r   r   r   ry   $  s   ÿÿz TempPathXmlFileTestCase.tearDownc                 C   s   | j  d¡ | j  ¡ S rp   )r�   rr   rs   r   r   r   r   rv   +  ó   
z"TempPathXmlFileTestCase._read_filec                 C   s   | j  d¡ t| j ƒS rp   )r�   rr   r   r   r   r   r   r5   /  r–   z#TempPathXmlFileTestCase._parse_fileTz1temp file behaviour is too platform specific herec                 C   ó   d S r   r   r   r   r   r   rb   3  ó   z&TempPathXmlFileTestCase.test_bufferingc                 C   r—   r   r   r   r   r   r   re   7  r˜   z"TempPathXmlFileTestCase.test_flushN)
r~   r   r€   r   ry   rv   r5   r   rb   re   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#   rq   rr   Úclosed)r   Útargetr   r   r   Ú__init__>  s
   
z5SimpleFileLikeXmlFileTestCase.SimpleFileLike.__init__c                 C   s   | j rJ ‚d| _ | j ¡  d S )NT)r›   rš   rx   r   r   r   r   rx   E  s   
z2SimpleFileLikeXmlFileTestCase.SimpleFileLike.closeN)r~   r   r€   r�   rx   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   rv   N  s   
z(SimpleFileLikeXmlFileTestCase._read_filec              	   C   s>   | j  ¡ }| j d¡ zt| jƒW | j |¡ S | j |¡ w rp   )r   rq   rš   rr   r   rt   r   r   r   r5   Q  rw   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   Ú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   r6   r›   r   r   r   r   r‰   _  s   ÿ€ÿ
z1SimpleFileLikeXmlFileTestCase.test_filelike_closeN)
r~   r   r€   Úobjectrž   r   rv   r5   r    r‰   r   r   r   r   r™   <  s    r™   )Ú
__future__r   ÚlxmlÚImportErrorÚior   Úunittestr‹   r’   ÚsysÚcommon_importsr   r   Ú
et_xmlfiler   rO   r   r�   Úhelperr	   Úxml.etree.ElementTreeÚxmlr
   r   r   r…   rŠ   r�   r™   r   r   r   r   Ú<module>   s.    ÿ r