B
    u9a                @   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)Z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   Zcheck_warnings)argskwargs)filtersr	   test $/usr/lib/python3.7/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)Z
HTML_EMPTY)Z	blacklist)r   Z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    


r0   c             C   s   dd | D S )Nc             S   s   g | ]
}|j qS r   )tag).0r+   r   r   r   
<listcomp>   s    z"summarize_list.<locals>.<listcomp>r   )seqr   r   r   summarize_list   s    r5   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 )NZcETr7   z%Failed to round-trip %r from %r to %r)sysr8   pickledumpsloadsPicklingErrordictr   r7   r   Z
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 )Nr1   tailtextattrib)assertIsInstancer   Elementr7   assertEquallenlistzipassertEqualElementsoperator
attrgetter)r   ZalicebobxyZ
propertiesr   r   r   rR      s    z#ElementTestCase.assertEqualElementsN)r    r!   r"   classmethodr:   rH   rR   r   r   r   r   r6      s   r6   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)rN   r0   )r   r+   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   )rO   rN   )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)r]   )rO   keysitemsrN   )mappingre   rf   rd   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)r]   )r1   rK   rJ   rI   zno %s memberzno %s visible by dir)

assertTruer   Z	iselementdirhasattrZassertInr1   rK   rJ   rI   )elementZdirelemattrr+   )check_elementri   rb   r   r   r   ro      s    







