B
    18\                @   sD  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZ d dlmZ d dlmZmZmZmZmZ dadaedddZyed W n ek
r   ed	Y nX ed
ddZedddZdZdZdZdZ dZ!dZ"ddddZ#G dd dej$Z%daddZ&dd Z'G dd dZ(G d d! d!ej$Z)G d"d# d#ej$Z*i Z+d$e+d%< d&e+d'< d(e+d)< d*e+d+< d,e+d-< d.e+d/< d0e+d1< d2e+d3< d4,e-ede+d5< i Z.d6e.d7< d8e.d9< G d:d; d;ej$Z/G d<d= d=ej$Z0G d>d? d?e(ej$Z1G d@dA dAe(ej$Z2G dBdC dCe3Z4e3j5e4_5G dDdE dEe3Z6e3j5e6_5G dFdG dGe(ej$Z7G dHdI dIej$Z8G dJdK dKej$Z9G dLdM dMej$Z:G dNdO dOej$Z;G dPdQ dQej$Z<G dRdS dSej$Z=G dTdU dUej$Z>G dVdW dWej$Z?G dXdY dYej$Z@G dZd[ d[ej$ZAG d\d] d]ej$ZBdbd^d_ZCeDd`kr@eC  dS )c    N)product)support)TESTFNfindfileimport_fresh_module
gc_collect	swap_attrz
simple.xmlZxmltestdata)subdirzutf-8z!filename is not encodable to utf8zsimple-ns.xmlzexpat224_utf8_bug.xmlz<body>
  <tag class='a'>text</tag>
  <tag class='b' />
  <section>
    <tag class='b' id='inner'>subtext</tag>
  </section>
</body>
zz<section>
  <tag class='b' id='inner'>subtext</tag>
  <nexttag />
  <nextsection>
    <tag />
  </nextsection>
</section>
zy
<body xmlns="http://effbot.org/ns">
  <tag>text</tag>
  <tag />
  <section>
    <tag>subtext</tag>
  </section>
</body>
z
<root>
<h:table xmlns:h="hello">
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>

<f:table xmlns:f="foo">
  <f:name>African Coffee Table</f:name>
  <f:width>80</f:width>
  <f:length>120</f:length>
</f:table>
</root>
zy<!DOCTYPE points [
<!ENTITY % user-entities SYSTEM 'user-entities.xml'>
%user-entities;
]>
<document>&entity;</document>
zl<!DOCTYPE points [
<!ENTITY entity SYSTEM "file:///non-existing-file.xml">
]>
<document>&entity;</document>
F)quietc                s    fdd}|S )Nc                s     fdd}t |  |S )Nc           	      s*   t j di | | W d Q R X d S )Nr
   )r   check_warnings)argskwargs)filtersr
   test W/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_xml_etree.pynewtestg   s    z1checkwarnings.<locals>.decorator.<locals>.newtest)	functoolsupdate_wrapper)r   r   )r   r
   )r   r   	decoratorf   s    z checkwarnings.<locals>.decoratorr   )r
   r   r   r   )r   r
   r   checkwarningse   s    r   c               @   s   e Zd Zdd Zdd ZdS )
ModuleTestc             C   s(   ddl m} ddl m} ddl m} d S )Nr   )ElementTree)ElementInclude)ElementPath)	xml.etreer   r   r   )selfr   r   r   r   r   r   test_sanityp   s    zModuleTest.test_sanityc             C   s   d}t j| t|dd d S )N)zxml.etree.ElementTree_elementtree)
HTML_EMPTY)	blacklist)r   check__all__ET)r   namesr   r   r   test_allw   s    zModuleTest.test_allN)__name__
__module____qualname__r   r$   r   r   r   r   r   o   s   r   Tunicodec             K   sX   |dkrt  }nt  }t| }|j|fd|i| |rF| S |d |S d S )Nr(   encodingr   )ioBytesIOStringIOr"   r   writegetvalueseek)elem	to_stringr)   optionsfiletreer   r   r   	serialize|   s    


r5   c             C   s   dd | D S )Nc             S   s   g | ]
}|j qS r   )tag).0r0   r   r   r   
<listcomp>   s    z"summarize_list.<locals>.<listcomp>r   )seqr   r   r   summarize_list   s    r:   c               @   s(   e Zd Zedd Zdd Zdd ZdS )ElementTestCasec             C   s   t th| _d S )N)pyETr"   modules)clsr   r   r   
setUpClass   s    zElementTestCase.setUpClassc             C   s   t j| }zy.|t j|< t||}|t j|< t|}W n^ tjk
r }	 z>ttdftdfg}
t	
d||
|||
||f |	W d d }	~	X Y nX W d |t j|< X |S )NcETr<   z%Failed to round-trip %r from %r to %r)sysr=   pickledumpsloadsPicklingErrordictr"   r<   r   
TestFailedget)r   objnamedumperloaderprotoZsave_mZtempresultZpeZhumanr   r   r   pickleRoundTrip   s    



*zElementTestCase.pickleRoundTripc             C   s   |  |tjtjf |  |tjtjf | tt|tt| x"t||D ]\}}| || qPW t	
dddd}| |||| d S )Nr6   tailtextattrib)assertIsInstancer"   Elementr<   assertEquallenlistzipassertEqualElementsoperator
attrgetter)r   ZalicebobxyZ
propertiesr   r   r   rY      s    z#ElementTestCase.assertEqualElementsN)r%   r&   r'   classmethodr?   rO   rY   r   r   r   r   r;      s   r;   c               @   s   e 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dd Zdd Zedeeffd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Z d8S )9ElementTreeTestc             C   s   |  t|| d S )N)rU   r5   )r   r0   expectedr   r   r   serialize_check   s    zElementTreeTest.serialize_checkc                s  fddfdd fdd t d} | t |} |  t jdd	d
}t |}t|d t jdd	d
}fdd|j |j |j |j	 |j
 |j |j |j |j |j |j |j |j |j |j |j |j fdd}||d ||d ||d ||d t jt j t jt j d S )Nc                sN   t |  x$| D ]} jt |dd| d qW | d }| d }| d d  d S )N   z%expected one-character string, got %r)msg  r   )rV   rU   )stringcharZ
new_string)r   r   r   check_string   s    
z4ElementTreeTest.test_interface.<locals>.check_stringc                sV   t |  |  }|  }x|D ]}| | }qW d| d<  j| d dd| d  d d S )Nvaluekeyzexpected value string, got %r)rd   )rV   keysitemsrU   )mappingrl   rm   rk   item)r   r   r   check_mapping   s    
z5ElementTreeTest.test_interface.<locals>.check_mappingc                s   j t| dd t| }x8dD ]0}j t| |d| d j||d| d q"W | j | j | jd k	r~| j | j	d k	r| j	 x| D ]} | qW d S )Nznot an element)rd   )r6   rR   rQ   rP   zno %s memberzno %s visible by dir)

assertTruer"   	iselementdirhasattrassertInr6   rR   rQ   rP   )elementZdirelemattrr0   )check_elementrp   ri   r   r   r   rx      s    







z5ElementTreeTest.test_interface.<locals>.check_elementr6   u   tägrj   )rk   z^<Element 't\xe4g' at 0x.*>$c                s    j t| dd|  d d S )N__call__z%s not callable)rd   )rq   rt   )method)r   r   r   check_method   s    z4ElementTreeTest.test_interface.<locals>.check_methodc                s    | j  d S )N)__next__)it)r{   r   r   
check_iter   s    z2ElementTreeTest.test_interface.<locals>.check_iter*)r"   rT   r   getrootassertRegexreprappendextendinsertremovegetchildrenfinditerfindfindallfindtextclearrH   setrl   rm   iteritertextgetiteratorrU   XML
fromstringPIProcessingInstruction)r   rv   r4   r~   r   )rx   rp   r{   ri   r   r   test_interface   sH    	




















zElementTreeTest.test_interfacec             C   s   t d}| |jd d|_| |jd d|_| |jd | |j d|_| |jd d|_| |jd | |j d|_| |jd d|_| |jd | |ji  dd	d
|_| |jdd	d
 ddd|_| |jddd d S )Nr6   TagTAGTextTEXTZTailTAILbd)acBD)AC)r"   rT   rU   r6   assertIsNonerQ   rP   rR   )r   rv   r   r   r   test_set_attribute  s*    
z"ElementTreeTest.test_set_attributec          	   C   s  t d}| |d t d}|| | |d || | |d |d| | |d || ||g | |d || t jddd	}| |d
 t d}|| | |d |d| | |d || | |d || | |d
 | t	}|| W d Q R X | 
t|jd | |d
 |||g|dd< | |d d | 
|dd |d |d g | 
|d dd |d |d g |dd= | |d d S )Nz<body><tag/></body>z<body><tag /></body>tag2z<body><tag /><tag2 /></body>r   z<body><tag2 /><tag /></body>r6   rj   )rk   z<tag key="value" />subtagz!<tag key="value"><subtag /></tag>z+<tag key="value"><subtag /><subtag /></tag>zlist.remove(x): x not in listrc   z
<subtag />	      )r"   r   rb   rT   r   r   r   r   assertRaises
ValueErrorrU   str	exception)r   r0   erv   
subelementcmr   r   r   test_simpleops(  sH    









 "
zElementTreeTest.test_simpleopsc             C   s:   |  tdd |  tdd |  tdd d S )Nz<tag>hello</tag>z)<tag>&#104;&#101;&#108;&#108;&#111;</tag>z<tag><![CDATA[hello]]></tag>)rb   r"   r   )r   r   r   r   
test_cdataQ  s    zElementTreeTest.test_cdatac             C   s|   t td}tj|d}| |djd | |djd tjt	d}| |djd | |djd d S )Nzutf-8)r3   r6   zsection/tagrv   zelement/../empty-elementzempty-element)
r*   r+   
SAMPLE_XMLencoder"   r   rU   r   r6   SIMPLE_XMLFILE)r   Z
stringfiler4   r   r   r   test_file_init[  s    zElementTreeTest.test_file_initc             C   s  ddl m} tt}x(tdD ]}t|dt|  q W t	|j
}x(tdD ]}t|dt|  qTW | t	|j
| x(tdD ]}t|dt|  qW | t	|j
| x(tdD ]}t|dt|  qW | t	|j
d d S )Nr   )r   
   z./   iX  i  )r   r   r"   r   r   ranger   r   r   rV   _cacherU   assertGreater
assertLess)r   r   r0   iZcache_len_10r   r   r   test_path_cachef  s    
 
   zElementTreeTest.test_path_cachec             C   sZ   dd l }td}| |}||}d|d_| |d | |d | |d d S )Nr   z<tag>hello<foo/></tag>barfooz<tag>hello<bar /></tag>z<tag>hello<foo /></tag>)copyr"   r   deepcopyr   r6   rb   )r   r   e1e2e3r   r   r   	test_copyu  s    


zElementTreeTest.test_copyc             C   s"  t d}|d | |ddd |dd | |dd t jddd}| |dd | |jddi ddi}t d|}|  | |dd | |jddi ddi}t jd|}|  | |dd | |jddi t jdddidd}| |dd | |jddi t d}d|_|d	d
 |dd | t |d | t	|
 d	dg | t	| ddg | |jd d d|jd< d|jd< | t |d t d}|dd |dd |dd |dd | t |d d S )Nr6   rk   defaultrj   )rk   otherr   Zaatestatestvaltestbtest2s-   <test testa="testval" testb="test2">aa</test>)r   r   )r   r   Ztest1Ztestcs;   <test testa="testval" testb="test1" testc="test2">aa</test>r   r   z
r   z	
 r   z

s@   <test a="&#10;" b="&#10;" c="&#09;&#10;&#10; " d="&#10;&#10;" />)r6   )r"   rT   rH   rU   r   rR   r   rQ   tostringsortedrl   rm   )r   r0   rR   r   r   r   test_attrib  sT    






zElementTreeTest.test_attribc             C   s   t d}ddi}|d|}| j|j|dd || | |d |  | |d || | |d |||g | |d	 |g|d d < | |d t	|g|d d < | |d d S )
Nr6   rk   rj   r   zattrib aliasing)rd   z!<tag><subtag key="value" /></tag>z<tag />zM<tag><subtag key="value" /><subtag key="value" /><subtag key="value" /></tag>)
r"   rT   makeelementassertIsNotrR   r   rb   r   r   tuple)r   r0   rR   subelemr   r   r   test_makeelement  s"    


z ElementTreeTest.test_makeelementc          	   C   s   t t}t }|j|dd | | d t t}t }|j|dd | | d t	t}|
 }W d Q R X t  }| |jd || | | d t  }t j|d}|| | | d d S )Nr(   )r)   zi<root>
   <element key="value">text</element>
   <element>text</element>tail
   <empty-element />
</root>z<ns0:root xmlns:ns0="namespace">
   <ns0:element key="value">text</ns0:element>
   <ns0:element>text</ns0:element>tail
   <ns0:empty-element />
</ns0:root>z^Expat )target)r"   parser   r*   r,   r-   rU   r.   SIMPLE_NS_XMLFILEopenread	XMLParserr   versionfeedrb   closeTreeBuilder)r   r4   streamfdataparserr   r   r   r   test_parsefile  s,    








