
^Q\p,                 @   sg  d  d l  m Z y d  d l Z Wn e k
 r@ e d   Yn Xd  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 Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd 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 d0 d1    Z d2 d3   Z d4 d5   Z  d6 d7   Z! d8 d9 d:  Z" d S);_XmlFileTestCaseBaseNc             C   s   t    |  _ d  S)N)r   _file)self r   ^/var/www/dbchiro/venv/lib/python3.4/site-packages/et_xmlfile/tests/test_incremental_xmlfile.pysetUp!   s    z_XmlFileTestCaseBase.setUpc             C   s?   t  |  j   } | j d   Wd  QXWd  QX|  j d  d  S)Ntestz<test></test>)r   r   element	assertXml)r   xfr   r   r   test_element$   s    z!_XmlFileTestCaseBase.test_elementc             C   sL   t  |  j  * } | j d   | j d  Wd  QXWd  QX|  j d  d  S)Nr   toastz<test>toast</test>)r   r   r   writer   )r   r   r   r   r   test_element_write_text*   s    z,_XmlFileTestCaseBase.test_element_write_textc             C   sx   t  |  j  V } | j d  > | j d  ( | j d   | j d  Wd  QXWd  QXWd  QXWd  QX|  j d  d  S)Nr   r   tasteZconTentz2<test><toast><taste>conTent</taste></toast></test>)r   r   r   r   r   )r   r   r   r   r   test_element_nested0   s    %z(_XmlFileTestCaseBase.test_element_nestedc             C   s   t  |  j   } | j d  r | j d  | j d  B | j d  | j d   | j d  Wd  QX| j d  Wd  QX| j d  Wd  QXWd  QX|  j d	  d  S)
Nr   Zconr   Ztentr   ZinsideZtnetZnocz?<test>con<toast>tent<taste>inside</taste>tnet</toast>noc</test>)r   r   r   r   r   )r   r   r   r   r   test_element_nested_with_text8   s    z2_XmlFileTestCaseBase.test_element_nested_with_textc          
   C   s<   t  |  j   } | j t d   Wd  QX|  j d  d  S)Nr   z<test/>)r   r   r   r
   r   )r   r   r   r   r   test_write_ElementE   s    z'_XmlFileTestCaseBase.test_write_Elementc             C   s   t  d  } t |  j  A } | j d  ) x! t d  D] } | j |  q; WWd  QXWd  QX|  j   } |  j | d  k	  |  j d t	 | j
     |  j t d g  t d d   | j
   D   d  S)Nr   d   c             s   s   |  ] } | j  Vq d  S)N)tag).0elr   r   r   	<genexpr>T   s    zE_XmlFileTestCaseBase.test_write_Element_repeatedly.<locals>.<genexpr>)r
   r   r   r   ranger   _parse_file
