
^Q\"              V   @   sU  d  d l  Z  d  d l Z  d  d l Z d  d l Z d  d l Z d  d l Z y d  d l Z Wn! e k
 r{ d  d l j	 Z Yn Xy d  d l
 m Z Wn d  d l m Z Yn Xd d   Z e e d d  d k p e e d d  d k	 Z e j d  d k Z y d  d	 l m Z WnA e k
 rQy d  d	 l m Z Wn e k
 rLd Z Yn XYn Xe e d
  rse e j  Z n dK Z y d  d l m Z Wn= e k
 ry d  d l Z Wn e k
 rd Z Yn XYn Xe e d
  re e j  Z n dL Z d d   Z y, d  d l Z e j e j e j e j Wn$ e e  f k
 rRd  d l! Z Yn Xy e" Wn e# k
 r{d d   Z" Yn Xe" e$   d <y e% Wn e# k
 rd d   Z% Yn Xe% e$   d <y d  d l& Z& Wn( e k
 rGd d   d e'  Z( Yn Xe& j) j( Z( d d d  Z* d  d l+ m, Z, e j d  d k rd  d l- m. Z/ d d d  Z0 d d d  Z1 d  d l+ m2 Z3 d d    Z2 e j   Z4 e j5 d!  j6 Z7 e j5 d"  j6 Z8 d# d$   Z9 n d  d% l: m/ Z/ d d& d  Z0 d d' d  Z1 d  d l+ m2 Z2 e j   Z4 e j5 d( e j;  j6 Z< e j5 d)  j6 Z8 e j5 d*  j6 Z= d+ d$   Z9 y e j> Z> Wn0 e  k
 rd, d-   d. d-   d/ d0  Z> Yn XGd1 d2   d2 e j?  Z@ Gd3 d4   d4  ZA Gd5 d6   d6  ZB Gd7 d8   d8 eB  ZC d9 d:   ZD d; d<   ZE d= d>   ZF d? d@ dA  ZG dB dC dD  ZH d? dE dF  ZI dG dH   ZJ dI dJ   ZK d S)M    N)pathname2urlc             C   sf   g  } xS t  j d |   D]? } y | j t |   Wq t k
 rW | j |  Yq Xq Wt |  S)Nz([0-9]+|[^0-9.]+))refindallappendint
ValueErrortuple)version_stringlpart r   T/var/www/dbchiro/venv/lib/python3.4/site-packages/et_xmlfile/tests/common_imports.pymake_version_tuple   s    r   implementationZpypypypy_version_info   )ElementTreeVERSION)cElementTreec             C   s^   | j  } d d   } xB t |   D]4 } | | d  } | | k r" t |  | |  q" q" Wd S)zGRemove test methods that do not work with the current lib version.
    c             S   s   d  S)Nr   )selfr   r   r   dummy_test_method?   s    z,filter_by_version.<locals>.dummy_test_methodr   N)r   r   r   )getdirsetattr)Z
test_classZversion_dictZcurrent_versionZfind_required_versionr   nameZexpected_versionr   r   r   filter_by_version;   s    	r   c             K   s   t  |   }  |  j |   |  S)N)listsort)seqkwargsr   r   r   sortedT   s    r    c             C   s
   |  j    S)N)next)itr   r   r   r!   _   s    r!   c               @   s.   e  Z d  Z d Z d d   Z d d   Z d S)skipifzNUsing a class because a function would bind into a method when used in classesc             G   s   d  S)Nr   )r   argsr   r   r   __init__j   s    zskipif.__init__c             G   s   | S)Nr   )r   funcr$   r   r   r   __call__k   s    zskipif.__call__N)__name__