zElementTreeTest.test_parsefilec             C   s   t d}| t j|ddd t d}| t j|ddd dddg}t |}| t |d | dt |d | t |d	d
 t d\}}| t	|d t d\}}| t	|d | |d j
d d S )Nz<html><body>text</body></html>r(   )r)   z<html><body>ztext</boz
dy></html>s   <html><body>text</body></html>    asciisE   <?xml version='1.0' encoding='ascii'?>
<html><body>text</body></html>r   z(<html><body id='body'>text</body></html>rc   body)r"   r   rU   r   r   fromstringlistjointostringlistXMLIDrV   r6   )r   rv   sequence_idsr   r   r   test_parseliteral  s&    



z!ElementTreeTest.test_parseliteralc             C   s@  t j}|t}t|\}}| ||jfd | dd |D dddg | |jjd |t}| dd |D ddd	d
g d}|t|}| dd |D g  d}|t|d}| dd |D g  d}|t|}| dd |D ddddddddg d}|t|}| dd |D dddddddd	d
dg
 d}|t	d|}dd |D }| |ddg d }t
td!2}| t}||| W d Q R X | |j W d Q R X | t|jd" t| : | t}|t| W d Q R X | t|jd" ~W d Q R X td#}	d$}||	|}| d%d |D d&d'g t	d(}	||	}
t|
\}}| ||jfd) | t j}t|
 W d Q R X | t|jd* | tjt t
td+}|d, W d Q R X |t}
t|
\}}| ||jfd) t| < | t j}t|
 W d Q R X | t|jd* ~~
W d Q R X d S )-N)endrv   c             S   s   g | ]\}}||j fqS r   )r6   )r7   actionr0   r   r   r   r8     s    z2ElementTreeTest.test_iterparse.<locals>.<listcomp>)r   zempty-element)r   rootr   c             S   s   g | ]\}}||j fqS r   )r6   )r7   r   r0   r   r   r   r8     s    )r   z{namespace}element)r   z{namespace}empty-element)r   z{namespace}rootr   c             S   s   g | ]\}}||j fqS r   )r6   )r7   r   r0   r   r   r   r8   (  s    )eventsc             S   s   g | ]\}}||j fqS r   )r6   )r7   r   r0   r   r   r   r8   ,  s    )startr   c             S   s   g | ]\}}||j fqS r   )r6   )r7   r   r0   r   r   r   r8   0  s    )r   r   )r   rv   )r   zempty-element)r   r   zstart-nszend-nsc             S   s*   g | ]"\}}|d kr||j fn||fqS ))r   r   )r6   )r7   r   r0   r   r   r   r8   =  s   )zstart-ns)re   	namespace)r   z{namespace}root)r   z{namespace}element)r   z{namespace}empty-element)zend-nsN)zstart-nszend-nsz<root xmlns=''/>c             S   s   g | ]\}}|qS r   r   )r7   r   r0   r   r   r   r8   N  s    zstart-nszend-ns)r   r   bogusrbzunknown event 'bogus's   <?xml version='1.0' encoding='iso-8859-1'?>
<body xmlns='http://&#233;ffbot.org/ns'
      xmlns:cl='http://effbot.org/ns'>text</body>
)zstart-nsc             S   s   g | ]\}}||fqS r   r   )r7   r   r0   r   r   r   r8   d  s    )zstart-ns)re   u   http://éffbot.org/ns)zstart-ns)u   clézhttp://effbot.org/nsz<document />junk)r   documentz.junk after document element: line 1, column 12wbs   <document />junk)r"   	iterparser   nextrU   r6   r   r   r*   r,   r   r   r   assertFalseclosedr   r   r   check_no_resource_warningr+   
ParseError
addCleanupunlinkr   r-   )r   r   contextr   r0   r   resr   r   sourcer}   r   r   r   test_iterparse  s    





zElementTreeTest.test_iterparsec             C   s   t d}d|_| |d dt |d_| |d d |_| |d |dt d	 | |d
 t dd|d< | |d d S )Nr6   rQ   z<tag>text</tag>subtextr   z'<tag>text<subtag>subtext</subtag></tag>ztext<subtag>subtext</subtag>r   commentz*text<!--comment--><subtag>subtext</subtag>rk   rj   z)text<?key value?><subtag>subtext</subtag>)	r"   rT   rQ   rb   
SubElementr6   r   Commentr   )r   r0   r   r   r   test_writefile  s    
zElementTreeTest.test_writefilec             C   s   t t}| }W d Q R X G dd dt}| }tj|d}|| | |dddddddd	g t t}| }W d Q R X G d
d dt}| }tj|d}|| | |ddddddddddg
 d S )Nc               @   s$   e Zd Zdd Zdd Zdd ZdS )z4ElementTreeTest.test_custom_builder.<locals>.Builderc             S   s   |  d|f d S )Nr   )r   )r   r6   rR   r   r   r   r     s    z:ElementTreeTest.test_custom_builder.<locals>.Builder.startc             S   s   |  d|f d S )Nr   )r   )r   r6   r   r   r   r     s    z8ElementTreeTest.test_custom_builder.<locals>.Builder.endc             S   s   d S )Nr   )r   rQ   r   r   r   r     s    z9ElementTreeTest.test_custom_builder.<locals>.Builder.dataN)r%   r&   r'   r   r   r   r   r   r   r   Builder  s   r
  )r   )r   r   )r   rv   )r   rv   )r   zempty-element)r   zempty-element)r   r   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )z4ElementTreeTest.test_custom_builder.<locals>.Builderc             S   s   |  d|f d S )Nr   )r   )r   r6   rR   r   r   r   r     s    z:ElementTreeTest.test_custom_builder.<locals>.Builder.startc             S   s   |  d|f d S )Nr   )r   )r   r6   r   r   r   r     s    z8ElementTreeTest.test_custom_builder.<locals>.Builder.endc             S   s   d S )Nr   )r   rQ   r   r   r   r     s    z9ElementTreeTest.test_custom_builder.<locals>.Builder.datac             S   s   |  d||f d S )Npi)r   )r   r   r   r   r   r   r    s    z7ElementTreeTest.test_custom_builder.<locals>.Builder.pic             S   s   |  d|f d S )Nr  )r   )r   r   r   r   r   r    s    z<ElementTreeTest.test_custom_builder.<locals>.Builder.commentN)r%   r&   r'   r   r   r   r  r  r   r   r   r   r
    s
   )r  r  r   )r  z	 comment )r   z{namespace}root)r   z{namespace}element)r   z{namespace}element)r   z{namespace}empty-element)r   z{namespace}empty-element)r   z{namespace}root)	r   r   r   rW   r"   r   r   rU   r   )r   r   r   r
  Zbuilderr   r   r   r   test_custom_builder  s@    



z#ElementTreeTest.test_custom_builderz@This method will be removed in future versions.  Use .+ instead.c          	   C   sl  t td}t|}W d Q R X | dd |  D dddgg g g g | dd | D dddgg g g g tt	}| t
| d | t
|d  d	 | |d d  |  |d
 }|d }|d	d= | t
| d | ||d
  | ||d	  ||g|d
d< | ||d
  | ||d	  | ||d
  |  | | g  d S )Nr   c             S   s   g | ]}t | qS r   )r:   r   )r7   r0   r   r   r   r8     s   z4ElementTreeTest.test_getchildren.<locals>.<listcomp>rv   zempty-elementc             S   s   g | ]}t | qS r   )r:   r   )r7   r0   r   r   r   r8     s      r   rc   r   )r   r   r"   r   rU   r   r   r   r   r   rV   r   assertNotEqualr   )r   r   r4   r0   Zchild1Zchild2r   r   r   test_getchildren  s<    




z ElementTreeTest.test_getchildrenc             C   s<   t d}| t |d t d}| t |d d S )Nz<html><body>text</body></html>s   <html><body>text</body></html>)r"   r   rU   r   r   )r   r0   r   r   r   test_writestring  s    

z ElementTreeTest.test_writestringc          C      s  dr fdd	}|dd |dd |dd |d	d
 |dd |dd dd fdd}ddddddddddddddd d!d"d#d$d%dd&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEddFdGdHdIdJdKdLdMdNdOdPdQdRgC}x(|D ] }  tt||dS qW dTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddeg}x"|D ]} ttj|| q@W dfdgdhdidjdkdldmdndog
}x$|D ]} tjtj|| q|W  ttjdpd  ttjdqd d S )sNre   c                s>   d| |f }  t|| j|   t|j| d S )Nz0<?xml version='1.0' encoding='%s'?><xml>%s</xml>)rU   r"   r   r   rQ   )r)   r   xml)r   r   r   check  s    
z,ElementTreeTest.test_encoding.<locals>.checkr   r   zus-asciiz
iso-8859-1   ½ziso-8859-15u   €cp437u   √z	mac-romanu   ˚c             S   s   d|  S )Nz*<?xml version='1.0' encoding='%s'?><xml />r   )r)   r   r   r   r    s    z*ElementTreeTest.test_encoding.<locals>.xmlc                s    |  | S )N)r   )r)   )r  r   r   bxml  s    z+ElementTreeTest.test_encoding.<locals>.bxmlzutf-8z	utf-8-sigzutf-16zutf-16bezutf-16lez	iso8859-1z	iso8859-2z	iso8859-3z	iso8859-4z	iso8859-5z	iso8859-6z	iso8859-7z	iso8859-8z	iso8859-9z
iso8859-10z
iso8859-13z
iso8859-14z
iso8859-15z
iso8859-16Zcp720Zcp737cp775cp850cp852cp855Zcp856cp857cp858cp860cp861cp862cp863cp865cp866cp869Zcp874Zcp1006cp1125cp1250cp1251cp1252cp1253cp1254cp1255cp1256cp1257cp1258zmac-cyrillicz	mac-greekzmac-icelandz
mac-latin2zmac-turkishz
iso2022-jpziso2022-jp-1ziso2022-jp-2ziso2022-jp-2004ziso2022-jp-3ziso2022-jp-extzkoi8-rzkoi8-tzkoi8-ukz1048hzptcp154s   <xml />big5	big5hkscscp932cp949cp950zeuc-jpzeuc-jis-2004zeuc-jisx0213zeuc-krgb2312gbkgb18030z
iso2022-krjohabz	shift-jiszshift-jis-2004zshift-jisx0213zutf-7cp037cp424cp500cp864Zcp875cp1026cp1140utf_32	utf_32_be	utf_32_leZ	undefinedZxxx)re   )	rU   r"   r   r   r   r   r   r   LookupError)r   r  r  Zsupported_encodingsr)   Z&unsupported_ascii_compatible_encodingsZ(unsupported_ascii_incompatible_encodingsr   )r   r  r   test_encoding  sR    








 


zElementTreeTest.test_encodingc             C   st   t d}d|_| t|d | t|d dd | t|ddd | t|ddd | t|ddd	 d S )
Nz-<html><link/><script>1 &lt; 2</script></html>
z/<html><link /><script>1 &lt; 2</script></html>
)rz   r  htmlz*<html><link><script>1 < 2</script></html>
rQ   z1 < 2
)r"   r   rP   rU   r5   )r   r   r   r   r   test_methods2  s    

zElementTreeTest.test_methodsc             C   s2   t d}| t|d | t|ddd d S )Nz(<html><CamelCase>text</CamelCase></html>rE  )rz   )r"   r   rU   r5   )r   r   r   r   r   test_issue18347A  s
    

zElementTreeTest.test_issue18347c          	   C   s   t d}| t|ddd | |d | t j}t d W d Q R X | t|jd | t j}t t	 W d Q R X | t|jd t 
 }d	|jd
< |t	 | }| |d | t j}t t W d Q R X | t|jd d S )Nz*<document title='&#x8230;'>test</document>zus-ascii)r)   s*   <document title="&#33328;">test</document>u%   <document title="舰">test</document>z<document>&entity;</document>z#undefined entity: line 1, column 10z,undefined entity &entity;: line 5, column 10rQ   entityz<document>text</document>z,undefined entity &entity;: line 4, column 10)r"   r   rU   r5   rb   r   r   r   r   
ENTITY_XMLr   rH  r   r   EXTERNAL_ENTITY_XML)r   r   r   r   r   r   r   r   test_entityH  s*    


zElementTreeTest.test_entityc             C   sr   t d}| |d t d}| |d t d}| |d t d}| |d t t}| |d	 d S )
Nz<tag xml:lang='en' />z<tag xml:lang="en" />zC<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' />zC<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" />z7<html:html xmlns:html='http://www.w3.org/1999/xhtml' />z7<html:html xmlns:html="http://www.w3.org/1999/xhtml" />zG<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope' />zE<ns0:Envelope xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope" />z<ns0:body xmlns:ns0="http://effbot.org/ns">
  <ns0:tag>text</ns0:tag>
  <ns0:tag />
  <ns0:section>
    <ns0:tag>subtext</ns0:tag>
  </ns0:section>
</ns0:body>)r"   r   rb   SAMPLE_XML_NS)r   r0   r   r   r   test_namespacem  s    