assertTrueZassertEquallengetrootset)r   r   r   itreer   r   r   test_write_Element_repeatedlyJ   s    z2_XmlFileTestCaseBase.test_write_Element_repeatedlyc             C   sL   t  |  j  * } | j d d i d d 6 Wd  QXWd  QX|  j d  d  S)Nz{nsURI}testnsmapnsURIxz!<x:test xmlns:x="nsURI"></x:test>)r   r   r   r   )r   r   r   r   r   test_namespace_nsmapV   s    z)_XmlFileTestCaseBase.test_namespace_nsmapc             C   sb   t  |  j  @ } | j d d i d d 6 | j d   Wd  QXWd  QXWd  QX|  j d  d  S)Nr   r,   r-   r.   z{nsURI}toastz0<test xmlns:x="nsURI"><x:toast></x:toast></test>)r   r   r   r   )r   r   r   r   r   test_namespace_nested_nsmap\   s
    z0_XmlFileTestCaseBase.test_namespace_nested_nsmapc             C   s?   t  |  j   } | j d   Wd  QXWd  QX|  j d  d  S)Nz{nsURI}testz'<ns0:test xmlns:ns0="nsURI"></ns0:test>)r   r   r   r   )r   r   r   r   r   test_anonymous_namespacec   s    z-_XmlFileTestCaseBase.test_anonymous_namespacec             C   sU   t  |  j  3 } | j d   | j d   Wd  QXWd  QXWd  QX|  j d  d  S)Nr   z{nsURI}toastz6<test><ns0:toast xmlns:ns0="nsURI"></ns0:toast></test>)r   r   r   r   )r   r   r   r   r   test_namespace_nested_anonymousi   s
    z4_XmlFileTestCaseBase.test_namespace_nested_anonymousc             C   sL   t  |  j  * } | j d d i d d  6 Wd  QXWd  QX|  j d  d  S)Nz{nsURI}testr,   r-   z<test xmlns="nsURI"></test>)r   r   r   r   )r   r   r   r   r   test_default_namespacep   s    z+_XmlFileTestCaseBase.test_default_namespacec             C   sb   t  |  j  @ } | j d d i d d  6 | j d   Wd  QXWd  QXWd  QX|  j d  d  S)Nz{nsURI}testr,   r-   z{nsURI}toastz*<test xmlns="nsURI"><toast></toast></test>)r   r   r   r   )r   r   r   r   r   test_nested_default_namespacev   s
    z2_XmlFileTestCaseBase.test_nested_default_namespacec             C   sb   d d l  m } t |  j  0 } | j | d   | j d   Wd  QXWd  QX|  j d  d  S)Nr   )ProcessingInstructionpypir   z<?pypi ?><test></test>)et_xmlfile.xmlfiler5   r   r   r   r   r   )r   r5   r   r   r   r   test_pi}   s    z_XmlFileTestCaseBase.test_pic             C   sU   t  |  j  3 } | j t j d   | j d   Wd  QXWd  QX|  j d  d  S)Nz	a commentr   z<!--a comment--><test></test>)r   r   r   etreeCommentr   r   )r   r   r   r   r   test_comment   s
    z!_XmlFileTestCaseBase.test_commentc             C   sL   t  |  j  * } | j d d i d d 6 Wd  QXWd  QX|  j d  d  S)Nr   attribvkz<test k="v"></test>)r   r   r   r   )r   r   r   r   r   test_attribute   s    z#_XmlFileTestCaseBase.test_attributec             C   sY   t  |  j  7 } | j d   | j d  | j d  Wd  QXWd  QX|  j 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   )r   r   r   r   r   test_escaping   s    z"_XmlFileTestCaseBase.test_escapingc             C   sX   t  |  j d d * } | j d   | j d  Wd  QXWd  QX|  j d d d d  S)Nencodingutf16r   r   z<test>toast</test>)r   r   r   r   r   )r   r   r   r   r   test_encoding   s    z"_XmlFileTestCaseBase.test_encodingc             C   s   t  |  j d d  } | j d   |  j d  | j d  |  j d  | j d  ; |  j d  | j d	 t j d
  d  |  j d  Wd  QX|  j d  | j d  |  j d  Wd  QX|  j d  Wd  QX|  j d  d  S)NbufferedFr   z<test>r   z<test>toastr   z<test>toast<taste>ZsomeZ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   r9   r
   )r   r   r   r   r   test_buffering   s    z#_XmlFileTestCaseBase.test_bufferingc             C   s   t  |  j d d  } | j d  s |  j d  | j d  |  j d  | j d  ) |  j d  | j   |  j d  Wd  QX|  j d  Wd  QX|  j d  Wd  QX|  j d  d  S)	NrD   Tr    r   r   z<test>toast<taste>z!<test>toast<taste></taste></test>)r   r   r   r   r   flush)r   r   r   r   r   