__module____qualname____doc__r%   r'   r   r   r   r   r#   h   s   r#      c             C   sT   t  j t  j |  j d } t j j t j j t j j t	 | d d   |    S)Nr(   __file__ )
sysmodules	_getframe	f_globalsospathnormpathjoindirnamegetattr)filenameZframe_depthmoduler   r   r   _get_caller_relative_patho   s    r;   )StringIO)strzUTF-8c             C   s   |  S)Nr   )sencodingr   r   r   _stry   s    r@   c             C   s   |  j  |  S)N)encode)r>   r?   r   r   r   _bytes{   s    rB   )BytesIOc              G   s<   |  r2 t  |  d t  r2 |  d j d  f }  n  t |    S)Nr   zUTF-8)
isinstancer=   rA   _BytesIO)r$   r   r   r   rC   ~   s    rC   z(\s+)u(["\'])z(.*except [^(]*),\s*(.*:)c             C   sd   t  |   }  t |   } t d |  } t d |  } t j t j | i  t j	 j
 |   |  d   S)Nz\1\2z\1 as \2r   )r;   	read_file_fix_unicode_fix_exceptionsdoctestDocTestCasedoctest_parserget_doctestr3   r4   basename)r9   doctestsr   r   r   make_doctest   s    rO   )unicodec             C   s   t  |  d | S)Nr?   )rP   )r>   r?   r   r   r   r@      s    c             C   s   |  S)Nr   )r>   r?   r   r   r   rB      s    z1^(\s*)(?:\w+\.)+(\w*(?:Error|Exception|Invalid):)z(.*except [^(]*)\s+as\s+(.*:)z(\s+)b(["\'])c             C   ss   t  |   }  t |   } t d |  } t d |  } t d |  } t j t j | i  t	 j
 j |   |  d   S)Nz\1\2z\1, \2r   )r;   rF   _fix_tracebackrH   
_fix_bytesrI   rJ   rK   rL   r3   r4   rM   )r9   rN   r   r   r   rO      s    c             C   s   d  S)Nr   )test_methodr   r   r   <lambda>   s    rT   c             C   s   |  S)Nr   )rS   r   r   r   rT      s    c             C   s   |  r
 | S| S)Nr   )	conditionwhyZ_skipZ_keepr   r   r   skipIf   s    rW   c               @   sf   e  Z d  Z d d   Z d d d  Z d d   Z y e j j Wn e	 k
 ra e j j
 Z Yn Xd S)HelperTestCasec             C   s   t  j   d  S)N)gcZcollect)r   r   r   r   tearDown   s    zHelperTestCase.tearDownNc             C   s:   t  | t  r t |  n	 t |  } t j | d | S)Nparser)rD   bytesrC   r<   etreeparse)r   textr[   fr   r   r   r^      s    'zHelperTestCase.parsec             C   sC   t  j | j    j t d  t d   j t d  t d   S)N r.   
)r]   tostringgetrootreplacerB   )r   treer   r   r   _rootstring   s    zHelperTestCase._rootstring)r(   r)   r*   rZ   r^   rg   unittestTestCaseZassertFalseAttributeErrorZfailIfr   r   r   r   rX      s   rX   c               @   s4   e  Z d  Z e d  d d  Z d d d  Z d S)SillyFileLikez<foo><bar/></foo>c             C   s   | |  _  d  S)N)xml_data)r   rl   r   r   r   r%      s    zSillyFileLike.__init__Nc             C   sa   |  j  rW | r; |  j  d  |  } |  j  | d   |  _  n |  j  } t d  |  _  | St d  S)Nr.   )rl   rB   )r   amountdatar   r   r   read   s    		zSillyFileLike.read)r(   r)   r*   rB   r%   ro   r   r   r   r   rk      s   rk   c               @   s@   e  Z d  Z d d d d d  Z d d   Z d d	 d
  Z d S)LargeFileLiked         c             C   sD   t    |  _ t d  | |  _ t |  |  _ |  j |  |  _ d  S)Na)rC   rn   rB   charsrangechildreniterelementsmore)r   charlendepthrw   r   r   r   r%      s    zLargeFileLike.__init__c             c   sv   t  d  V| d 8} | d k r_ xC |  j D]- } x |  j |  D] } | VqA W|  j Vq+ Wn |  j Vt  d  Vd  S)Nz<root>   r   z</root>)rB   rw   rx   ru   )r   r{   childelementr   r   r   rx      s    
	zLargeFileLike.iterelementsNc             C   s   |  j  } | j } | rO xR |  j D]& } | |  | j   | k r" Pq" q" Wn x |  j D] } | |  qY W| j   } | j d  | j   | r | | | d    | d  |  } n  | S)Nr   )rn   writery   tellgetvalueseektruncate)r   rm   rn   r   r~   resultr   r   r   ro      s     		