zElementTreeTest.test_namespacec             C   s  t d}| |d t t d}| |d t t dd}| |d t t dd}t |t dd}t |t dd}| |d |  d|jd	< | |d
 |  d|jt d	< | |d
 |  d|jd	< | |d |  t d|jd	< | |d |  t d}t d|jd< || || | |d | t	t ddd | t	t dd t dd}t dd}| || t dd}| 
|| | 
|d | |d d S )Nz{uri}tagz<ns0:tag xmlns:ns0="uri" />urir6   Ztag1r   z;<ns0:tag xmlns:ns0="uri"><ns0:tag1 /><ns0:tag2 /></ns0:tag>rj   z{uri}keyz+<ns0:tag xmlns:ns0="uri" ns0:key="value" />z
{uri}valuez0<ns0:tag xmlns:ns0="uri" ns0:key="{uri}value" />z/<ns0:tag xmlns:ns0="uri" ns0:key="ns0:value" />z{uri2}valuez	{uri1}keyz{<ns0:tag xmlns:ns0="uri" xmlns:ns1="uri1" xmlns:ns2="uri2"><tag ns1:key="ns2:value" /><tag ns1:key="ns2:value" /></ns0:tag>nsz{ns}tagz	other-tagzns:tag)r"   rT   rb   QNamer  r   rR   r   rU   r   r  )r   r0   r   Zq1Zq2r   r   r   
test_qname  sV    





zElementTreeTest.test_qnamec             C   s   t d}d S )Nz<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>text</html>)r"   r   )r   r0   r   r   r   test_doctype_public  s    z#ElementTreeTest.test_doctype_publicc                sr  ddl m   fdd}|ddg |dddg |d	d
dg |dd
dg |dddddg |ddddddg |ddddg |dddddddddddddg |ddddg |dddg |ddd dd!g |d"d"g |d#d"ddg |d$d$g |d%d$dd
d&g |d'ddd(dg |d)d*dd
d+d,d-d,d
d.dg
 |d/d/g |d0d"dd1g |d2d"dd/g d S )3Nr   )r   c                s     dd  | D | d S )Nc             S   s   g | ]\}}|p|qS r   r   )r7   opr6   r   r   r   r8     s   zGElementTreeTest.test_xpath_tokenizer.<locals>.check.<locals>.<listcomp>)rU   xpath_tokenizer)pra   )r   r   r   r   r    s    
z3ElementTreeTest.test_xpath_tokenizer.<locals>.checkr   ztext()rQ   z()z@name@rJ   z@*zpara[1]Zpara[1]zpara[last()]lastz*/para/z/doc/chapter[5]/section[2]docZchapter5section2zchapter//paraz//z//paraz//olist/itemZolistro   .z.//paraz..z../@langlangzchapter[title]titlez#employee[@secretary and @assistant]ZemployeeZ	secretaryre   andZ	assistantz{http://spam}eggz
./spam.eggzspam.eggz.//{http://spam}egg)r   r   )r   r  r   )r   r   r   test_xpath_tokenizer  s2    z$ElementTreeTest.test_xpath_tokenizerc             C   sn   |  ttddd |  ttddd |  ttddd |  ttdddd d S )	Nr   Zinstructions   <?test instruction?>z
<testing&>s   <?test <testing&>?>u   <testing&>ãzlatin-1s=   <?xml version='1.0' encoding='latin-1'?>
<?test <testing&>?>)rU   r"   r   r   r   )r   r   r   r   test_processinginstruction  s    z*ElementTreeTest.test_processinginstructionc             C   sx   xrdD ]j}xd||  gD ]T}d| }ttd| dd}| || ttd||f dd}| || qW qW d S )N)ZAREAZBASEZBASEFONTZBRZCOLFRAMEZHRZIMGZINPUTZISINDEXZLINKZMETAZPARAMz<%s>z<%s />rE  )rz   z	<%s></%s>)lowerr5   r"   r   rU   )r   rv   r0   ra   Z
serializedr   r   r   #test_html_empty_elems_serialization
  s    
z3ElementTreeTest.test_html_empty_elems_serializationN)!r%   r&   r'   rb   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r   DeprecationWarningPendingDeprecationWarningr  r  rC  rF  rG  rK  rM  rQ  rR  rd  re  rh  r   r   r   r   r`      s8   X)
5-p9&;%!A#r`   c               @   sV   e Zd Zd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S )XMLPullParserTestNc             C   sH   |d kr| | n0x.tdt||D ]}| ||||   q&W d S )Nr   )r   r   rV   )r   r   r   
chunk_sizer   r   r   r   _feed  s    zXMLPullParserTest._feedc             C   s"   |  }| dd |D | d S )Nc             S   s   g | ]\}}||j fqS r   )r6   )r7   r   r0   r   r   r   r8   #  s    z7XMLPullParserTest.assert_event_tags.<locals>.<listcomp>)read_eventsrU   )r   r   ra   r   r   r   r   assert_event_tags!  s    z#XMLPullParserTest.assert_event_tagsc          
   C   s   xdD ]}| j |d t }| |g  | |d| | |g  | |d| | |g  | |d| | |dg | |d| | |d| | |dd	g | |d
| | |dg | |  W d Q R X qW d S )N)Nrc      )rl  z<!-- comment -->
z+<root>
  <element key='value'>text</elementz>
)r   rv   z<element>text</element>tail
z<empty-element/>
)r   zempty-elementz</root>
)r   r   )subTestr"   XMLPullParserro  rm  r   r   )r   rl  r   r   r   r   test_simple_xml&  s(    
z!XMLPullParserTest.test_simple_xmlc          	   C   s   t  }| }| |d t|\}}| ||jfd | |d t|\}}| ||jfd | t t| W d Q R X d S )Nz-<root>
  <element key='value'>text</element>
)r   rv   z</root>
)r   r   )	r"   rr  rn  rm  r   rU   r6   r   StopIteration)r   r   r}   r   r0   r   r   r   test_feed_while_iterating=  s    z+XMLPullParserTest.test_feed_while_iteratingc             C   s   t  }| |g  | |d | |g  | |d | |g  | |d | |g  | |d | |dg | |d | |d | |ddg | |d	 | |d
g | |  d S )Nz<!-- comment -->
z<root xmlns='namespace'>
z"<element key='value'>text</elementz>
)r   z{namespace}elementz<element>text</element>tail
z<empty-element/>
)r   z{namespace}empty-elementz</root>
)r   z{namespace}root)r"   rr  ro  rm  r   r   )r   r   r   r   r   test_simple_xml_with_nsI  s$    z)XMLPullParserTest.test_simple_xml_with_nsc             C   s   t jdd}| |d | |d | t| dg | |d | |d | |d | |d	 | |d
 | t| dg | |  d S )N)zstart-nszend-ns)r   z<!-- comment -->
z<root xmlns='namespace'>
)zstart-ns)re   r   z"<element key='value'>text</elementz>
z<element>text</element>tail
z<empty-element/>
z</root>
)zend-nsN)r"   rr  rm  rU   rW   rn  r   r   )r   r   r   r   r   test_ns_events^  s    
z XMLPullParserTest.test_ns_eventsc             C   s  t jdd}| |d | |g  t jdd}| |d | |g  | |d | |dg | |d | |d	g | |d
 | |dg | |d | |ddddg | |d | |  | |dg t jdd}| |d | |g  | |d | |dg | |d | |d	g | |d
 | |g  | |d | |ddg | |d | |  d S )Nr   )r   z<root/>
)r   r   z<!-- comment -->
z<root>
)r   r   z"<element key='value'>text</element)r   rv   z>
)r   rv   z8<element xmlns='foo'>text<empty-element/></element>tail
)r   z{foo}element)r   z{foo}empty-element)r   z{foo}empty-element)r   z{foo}elementz</root>)r   r   )r   )r"   rr  rm  ro  r   r   )r   r   r   r   r   test_eventsm  sL    zXMLPullParserTest.test_eventsc             C   sl   ddh}t j|d}| |d | |ddg G dd d}t j| d}| |d | |ddg d S )	Nr   r   )r   z<foo>bar</foo>)r   r   )r   r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )z9XMLPullParserTest.test_events_sequence.<locals>.DummyIterc             S   s   t dddg| _d S )Nr   r   zstart-ns)r   r   )r   r   r   r   __init__  s    zBXMLPullParserTest.test_events_sequence.<locals>.DummyIter.__init__c             S   s   | S )Nr   )r   r   r   r   __iter__  s    zBXMLPullParserTest.test_events_sequence.<locals>.DummyIter.__iter__c             S   s
   t | jS )N)r   r   )r   r   r   r   r|     s    zBXMLPullParserTest.test_events_sequence.<locals>.DummyIter.__next__N)r%   r&   r'   ry  rz  r|   r   r   r   r   	DummyIter  s   r{  )r"   rr  rm  ro  )r   Zeventsetr   r{  r   r   r   test_events_sequence  s    z&XMLPullParserTest.test_events_sequencec          	   C   s&   |  t tjdd W d Q R X d S )N)r   r   r   )r   )r   r   r"   rr  )r   r   r   r   test_unknown_event  s    z$XMLPullParserTest.test_unknown_event)N)r%   r&   r'   rm  ro  rs  ru  rv  rw  rx  r|  r}  r   r   r   r   rk    s   
,rk  z<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>120 Mz is adequate for an average home user.</p>
  <xi:include href="disclaimer.xml"/>
</document>
zC1.xmlz<?xml version='1.0'?>
<disclaimer>
  <p>The opinions represented herein represent those of the individual
  and should not be interpreted as official policy endorsed by this
  organization.</p>
</disclaimer>
zdisclaimer.xmlz<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>This document has been accessed
  <xi:include href="count.txt" parse="text"/> times.</p>
</document>
zC2.xmlZ324387z	count.txtz<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>This document has been <em>accessed</em>
  <xi:include href="count.txt" parse="text"/> times.</p>
</document>
zC2b.xmlz<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>The following is the source of the "data.xml" resource:</p>
  <example><xi:include href="data.xml" parse="text"/></example>
</document>
zC3.xmlzQ<?xml version='1.0'?>
<data>
  <item><![CDATA[Brooks & Shields]]></item>
</data>
zdata.xmlaW  <?xml version='1.0'?>
<div xmlns:xi="http://www.w3.org/2001/XInclude">
  <xi:include href="example.txt" parse="text">
    <xi:fallback>
      <xi:include href="fallback-example.txt" parse="text">
        <xi:fallback><a href="mailto:bob@example.org">Report error</a></xi:fallback>
      </xi:include>
    </xi:fallback>
  </xi:include>
</div>
zC5.xmlz<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>Example.</p>
  <xi:include href="{}"/>
</document>
zdefault.xmlz<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>120 Mz is adequate for an average home user.</p>
  <xi:include href="disclaimer.xml" parse="BAD_TYPE"/>
</document>
zB1.xmlzn<?xml version='1.0'?>
<div xmlns:xi="http://www.w3.org/2001/XInclude">
    <xi:fallback></xi:fallback>
</div>
zB2.xmlc               @   s@   e Zd ZdddZdddZdd Zd	d
 Zdd Zdd ZdS )XIncludeTestr  Nc             C   s@   yt | }W n tk
r(   tdY nX |dkr<t|}|S )Nzresource not foundr  )XINCLUDEKeyErrorOSErrorr"   r   )r   hrefr   r)   r   r   r   r   xinclude_loader  s    
zXIncludeTest.xinclude_loaderc             C   s   d S )Nr   )r   r  r   r)   r   r   r   none_loader  s    zXIncludeTest.none_loaderc          	   C   s2   |dkr*t |d}t| S Q R X nd S d S )Nr  r   )r   r"   r   r   )r   r  r   r   r   r   r   
_my_loader   s    zXIncludeTest._my_loaderc             C   s8   ddl m} | d}||| j | t|d d S )Nr   )r   zdefault.xmlz<document>
  <p>Example.</p>
  <root>
   <element key="value">text</element>
   <element>text</element>tail
   <empty-element />
</root>
</document>)r   r   r  includer  rU   r5   )r   r   r\  r   r   r   test_xinclude_default)  s
    

z"XIncludeTest.test_xinclude_defaultc          	   C   s   ddl m} | d}||| j | t|d | d}||| j | t|d | d}||| j | t|d | d	}||| j | t|d
 | d}| t}||| j W d Q R X | t|j	d | t|d d S )Nr   )r   zC1.xmla  <document>
  <p>120 Mz is adequate for an average home user.</p>
  <disclaimer>
  <p>The opinions represented herein represent those of the individual
  and should not be interpreted as official policy endorsed by this
  organization.</p>
</disclaimer>
</document>zC2.xmlzO<document>
  <p>This document has been accessed
  324387 times.</p>
</document>zC2b.xmlzX<document>
  <p>This document has been <em>accessed</em>
  324387 times.</p>
</document>zC3.xmlz<document>
  <p>The following is the source of the "data.xml" resource:</p>
  <example>&lt;?xml version='1.0'?&gt;
&lt;data&gt;
  &lt;item&gt;&lt;![CDATA[Brooks &amp; Shields]]&gt;&lt;/item&gt;