z5ElementTreeTest.test_interface.<locals>.check_elementr1   u   tägrc   )rd   z^<Element 't\xe4g' at 0x.*>$c                s    j t| dd|  d d S )N__call__z%s not callable)r]   )rj   rl   )method)r   r   r   check_method   s    z4ElementTreeTest.test_interface.<locals>.check_methodc                s    | j  d S )N)__next__)it)rr   r   r   
check_iter   s    z2ElementTreeTest.test_interface.<locals>.check_iter*)r   rM   r   getrootassertRegexreprappendextendinsertremovegetchildrenfinditerfindfindallfindtextclearrA   setre   rf   iteritertextgetiteratorrN   XML
fromstringPIProcessingInstruction)r   rm   r/   ru   r   )ro   ri   rr   rb   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 )Nr1   TagZTAGTextZTEXTZTailZTAILbd)acBD)AC)r   rM   rN   r1   assertIsNonerJ   rI   rK   )r   rm   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>r1   rc   )rd   z<tag key="value" />subtagz!<tag key="value"><subtag /></tag>z+<tag key="value"><subtag /><subtag /></tag>zlist.remove(x): x not in listr\   z
<subtag />	      )r   r   r[   rM   rz   r}   r|   r{   assertRaises
ValueErrorrN   str	exception)r   r+   erm   Z
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>)r[   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)r.   r1   zsection/tagrm   zelement/../empty-elementzempty-element)
r%   r&   
SAMPLE_XMLencoder   r   rN   r   r1   SIMPLE_XMLFILE)r   Z
stringfiler/   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   rO   _cacherN   ZassertGreaterZ
assertLess)r   r   r+   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   Zdeepcopyr   r1   r[   )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 )Nr1   rd   defaultrc   )rd   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;" />)r1   )r   rM   rA   rN   r   rK   r   rJ   tostringsortedre   rf   )r   r+   rK   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 )
Nr1   rd   rc   r   zattrib aliasing)r]   z!<tag><subtag key="value" /></tag>z<tag />zM<tag><subtag key="value" /><subtag key="value" /><subtag key="value" /></tag>)
r   rM   ZmakeelementZassertIsNotrK   rz   r[   r   r{   tuple)r   r+   rK   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(   rN   r)   SIMPLE_NS_XMLFILEopenread	XMLParserrx   versionfeedr[   closeTreeBuilder)r   r/   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>r\   body)r   r   rN   r   r   ZfromstringlistjointostringlistZXMLIDrO   r1   )r   rm   Zsequence_Z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)endrm   c             S   s   g | ]\}}||j fqS r   )r1   )r2   actionr+   r   r   r   r3     s    z2ElementTreeTest.test_iterparse.<locals>.<listcomp>)r   zempty-element)r   rootr   c             S   s   g | ]\}}||j fqS r   )r1   )r2   r   r+   r   r   r   r3     s    )r   z{namespace}element)r   z{namespace}empty-element)r   z{namespace}rootr   c             S   s   g | ]\}}||j fqS r   )r1   )r2   r   r+   r   r   r   r3   (  s    )eventsc             S   s   g | ]\}}||j fqS r   )r1   )r2   r   r+   r   r   r   r3   ,  s    )startr   c             S   s   g | ]\}}||j fqS r   )r1   )r2   r   r+   r   r   r   r3   0  s    )r   r   )r   rm   )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   )r1   )r2   r   r+   r   r   r   r3   =  s   )zstart-ns)r^   	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   )r2   r   r+   r   r   r   r3   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   )r2   r   r+   r   r   r   r3   d  s    )zstart-ns)r^   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   nextrN   r1   r   r   r%   r'   r   r   r   assertFalseclosedr   r   r   Zcheck_no_resource_warningr&   
ParseError
addCleanupunlinkr   r(   )r   r   contextr   r+   r   Zresr   r   sourcert   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 )Nr1   rJ   z<tag>text</tag>subtextr   z'<tag>text<subtag>subtext</subtag></tag>ztext<subtag>subtext</subtag>r   commentz*text<!--comment--><subtag>subtext</subtag>rd   rc   z)text<?key value?><subtag>subtext</subtag>)	r   rM   rJ   r[   
SubElementr1   r|   Commentr   )r   r+   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   )rz   )r   r1   rK   r   r   r   r     s    z:ElementTreeTest.test_custom_builder.<locals>.Builder.startc             S   s   |  d|f d S )Nr   )rz   )r   r1   r   r   r   r     s    z8ElementTreeTest.test_custom_builder.<locals>.Builder.endc             S   s   d S )Nr   )r   rJ   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   rm   )r   rm   )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   )rz   )r   r1   rK   r   r   r   r     s    z:ElementTreeTest.test_custom_builder.<locals>.Builder.startc             S   s   |  d|f d S )Nr   )rz   )r   r1   r   r   r   r     s    z8ElementTreeTest.test_custom_builder.<locals>.Builder.endc             S   s   d S )Nr   )r   rJ   r   r   r   r     s    z9ElementTreeTest.test_custom_builder.<locals>.Builder.datac             S   s   |  d||f d S )Npi)rz   )r   r   r   r   r   r   r     s    z7ElementTreeTest.test_custom_builder.<locals>.Builder.pic             S   s   |  d|f d S )Nr   )rz   )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   rP   r   r   r   rN   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   )r5   r~   )r2   r+   r   r   r   r3     s   z4ElementTreeTest.test_getchildren.<locals>.<listcomp>rm   zempty-elementc             S   s   g | ]}t | qS r   )r5   r~   )r2   r+   r   r   r   r3     s      r   r\   r   )r   r   r   r   rN   rw   r   r   r   r   rO   r~   assertNotEqualr   )r   r   r/   r+   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   rN   r   r   )r   r+   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 )sNr^   c                s>   d| |f }  t|| j|   t|j| d S )Nz0<?xml version='1.0' encoding='%s'?><xml>%s</xml>)rN   r   r   r   rJ   )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)r^   )	rN   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>
)rq   r   htmlz*<html><link><script>1 < 2</script></html>
rJ   z1 < 2
)r   r   rI   rN   r0   )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>r-  )rq   )r   r   rN   r0   )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 10rJ   entityz<document>text</document>z,undefined entity &entity;: line 4, column 10)r   r   rN   r0   r[   r   r   r   r   
ENTITY_XMLr   r0  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   r[   SAMPLE_XML_NS)r   r+   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" />Zurir1   Ztag1r   z;<ns0:tag xmlns:ns0="uri"><ns0:tag1 /><ns0:tag2 /></ns0:tag>rc   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   rM   r[   QNamer   r   rK   rz   rN   r   r   )r   r+   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   r+   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   )r2   opr1   r   r   r   r3     s   zGElementTreeTest.test_xpath_tokenizer.<locals>.check.<locals>.<listcomp>)rN   Zxpath_tokenizer)prZ   )r   r   r   r   r     s    
z3ElementTreeTest.test_xpath_tokenizer.<locals>.checkrv   ztext()rJ   z()z@name@rC   z@*zpara[1]Zpara[1]zpara[last()]Zlastz*/para/z/doc/chapter[5]/section[2]docZchapter5section2zchapter//paraz//z//paraz//olist/itemZolistrh   .z.//paraz..z../@langlangzchapter[title]titlez#employee[@secretary and @assistant]ZemployeeZ	secretaryr^   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&>?>)rN   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COLZFRAMEZHRZIMGZINPUTZISINDEXZLINKZMETAZPARAMz<%s>z<%s />r-  )rq   z	<%s></%s>)lowerr0   r   r   rN   )r   rm   r+   rZ   Z
serializedr   r   r   #test_html_empty_elems_serialization
  s    
z3ElementTreeTest.test_html_empty_elems_serializationN)!r    r!   r"   r[   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   DeprecationWarningPendingDeprecationWarningr   r   r+  r.  r/  r3  r5  r8  r9  rI  rJ  rL  r   r   r   r   rY      s8   X)
5-p9&;%!A#rY   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   rO   )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   )r1   )r2   r   r+   r   r   r   r3   #  s    z7XMLPullParserTest.assert_event_tags.<locals>.<listcomp>)read_eventsrN   )r   r   rZ   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)Nr\      )rP  z<!-- comment -->
z+<root>
  <element key='value'>text</elementz>
)r   rm   z<element>text</element>tail
z<empty-element/>
)r   zempty-elementz</root>
)r   r   )subTestr   XMLPullParserrS  rQ  r   r   )r   rP  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   rm   z</root>
)r   r   )	r   rV  rR  rQ  r   rN   r1   r   StopIteration)r   r   rt   r   r+   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   rV  rS  rQ  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)r^   r   z"<element key='value'>text</elementz>
z<element>text</element>tail
z<empty-element/>
z</root>
)zend-nsN)r   rV  rQ  rN   rP   rR  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   rm   z>
)r   rm   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   rV  rQ  rS  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   rs     s    zBXMLPullParserTest.test_events_sequence.<locals>.DummyIter.__next__N)r    r!   r"   r]  r^  rs   r   r   r   r   	DummyIter  s   r_  )r   rV  rQ  rS  )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   rV  )r   r   r   r   test_unknown_event  s    z$XMLPullParserTest.test_unknown_event)N)r    r!   r"   rQ  rS  rW  rY  rZ  r[  r\  r`  ra  r   r   r   r   rO    s   
,rO  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   rf  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   rw   )r   rf  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   rg  includeri  rN   r0   )r   r   rA  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   rg  rj  rN   r0   r   re  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)rE   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   rc  r   ZFatalIncludeErrorrj  rh  rN   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"   rg  rh  ri  rk  rl  rn  r   r   r   r   rb    s   
	
	@rb  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   	TypeErrorr0   rN   r   r   )r+   r   )r   r   r   r     s    z-BugsTest.test_bug_xmltoolkit21.<locals>.check{   r+   Z123)r   rM   rJ   rI   r   )r   r   r+   r   )r   r   test_bug_xmltoolkit21  s    




zBugsTest.test_bug_xmltoolkit21c             C   s<   t t}t |}| |dd | |dd d S )Nr1   rJ   zsection/tagr   )r   r   r   r   rN   r   )r   r+   r/   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   rN   r5   r   )r   r/   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   Zcaptured_stdoutdumprN   r)   )r   r/   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ägr1   )r   r   rN   r   rK   rM   r   )r   r/   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   rN   r0   )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   rN   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)re  )r   rV   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   re  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   r0  updater   r   rN   r   rJ   )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 )Nr1   rJ   )r   r   r   r   r   )r/   r   r   r   xmltoolkit63  s    
z4BugsTest.test_bug_xmltoolkit63.<locals>.xmltoolkit63i  )r;   getrefcountr   rN   )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
)rJ   s0   <SomeTag text="def _f():&#10;  return 3&#10;" />rJ   )r   rM   rN   r   r   rA   )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>rm   c               @   s   e Zd Zdd ZdS )z2BugsTest.test_bug_200708_close.<locals>.EchoTargetc             S   s
   t dS )Nrm   )r   rM   )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   rN   r   r1   )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   )Zdefault_namespacez%<elem xmlns="default"><elem /></elem>z{not-default}elemzI<elem xmlns="default" xmlns:ns1="not-default"><elem /><ns1:elem /></elem>r+   z<cannot use non-qualified names with default_namespace option)	r   rM   r   rN   r0   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   rM   rN   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   rM   rz   r   rN   r1   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   rM   r   r|   rN   r5   )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   rM   r   r   rz   rN   r5   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   r1   z<tag />)r   r   r   r   r   r   rN   r0   )r   rU   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   rN   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   rN   r1   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>r1   rC  )r   r   rN   r5   r   )r   r+   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)rJ   )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   r1   r  )r   rM   rJ   r   r   rL   r   rN   )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)rI   )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   r1   r   r  )	r   rM   rz   rI   r   r   rL   r   rN   )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   rM   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   r1   zgenerators are not reentrantr   r  )r   rM   rz   r   r   r   ZskipTestrL   r1   r   rN   )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   rN   rA   decode)r   rJ   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   rJ   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
r_      )
r   UTF8_BUG_XMLFILEr   r   r   rA   r  stripreplacerN   )r   fprawr   ZxmlattrrJ   r   r   r   test_expat224_utf8_bug_file  s    

z$BugsTest.test_expat224_utf8_bug_fileN)#r    r!   r"   rr  rs  rt  rw  rx  ry  rz  r|  r  unittestZskipIfr;   gettracer  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   ro    s8   			

ro  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   rM   r   rp  rz   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  )rn   r   r   r   r   )	r   rM   Zdummyrefweakrefrefr   r   r   rz   )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   rM   r  r  rN   r1   )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   r\   r   r   )rV   rW   zrV      )r   r  )r   rM   rN   rA   )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   r\   )repeatr   *   )r   ztext goes herezopposite of headchildZ
grandchildz.//grandchildr   rn   zother valuezxml.etree.ElementTreer   )r   r<   HIGHEST_PROTOCOLr   r8   rM   rJ   rI   r   rz   r   r   rH   rN   r1   rK   rO   rR   )r   rF   rD   rE   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   r\   )r  z\<?xml version="1.0"?>
                    <group><dogs>4</dogs>
                    </group>__getstate__r1   groupzxml.etree.ElementTreer   Zdogs)r   r<   r  r   r8   r   rl   rN   r  rH   r1   )r   rF   rD   rE   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   rM   )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  rV   )r   rM   r{   rp  )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   rM   )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   rM   r{   rp  )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   rM   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   r1   )r   rM   r   r   RuntimeErrorry   )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)rJ   	NameError)r   )r+   r   r   __del__  s    
z7BadElementTest.test_element_get_text.<locals>.X.__del__N)r    r!   r"   r  r   )r+   r   r   r    s   r  r1   ABCDEFGHIJKLABCDEFGHIJKL)	r   r   r   r   r   r   r   rN   rJ   )r   r  r   r   )r+   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   )rI   r  )r   )r+   r   r   r    s    z7BadElementTest.test_element_get_tail.<locals>.X.__del__N)r    r!   r"   r  r   )r+   r   r   r    s   r  r   r1   r  r  r  r   r  )	r   r   r   r   r   r   r   rN   rI   )r   r  r   r   )r+   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 )Nr1   rn   rI   rJ   )r1   Z	_childrenrK   rI   rJ   )	r   rM   __setstate__AttributeError__dict__r   ZassertIsr   r   )r   stater   rt   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 )Nr\   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  r+   r  r   r   )r   rM   rz   )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 )Nr\   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  r+   r   r   r  )r   rM   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   )rV   rW   r   r   r   element_factory  s    z>BadElementTest.test_treebuilder_start.<locals>.element_factory)r  r1   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   )rV   rW   r   r   r   r    s    z<BadElementTest.test_treebuilder_end.<locals>.element_factory)r  r1   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__r+   )r9   r+   r
   r   r   r   r   r  	  s    zMutatingElementPath.__new__c             C   s   | j d d = dS )NT)r+   )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 )Nr\   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   rV   )r   rM   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   rV   )r   rM   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   rV   )r   rM   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   rV   )r   rM   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   rV   )r   rM   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   rV   )r   rM   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)	rL   r   r   typer7  r   rM   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   rM   rL   rN   r1   rJ   )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  r]  )r   r1   rK   Zextra)r  r  r   r   r]  c  s    zQElementTreeTypeTest.test_Element_subclass_constructor.<locals>.MyElement.__init__)r    r!   r"   r]  r  r   )r  )r  r   r  b  s   r  r   r\   r   )r   r   r      )r   r   Zfoo__)r   r\   )r   r   )r   r   )r   r  )r   rM   rN   r1   r   rf   )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)r1   )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   rM   rN   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   rJ   r   r   r\   r   )r   rM   rJ   rz   rN   r   r   r1   rP   r   rO   )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 )Nr1   zsection/tagz./tagr   zsection/nexttagnexttagrJ   r   r^   r   togz<tag><empty /></tag>empty)	r   r   r   rN   r   r1   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   rN   r   rK   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   rE  r   r1   r  ztog/foorv   rC  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']r\   )r   r   r   r   rN   r5   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 )Nr1   z{http://effbot.org/ns}tagr   z.//{http://effbot.org/ns}tagr   )r   r   r4  rN   r5   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  r\   )r   r   rN   rO   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 )Nr1   rJ   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   rN   r   r   r1   r   r5   r   assertWarnsRegexFutureWarning)r   r   r]   rt   r   r   r   test_find_through_ElementTree	  s    
z-ElementFindTest.test_find_through_ElementTreeN)
r    r!   r"   r  r  r  r  r
  r  r  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)r5   r   )r   r+   r1   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>r-  r   r   r^   zthis is a paragraph...zthis is a paragraph.z
this is a F)r,   r   r   )r   )r   z*<root>a&amp;<sub>b&amp;</sub>c&amp;</root>za&b&c&)r   r   rN   r  r   r   r   r1   r   r   r0   r   r   r   r   r   r  )r   rA  Z
sourcefiler   r/   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   r\   r   )r   rM   rN   r  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   )r1   r   shedrv   )r   r   rN   r  r5   r   )r   rA  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>r  r   r  r   )r1   r   r  rv   )r   r   rN   r5   r   )r   rA  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   rM   r   r   rp  r   )r   r   rt   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   r\   )
r   rM   r   r   r<   r  r   rp  r?   r=   )r   r   rt   rF   r   r   r   r  	  s
    
zElementIterTest.test_pickle)N)r    r!   r"   r  r  r  r  r   rN  r  r   r  r   r   r   r   r  *	  s   
 r  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 )Nr-  rJ   r\   r   Zdivr   rI   )rN   r1   rJ   rI   rK   rP   rO   )r   r   Z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   r  )r   r  )r   r   r   sample1rN   r   objectr   )r   r  r  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   r  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   rV   r   r   r   foobar	  s    z;TreeBuilderTest.test_subclass.<locals>.MyTreeBuilder.foobarN)r    r!   r"   r"  r   r   r   r   MyTreeBuilder	  s   r#  r   r   )r   )	r   r   rN   r"  r   r   r  r   r  )r   r#  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)rz   r   rM   )r1   rK   )lstr   r   	myfactory	  s    
z7TreeBuilderTest.test_element_factory.<locals>.myfactory)r  )r   Ztoplevel)r   r   r   r   sample2r   rN   )r   r'  r$  r   r   )r&  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   r  r   rL   r  )r   r9   r$  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   rM   r*  )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   Z_Element_PyrN   r!   r   r*  )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   rC   pubidsystemr   r   r   doctype
  s    z;TreeBuilderTest.test_doctype.<locals>.DoctypeParser.doctypec             S   s   | j S )N)r.  )r   r   r   r   r   
  s    z9TreeBuilderTest.test_doctype.<locals>.DoctypeParser.close)r    r!   r"   r.  r1  r   r   r   r   r   DoctypeParser
  s   r2  )r   )r-  z&-//W3C//DTD XHTML 1.0 Transitional//ENz7http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd)r   r   r   r  rN   r   )r   r2  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   r4  r5  r   r   r   r]  %
  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)r4  r5  )r   rC   r6  r   r   r   __getattr__)
  s    
zNTreeBuilderTest.test_builder_lookup_errors.<locals>.RaisingBuilder.__getattr__)r    r!   r"   r   r]  r7  r   r   r   r   RaisingBuilder$
  s   r8  )r   )r   r   r   r   r   )r5  )	r   r   r  r   r  r   r  r   r   )r   r8  Zeventr   r   r   r   test_builder_lookup_errors#
  s    

z*TreeBuilderTest.test_builder_lookup_errorsN)r    r!   r"   r  r(  r  r   r!  r%  r)  r*  r+  r-  r3  r9  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 )Nr.   r   lineZ22)rN   r1   rJ   )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   )	r  rM  r   r   r   r   r  r<  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   r>  )r   r   r   r  r<  r   )r   r>  r   r   r   r   r%  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 )Nr-  z&-//W3C//DTD XHTML 1.0 Transitional//ENz7http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtdz<html/>error)r   r   assertWarnsrM  r1  r   r   warningscatch_warningssimplefilterr(  )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   rC   r/  r0  )r.  r   r   r1  q
  s    zHXMLParserTest.test_subclass_doctype.<locals>.MyParserWithDoctype.doctypeN)r    r!   r"   r1  r   )r.  r   r   MyParserWithDoctypep
  s   rE  )r-  z&-//W3C//DTD XHTML 1.0 Transitional//ENz7http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtdr?  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   rC   r/  r0  )	_doctype2r   r   r1  
  s    zBXMLParserTest.test_subclass_doctype.<locals>.DoctypeParser.doctypeN)r    r!   r"   r1  r   )rF  r   r   r2  
  s   r2  )r   )r   r   r@  rM  r   r(  r   rN   rA  rB  rC  r   )r   rE  r   r2  r   )r.  rF  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)r?  c               @   s   e Zd ZdS )zDXMLParserTest.test_inherited_doctype.<locals>.MyParserWithoutDoctypeN)r    r!   r"   r   r   r   r   MyParserWithoutDoctype
  s   rH  N)	rA  rB  rC  rM  r   r   r   r(  r   )r   rH  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moneyrc   u
   $£€𐅻)
r   r   r   r   sample3r   rN   r1   rK   rJ   )r   r   r   r   r   r   test_parse_string
  s    zXMLParserTest.test_parse_stringN)r    r!   r"   r  r(  rJ  r<  r=  r%  rD  rG  rI  rK  r   r   r   r   r:  =
  s   
r:  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}tabler\   z.//{hello}tdr   z.//{foo}name)r   r   SAMPLE_XML_NS_ELEMSrN   rO   r   )r   r	  rA  r   r   r   test_find_with_namespace
  s
    

z+NamespaceParseTest.test_find_with_namespaceN)r    r!   r"   rO  r   r   r   r   rL  
  s   rL  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   )r1   )r2   r   r   r   r   r3   
  s    z1ElementSlicingTest._elem_tags.<locals>.<listcomp>r   )r   Zelemlistr   r   r   
_elem_tags
  s    zElementSlicingTest._elem_tagsc             C   s   |  t|S )N)rQ  rP   )r   r+   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   rM   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   r\   a1a8c                  s    d S )N   r   r   )r   r   r   r  
  r   z?ElementSlicingTest.test_getslice_single_index.<locals>.<lambda>c                  s    d S )Nir   r   )r   r   r   r  
  r   )rS  rN   r1   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   rT  r  r   a0rT  )rS  rN   rQ  )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      r\   rV  Za9r   r^  rZ  Za6rT  @   )rS  rN   rQ  r;   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  rZ  a2rT  r^  rU  r   r\   ra  )rS  rN   rQ  r;   rb  )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   rd  rZ  r  rU  r^  r\   rT  )rS  rN   rR  )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   r\   r^  rd  rZ  r   rU  r   rT  )rS  r   rM   rN   rR  r   rX  )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   rM   )r2   r   r   r   r   r3   
  s    z:ElementSlicingTest.test_setslice_range.<locals>.<listcomp>r   r\   r   r^  b0b1rZ  r   c             S   s   g | ]}t d | qS )zb%s)r   rM   )r2   r   r   r   r   r3     s    Zb2)rS  r   rN   rR  r   rM   )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   rM   )r2   r   r   r   r   r3     s    z:ElementSlicingTest.test_setslice_steps.<locals>.<listcomp>r   r\   rT  r^  ri  rd  rj  r[  r\  r   c             S   s   g | ]}t d | qS )zb%s)r   rM   )r2   r   r   r   r   r3     s    r   rT  rZ  r  r   ra  )
rS  r   rN   rR  r   r   r   rM   r;   rb  )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   rM   )r2   r   r   r   r   r3   +  s    zCElementSlicingTest.test_setslice_negative_steps.<locals>.<listcomp>r   r   r  r^  rj  ri  rZ  r   c             S   s   g | ]}t d | qS )zb%s)r   rM   )r2   r   r   r   r   r3   2  s    r   rT  rd  r\   r   r   ra  )
rS  r   rN   rR  r   r   r   rM   r;   rb  )r   r   r   r   r   test_setslice_negative_steps)  s$    

 &
z/ElementSlicingTest.test_setslice_negative_stepsN)r    r!   r"   rQ  rR  rS  rY  r_  rc  re  rf  rh  rk  rl  rm  r   r   r   r   rP  
  s   
	

	rP  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 )Nr1   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>rd   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   rM   rJ   rN   r0   rU  upperr   rK   )r   r+   encrp  r   r   r   r+  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   rN   r   )r   r/   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   rN   r   )r   r/   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   rN   r   )r   r/   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   rN   r   r   )r   r/   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   rN   rw   r1   )r   r/   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(   rN   r)   )r   r/   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>rw  )r   r   r%   r&   r   rN   rw   r1   )r   r/   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(   rN   r)   )r   r/   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>rw  )
r%   r'   r|  r   r   r   r   rN   rw   r1   )r   r   readerr/   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(   rN   r)   )r   r/   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>rw  )
r%   r&   r|  r   r   r   r   rN   rw   r1   )r   r  r}  r/   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(   rN   r)   )r   r/   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   r    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tellrN   r)   r   )r   r/   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#   r^   zutf-16r   )r   r   rN   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)Zshort_empty_elementsFz<tag>a<x></x>b<y></y>c</tag>)r   r   rN   r   )r   r   r   r   r   test_short_empty_elements  s    

z IOTest.test_short_empty_elementsN)r    r!   r"   r+  rr  rs  rt  rv  rx  ry  rz  r{  r|  r~  r  r  r  r  r  r  r   r   r   r   rn  @  s"   E				rn  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)rL   r   r   r  )r   r   r   r   r%    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   )r\   r   z<tag>&foo;</tag>)r\   rT  zfoobar<)r\   r  )rN   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errorsrN   r  codeZcodesZXML_ERROR_SYNTAX)r   ZERRORSr   r   r   test_error_code   s    zParseErrorTest.test_error_codeN)r    r!   r"   r%  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   )rf  id)rK   )rf  )r  r   r"  Zkey1Zvalue1zmust be dict, not strzI'm not a dict)r   r   rN   r   r   r   rP   r   rM   rK   r@   r1   r   r  rp  )r   rV   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)r7   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)rL   r7   rM   r]  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   )Zblockedr   )r   )r   r7   r   r   rP  r  r  r  rY   rn  r  rb  r  r  r  r  r:  rO  ro  r{   r  r   r   r  Z_namespace_mapr   r   r   Zrun_unittestr   r}  )moduleZtest_classesr   r	  Z
nsmap_copyr  r   r   r   	test_mainZ  sH    


r  __main__)Tr#   )N)Er   r   r-  r%   rS   r<   r;   r  r  rA  r  	itertoolsr   r   r   Ztest.supportr   r   r   r   r   r7   r   r   r   UnicodeEncodeErrorr  r   r  r   r   r4  rN  r1  r2  r   ZTestCaser   r0   r5   r6   rY   rO  rc  formatescaperm  rb  ro  r  r  r   r  __hash__r  r  r  r  r  r  r:  rL  rP  rn  r  r  r  r  r    r   r   r   r   <module>   s   




#      n 	 	  h] ,48 (  c
  R$
;