zLargeFileLike.read)r(   r)   r*   r%   rx   ro   r   r   r   r   rp      s   rp   c               @   s1   e  Z d  Z d d d d d  Z d d   Z d S)	LargeFileLikeUnicoderq   rr   rs   c             C   sK   t  j |  | | |  t   |  _ t d  | |  _ |  j |  |  _ d  S)Nrt   )rp   r%   r<   rn   r@   ru   rx   ry   )r   rz   r{   rw   r   r   r   r%      s    zLargeFileLikeUnicode.__init__c             c   sv   t  d  V| d 8} | d k r_ xC |  j D]- } x |  j |  D] } | VqA W|  j Vq+ Wn |  j Vt  d  Vd  S)Nz<root>r|   r   z</root>)r@   rw   rx   ru   )r   r{   r}   r~   r   r   r   rx      s    
	z!LargeFileLikeUnicode.iterelementsN)r(   r)   r*   r%   rx   r   r   r   r   r      s   r   c             C   s%   t  j j t  } t  j j | |   S)N)r3   r4   r7   r-   r6   )r   Z_testdirr   r   r   fileInTestDir  s    r   c             C   s   t  j d t |    S)Nzfile:)urlparseurljoinr   )r4   r   r   r   path2url  s    r   c             C   s   t  t |    S)N)r   r   )r   r   r   r   fileUrlInTestDir  s    r   rc          
   C   s1   t  |  |  } z | j   } Wd  | j   X| S)N)openro   close)r   moder`   rn   r   r   r   rF     s
    rF   wc          
   C   s4   t  |  |  } z | j |  } Wd  | j   Xd  S)N)r   r   r   )r   rn   r   r`   r   r   r   write_to_file  s    r   c             C   s   t  t |   |  S)N)rF   r   )r   r   r   r   r   readFileInTestDir%  s    r   c             C   sP   t  j t |  t  r! t |   n	 t |    } t   } | j |  | j   S)N)r]   r^   rD   r\   rC   r<   
write_c14nr   )xmlrf   r`   r   r   r   canonicalize(  s    0	r   c             C   sE   x> t  j d |   D]* \ } } |  j | t t |    }  q W|  S)Nz(&#([0-9]+);))r   r   re   unichrr   )r   Zentity_namevaluer   r   r   
unentitify.  s    "r   )r   r   r   )r   r   r   )Lr3   os.pathr   rY   r/   rh   r   ImportErrorurllib.parser^   urllibr   urllib.requestr   r8   ZIS_PYPYversion_infoZ
IS_PYTHON3Z	xml.etreer   Zelementtreehasattrr   Z
ET_VERSIONr   ZCET_VERSIONr   rI   ZDocFileSuiteZDocTestParserZNORMALIZE_WHITESPACEELLIPSISrj   Zlocal_doctestr    	NameErrorlocalsr!   Zpytestobjectr#   markr;   ior<   builtinsr=   rP   r@   rB   rC   rE   rK   compilesubrG   rH   rO   __builtin__MrQ   rR   rW   ri   rX   rk   rp   r   r   r   r   rF   r   r   r   r   r   r   r   r   <module>   s   	

	&