&lt;/data&gt;
</example>
</document>zC5.xmlzresource not foundaI  <div xmlns:ns0="http://www.w3.org/2001/XInclude">
  <ns0:include href="example.txt" parse="text">
    <ns0:fallback>
      <ns0:include href="fallback-example.txt" parse="text">
        <ns0:fallback><a href="mailto:bob@example.org">Report error</a></ns0:fallback>
      </ns0:include>
    </ns0:fallback>
  </ns0:include>
</div>)
r   r   r  r  rU   r5   r   r  r   r   )r   r   r   r   r   r   r   test_xinclude7  s.    










zXIncludeTest.test_xincludec          	   C   s0  ddl m} ttd }| |j}|j|| jd W d Q R X | 	t
|jd ttd }| |j}|j|| jd W d Q R X | 	t
|jd ttd }| |j}|j|| jd W d Q R X | 	t
|jd	 ttd
 }| |j}|j|| jd W d Q R X | 	t
|jd d S )Nr   )r   zC1.xml)rL   z%cannot load 'disclaimer.xml' as 'xml'zC2.xmlz!cannot load 'count.txt' as 'text'zB1.xmlz1unknown parse type in xi:include tag ('BAD_TYPE')zB2.xmlzYxi:fallback tag must be child of xi:include ('{http://www.w3.org/2001/XInclude}fallback'))r   r   r"   r   r  r   ZFatalIncludeErrorr  r  rU   r   r   XINCLUDE_BAD)r   r   r   r   r   r   r   test_xinclude_failuresw  s*    z#XIncludeTest.test_xinclude_failures)r  N)N)	r%   r&   r'   r  r  r  r  r  r  r   r   r   r   r~    s   
	
	@r~  c               @   s   e 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ee d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d.d/ Zd0d1 Zd2d3 Zd4d5 Z d6d7 Z!d8d9 Z"d:S );BugsTestc                s    fdd}t d}|| t d}d|_|| t d}d|_|| t d}|dd || t d}|dd || d S )Nc          	      s4     t}t|  W d Q R X  t|jd d S )Nzcannot serialize 123 (type int))r   	TypeErrorr5   rU   r   r   )r0   r   )r   r   r   r    s    z-BugsTest.test_bug_xmltoolkit21.<locals>.check{   r0   123)r"   rT   rQ   rP   r   )r   r  r0   r   )r   r   test_bug_xmltoolkit21  s    




zBugsTest.test_bug_xmltoolkit21c             C   s<   t t}t |}| |dd | |dd d S )Nr6   rQ   zsection/tagr  )r"   r   r   r   rU   r   )r   r0   r4   r   r   r   test_bug_xmltoolkit25  s    

zBugsTest.test_bug_xmltoolkit25c             C   s<   t d}| t|dg  | t|ddg d S )Nz"<doc><table><tbody/></table></doc>z.//theadz.//tbodyZtbody)r"   r   rU   r:   r   )r   r4   r   r   r   test_bug_xmltoolkit28  s    
zBugsTest.test_bug_xmltoolkit28c          	   C   s<   t d}t  }t | | | d W d Q R X d S )Nz"<doc><table><tbody/></table></doc>z$<doc><table><tbody /></table></doc>
)r"   r   r   captured_stdoutdumprU   r.   )r   r4   stdoutr   r   r   test_bug_xmltoolkitX1  s    


zBugsTest.test_bug_xmltoolkitX1c             C   s   t d}| t |dd t d}| |jddi | t |dd t d}| t |dd	 t d
}| t |dd t d}|dd | t |dd d S )Ns2   <?xml version='1.0' encoding='iso-8859-1'?><tg />zutf-8s   <täg />sD   <?xml version='1.0' encoding='iso-8859-1'?><tag ttr='v&#228;lue' />u   ättru   välues   <tag ättr="välue" />s:   <?xml version='1.0' encoding='iso-8859-1'?><tg>text</tg>s   <täg>text</täg>u   tägr6   )r"   r   rU   r   rR   rT   r   )r   r4   r   r   r   test_bug_xmltoolkit39  s    




zBugsTest.test_bug_xmltoolkit39c             C   s2   t d}| t|ddd | t|d d S )Nz=<!DOCTYPE doc [<!ENTITY ldots '&#x8230;'>]><doc>&ldots;</doc>zus-ascii)r)   s   <doc>&#33328;</doc>u   <doc>舰</doc>)r"   r   rU   r5   )r   r   r   r   r   test_bug_xmltoolkit54  s    
zBugsTest.test_bug_xmltoolkit54c          	   C   s8   |  tj}td W d Q R X | t|jd d S )Ns?   <!DOCTYPE doc SYSTEM 'doc.dtd'><doc>&ldots;&ndots;&rdots;</doc>z+undefined entity &ldots;: line 1, column 36)r   r"   r   r   rU   r   r   )r   r   r   r   r   test_bug_xmltoolkit55  s    zBugsTest.test_bug_xmltoolkit55c             C   s$   G dd d}|  ttj|  d S )Nc               @   s   e Zd Zdd ZdS )z5BugsTest.test_bug_xmltoolkit60.<locals>.ExceptionFilec             S   s   t d S )N)r  )r   r]   r   r   r   r     s    z:BugsTest.test_bug_xmltoolkit60.<locals>.ExceptionFile.readN)r%   r&   r'   r   r   r   r   r   ExceptionFile  s   r  )r   r  r"   r   )r   r  r   r   r   test_bug_xmltoolkit60  s    zBugsTest.test_bug_xmltoolkit60c             C   sH   ddd}t  }|j| |d | }| |djd d S )Nu   ’u   ‘)ZrsquoZlsquoaF  <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE patent-application-publication SYSTEM "pap-v15-2001-01-31.dtd" []>
<patent-application-publication>
<subdoc-abstract>
<paragraph id="A-0001" lvl="0">A new cultivar of Begonia plant named &lsquo;BCT9801BEG&rsquo;.</paragraph>
</subdoc-abstract>
</patent-application-publication>z.//paragraphu7   A new cultivar of Begonia plant named ‘BCT9801BEG’.)	r"   r   rH  updater   r   rU   r   rQ   )r   ZENTITIESr   tr   r   r   test_bug_xmltoolkit62  s    
zBugsTest.test_bug_xmltoolkit62zSkips under coverage.c             C   sF   dd }|  t d }xtdD ]
}|  q"W | t d | d S )Nc              S   s,   t  } | di  | d | d d S )Nr6   rQ   )r"   r   r   r   r   )r4   r   r   r   xmltoolkit63  s    
z4BugsTest.test_bug_xmltoolkit63.<locals>.xmltoolkit63i  )rA   getrefcountr   rU   )r   r  countr   r   r   r   test_bug_xmltoolkit63  s    

zBugsTest.test_bug_xmltoolkit63c          	   C   s`   t jddd}| t |d | t t |dd | t t t |d d S )NZSomeTagzdef _f():
  return 3
)rQ   s0   <SomeTag text="def _f():&#10;  return 3&#10;" />rQ   )r"   rT   rU   r   r   rH   )r   r   r   r   r   test_bug_200708_newline#  s    z BugsTest.test_bug_200708_newlinec             C   s`   t  }|d | | jd G dd d}t j| d}|d | | jd d S )Nz<element>some text</element>rv   c               @   s   e Zd Zdd ZdS )z2BugsTest.test_bug_200708_close.<locals>.EchoTargetc             S   s
   t dS )Nrv   )r"   rT   )r   r   r   r   r   6  s    z8BugsTest.test_bug_200708_close.<locals>.EchoTarget.closeN)r%   r&   r'   r   r   r   r   r   
EchoTarget5  s   r  )r   )r"   r   r   rU   r   r6   )r   r   r  r   r   r   test_bug_200708_close.  s    

zBugsTest.test_bug_200708_closec          	   C   s   t d}t |d}| t|ddd t d}t |d}t |d}| t|ddd t d}t |d}t |d}| t}t|dd W d Q R X | t|jd d S )	Nz{default}elemr   )default_namespacez%<elem xmlns="default"><elem /></elem>z{not-default}elemzI<elem xmlns="default" xmlns:ns1="not-default"><elem /><ns1:elem /></elem>r0   z<cannot use non-qualified names with default_namespace option)	r"   rT   r  rU   r5   r   r   r   r   )r   r   sr   r   r   r   !test_bug_200709_default_namespace<  s     


z*BugsTest.test_bug_200709_default_namespacec             C   sd   t d}| t |d t dd t d}| t |d t d}| t |d d S )Nz/{http://namespace.invalid/does/not/exist/}titlesB   <ns0:title xmlns:ns0="http://namespace.invalid/does/not/exist/" />r   z(http://namespace.invalid/does/not/exist/sB   <foo:title xmlns:foo="http://namespace.invalid/does/not/exist/" />z'{http://purl.org/dc/elements/1.1/}titles8   <dc:title xmlns:dc="http://purl.org/dc/elements/1.1/" />)r"   rT   rU   r   register_namespace)r   r   r   r   r   "test_bug_200709_register_namespaceS  s    


z+BugsTest.test_bug_200709_register_namespacec             C   s`   t d}|t d | |d jt j t d}|t d | |d jt j d S )Nr   r   r   )r"   rT   r   r  rU   r6   r   )r   r   r   r   r   test_bug_200709_element_commentb  s    

z(BugsTest.test_bug_200709_element_commentc             C   sv   t d}t |d}t |d}t d}|d| | t|dddg |d| | t|ddddg d S )Nr   r   r   r   r   )r"   rT   r  r   rU   r:   )r   r   r   r   r   r   r   r   test_bug_200709_element_insertn  s    

z'BugsTest.test_bug_200709_element_insertc             C   sJ   t d}t |d}t d}|| | t|t jt jg d S )Nr   r   zTEST-b)r"   rT   r  r  r   rU   r:   r   )r   r   r   Z	comment_br   r   r   test_bug_200709_iter_commentx  s
    


z%BugsTest.test_bug_200709_iter_commentc             C   sD   t  }|d}|di }|d}| }| t|d d S )Nr   r6   z<tag />)r"   r   r   r   r   r   rU   r5   )r   r\   r   r   r   r   test_bug_1534630  s    

zBugsTest.test_bug_1534630c             C   s@   t d}| t |dd t d}| t |dd d S )Ns7   <?xml version='1.0' encoding='utf-8'?><body>tãg</body>r   s<   <?xml version='1.0' encoding='ascii'?>
<body>t&#227;g</body>s;   <?xml version='1.0' encoding='iso-8859-1'?><body>tg</body>)r"   r   rU   r   )r   r   r   r   r   test_issue6233  s    

zBugsTest.test_issue6233c             C   s8   t d}| |jd t |}| t |d d S )Nz+<prefix:localname xmlns:prefix="${stuff}"/>z{${stuff}}localnames&   <ns0:localname xmlns:ns0="${stuff}" />)r"   r   rU   r6   r   r   )r   r   r  r   r   r   test_issue3151  s    

zBugsTest.test_issue3151c             C   sT   t d}| t|dg t t}|d d  |d d < | t|dddg d S )Nz<body><tag/></body>r6   r^  )r"   r   rU   r:   r   )r   r0   Znewelemr   r   r   test_issue6565  s
    

zBugsTest.test_issue6565c             C   s   t dd t dd d S )NZ	test10777zhttp://myuri/)r"   r  )r   r   r   r   test_issue10777  s    zBugsTest.test_issue10777c                s`   G  fddd}t d |  _  }t|}| || |  jt |  jd d S )Nc                   s   e Zd Z fddZdS )z%BugsTest.test_lost_text.<locals>.Textc                s
   d _ dS )NchangedT)rQ   )r   )r   r   r   __bool__  s    z.BugsTest.test_lost_text.<locals>.Text.__bool__N)r%   r&   r'   r  r   )r   r   r   r     s   r   r6   r  )r"   rT   rQ   r   r   rS   r   rU   )r   r   r   r  r   )r   r   test_lost_text  s    
zBugsTest.test_lost_textc                s|   G  fddd}t d  t d |  d _  }t|}| || |  d jt |  d jd d S )Nc                   s   e Zd Z fddZdS )z%BugsTest.test_lost_tail.<locals>.Textc                s   d d _ dS )Nr  r   T)rP   )r   )r   r   r   r    s    
z.BugsTest.test_lost_tail.<locals>.Text.__bool__N)r%   r&   r'   r  r   )r   r   r   r     s   r   r   r6   r   r  )	r"   rT   r   rP   r   r   rS   r   rU   )r   r   r   r  r   )r   r   test_lost_tail  s    
zBugsTest.test_lost_tailc                s   G  fddd}t d  t |   t d  dyt}W n tk
rt   | d Y nX | |j| |  d jt	 | 
 d jd d S )Nc                   s   e Zd Z fddZdS )z$BugsTest.test_lost_elem.<locals>.Tagc                s   t d d< t dS )Nr  r   T)r"   rT   r   )r   r   )r   r   r   r   __eq__  s    z+BugsTest.test_lost_elem.<locals>.Tag.__eq__N)r%   r&   r'   r  r   )r   r   r   r   r     s   r   r   r6   zgenerators are not reentrantr   r  )r"   rT   r   r   r   r   skipTestrS   r6   r   rU   )r   r   r  r   )r   r   r   test_lost_elem  s    