test_flush   s    
z_XmlFileTestCaseBase.test_flushc             C   s\   y) t  |  j   } | j d  Wd  QXWn t k
 rJ |  j d  Yn X|  j d  d  S)Nr   TF)r   r   r   r   r%   )r   r   r   r   r   test_failure_preceding_text   s    z0_XmlFileTestCaseBase.test_failure_preceding_textc             C   sr   t  |  j  ] } | j d   Wd  QXy | j d  Wn t k
 rZ |  j d  Yn X|  j d  Wd  QXd  S)Nr   r   TF)r   r   r   r   r   r%   )r   r   r   r   r   test_failure_trailing_text   s    z/_XmlFileTestCaseBase.test_failure_trailing_textc             C   sx   t  |  j  c } | j d   Wd  QXy | j t d   Wn t k
 r` |  j d  Yn X|  j d  Wd  QXd  S)Nr   TF)r   r   r   r   r
   r   r%   )r   r   r   r   r   test_failure_trailing_Element   s    z2_XmlFileTestCaseBase.test_failure_trailing_Elementc             C   s   d  } yJ t  |  j  5 } | j d  } | j } | j   t d   Wd  QXWnh t k
 r |  j |  y | t t d  d   Wn t k
 r |  j d  Yn X|  j d  Yn X|  j d  d  S)Nr   Z123ZhuhuTF)r   r   r   __exit__	__enter__
ValueErrorr%   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   sH   |  j  j   } |  j  j d  z |  j  j   SWd  |  j  j |  Xd  S)Nr   )r   tellseekread)r   posr   r   r   
_read_file   s
    z_XmlFileTestCaseBase._read_filec             C   sH   |  j  j   } |  j  j d  z t |  j   SWd  |  j  j |  Xd  S)Nr   )r   rR   rS   r   )r   rU   r   r   r   r$      s
    z _XmlFileTestCaseBase._parse_filec             C   s#   |  j  d  k	 r |  j  j   n  d  S)N)r   close)r   r   r   r   tearDown  s    z_XmlFileTestCaseBase.tearDownutf8c             C   s:   t  |  j   j |  |  } | d  k s6 t |   d  S)N)r	   rV   decodeAssertionError)r   expectedrA   diffr   r   r   r   
  s    z_XmlFileTestCaseBase.assertXml)#__name__
__module____qualname__r   r   r   r   r   r   r   r+   r/   r0   r1   r2   r3   r4   pytestmarkZxfailr8   r;   r?   r@   rC   rF   rI   rJ   rK   rL   rQ   rV   r$   rX   r   r   r   r   r   r      s:   		r   c               @   s(   e  Z d  Z d d   Z d d   Z d S)BytesIOXmlFileTestCasec             C   s   t    |  _ d  S)N)r   r   )r   r   r   r   r     s    zBytesIOXmlFileTestCase.setUpc             C   sN   t  |  j d d  } | j d   Wd  QXWd  QX|  j t |  j j  d  S)NrW   Tr   )r   r   r   ZassertRaisesrO   getvalue)r   r   r   r   r   test_filelike_close  s    z*BytesIOXmlFileTestCase.test_filelike_closeN)r^   r_   r`   r   re   r   r   r   r   rc     s   rc   c               @   s   e  Z d  Z d d   Z d S)TempXmlFileTestCasec             C   s   t  j   |  _ d  S)N)tempfileTemporaryFiler   )r   r   r   r   r     s    zTempXmlFileTestCase.setUpN)r^   r_   r`   r   r   r   r   r   rf     s   rf   c               @   sv   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)NdeleteF)rg   NamedTemporaryFile_tmpfilenamer   )r   r   r   r   r      s    zTempPathXmlFileTestCase.setUpc             C   sG   z |  j  j   Wd  t j j |  j  j  rB t j |  j  j  n  Xd  S)N)rl   rW   ospathexistsrm   unlink)r   r   r   r   rX   $  s    z TempPathXmlFileTestCase.tearDownc             C   s   |  j  j d  |  j  j   S)Nr   )rl   rS   rT   )r   r   r   r   rV   +  s    z"TempPathXmlFileTestCase._read_filec             C   s   |  j  j d  t |  j   S)Nr   )rl   rS   r   )r   r   r   r   r$   /  s    z#TempPathXmlFileTestCase._parse_fileTz1temp file behaviour is too platform specific herec             C   s   d  S)Nr   )r   r   r   r   rF   3  s    z&TempPathXmlFileTestCase.test_bufferingc             C   s   d  S)Nr   )r   r   r   r   rI   7  s    z"TempPathXmlFileTestCase.test_flushN)
r^   r_   r`   r   rX   rV   r$   r   rF   rI   r   r   r   r   ri     s   ri   c               @   sb   e  Z d  Z Gd d   d e  Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z	 d S)SimpleFileLikeXmlFileTestCasec               @   s(   e  Z d  Z d d   Z d d   Z d S)z,SimpleFileLikeXmlFileTestCase.SimpleFileLikec             C   s:   | |  _  | j |  _ | j |  _ | j |  _ d |  _ d  S)NF)_targetr   rR   rS   closed)r   targetr   r   r   __init__>  s
    	z5SimpleFileLikeXmlFileTestCase.SimpleFileLike.__init__c             C   s*   |  j  s t  d |  _  |  j j   d  S)NT)rt   r[   rs   rW   )r   r   r   r   rW   E  s    	z2SimpleFileLikeXmlFileTestCase.SimpleFileLike.closeN)r^   r_   r`   rv   rW   r   r   r   r   SimpleFileLike=  s   rw   c             C   s%   t    |  _ |  j |  j  |  _ d  S)N)r   rs   rw   r   )r   r   r   r   r   J  s    z#SimpleFileLikeXmlFileTestCase.setUpc             C   s   |  j  j   S)N)rs   rd   )r   r   r   r   rV   N  s    z(SimpleFileLikeXmlFileTestCase._read_filec             C   sH   |  j  j   } |  j j d  z t |  j  SWd  |  j j |  Xd  S)Nr   )r   rR   rs   rS   r   )r   rU   r   r   r   r$   Q  s
    z)SimpleFileLikeXmlFileTestCase._parse_filec             C   sE   t  |  j   } | j d   Wd  QXWd  QX|  j |  j j  d  S)Nr   )r   r   r   ZassertFalsert   )r   r   r   r   r   test_filelike_not_closingY  s    z7SimpleFileLikeXmlFileTestCase.test_filelike_not_closingc             C   sT   t  |  j d d  } | j d   Wd  QXWd  QX|  j |  j j  d  |  _ d  S)NrW   Tr   )r   r   r   r%   rt   )r   r   r   r   r   re   _  s
    z1SimpleFileLikeXmlFileTestCase.test_filelike_closeN)
r^   r_   r`   objectrw   r   rV   r$   rx   re   r   r   r   r   rr   <  s   rr   )
__future__r   ZlxmlImportErrorior   Zunittestrg   rn   sysZcommon_importsr   r   
et_xmlfiler   r7   r   ra   helperr	   xml.etree.ElementTreexmlr
   r   r   rc   rf   ri   rr   r   r   r   r   <module>   s&   $