zBugsTest.test_lost_elemc             C   s.   d| }t |}| |d|d d S )Ns   <a b="%s"/>r   zutf-8)r"   r   rU   rH   decode)r   rQ   r  r   r   r   r   check_expat224_utf8_bug  s    
z BugsTest.check_expat224_utf8_bugc             C   s    d}|  | d}|  | d S )Ns   ààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààs  xàààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààà)r  )r   rQ   r   r   r   test_expat224_utf8_bug  s    
zBugsTest.test_expat224_utf8_bugc          	   C   sn   t td}| }W d Q R X t|}|d}|d }|dd}|dd }| 	|d| d S )Nr   r   zutf-8z
rf      )
r   UTF8_BUG_XMLFILEr   r"   r   rH   r  stripreplacerU   )r   fprawr   ZxmlattrrQ   r   r   r   test_expat224_utf8_bug_file  s    

z$BugsTest.test_expat224_utf8_bug_fileN)#r%   r&   r'   r  r  r  r  r  r  r  r  r  unittestskipIfrA   gettracer  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r    s8   			

r  c               @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )BasicElementTestc             C   sJ   t d}| t|jd | t|jt ddg | t|jdd d S )Njoer   r   r   r   )r"   rT   r   r  r   r   r   )r   r   r   r   r   test_augmentation_type_errors  s    
z.BasicElementTest.test_augmentation_type_errorsc             C   s   G dd d}| }t jd|d|_t|}~t  | |  t d}| }||_t|}t j|d|d}~~~t  | |  t d}t d}t d}|| || || t|}~~~t  | |  d S )	Nc               @   s   e Zd ZdS )z.BasicElementTest.test_cyclic_gc.<locals>.DummyN)r%   r&   r'   r   r   r   r   Dummy  s   r  r  )rw   r   r   r   r   )	r"   rT   Zdummyrefweakrefrefr   r   r  r   )r   r  r   wrefr   r   r   r   r   r   r   test_cyclic_gc  s2    









zBasicElementTest.test_cyclic_gcc                sV   d  fdd}t d}t||}| | jd ~|  d | | d  d S )NFc                s   d d S )NTr   )w)flagr   r   wref_cb,  s    z.BasicElementTest.test_weakref.<locals>.wref_cbr   T)r"   rT   r  r  rU   r6   )r   r  r   r  r   )r  r   test_weakref*  s    
zBasicElementTest.test_weakrefc             C   sB   t jddddd}| |jdddd | |jd	ddd d S )
Nr   rc   r   r  )r]   r^   zr]      )r   r  )r"   rT   rU   rH   )r   r   r   r   r   test_get_keyword_args6  s    z&BasicElementTest.test_get_keyword_argsc          	   C   s   xt dtjd D ]}xt| jddD ]\}}|jddd}d|_d|_||d		|d
 |	|d	 |
dd dd | |d|||}| |jd | |jd d | t|d | || q&W qW d S )Nr   rc   )repeatr   *   )r   ztext goes herezopposite of headchildZ
grandchildz.//grandchildr   rw   zother valuezxml.etree.ElementTreer   )r   rB   HIGHEST_PROTOCOLr   r=   rT   rQ   rP   r  r   r   r   rO   rU   r6   rR   rV   rY   )r   rM   rK   rL   r   r   r   r   r   test_pickle;  s    
zBasicElementTest.test_picklec          	   C   s   xt dtjd D ]~}xxt| jddD ]f\}}d}||}t|drZ| | d d | 	|d|||}| |j
d | |d	 j
d
 q&W qW d S )Nr   rc   )r  z\<?xml version="1.0"?>
                    <group><dogs>4</dogs>
                    </group>__getstate__r6   groupzxml.etree.ElementTreer   Zdogs)r   rB   r  r   r=   r   rt   rU   r  rO   r6   )r   rM   rK   rL   ZXMLTEXTr   r   r   r   r   test_pickle_issue18997N  s    


z'BasicElementTest.test_pickle_issue18997N)	r%   r&   r'   r  r  r  r  r  r  r   r   r   r   r     s   #r  c               @   sd   e 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S )BadElementTestc                s~   G  fddd}| g t d}y|  W n tk
rF   Y nX G dd d|t j}|dg t d}|  d S )Nc                   s   e Zd Ze fddZdS )z2BadElementTest.test_extend_mutable_list.<locals>.Xc                s   t dg d d < t jS )Nbaz)r"   rT   )r   )Lr   r   	__class__`  s    z<BadElementTest.test_extend_mutable_list.<locals>.X.__class__N)r%   r&   r'   propertyr  r   )r  r   r   X_  s   r  r   c               @   s   e Zd ZdS )z2BadElementTest.test_extend_mutable_list.<locals>.YN)r%   r&   r'   r   r   r   r   Yk  s   r  r]   )r"   rT   r   r  )r   r  r   r  r   )r  r   test_extend_mutable_list^  s    


z'BadElementTest.test_extend_mutable_listc                s   G  fddd}| t dg t d}y|  W n tk
rN   Y nX G dd d|t j}|dt dg t d}|  d S )Nc                   s   e Zd Ze fddZdS )z3BadElementTest.test_extend_mutable_list2.<locals>.Xc                s    d d = t jS )N)r"   rT   )r   )r  r   r   r  s  s    
z=BadElementTest.test_extend_mutable_list2.<locals>.X.__class__N)r%   r&   r'   r  r  r   )r  r   r   r  r  s   r  r  r   c               @   s   e Zd ZdS )z3BadElementTest.test_extend_mutable_list2.<locals>.YN)r%   r&   r'   r   r   r   r   r  ~  s   r  r   )r"   rT   r   r  )r   r  r   r  r   )r  r   test_extend_mutable_list2q  s    

z(BadElementTest.test_extend_mutable_list2c                sz   G  fdddt j}t d  |dg | t jt d t d  t dg | t j|d d S )Nc                   s   e Zd Z fddZdS )z3BadElementTest.test_remove_with_mutating.<locals>.Xc                s    d d = dS )NFr   )r   o)r   r   r   r    s    
z:BadElementTest.test_remove_with_mutating.<locals>.X.__eq__N)r%   r&   r'   r  r   )r   r   r   r    s   r  r   r   r  )r"   rT   r   r   r   r   )r   r  r   )r   r   test_remove_with_mutating  s    

z(BadElementTest.test_remove_with_mutatingc          
   C   sD   t d}t|d|$ | t t| W d Q R X W d Q R X d S )Nr   r6   )r"   rT   r   r   RuntimeErrorr   )r   r   r   r   r   test_recursive_repr  s    
z"BadElementTest.test_recursive_reprc                sn   G  fdddt }t }|di  |d ||d |d |d |  |  jd d S )Nc                   s   e Zd Z fddZdS )z/BadElementTest.test_element_get_text.<locals>.Xc                s$   y
 j  W n tk
r   Y nX d S )N)rQ   	NameError)r   )r0   r   r   __del__  s    
z7BadElementTest.test_element_get_text.<locals>.X.__del__N)r%   r&   r'   r  r   )r0   r   r   r    s   r  r6   ABCDEFGHIJKLABCDEFGHIJKL)	r   r"   r   r   r   r   r   rU   rQ   )r   r  r   r   )r0   r   test_element_get_text  s    


z$BadElementTest.test_element_get_textc                s   G  fdddt }t }|di  |di  |d |d ||d |d |d |  |  d jd	 d S )
Nc                   s   e Zd Z fddZdS )z/BadElementTest.test_element_get_tail.<locals>.Xc                s(   y d j  W n tk
r"   Y nX d S )Nr   )rP   r  )r   )r0   r   r   r    s    z7BadElementTest.test_element_get_tail.<locals>.X.__del__N)r%   r&   r'   r  r   )r0   r   r   r    s   r  r   r6   r  r  r  r   r  )	r   r"   r   r   r   r   r   rU   rP   )r   r  r   r   )r0   r   test_element_get_tail  s    



z$BadElementTest.test_element_get_tailc             C   sp   dd gdddd}t d}y|| W n tk
rD   ||_Y nX | }| t|| | tt| d S )Nr6   rw   rP   rQ   )r6   	_childrenrR   rP   rQ   )	r"   rT   __setstate__AttributeError__dict__r   assertIsr   r   )r   stater   r}   r   r   r   test_element_iter  s    
z BadElementTest.test_element_iterc                s^   G  fddd}t d  t d  d |    t d  dd|   d S )Nc                   s   e Zd Z fddZdS )z%BadElementTest.test_subscr.<locals>.Xc                s    d d = dS )Nrc   r   )r   )r   r   r   	__index__  s    
z/BadElementTest.test_subscr.<locals>.X.__index__N)r%   r&   r'   r  r   )r   r   r   r    s   r  r0   r  r   r   )r"   rT   r   )r   r  r   )r   r   test_subscr  s    
zBadElementTest.test_subscrc                sT   G  fddd}t d x"tdD ]} dt d q&W g  dd| < d S )Nc                   s   e Zd Z fddZdS )z)BadElementTest.test_ass_subscr.<locals>.Xc                s   g  d d < dS )Nrc   r   )r   )r   r   r   r    s    z3BadElementTest.test_ass_subscr.<locals>.X.__index__N)r%   r&   r'   r  r   )r   r   r   r    s   r  r0   r   r   r  )r"   rT   r   r   )r   r  r   r   )r   r   test_ass_subscr  s
    
zBadElementTest.test_ass_subscrc             C   sH   dd }t j|d}|di  |d | t|jdi  ~t  d S )Nc             S   s   g S )Nr   )r]   r^   r   r   r   element_factory  s    z>BadElementTest.test_treebuilder_start.<locals>.element_factory)r  r6   r  r   )r"   r   r   r   r   r  r   )r   r  r   r   r   r   test_treebuilder_start  s    
z%BadElementTest.test_treebuilder_startc             C   sF   dd }t j|d}|di  |d | t|jd ~t  d S )Nc             S   s   g S )Nr   )r]   r^   r   r   r   r    s    z<BadElementTest.test_treebuilder_end.<locals>.element_factory)r  r6   r  )r"   r   r   r   r   r  r   r   )r   r  r   r   r   r   test_treebuilder_end  s    
z#BadElementTest.test_treebuilder_endN)r%   r&   r'   r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   r  ]  s   r  c               @   s   e Zd Zdd Zdd ZdS )MutatingElementPathc             G   s   t j| f| }||_|S )N)r   __new__r0   )r>   r0   r   r   r   r   r   r  	  s    zMutatingElementPath.__new__c             C   s   | j d d = dS )NT)r0   )r   r  r   r   r   r    s    zMutatingElementPath.__eq__N)r%   r&   r'   r  r  r   r   r   r   r    s   r  c               @   s   e Zd Zdd ZdS )BadElementPathc             C   s   dd d S )Nrc   r   r   )r   r  r   r   r   r    s    zBadElementPath.__eq__N)r%   r&   r'   r  r   r   r   r   r    s   r  c                   sX   e Zd Z fddZ fddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
  ZS )BadElementPathTestc                s(   t    ddlm} |j| _i |_d S )Nr   )r   )supersetUpr   r   r   
path_cache)r   r   )r  r   r   r    s    
zBadElementPathTest.setUpc                s"   ddl m} | j|_t   d S )Nr   )r   )r   r   r  r   r  tearDown)r   r   )r  r   r   r    s    zBadElementPathTest.tearDownc             C   s0   t d}|t dg |t|d d S )Nr   r   r]   )r"   rT   r   r   r  )r   r   r   r   r   test_find_with_mutating#  s    
z*BadElementPathTest.test_find_with_mutatingc             C   sH   t d}|t dg y|td W n tk
rB   Y nX d S )Nr   r   r]   )r"   rT   r   r   r  ZeroDivisionError)r   r   r   r   r   test_find_with_error(  s    
z'BadElementPathTest.test_find_with_errorc             C   s0   t d}|t dg |t|d d S )Nr   r   r]   )r"   rT   r   r   r  )r   r   r   r   r   test_findtext_with_mutating0  s    
z.BadElementPathTest.test_findtext_with_mutatingc             C   sH   t d}|t dg y|td W n tk
rB   Y nX d S )Nr   r   r]   )r"   rT   r   r   r  r
  )r   r   r   r   r   test_findtext_with_error5  s    
z+BadElementPathTest.test_findtext_with_errorc             C   s0   t d}|t dg |t|d d S )Nr   r   r]   )r"   rT   r   r   r  )r   r   r   r   r   test_findall_with_mutating=  s    
z-BadElementPathTest.test_findall_with_mutatingc             C   sH   t d}|t dg y|td W n tk
rB   Y nX d S )Nr   r   r]   )r"   rT   r   r   r  r
  )r   r   r   r   r   test_findall_with_errorB  s    
z*BadElementPathTest.test_findall_with_error)r%   r&   r'   r  r  r	  r  r  r  r  r  __classcell__r   r   )r  r   r    s   r  c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )ElementTreeTypeTestc             C   sX   |  tjt |  tjt |  tjt |  tjt |  tjt |  tjt d S )N)	rS   r"   r   typerP  r   rT   r   r   )r   r   r   r   test_istypeL  s    zElementTreeTypeTest.test_istypec             C   sZ   G dd dt j}|d}| |t j | || | |jd d|_| |jd d S )Nc               @   s   e Zd ZdS )zDElementTreeTypeTest.test_Element_subclass_trivial.<locals>.MyElementN)r%   r&   r'   r   r   r   r   	MyElementU  s   r  r   r  )r"   rT   rS   rU   r6   rQ   )r   r  myer   r   r   test_Element_subclass_trivialT  s    z1ElementTreeTypeTest.test_Element_subclass_trivialc                sZ   G  fdddt j  ddddddd	}| |jd
 | t| ddddg d S )Nc                   s"   e Zd Zi f fdd	Z  ZS )zHElementTreeTypeTest.test_Element_subclass_constructor.<locals>.MyElementc                s   t  | j|d |f| d S )N__)r  ry  )r   r6   rR   extra)r  r  r   r   ry  c  s    zQElementTreeTypeTest.test_Element_subclass_constructor.<locals>.MyElement.__init__)r%   r&   r'   ry  r  r   )r  )r  r   r  b  s   r  r   rc   r   )r   r   r     )r   r   Zfoo__)r   rc   )r   r   )r   r  )r   r  )r"   rT   rU   r6   r   rm   )r   r  r   )r  r   !test_Element_subclass_constructora  s
    z5ElementTreeTypeTest.test_Element_subclass_constructorc             C   s.   G dd dt j}|d}| | d d S )Nc               @   s   e Zd Zdd ZdS )zGElementTreeTypeTest.test_Element_subclass_new_method.<locals>.MyElementc             S   s   | j S )N)r6   )r   r   r   r   	newmethodm  s    zQElementTreeTypeTest.test_Element_subclass_new_method.<locals>.MyElement.newmethodN)r%   r&   r'   r  r   r   r   r   r  l  s   r  r  )r"   rT   rU   r  )r   r  r  r   r   r    test_Element_subclass_new_methodk  s    z4ElementTreeTypeTest.test_Element_subclass_new_methodc             C   s   G dd dt j}t d}d|_|d}d|_|| | |dd | |djd t|	d}| t
|d| | |d jd d S )	Nc               @   s   e Zd ZdS )zAElementTreeTypeTest.test_Element_subclass_find.<locals>.MyElementN)r%   r&   r'   r   r   r   r   r  t  s   r  r   rQ   r   r  rc   r   )r"   rT   rQ   r   rU   r   r   r6   rW   r   rV   )r   r  r   subfoundr   r   r   test_Element_subclass_finds  s    

z.ElementTreeTypeTest.test_Element_subclass_findN)r%   r&   r'   r  r  r  r  r  r   r   r   r   r  K  s
   
r  c               @   sD   e 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S )ElementFindTestc             C   s   t t}| |djd | |djd | |djd t t|d< | |djd | |dd | |dd | |dd	 | |dd
d	 | |d | |dd
d
 | t ddd	 d S )Nr6   zsection/tagz./tagr   zsection/nexttagnexttagrQ   r  re   r   togz<tag><empty /></tag>empty)	r"   r   r   rU   r   r6   SAMPLE_SECTIONr   r   )r   r   r   r   r   test_find_simple  s    
z ElementFindTest.test_find_simplec             C   s   d}t |}| |djd d | |djd d | |djd d | |d	jd d
 | |djd d | td|jd | td|jd | td|jd | td|jd d S )Nz
        <body>
            <tag class='a'/>
            <tag class='b'/>
            <tag class='c'/>
            <tag class='d'/>
        </body>z./tag[1]classr   z./tag[2]r   z./tag[last()]r   z./tag[last()-1]r   z./tag[last()-2]ZXPathz./tag[0]z	./tag[-1]z./tag[last()-0]z./tag[last()+1])r"   r   rU   r   rR   assertRaisesRegexSyntaxError)r   Z
LINEAR_XMLr   r   r   r   test_find_xpath  s    
zElementFindTest.test_find_xpathc             C   s  t t}t t|d< | t|ddg | t|dddg | t|dg  | t|dg  | t|ddddg | t|d	dgd
  | t|ddg | t|ddgd  | t|ddddg | t|dddddg | t|dddddg | t|ddddg | t|dddddg | t|ddg | t|ddg | t|ddgd  | t|ddgd  | t|ddgd  | t|ddg | t|ddgd  | t|ddg | t|ddg | t|dg  | t|dg  | t|d dgd  | |d!|d | t|d"dg | t|d#dg | t|d$dg | t|d%dg | t|d&dg | t|d'dg | t|d(dg | t|d)dg | t|d*dg | t|d+dg | t|d,g  | t|d-g  |d |d.< | t|d%ddg | t|d+ddg d S )/Nr   r`  r   r6   r"  ztog/foor   r^  z.//tagr  zsection/tagzsection//tagz	section/*r!  Znextsectionz
section//*zsection/.//*z*/*z*//*z*/tagz*/./tagz./tagz././tagz.//tag[@class]r  z.//tag[@class="a"]z.//tag[@class="b"]z.//tag[@id]z.//section[tag]z.//section[element]z../tagzsection/../tagz	section//z.//section[tag='subtext']z.//section[tag ='subtext']z.//section[tag= 'subtext']z.//section[tag = 'subtext']z.//section[ tag = 'subtext' ]z.//tag[.='subtext']z.//tag[. ='subtext']z.//tag[.= "subtext"]z.//tag[ . = "subtext" ]z.//tag[. = 'subtext']z.//tag[. = 'subtext ']z.//tag[.= ' subtext']rc   )r"   r   r   r$  rU   r:   r   )r   r   r   r   r   test_findall  s    

zElementFindTest.test_findallc             C   s\   t t}| t|dg  | t|ddgd  | t|ddgd  d S )Nr6   z{http://effbot.org/ns}tagr   z.//{http://effbot.org/ns}tagr  )r"   r   rL  rU   r:   r   )r   r   r   r   r   test_test_find_with_ns  s    
z&ElementFindTest.test_test_find_with_nsc             C   s   t d}ddi}| t|jd|dd | t|jd|dd ddi}| t|jd|dd	 | t|jd|dd d S )
Nz
            <a xmlns:x="X" xmlns:y="Y">
                <x:b><c/></x:b>
                <b/>
                <c><x:b/><b/></c><y:b/>
            </a>Zxxr  z.//xx:b)
namespacesr   z.//br  rc   )r"   r   rU   rV   r   )r   r   nsmapr   r   r   test_findall_different_nsmaps	  s    z-ElementFindTest.test_findall_different_nsmapsc          	   C   s0   t t}| td |d W d Q R X d S )Nzcannot use absolute pathz/tag)r"   r   r   r'  r(  r   )r   r   r   r   r   test_bad_find	  s    
zElementFindTest.test_bad_findc          	   C   s   t t}| t |djd | t |dd | tt |	ddgd  d}| 
t| t |	d}W d Q R X | t|dgd  d S )Nr6   rQ   r   zThis search is broken in 1.3 and earlier, and will be fixed in a future version.  If you rely on the current behaviour, change it to '.+'z//tagr  )r"   r   r   rU   r   r   r6   r   r:   r   assertWarnsRegexFutureWarning)r   r   rd   r}   r   r   r   test_find_through_ElementTree	  s    
z-ElementFindTest.test_find_through_ElementTreeN)
r%   r&   r'   r%  r)  r*  r+  r.  r/  r2  r   r   r   r   r     s   M
r   c               @   sR   e Zd ZdddZdd Zdd Zdd	 Zed
efdd Z	dd Z
dd ZdS )ElementIterTestNc             C   s   t ||S )N)r:   r   )r   r0   r6   r   r   r   _ilist+	  s    zElementIterTest._ilistc             C   s6  t d}| | |dddg | | |dddg | t| jd | d|	 d | d|d	 d | t|	 d t
|d	d
}| tt |d d t
|d	d
}t jt  d}| tt j||dd d t d }| t|j t d}| d|	 d d S )Nz7<html><body>this is a <i>paragraph</i>.</body>..</html>rE  r   r   re   zthis is a paragraph...zthis is a paragraph.z
this is a F)r1   r   r   )r   )r   z*<root>a&amp;<sub>b&amp;</sub>c&amp;</root>za&b&c&)r"   r   rU   r4  r   r   r   r6   r   r   r5   r   r   r   r   r   r  )r   r\  Z
sourcefiler   r4   r   r   r   
test_basic.	  s$    


zElementIterTest.test_basicc             C   s   t d}| | |dg t |d}| | |ddg t |d}| | |dddg t |d}| | |ddddg |d |d< |d= | | |ddg d S )Nr   r   r   r   rc   r   )r"   rT   rU   r4  r  )r   r   r   r   r   r   r   r   test_cornersI	  s    
zElementIterTest.test_cornersc             C   s   t d}| | |ddgd  | | |ddgd  | t|jdddgd  dddddddg}| t| | | | || | | |d	| d S )
NaJ  
            <document>
                <house>
                    <room>bedroom1</room>
                    <room>bedroom2</room>
                </house>
                <shed>nothing here
                </shed>
                <house>
                    <room>bedroom8</room>
                </house>
            </document>roomr  houser   )r6   r   shedr   )r"   r   rU   r4  r:   r   )r   r\  all_tagsr   r   r   test_iter_by_tag_	  s    
z ElementIterTest.test_iter_by_tagz@This method will be removed in future versions.  Use .+ instead.c             C   s   t d}| t|ddgd  | t|ddgd  | t|jdddgd  dddddddg}| t| | | t|d | | t|d	| d S )
NaJ  
            <document>
                <house>
                    <room>bedroom1</room>
                    <room>bedroom2</room>
                </house>
                <shed>nothing here
                </shed>
                <house>
                    <room>bedroom8</room>
                </house>
            </document>r7  r  r8  r   )r6   r   r9  r   )r"   r   rU   r:   r   )r   r\  r:  r   r   r   test_getiterator}	  s    
z ElementIterTest.test_getiteratorc          	   C   s6   t d}| }| t t| W d Q R X d S )Nr   )r"   rT   r   r   r  r   )r   r   r}   r   r   r   r   	  s    
zElementIterTest.test_copyc          
   C   sV   t d}| }x>ttjd D ],}| ttjf t	|| W d Q R X q"W d S )Nr   rc   )
r"   rT   r   r   rB   r  r   r  rE   rC   )r   r   r}   rM   r   r   r   r  	  s
    
zElementIterTest.test_pickle)N)r%   r&   r'   r4  r5  r6  r;  r   rj  r<  r   r  r   r   r   r   r3  *	  s   
 r3  c               @   sd   e Zd 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S )TreeBuilderTestz<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>text<div>subtext</div>tail</html>z<toplevel>sometext</toplevel>c             C   s   |  |jd |  |jd |  |jd  |  |ji  t|}|  t|d |d }|  |jd |  |jd |  |jd |  |ji  d S )NrE  rQ   rc   r   Zdivr  rP   )rU   r6   rQ   rP   rR   rW   rV   )r   r   childrenr  r   r   r   _check_sample1_element	  s    z&TreeBuilderTest._check_sample1_elementc             C   s   G dd d}G dd d|}t j| d}|| j | | d t j| d}|| j | | d t jt d}|| j | |  d S )Nc               @   s   e Zd Zdd ZdS )z<TreeBuilderTest.test_dummy_builder.<locals>.BaseDummyBuilderc             S   s   dS )Nr  r   )r   r   r   r   r   	  s    zBTreeBuilderTest.test_dummy_builder.<locals>.BaseDummyBuilder.closeN)r%   r&   r'   r   r   r   r   r   BaseDummyBuilder	  s   r@  c               @   s   e Zd Zdd  Z ZZdS )z8TreeBuilderTest.test_dummy_builder.<locals>.DummyBuilderc              W   s   d S )Nr   )r   r   r   r   <lambda>	  r   zATreeBuilderTest.test_dummy_builder.<locals>.DummyBuilder.<lambda>N)r%   r&   r'   r   r   r   r   r   r   r   DummyBuilder	  s   rB  )r   r  )r"   r   r   sample1rU   r   objectr   )r   r@  rB  r   r   r   r   test_dummy_builder	  s    z"TreeBuilderTest.test_dummy_builderc             C   s6   t jt jd dd}|| j | }| | d S )N)r  )r   )r"   r   r   r   rC  r   r?  )r   r   r   r   r   r   $test_treebuilder_elementfactory_none	  s    z4TreeBuilderTest.test_treebuilder_elementfactory_nonec             C   sX   G dd dt j}| }| |dd t j|d}|| j | }| | d S )Nc               @   s   e Zd Zdd ZdS )z4TreeBuilderTest.test_subclass.<locals>.MyTreeBuilderc             S   s   |d S )Nr   r   )r   r]   r   r   r   foobar	  s    z;TreeBuilderTest.test_subclass.<locals>.MyTreeBuilder.foobarN)r%   r&   r'   rG  r   r   r   r   MyTreeBuilder	  s   rH  r   r   )r   )	r"   r   rU   rG  r   r   rC  r   r?  )r   rH  tbr   r   r   r   r   test_subclass	  s    zTreeBuilderTest.test_subclassc                sN   g   fdd}t j|d}t j|d}|| j |  |  dg d S )Nc                s     |  t| |S )N)r   r"   rT   )r6   rR   )lstr   r   	myfactory	  s    
z7TreeBuilderTest.test_element_factory.<locals>.myfactory)r  )r   Ztoplevel)r"   r   r   r   sample2r   rU   )r   rL  rI  r   r   )rK  r   test_element_factory	  s    z$TreeBuilderTest.test_element_factoryc             C   sF   t j|d}t j|d}|| j | }| || | | d S )N)r  )r   )r"   r   r   r   rC  r   rS   r?  )r   r>   rI  r   r   r   r   r   _check_element_factory_class	  s    z,TreeBuilderTest._check_element_factory_classc             C   s    G dd dt j}| | d S )Nc               @   s   e Zd ZdS )z@TreeBuilderTest.test_element_factory_subclass.<locals>.MyElementN)r%   r&   r'   r   r   r   r   r  
  s   r  )r"   rT   rO  )r   r  r   r   r   test_element_factory_subclass 
  s    z-TreeBuilderTest.test_element_factory_subclassc             C   s4   t j}| |jd G dd d|t}| | d S )Nzxml.etree.ElementTreec               @   s   e Zd ZdS )zLTreeBuilderTest.test_element_factory_pure_python_subclass.<locals>.MyElementN)r%   r&   r'   r   r   r   r   r  
  s   r  )r"   _Element_PyrU   r&   r   rO  )r   baser  r   r   r   )test_element_factory_pure_python_subclass
  s    z9TreeBuilderTest.test_element_factory_pure_python_subclassc             C   s<   G dd d}t j| d}|| j | | d d S )Nc               @   s    e Zd ZdZdd Zdd ZdS )z3TreeBuilderTest.test_doctype.<locals>.DoctypeParserNc             S   s   |||f| _ d S )N)_doctype)r   rJ   pubidsystemr   r   r   doctype
  s    z;TreeBuilderTest.test_doctype.<locals>.DoctypeParser.doctypec             S   s   | j S )N)rT  )r   r   r   r   r   
  s    z9TreeBuilderTest.test_doctype.<locals>.DoctypeParser.close)r%   r&   r'   rT  rW  r   r   r   r   r   DoctypeParser
  s   rX  )r   )rE  z&-//W3C//DTD XHTML 1.0 Transitional//ENz7http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd)r"   r   r   rC  rU   r   )r   rX  r   r   r   r   test_doctype
  s
    	
zTreeBuilderTest.test_doctypec          
   C   s   G dd d}t j| d x4dD ],}| t| t j||d W d Q R X q"W t j|tdd x:dD ]2}t j||tdd}|| j | |  qjW d S )Nc               @   s"   e Zd ZdefddZdd ZdS )zBTreeBuilderTest.test_builder_lookup_errors.<locals>.RaisingBuilderNc             S   s   || _ || _d S )N)raise_inwhat)r   rZ  r[  r   r   r   ry  %
  s    zKTreeBuilderTest.test_builder_lookup_errors.<locals>.RaisingBuilder.__init__c             S   s"   || j kr| | j dd }|S )Nc              W   s   d S )Nr   )r   r   r   r   handle,
  s    z^TreeBuilderTest.test_builder_lookup_errors.<locals>.RaisingBuilder.__getattr__.<locals>.handle)rZ  r[  )r   rJ   r\  r   r   r   __getattr__)
  s    
zNTreeBuilderTest.test_builder_lookup_errors.<locals>.RaisingBuilder.__getattr__)r%   r&   r'   r   ry  r]  r   r   r   r   RaisingBuilder$
  s   r^  )r   )r   r   r   r  r  )r[  )	r"   r   r'  r   r  r   rC  r   r   )r   r^  eventr   r   r   r   test_builder_lookup_errors#
  s    

z*TreeBuilderTest.test_builder_lookup_errorsN)r%   r&   r'   rC  rM  r?  rE  rF  rJ  rN  rO  rP  rS  rY  r`  r   r   r   r   r=  	  s   	r=  c               @   sP   e Zd Zd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S )XMLParserTests   <file><line>22</line></file>s   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>text</html>uX   <?xml version="1.0" encoding="iso-8859-1"?>
<money value="$£€𐅻">$£€𐅻</money>c             C   s6   |  |jd |  |d jd |  |d jd d S )Nr3   r   line22)rU   r6   rQ   )r   r   r   r   r   _check_sample_elementF
  s    z#XMLParserTest._check_sample_elementc          	   C   st   |  td td t d}W d Q R X || j | |  tjdt d}|| j | |  d S )Nz\bhtml\bzutf-8)r)   r   )	r0  ri  r"   r   r   r   rC  rd  r   )r   r   Zparser2r   r   r   test_constructor_argsK
  s    z#XMLParserTest.test_constructor_argsc             C   s6   G dd dt j}| }|| j | |  d S )Nc               @   s   e Zd ZdS )z-XMLParserTest.test_subclass.<locals>.MyParserN)r%   r&   r'   r   r   r   r   MyParserZ
  s   rf  )r"   r   r   rC  rd  r   )r   rf  r   r   r   r   rJ  Y
  s    zXMLParserTest.test_subclassc          	   C   s~   t  }| t |ddd W d Q R X |d |  t . t	dt t  }|| j
 |  W d Q R X d S )NrE  z&-//W3C//DTD XHTML 1.0 Transitional//ENz7http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtdz<html/>error)r"   r   assertWarnsri  rW  r   r   warningscatch_warningssimplefilterrM  )r   r   r   r   r   test_doctype_warning`
  s    

z"XMLParserTest.test_doctype_warningc          	      s   d  G  fdddt j}| }| t || j W d Q R X |  |  d d   t	 Z t
dt G fddd}|| d}|| j |  |   | d W d Q R X d S )Nc                   s   e Zd Z fddZdS )z@XMLParserTest.test_subclass_doctype.<locals>.MyParserWithDoctypec                s   |||f d S )Nr   )r   rJ   rU  rV  )rT  r   r   rW  q
  s    zHXMLParserTest.test_subclass_doctype.<locals>.MyParserWithDoctype.doctypeN)r%   r&   r'   rW  r   )rT  r   r   MyParserWithDoctypep
  s   rm  )rE  z&-//W3C//DTD XHTML 1.0 Transitional//ENz7http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtdrg  c                   s   e Zd Z fddZdS )z:XMLParserTest.test_subclass_doctype.<locals>.DoctypeParserc                s   |||f d S )Nr   )r   rJ   rU  rV  )	_doctype2r   r   rW  
  s    zBXMLParserTest.test_subclass_doctype.<locals>.DoctypeParser.doctypeN)r%   r&   r'   rW  r   )rn  r   r   rX  
  s   rX  )r   )r"   r   rh  ri  r   rM  r   rU   ri  rj  rk  r   )r   rm  r   rX  r   )rT  rn  r   test_subclass_doctypen
  s$    

z#XMLParserTest.test_subclass_doctypec          	   C   sP   t  > t dt G dd dtj}| }|| j |  W dQ R X dS )z:Ensure that ordinary usage is not deprecated (Issue 19176)rg  c               @   s   e Zd ZdS )zDXMLParserTest.test_inherited_doctype.<locals>.MyParserWithoutDoctypeN)r%   r&   r'   r   r   r   r   MyParserWithoutDoctype
  s   rp  N)	ri  rj  rk  ri  r"   r   r   rM  r   )r   rp  r   r   r   r   test_inherited_doctype
  s    
z$XMLParserTest.test_inherited_doctypec             C   sV   t jt  d}|| j | }| |jd | |jd d | |j	d d S )N)r   Zmoneyrj   u
   $£€𐅻)
r"   r   r   r   sample3r   rU   r6   rR   rQ   )r   r   r   r   r   r   test_parse_string
  s    zXMLParserTest.test_parse_stringN)r%   r&   r'   rC  rM  rr  rd  re  rJ  rl  ro  rq  rs  r   r   r   r   ra  =
  s   
ra  c               @   s   e Zd Zdd ZdS )NamespaceParseTestc             C   s`   ddd}t t}| t|d|d | t|d|d | t|d|d d S )	NZhellor   )hr   z{hello}tablerc   z.//{hello}tdr   z.//{foo}name)r"   r   SAMPLE_XML_NS_ELEMSrU   rV   r   )r   r-  r\  r   r   r   test_find_with_namespace
  s
    

z+NamespaceParseTest.test_find_with_namespaceN)r%   r&   r'   rw  r   r   r   r   rt  
  s   rt  c               @   sl   e 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S )ElementSlicingTestc             C   s   dd |D S )Nc             S   s   g | ]
}|j qS r   )r6   )r7   r   r   r   r   r8   
  s    z1ElementSlicingTest._elem_tags.<locals>.<listcomp>r   )r   Zelemlistr   r   r   
_elem_tags
  s    zElementSlicingTest._elem_tagsc             C   s   |  t|S )N)ry  rW   )r   r0   r   r   r   _subelem_tags
  s    z ElementSlicingTest._subelem_tagsc             C   s0   t d}x t|D ]}t |d|  qW |S )zxCreate an Element with a tag 'a', with the given amount of children
           named 'a0', 'a1' ... and so on.

        r   za%s)r"   rT   r   r  )r   Znumchildrenr   r   r   r   r   _make_elem_with_children
  s    
z+ElementSlicingTest._make_elem_with_childrenc                sZ   |  d |  d jd |  d jd | t fdd | t fdd d S )	Nr   rc   a1a8c                  s    d S )N   r   r   )r   r   r   rA  
  r   z?ElementSlicingTest.test_getslice_single_index.<locals>.<lambda>c                  s    d S )Nir   r   )r   r   r   rA  
  r   )r{  rU   r6   r   
IndexError)r   r   )r   r   test_getslice_single_index
  s
    
z-ElementSlicingTest.test_getslice_single_indexc             C   s   |  d}| | |dd  dddg | | |dd dddg | | |dd dddg | | |dd ddg | | |dd ddg | | |d d	 d
dg d S )Nr  r  a3a4a5   rp  r  r   a0r|  )r{  rU   ry  )r   r   r   r   r   test_getslice_range
  s    
   z&ElementSlicingTest.test_getslice_rangec          	   C   s   |  d}| | |ddd ddg | | |d d d ddd	dg | | |d d d ddg | | |dd d d
dg | | |dd tj dg | | |dd tjd>  dg d S )Nr      rc   r~  Za9r  r  r  Za6r|  @   )r{  rU   ry  rA   maxsize)r   r   r   r   r   test_getslice_steps
  s    
 $   z&ElementSlicingTest.test_getslice_stepsc          	   C   s   |  d}| | |d d d ddddg | | |d d d ddg | | |dd tj  dg | | |dd tj d	  dg | | |dd tj d
>  dg d S )Nr  r  r  a2r|  r  r}  r  rc   r  )r{  rU   ry  rA   r  )r   r   r   r   r   test_getslice_negative_steps
  s    
$ "&z/ElementSlicingTest.test_getslice_negative_stepsc             C   s   |  d}|dd= | | |ddg |  d}|dd = | | |g  |  d}|d d d= | | |g  |  d}|d d d= | | |ddg |  d}|d	d d= | | |ddg |  d}|d d d= | | |d
g d S )Nr  r   r   r  r  r  r}  r  rc   r|  )r{  rU   rz  )r   r   r   r   r   test_delslice
  s$    







z ElementSlicingTest.test_delslicec          	   C   s   |  d}td|d< | | |ddddg td|d< | | |ddddg | t td	|d
< W d Q R X | t td	|d< W d Q R X | | |ddddg d S )Nr  r   rc   r  r  r  r   r}  r   rp  )r{  r"   rT   rU   rz  r   r  )r   r   r   r   r   test_setslice_single_index
  s    
z-ElementSlicingTest.test_setslice_single_indexc             C   s   |  d}dd tdD |dd< | | |ddd	d
g |  d}tdg|dd< | | |ddd
g |  d}dd tdD |dd< | | |ddd	dd
g d S )Nr  c             S   s   g | ]}t d | qS )zb%s)r"   rT   )r7   r   r   r   r   r8   
  s    z:ElementSlicingTest.test_setslice_range.<locals>.<listcomp>r   rc   r  r  b0b1r  r   c             S   s   g | ]}t d | qS )zb%s)r"   rT   )r7   r   r   r   r   r8     s    Zb2)r{  r   rU   rz  r"   rT   )r   r   r   r   r   test_setslice_range  s    


z&ElementSlicingTest.test_setslice_rangec          	   C   sd  |  d}dd tdD |ddd< | | |ddd	d
ddg |  d}| t tdg|ddd< W d Q R X | t" dd tdD |ddd< W d Q R X | t g |ddd< W d Q R X | | |ddd	dddg |  d}tdg|dd tj	< | | |ddd	dg tdg|dd tj	d> < | | |ddd	dg d S )Nr  c             S   s   g | ]}t d | qS )zb%s)r"   rT   )r7   r   r   r   r   r8     s    z:ElementSlicingTest.test_setslice_steps.<locals>.<listcomp>r   rc   rp  r  r  r  r  r  r  r   c             S   s   g | ]}t d | qS )zb%s)r"   rT   )r7   r   r   r   r   r8     s    r  r|  r  r  r   r  )
r{  r   rU   rz  r   r   r"   rT   rA   r  )r   r   r   r   r   test_setslice_steps  s     

 &
z&ElementSlicingTest.test_setslice_stepsc          	   C   s  |  d}dd tdD |ddd< | | |ddd	d
g |  d}| t tdg|ddd< W d Q R X | t" dd tdD |ddd< W d Q R X | t g |ddd< W d Q R X | | |dddd
g |  d}tdg|dd tj	 < | | |dddd
g tdg|dd tj	 d < | | |dddd
g tdg|dd tj	 d> < | | |dddd
g d S )Nr  c             S   s   g | ]}t d | qS )zb%s)r"   rT   )r7   r   r   r   r   r8   +  s    zCElementSlicingTest.test_setslice_negative_steps.<locals>.<listcomp>r   r   r  r  r  r  r  r   c             S   s   g | ]}t d | qS )zb%s)r"   rT   )r7   r   r   r   r   r8   2  s    r  r|  r  rc   r   r   r  )
r{  r   rU   rz  r   r   r"   rT   rA   r  )r   r   r   r   r   test_setslice_negative_steps)  s$    

 &
z/ElementSlicingTest.test_setslice_negative_stepsN)r%   r&   r'   ry  rz  r{  r  r  r  r  r  r  r  r  r  r   r   r   r   rx  
  s   
	

	rx  c               @   s   e 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G d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#S )$IOTestc          
   C   s  t d}d|_| t|d xNdD ]F}| |2 | t||dd | t|| dd W d Q R X q&W xfdD ]^}| |J | t||dd| | | }| t||dd| | W d Q R X qvW t d}d	|_| t|d
 | t|ddd | t|ddd x,dD ]$}| t||dd| | q&W t d}d	|jd< | t|d | t|ddd | t|ddd x,dD ]$}| t||dd| | qW t d}d|_| t|d | t|ddd | t|ddd x,dD ]$}| t||dd| | qW t d}d|jd< | t|d | t|ddd | t|ddd x,dD ]$}| t||dd| | qW d S )Nr6   abcz<tag>abc</tag>)zutf-8zus-ascii)r)   s   <tag>abc</tag>)z
iso-8859-1zutf-16zutf-32z2<?xml version='1.0' encoding='%s'?>
<tag>abc</tag>z<&"'>z<tag>&lt;&amp;"'&gt;</tag>zutf-8s   <tag>&lt;&amp;"'&gt;</tag>zus-asciiz><?xml version='1.0' encoding='%s'?>
<tag>&lt;&amp;"'&gt;</tag>rk   z"<tag key="&lt;&amp;&quot;'&gt;" />s"   <tag key="&lt;&amp;&quot;'&gt;" />zF<?xml version='1.0' encoding='%s'?>
<tag key="&lt;&amp;&quot;'&gt;" />u   åöö<>u   <tag>åöö&lt;&gt;</tag>s   <tag>åöö&lt;&gt;</tag>s%   <tag>&#229;&#246;&#246;&lt;&gt;</tag>u=   <?xml version='1.0' encoding='%s'?>
<tag>åöö&lt;&gt;</tag>u   <tag key="åöö&lt;&gt;" />s   <tag key="åöö&lt;&gt;" />s(   <tag key="&#229;&#246;&#246;&lt;&gt;" />)z
iso-8859-1zutf-16zutf-16lezutf-16bezutf-32u@   <?xml version='1.0' encoding='%s'?>
<tag key="åöö&lt;&gt;" />)	r"   rT   rQ   rU   r5   rq  upperr   rR   )r   r0   encr  r   r   r   rC  A  s|    












zIOTest.test_encodingc          	   C   sR   |  tjt ttd}|t ttd}| 	|
 d W d Q R X d S )Nz<site />r   s   <site />)r   r   r   r   r"   r   r   r-   r   rU   r   )r   r4   r   r   r   r   test_write_to_filename  s
    
zIOTest.test_write_to_filenamec          	   C   s|   |  tjt ttd}ttddd }|j|dd | 	|j
 W d Q R X ttd}| | d W d Q R X d S )Nz<site />r  zutf-8)r)   r(   r   s   <site />)r   r   r   r   r"   r   r   r   r-   r   r   rU   r   )r   r4   r   r   r   r   test_write_to_text_file  s    zIOTest.test_write_to_text_filec          	   C   st   |  tjt ttd}ttd}|| | 	|j
 W d Q R X ttd}| | d W d Q R X d S )Nz<site />r   r   s   <site />)r   r   r   r   r"   r   r   r   r-   r   r   rU   r   )r   r4   r   r   r   r   test_write_to_binary_file  s    
z IOTest.test_write_to_binary_filec          	   C   s   |  tjt ttd}ttd }|j|dd | 	|j
 W d Q R X ttd}| | dd W d Q R X ttddd }|j|dd | 	|j
 W d Q R X ttd}| | dd W d Q R X d S )	Nz<site />r   zutf-16)r)   r   z0<?xml version='1.0' encoding='utf-16'?>
<site />r   )	buffering)r   r   r   r   r"   r   r   r   r-   r   r   rU   r   r   )r   r4   r   r   r   r   "test_write_to_binary_file_with_bom  s     

z)IOTest.test_write_to_binary_file_with_bomc             C   s2   t  }td}|| | | jd d S )Nz"<?xml version="1.0"?><site></site>site)r"   r   r*   r,   r   rU   r   r6   )r   r4   r   r   r   r   test_read_from_stringio  s    

zIOTest.test_read_from_stringioc             C   s:   t t d}t }|j|dd | | d d S )Nz<site />r(   )r)   )r"   r   r   r*   r,   r-   rU   r.   )r   r4   r   r   r   r   test_write_to_stringio  s    zIOTest.test_write_to_stringioc             C   s2   t  }td}|| | | jd d S )Ns"   <?xml version="1.0"?><site></site>r  )r"   r   r*   r+   r   rU   r   r6   )r   r4   r  r   r   r   test_read_from_bytesio  s    

zIOTest.test_read_from_bytesioc             C   s6   t t d}t }|| | | d d S )Nz<site />s   <site />)r"   r   r   r*   r+   r-   rU   r.   )r   r4   r  r   r   r   test_write_to_bytesio  s    
zIOTest.test_write_to_bytesioc               @   s   e Zd ZdS )zIOTest.dummyN)r%   r&   r'   r   r   r   r   dummy  s   r  c             C   sB   t d}|  }|j|_t }|| | | j	d d S )Nz"<?xml version="1.0"?><site></site>r  )
r*   r,   r  r   r"   r   r   rU   r   r6   )r   r   readerr4   r   r   r   test_read_from_user_text_reader  s    

z&IOTest.test_read_from_user_text_readerc             C   sJ   t t d}t }|  }|j|_|j|dd | | d d S )Nz<site />r(   )r)   )	r"   r   r   r*   r,   r  r-   rU   r.   )r   r4   r   writerr   r   r   test_write_to_user_text_writer  s    z%IOTest.test_write_to_user_text_writerc             C   sJ   t d}|  }|j|_t }|| | | j	d t }d S )Ns"   <?xml version="1.0"?><site></site>r  )
r*   r+   r  r   r"   r   r   rU   r   r6   )r   r  r  r4   r   r   r   !test_read_from_user_binary_reader  s    

z(IOTest.test_read_from_user_binary_readerc             C   sF   t t d}t }|  }|j|_|| | | d d S )Nz<site />s   <site />)	r"   r   r   r*   r+   r  r-   rU   r.   )r   r4   r  r  r   r   r    test_write_to_user_binary_writer  s    
z'IOTest.test_write_to_user_binary_writerc             C   sb   t t d}t }|  }|j|_dd |_|j|_|j|dd | 	|
 dd d S )Nz<site />c               S   s   dS )NTr   r   r   r   r   rA    r   zBIOTest.test_write_to_user_binary_writer_with_bom.<locals>.<lambda>zutf-16)r)   z0<?xml version='1.0' encoding='utf-16'?>
<site />)r"   r   r   r*   r+   r  r-   seekabletellrU   r.   r   )r   r4   r  r  r   r   r   )test_write_to_user_binary_writer_with_bom  s    

z0IOTest.test_write_to_user_binary_writer_with_bomc          	   C   sR   t d}| t |ddt |d | t |ddt |d d S )Nz<tag>foo</tag>r(   re   zutf-16r   )r"   r   rU   r   r   r   )r   r   r   r   r   test_tostringlist_invariant  s    


z"IOTest.test_tostringlist_invariantc             C   sR   t d}| t |dd | t j|dddd | t j|dddd d S )Nz<tag>a<x />b<y></y>c</tag>r(   z<tag>a<x />b<y />c</tag>T)short_empty_elementsFz<tag>a<x></x>b<y></y>c</tag>)r"   r   rU   r   )r   r   r   r   r   test_short_empty_elements  s    

z IOTest.test_short_empty_elementsN)r%   r&   r'   rC  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r  @  s"   E				r  c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ParseErrorTestc             C   s   |  t t d S )N)rS   r"   r   r(  )r   r   r   r   rJ    s    zParseErrorTest.test_subclassc          
   C   s8   yt | W n$ t jk
r2 } z|S d }~X Y nX d S )N)r"   r   r   )r   r  r   r   r   r   
_get_error  s    zParseErrorTest._get_errorc             C   s@   |  | djd |  | djd |  | djd d S )Nr   )rc   r   z<tag>&foo;</tag>)rc   rp  zfoobar<)rc   r  )rU   r  Zposition)r   r   r   r   test_error_position  s    z"ParseErrorTest.test_error_positionc             C   s8   dd l m  m  m} | | dj|j|j  d S )Nr   r   )	Zxml.parsers.expat.errorsparsersZexpaterrorsrU   r  codecodesXML_ERROR_SYNTAX)r   ZERRORSr   r   r   test_error_code   s    zParseErrorTest.test_error_codeN)r%   r&   r'   rJ  r  r  r  r   r   r   r   r    s   r  c               @   s   e Zd Zdd ZdS )KeywordArgsTestc          
   C   s  t d}| |dd |jdd d | |dd d |jdd d d | |dd |jdd d | t|dd t|jdd d | t dj	i  t dt
dddt jdt
ddddt jdt
dd	dd
t jddddt jdt
ddddddg}x2|D ]*}| |jd | |j	t
ddd qW t j|d dddid}| |j	d d | td t dd W d Q R X | td t jddd W d Q R X d S )Nz
<a>foo</a>r   )pathr,  )r  r   r,  #r   )r  id)rR   )r  )r  r   rG  Zkey1Zvalue1zmust be dict, not strzI'm not a dict)r"   r   rU   r   r   r   rW   r   rT   rR   rF   r6   r  r'  r  )r   r]   elementsr   r   r   r   r   test_issue14818)  s0    

zKeywordArgsTest.test_issue14818N)r%   r&   r'   r  r   r   r   r   r  &  s   r  c               @   s   e Zd Zdd Zdd ZdS )NoAcceleratorTestc             C   s   t stdd S )Nzonly for the Python version)r<   r  SkipTest)r   r   r   r   r  K  s    zNoAcceleratorTest.setUpc             C   s(   |  tjjtj |  tjjtj d S )N)rS   r<   rT   ry  typesFunctionTyper   )r   r   r   r   test_correct_import_pyETP  s    z*NoAcceleratorTest.test_correct_import_pyETN)r%   r&   r'   r  r  r   r   r   r   r  J  s   r  c             C   s   t ddgda| d krt} | attttttt	t
ttttttttg}ttk	rV|tg ddlm} tjj}| }|j}| |_ztj|  W d ddlm} |  || ||_d  aaX d S )Nzxml.etree.ElementTreer   )blockedr   )r   )r   r<   r"   r   rx  r  r  r  r`   r  r  r~  r  r   r3  r=  ra  rk  r  r   r  r   r   r  _namespace_mapr   r   r   run_unittestr   r  )moduleZtest_classesr   r-  Z
nsmap_copyr  r   r   r   	test_mainZ  sH    


r  __main__)Tr(   )N)Er   r   rE  r*   rZ   rB   rA   r  r  ri  r  	itertoolsr   r   r   Ztest.supportr   r   r   r   r   r<   r"   r   r   UnicodeEncodeErrorr  r   r  r   r$  rL  rv  rI  rJ  r   TestCaser   r5   r:   r;   r`   rk  r  formatescaper  r~  r  r  r  r   r  __hash__r  r  r  r   r3  r=  ra  rt  rx  r  r  r  r  r  r%   r   r   r   r   <module>   s   




#      n 	 	  h] ,48 (  c
  R$
;
