o
    IXîhl‚ ã                   @   sä  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Zd dlZd dlZd dlZd dlmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZmZ d dlmZ d d	lmZ dada ed
ddZ!ze! "d¡ W n e#y‘   e $d¡‚w edddZ%edddZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-ddœdd„Z.dd„ Z/G dd„ dej0ƒZ1dud"d#„Z2d$d%„ Z3G d&d'„ d'ƒZ4G d(d)„ d)ej0ƒZ5G d*d+„ d+ej0ƒZ6i Z7d,e7d-< d.e7d/< d0e7d1< d2e7d3< d4e7d5< d6e7d7< d8e7d9< d:e7d;< d< 8e 9e!d ¡¡e7d=< d>e7d?< i Z:d@e:dA< dBe:dC< dDe7dE< dFe7dG< dHe7dI< G dJdK„ dKej0ƒZ;G dLdM„ dMej0ƒZ<G dNdO„ dOe4ej0ƒZ=G dPdQ„ dQe4ej0ƒZ>G dRdS„ dSe?ƒZ@e?jAe@_AG dTdU„ dUe?ƒZBe?jAeB_AG dVdW„ dWe4ej0ƒZCG dXdY„ dYej0ƒZDG dZd[„ d[ej0ƒZEG d\d]„ d]ej0ƒZFG d^d_„ d_ej0ƒZGG d`da„ daej0ƒZHG dbdc„ dcej0ƒZIG ddde„ deej0ƒZJG dfdg„ dgej0ƒZKG dhdi„ diej0ƒZLG djdk„ dkej0ƒZMG dldm„ dmej0ƒZNdndo„ ZOG dpdq„ dqej0ƒZPdvdrds„ZQeRdtkrðeQƒ  dS dS )wé    N)Úpartial)ÚproductÚislice)Úsupport)Ú	os_helper)Úwarnings_helper)ÚfindfileÚ
gc_collectÚ	swap_attrÚ	swap_item)Úimport_fresh_module)ÚTESTFNz
simple.xmlÚxmltestdata©Zsubdirú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>
zÁ<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Foo [
<!ELEMENT foo (bar*)>
<!ELEMENT bar (#PCDATA)*>
<!ATTLIST bar xml:lang CDATA "eng">
<!ENTITY qux "quux">
]>
<foo>
<bar>&qux;</bar>
</foo>
F)Úquietc                    s   ‡ ‡fdd„}|S )Nc                    s    ‡‡‡ fdd„}t  |ˆ ¡ |S )Nc                     sD   t jˆ dˆiŽ ˆ| i |¤Ž W d   ƒ d S 1 sw   Y  d S )Nr   )r   Zcheck_warnings)ÚargsÚkwargs)Úfiltersr   Útest© ú=/opt/python-3.10.19/usr/lib/python3.10/test/test_xml_etree.pyÚnewtest~   s   "ÿz1checkwarnings.<locals>.decorator.<locals>.newtest)Ú	functoolsÚupdate_wrapper)r   r   ©r   r   )r   r   Ú	decorator}   s   z checkwarnings.<locals>.decoratorr   )r   r   r   r   r   r   Úcheckwarnings|   s   r   c                 C   s   |   dtj ¡ ¡S )Nó   
)ÚreplaceÚosÚlinesepÚencode)Údatar   r   r   Úconvlinesep…   ó   r$   c                   @   ó   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_sanityŠ   s   zModuleTest.test_sanityc                 C   s   d}t j| t|dd d S )N)úxml.etree.ElementTreeÚ_elementtree)Z
HTML_EMPTY)Znot_exported)r   Zcheck__all__ÚET)r.   Únamesr   r   r   Útest_all‘   s   zModuleTest.test_allN)Ú__name__Ú
__module__Ú__qualname__r/   r4   r   r   r   r   r'   ‰   s    r'   TÚunicodec                 K   sT   |dkr	t  ¡ }nt  ¡ }t | ¡}|j|fd|i|¤Ž |r#| ¡ S | d¡ |S )Nr8   Úencodingr   )ÚioÚBytesIOÚStringIOr2   r(   ÚwriteÚgetvalueÚseek)ÚelemÚ	to_stringr9   ÚoptionsÚfileÚtreer   r   r   Ú	serialize–   s   


rE   c                 C   s   dd„ | D ƒS )Nc                 S   ó   g | ]}|j ‘qS r   ©Útag©Ú.0r@   r   r   r   Ú
<listcomp>¤   ó    z"summarize_list.<locals>.<listcomp>r   )Úseqr   r   r   Úsummarize_list£   ó   rN   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)ÚpyETr2   Úmodules)Úclsr   r   r   Ú
setUpClass¨   ó   zElementTestCase.setUpClassc           
      C   sÒ   z>t tj||ƒ t ||¡}W d   ƒ n1 sw   Y  t tj||ƒ t |¡}W d   ƒ W |S 1 s7w   Y  W |S  tjyh } zttdft	dfgƒ}	t
 d||	 ||¡|	 ||¡f ¡|‚d }~ww )NZcETrR   z%Failed to round-trip %r from %r to %r)r   ÚsysrS   ÚpickleÚdumpsÚloadsÚPicklingErrorÚdictr2   rR   r   Z
TestFailedÚget)
r.   ÚobjÚnameÚdumperÚloaderÚprotoZtempÚresultÚ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|ƒƒ¡ t||ƒD ]
\}}|  ||¡ q't	 
dddd¡}|  ||ƒ||ƒ¡ d S )NrH   ÚtailÚtextÚattrib)ÚassertIsInstancer2   ÚElementrR   ÚassertEqualÚlenÚlistÚzipÚassertEqualElementsÚoperatorÚ
attrgetter)r.   ZaliceÚbobÚxÚyZ
propertiesr   r   r   ro   »   s   z#ElementTestCase.assertEqualElementsN)r5   r6   r7   ÚclassmethodrU   re   ro   r   r   r   r   rP   §   s
    
rP   c                   @   st  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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/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOdP„ Z*dQdR„ Z+dSdT„ Z,dUdV„ Z-dWdX„ Z.dYdZ„ Z/d[S )\ÚElementTreeTestc                 C   s   |   t|ƒ|¡ d S rQ   )rk   rE   )r.   r@   Úexpectedr   r   r   Úserialize_checkÉ   ó   zElementTreeTest.serialize_checkc                    sv  ‡ ‡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ƒ ‡fd
d„}|| d¡ƒ || d¡ƒ || d¡ƒ || d¡ƒ ˆ t jt j¡ ˆ t jt j¡ d S )Nc                    s´   ˆj t | ¡dd t| ƒ}dD ]}ˆj t| |ƒd| d ˆj||d| d qˆ | jt¡ ˆ | j	t
¡ | jd urCˆ | jt¡ | jd urOˆ | jt¡ | D ]}ˆ |ƒ qQd S )Nznot an element©Úmsg)rH   rh   rg   rf   zno %s memberzno %s visible by dir)Ú
assertTruer2   Z	iselementÚdirÚhasattrÚassertInri   rH   Ústrrh   r\   rg   rf   )ÚelementZdirelemÚattrr@   )Úcheck_elementr.   r   r   rƒ   Ï   s$   ÿÿ


ÿz5ElementTreeTest.test_interface.<locals>.check_elementrH   õ   tÃ¤gÚvalue©Úkeyz^<Element 't\xe4g' at 0x.*>$c                    s   ˆ j t| dƒd|  d d S )NÚ__call__z%s not callablerz   )r|   r~   ©Úmethod©r.   r   r   Úcheck_methodì   s   
ÿz4ElementTreeTest.test_interface.<locals>.check_methodc                    s   ˆ | j ƒ d S rQ   )Ú__next__)Úit)rŒ   r   r   Ú
check_iter  rO   z2ElementTreeTest.test_interface.<locals>.check_iterÚ*)r2   rj   r(   ÚgetrootÚassertRegexÚreprÚappendÚextendÚinsertÚremoveÚfindÚiterfindÚfindallÚfindtextÚclearr]   ÚsetÚkeysÚitemsÚiterÚitertextrk   ÚXMLÚ
fromstringÚPIÚProcessingInstruction)r.   r   rD   r   r   )rƒ   rŒ   r.   r   Útest_interfaceÌ   s@   

















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 )NrH   ÚTagZTAGÚTextZTEXTZTailZTAILÚbÚd)ÚaÚcÚBÚD)ÚAÚC)r2   rj   rk   rH   ÚassertIsNonerg   rf   rh   )r.   r   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|gƒ¡ |  |d¡ | |¡ t jddd	}|  |d
¡ t  d¡}| |¡ |  |d¡ | d|¡ |  |d¡ | |¡ |  |d¡ | |¡ |  |d
¡ |  	t
¡}| |¡ W d   ƒ n1 s¯w   Y  |  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 )Nú<body><tag/></body>ú<body><tag /></body>Útag2z<body><tag /><tag2 /></body>r   z<body><tag2 /><tag /></body>rH   r…   r†   z<tag key="value" />Úsubtagz!<tag key="value"><subtag /></tag>z+<tag key="value"><subtag /><subtag /></tag>zlist.remove(x): x not in listé   z
<subtag />é	   é   )r2   r¢   rx   rj   r”   r—   r–   r•   r    ÚassertRaisesÚ
ValueErrorrk   r€   Ú	exception)r.   r@   Úer   Z
subelementÚcmr   r   r   Útest_simpleops*  sT   








ÿ

ÿ "
ÿ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>)rx   r2   r¢   r‹   r   r   r   Ú
test_cdataV  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 )Nr   )rC   rH   úsection/tagr   zelement/../empty-elementúempty-element)
r:   r;   Ú
SAMPLE_XMLr"   r2   r(   rk   r˜   rH   ÚSIMPLE_XMLFILE)r.   Z
stringfilerD   r   r   r   Útest_file_init`  s   ÿzElementTreeTest.test_file_initc                 C   sò   ddl m} t t¡}tdƒD ]}t |¡ dt|ƒ ¡ qt	|j
ƒ}tdƒD ]}t |¡ dt|ƒ ¡ q'|  t	|j
ƒ|¡ tdƒD ]}t |¡ dt|ƒ ¡ qC|  t	|j
ƒ|¡ tdƒD ]}t |¡ dt|ƒ ¡ q_|  t	|j
ƒd¡ d S )Nr   r+   é
   z./é   iX  iô  )r-   r,   r2   r¢   rÃ   Úranger(   r˜   r€   rl   Ú_cacherk   ZassertGreaterZ
assertLess)r.   r,   r@   ÚiZcache_len_10r   r   r   Útest_path_cachek  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>)Úcopyr2   r¢   Údeepcopyr˜   rH   rx   )r.   rÎ   Úe1Úe2Úe3r   r   r   Ú	test_copyz  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i |¤Ž}| ¡  |  | 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 )NrH   r‡   Údefaultr…   r†   Ú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©   ú
r¬   z	
 rª   z

		  s[   <test a="&#13;" b="&#13;&#10;" c="&#09;&#10;&#13; " d="&#10;&#10;&#13;&#13;&#09;&#09;  " />rG   )r2   rj   r]   rk   r   rh   rœ   rg   ÚtostringÚsortedrž   rŸ   )r.   r@   rh   r   r   r   Útest_attrib†  s\   


ÿÿ

ÿ
ÿ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 )
NrH   r‡   r…   r¶   zattrib aliasingrz   z!<tag><subtag key="value" /></tag>ú<tag />zM<tag><subtag key="value" /><subtag key="value" /><subtag key="value" /></tag>)
r2   rj   ZmakeelementÚassertIsNotrh   r”   rx   rœ   r•   Útuple)r.   r@   rh   Ú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   ƒ n1 sCw   Y  t  ¡ }|  |jd¡ | |¡ |  | ¡ d¡ t  ¡ }t j|d}| |¡ |  | ¡ d¡ d S )Nr8   ©r9   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)r2   ÚparserÄ   r:   r<   r=   rk   r>   ÚSIMPLE_NS_XMLFILEÚopenÚreadÚ	XMLParserr’   ÚversionÚfeedrx   ÚcloseÚTreeBuilder)r.   rD   ÚstreamÚfr#   Úparserræ   r   r   r   Útest_parsefileÒ  s6   

ÿ

ÿ

ÿ

ÿ

ÿzElementTreeTest.test_parsefilec                 C   sâ   t  d¡}|  t j|ddd¡ t  d¡}|  t j|ddd¡ g d¢}t  |¡}|  t  |¡d¡ |  d t  |¡¡d¡ |  t  |d¡d¡ t  d¡\}}|  t	|ƒd	¡ t  d
¡\}}|  t	|ƒd¡ |  |d j
d¡ d S )Nú<html><body>text</body></html>r8   rä   )z<html><body>ztext</boz
dy></html>ó   <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)r2   r¢   rk   rÜ   r£   ZfromstringlistÚjoinÚtostringlistZXMLIDrl   rH   )r.   r   ZsequenceÚ_Zidsr   r   r   Útest_parseliteralÿ  s0   
ÿ
ÿ
ÿÿÿz!ElementTreeTest.test_parseliteralc              	   C   s4  t j}|tƒ}t|ƒ\}}|  ||jfd¡ |  dd„ |D ƒg d¢¡ |  |jjd¡ |tƒ}|  dd„ |D ƒg d¢¡ d}|t|ƒ}|  d	d„ |D ƒg ¡ d}|t|d
}|  dd„ |D ƒg ¡ d}|t|ƒ}|  dd„ |D ƒg d¢¡ d}|t|ƒ}|  dd„ |D ƒg d¢¡ d}|t 	d¡|ƒ}dd„ |D ƒ}|  |ddg¡ d}t
tdƒ(}|  t¡}|||ƒ W d   ƒ n1 s¿w   Y  |  |j¡ W d   ƒ n1 sÔw   Y  |  t|jƒd¡ t | ¡, |  t¡}|t|ƒ W d   ƒ n1 sýw   Y  |  t|jƒd¡ ~W d   ƒ n	1 sw   Y  t d¡}	d}||	|ƒ}|  dd„ |D ƒddg¡ t 	d¡}	||	ƒ}
t|
ƒ\}}|  ||jfd ¡ |  t j¡}t|
ƒ W d   ƒ n	1 scw   Y  |  t|jƒd!¡ |  tjt¡ t
td"ƒ}| d#¡ W d   ƒ n	1 sŽw   Y  |tƒ}
t|
ƒ\}}|  ||jfd ¡ t | ¡. |  t j¡}t|
ƒ W d   ƒ n	1 sÂw   Y  |  t|jƒd!¡ ~~
W d   ƒ n	1 sÝw   Y  t | ¡ |tƒ}
~
W d   ƒ n	1 søw   Y  |  t¡ |d$ƒ W d   ƒ d S 1 sw   Y  d S )%N©Úendr   c                 S   ó   g | ]	\}}||j f‘qS r   rG   ©rJ   Úactionr@   r   r   r   rK     ó    z2ElementTreeTest.test_iterparse.<locals>.<listcomp>)rý   ©rþ   rÂ   ©rþ   Úrootr  c                 S   rÿ   r   rG   r   r   r   r   rK   %  r  )©rþ   ú{namespace}elementr  ©rþ   ú{namespace}empty-element©rþ   ú{namespace}rootr   c                 S   rÿ   r   rG   r   r   r   r   rK   .  r  ©Úeventsc                 S   rÿ   r   rG   r   r   r   r   rK   2  r  ©Ústartrþ   c                 S   rÿ   r   rG   r   r   r   r   rK   6  r  ©©r  r  ©r  r   rý   r  rý   )r  rÂ   r  r  )r  rþ   ústart-nsúend-nsc                 S   s*   g | ]\}}|d v r||j fn||f‘qS )r  rG   r   r   r   r   rK   C  s
    þÿ)
©r  )Ú Ú	namespace©r  r  ©r  r  r  r  r  ©r  r	  r  r
  ©r  N©r  r  z<root xmlns=''/>c                 S   s   g | ]\}}|‘qS r   r   r   r   r   r   rK   T  s    r  r  ©r  rþ   Z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>
)r  c                 S   s   g | ]\}}||f‘qS r   r   r   r   r   r   rK   j  s    )r  )r  u   http://Ã©ffbot.org/ns)r  )u   clÃ©úhttp://effbot.org/nsz<document />junk)rþ   Údocumentz.junk after document element: line 1, column 12Úwbs   <document />junkZnonexistent)r2   Ú	iterparserÄ   Únextrk   rH   r  rè   r:   r<   ré   rº   r»   ÚassertFalseÚclosedr€   r¼   r   Zcheck_no_resource_warningr;   Ú
ParseErrorÚ
addCleanupr   Úunlinkr   r=   ÚFileNotFoundError)r.   r"  Úcontextr  r@   r  Úresrñ   r¾   ÚsourcerŽ   r   r   r   Útest_iterparse  sª   



þþÿýÿüÿ
þ

ÿÿÿ
ÿÿûþ
$ÿzElementTreeTest.test_iterparsec                 C   s†   t  d¡}d|_|  |d¡ dt  |d¡_|  |d¡ d |_|  |d¡ | dt  d	¡¡ |  |d
¡ t  dd¡|d< |  |d¡ d S )NrH   rg   z<tag>text</tag>Úsubtextr¶   z'<tag>text<subtag>subtext</subtag></tag>ztext<subtag>subtext</subtag>r   Úcommentz*text<!--comment--><subtag>subtext</subtag>r‡   r…   z)text<?key value?><subtag>subtext</subtag>)	r2   rj   rg   rx   Ú
SubElementrH   r–   ÚCommentr¤   ©r.   r@   r   r   r   Útest_writefile  s   
ÿzElementTreeTest.test_writefilec                 C   sÜ   t tƒ}| ¡ }W d   ƒ n1 sw   Y  G dd„ dtƒ}|ƒ }tj|d}| |¡ |  |g d¢¡ t tƒ}| ¡ }W d   ƒ n1 sIw   Y  G dd„ dtƒ}|ƒ }tj|d}| |¡ |  |g d¢¡ d S )Nc                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ú4ElementTreeTest.test_custom_builder.<locals>.Builderc                 S   ó   |   d|f¡ d S ©Nr  ©r”   ©r.   rH   rh   r   r   r   r  ¤  r%   ú:ElementTreeTest.test_custom_builder.<locals>.Builder.startc                 S   r6  ©Nrþ   r8  ©r.   rH   r   r   r   rþ   ¦  r%   ú8ElementTreeTest.test_custom_builder.<locals>.Builder.endc                 S   ó   d S rQ   r   ©r.   rg   r   r   r   r#   ¨  ó   ú9ElementTreeTest.test_custom_builder.<locals>.Builder.dataN)r5   r6   r7   r  rþ   r#   r   r   r   r   ÚBuilder£  ó    rB  rå   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 )r5  c                 S   r6  r7  r8  r9  r   r   r   r  »  r%   r:  c                 S   r6  r;  r8  r<  r   r   r   rþ   ½  r%   r=  c                 S   r>  rQ   r   r?  r   r   r   r#   ¿  r@  rA  c                 S   ó   |   d||f¡ d S )NÚpir8  )r.   ræ   r#   r   r   r   rE  Á  ry   z7ElementTreeTest.test_custom_builder.<locals>.Builder.pic                 S   r6  )Nr/  r8  )r.   r#   r   r   r   r/  Ã  r%   z<ElementTreeTest.test_custom_builder.<locals>.Builder.commentc                 S   rD  )Nr  r8  )r.   ÚprefixÚurir   r   r   Ústart_nsÅ  ry   z=ElementTreeTest.test_custom_builder.<locals>.Builder.start_nsc                 S   r6  ©Nr  r8  ©r.   rF  r   r   r   Úend_nsÇ  r%   z;ElementTreeTest.test_custom_builder.<locals>.Builder.end_nsN)
r5   r6   r7   r  rþ   r#   rE  r/  rH  rK  r   r   r   r   rB  º  s    ))rE  rE  r#   )r/  ú	 comment )r  r  r  r  r  r  r  r  r  r  r
  ©r  r  )	ré   rÄ   rê   rm   r2   rë   rí   rk   rè   )r.   rñ   r#   rB  Úbuilderrò   r   r   r   Útest_custom_builderž  s    

ÿ


ÿ
z#ElementTreeTest.test_custom_builderc                 C   sF   G dd„ dt ƒ}|ƒ }tj|d}| t d¡¡ |  |g d¢¡ d S )Nc                   @   ó   e Zd Zdd„ ZdS )z@ElementTreeTest.test_custom_builder_only_end_ns.<locals>.Builderc                 S   r6  rI  r8  rJ  r   r   r   rK  Ý  r%   zGElementTreeTest.test_custom_builder_only_end_ns.<locals>.Builder.end_nsN)r5   r6   r7   rK  r   r   r   r   rB  Ü  ó    rB  rå   a              <?pi data?>
            <!-- comment -->
            <root xmlns='namespace' xmlns:p='pns' xmlns:a='ans'>
               <a:element key='value'>text</a:element>
               <p:element>text</p:element>tail
               <empty-element/>
            </root>
            ))r  r«   )r  ÚprM  )rm   r2   rë   rí   ÚtextwrapÚdedentrk   )r.   rB  rN  rò   r   r   r   Útest_custom_builder_only_end_nsÛ  s
   	z/ElementTreeTest.test_custom_builder_only_end_nsc                 C   s8   t jd d}|  |jt j¡ t  ¡ }|  |jt j¡ d S )Nrå   )r2   rë   ri   ræ   rï   )r.   rò   Úparser2r   r   r   Ú%test_initialize_parser_without_targetñ  s   z5ElementTreeTest.test_initialize_parser_without_targetc                 C   s|  t tdƒ}t |¡}W d   ƒ n1 sw   Y  |  dd„ | ¡  ¡ D ƒg d¢g g g g¡ |  dd„ | ¡ D ƒg d¢g g g g¡ t t¡}|  t	t
|ƒƒd¡ |  t	t
|d ƒƒd¡ |  |d d … t
|ƒ¡ |d	 }|d }|dd…= |  t	t
|ƒƒd¡ |  ||d	 ¡ |  ||d ¡ ||g|d	d…< |  ||d	 ¡ |  ||d ¡ |  ||d	 ¡ | ¡  |  t
|ƒg ¡ d S )
Nr  c                 S   ó   g | ]}t |ƒ‘qS r   ©rN   rI   r   r   r   rK   ÿ  ó    ÿz1ElementTreeTest.test_children.<locals>.<listcomp>)r   r   rÂ   c                 S   rX  r   rY  rI   r   r   r   rK     rZ  é   r¹   r·   r   )ré   rÄ   r2   rç   rk   r‘   r    r¢   rÃ   rl   rm   ÚassertNotEqualrœ   )r.   rñ   rD   r@   Úchild1Úchild2r   r   r   Útest_childrenú  sJ   ÿ

ÿüÿ
ÿüÿ

zElementTreeTest.test_childrenc                 C   s<   t  d¡}|  t  |¡d¡ t  d¡}|  t  |¡d¡ d S )Nrô   rõ   )r2   r¢   rk   rÜ   r£   r2  r   r   r   Útest_writestring  s   

z ElementTreeTest.test_writestringc                 C   sè   t  d¡}t  |¡ |  t  |¡d¡ t  d¡}t  |¡ |  t  |¡d¡ t  d¡}t  |¡ |  t  |¡d¡ t  d¡}t  |¡ |  t  |¡d¡ t  d¡}t  |¡ |  t  |¡d	¡ t  d
¡}t  |¡ |  t  |¡d¡ d S )Nz<root></root>s   <root />rô   s"   <html>
  <body>text</body>
</html>z!<html> <body>text</body>  </html>z"<html><body>text</body>tail</html>s%   <html>
  <body>text</body>tail</html>z=<html><body><p>par</p>
<p>text</p>	<p><br/></p></body></html>s^   <html>
  <body>
    <p>par</p>
    <p>text</p>
    <p>
      <br />
    </p>
  </body>
</html>ú8<html><body><p>pre<br/>post</p><p>text</p></body></html>sJ   <html>
  <body>
    <p>pre<br />post</p>
    <p>text</p>
  </body>
</html>©r2   r¢   Úindentrk   rÜ   r2  r   r   r   Útest_indent%  s0   









þ

þzElementTreeTest.test_indentc                 C   sX   t  d¡}t j|dd |  t  |¡d¡ t  d¡}t j|dd |  t  |¡d¡ d S )Nra  ú	)ÚspacesD   <html>
	<body>
		<p>pre<br />post</p>
		<p>text</p>
	</body>
</html>r  s>   <html>
<body>
<p>pre<br />post</p>
<p>text</p>
</body>
</html>rb  r2  r   r   r   Útest_indent_spaceQ  s   
þ

þz!ElementTreeTest.test_indent_spacec                 C   s„   t  d¡}t  |¡ |  dd„ | ¡ D ƒh d£¡ |  dd„ | ¡ D ƒh d£¡ |  tdd„ | ¡ D ƒƒtdd„ | ¡ D ƒƒ¡ d S )	Nz@<html><body><p>par</p><p>text</p><p><br/></p><p /></body></html>c                 S   ó   h | ]}|j ’qS r   ©rf   ©rJ   Úelr   r   r   Ú	<setcomp>n  rL   z<ElementTreeTest.test_indent_space_caching.<locals>.<setcomp>>   Ú
Nú
  ú
    c                 S   rh  r   ©rg   rj  r   r   r   rl  r  rL   >   rn  rg   z
      Nro  Zparc                 S   rh  r   ri  rj  r   r   r   rl  v  rL   c                 S   s   h | ]}t |jƒ’qS r   )Úidrf   rj  r   r   r   rl  w  s    )r2   r¢   rc  rk   r    rl   r2  r   r   r   Útest_indent_space_cachingj  s   

þþþz)ElementTreeTest.test_indent_space_cachingc                 C   s¤   t  d¡}|  t¡ t j|dd W d   ƒ n1 sw   Y  |  t  |¡d¡ t j|dd |  t  |¡d¡ t  d¡}t j|ddd	 |  t  |¡d
¡ d S )Nra  éÿÿÿÿ)Úlevels9   <html><body><p>pre<br />post</p><p>text</p></body></html>r¹   s^   <html>
      <body>
        <p>pre<br />post</p>
        <p>text</p>
      </body>
    </html>r·   ú )rt  rf  sI   <html>
  <body>
   <p>pre<br />post</p>
   <p>text</p>
  </body>
 </html>)r2   r¢   rº   r»   rc  rk   rÜ   r2  r   r   r   Útest_indent_levelz  s&   
ÿþþ

þz!ElementTreeTest.test_indent_levelc                 C   s<   t  d¡}|  t j|ddd¡ |  t j|dddd¡ d S )Nú0<body xmlns="http://effbot.org/ns"><tag/></body>r8   rä   úA<ns0:body xmlns:ns0="http://effbot.org/ns"><ns0:tag /></ns0:body>r  ©r9   Údefault_namespaceú1<body xmlns="http://effbot.org/ns"><tag /></body>©r2   r¢   rk   rÜ   r2  r   r   r   Útest_tostring_default_namespaceš  s   
þþz/ElementTreeTest.test_tostring_default_namespacec                 C   ó&   t  d¡}|  t j|dddd¡ d S )Nrw  r8   Úfoobarry  zP<ns1:body xmlns="foobar" xmlns:ns1="http://effbot.org/ns"><ns1:tag /></ns1:body>r|  r2  r   r   r   Ú3test_tostring_default_namespace_different_namespace¥  ó
   
þzCElementTreeTest.test_tostring_default_namespace_different_namespacec                 C   sP   t  d¡}d}|  t|¡ t j|ddd W d   ƒ d S 1 s!w   Y  d S )Nr³   z>^cannot use non-qualified names with default_namespace option$r8   r  ry  )r2   r¢   ÚassertRaisesRegexr»   rÜ   )r.   r@   ZEXPECTED_MSGr   r   r   Ú5test_tostring_default_namespace_original_no_namespace¬  s
   
"ÿzEElementTreeTest.test_tostring_default_namespace_original_no_namespacec                 C   s$   t  d¡}|  t j|ddd¡ d S )Nr³   r8   rä   r´   r|  r2  r   r   r   Ú test_tostring_no_xml_declaration²  s
   
þz0ElementTreeTest.test_tostring_no_xml_declarationc                 C   r~  )Nr³   Úutf8T©r9   Úxml_declarations:   <?xml version='1.0' encoding='utf8'?>
<body><tag /></body>r|  r2  r   r   r   Útest_tostring_xml_declaration¹  r  z-ElementTreeTest.test_tostring_xml_declarationc                 C   r~  )Nr³   r8   Tr†  ú;<?xml version='1.0' encoding='utf-8'?>
<body><tag /></body>r|  r2  r   r   r   Ú.test_tostring_xml_declaration_unicode_encodingÀ  r  z>ElementTreeTest.test_tostring_xml_declaration_unicode_encodingc              	   C   st   t  d¡}g d¢}|D ],\}}}|  d|› d|› ¡ |  t j|||d|¡ W d   ƒ n1 s2w   Y  qd S )Nõ   <body><tag>Ã¸</tag></body>))ó   <body><tag>&#248;</tag></body>NN)ó   <body><tag>Ã¸</tag></body>úUTF-8N)rŒ  úUS-ASCIIN)óE   <?xml version='1.0' encoding='ISO-8859-1'?>
<body><tag>ø</tag></body>ú
ISO-8859-1N)r‹  r8   N)rŒ  NF)r  rŽ  F)rŒ  r  F)s   <body><tag>ø</tag></body>r‘  F)r‹  r8   F)sH   <?xml version='1.0' encoding='us-ascii'?>
<body><tag>&#248;</tag></body>NT)sA   <?xml version='1.0' encoding='UTF-8'?>
<body><tag>Ã¸</tag></body>rŽ  T)sH   <?xml version='1.0' encoding='US-ASCII'?>
<body><tag>&#248;</tag></body>r  T)r  r‘  T)uA   <?xml version='1.0' encoding='utf-8'?>
<body><tag>Ã¸</tag></body>r8   Tz	encoding=z xml_declaration=r†  )r2   r¢   ÚsubTestrk   rÜ   )r.   r@   Z	TESTCASESZexpected_retvalr9   r‡  r   r   r   Ú#test_tostring_xml_declaration_casesÇ  s"   

ÿýúþ€ÿz3ElementTreeTest.test_tostring_xml_declaration_casesc              	   C   sH   t  d¡}|  d t j|dd¡d¡ |  d t j|ddd¡d¡ d S )	Nrw  r  r8   rä   rx  r  ry  r{  )r2   r¢   rk   rù   rú   r2  r   r   r   Ú#test_tostringlist_default_namespaceó  s   
þþz3ElementTreeTest.test_tostringlist_default_namespacec                 C   s   t  d¡}|  d t j|dd¡d¡ |  d t j|dd¡d	¡ t j|ddd
}|  d |¡d¡ |  |d d¡ |  g d¢|dd … ¡ d S )Nr³   r  r8   rä   r´   rö   T)r‡  s>   <?xml version='1.0' encoding='us-ascii'?>
<body><tag /></body>r†  r‰  r   z%^<\?xml version='1.0' encoding='.+'?>)z<bodyú>z<tagz />z</body>r·   )r2   r¢   rk   rù   rú   r’   )r.   r@   Z
stringlistr   r   r   Ú!test_tostringlist_xml_declarationþ  s    
þþþz1ElementTreeTest.test_tostringlist_xml_declarationc              	      s  d‡ fdd„	}|ddƒ |ddƒ |ddƒ |d	d
ƒ |ddƒ |ddƒ dd„ ‰‡fdd„}g d¢}|D ]}ˆ   t t ||ƒ¡¡d¡ q5g d¢}|D ]}ˆ  ttj||ƒ¡ qLg d¢}|D ]}ˆ  tjtj||ƒ¡ q_ˆ  ttjˆdƒ d¡¡ ˆ  ttjˆdƒ d¡¡ d S )Nr  c                    s>   d| |f }ˆ   t | | ¡¡j|¡ ˆ   t |¡j|¡ d S )Nz0<?xml version='1.0' encoding='%s'?><xml>%s</xml>)rk   r2   r¢   r"   rg   )r9   rø   Úxmlr‹   r   r   Úcheck  s
   ÿz,ElementTreeTest.test_encoding.<locals>.checkr÷   r«   úus-asciiú
iso-8859-1õ   Â½ziso-8859-15u   â‚¬Úcp437u   âˆšú	mac-romanu   Ëšc                 S   s   d|  S )Nz*<?xml version='1.0' encoding='%s'?><xml />r   rä   r   r   r   r—    ó   z*ElementTreeTest.test_encoding.<locals>.xmlc                    s   ˆ | ƒ  | ¡S rQ   )r"   rä   )r—  r   r   Úbxml   rO   z+ElementTreeTest.test_encoding.<locals>.bxml)Cr÷   r   z	utf-8-sigúutf-16úutf-16beú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-16rœ  Z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-latin2r  z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  )	rk   r2   rÜ   r¢   rº   r»   r&  r"   ÚLookupError)r.   r˜  rŸ  Zsupported_encodingsr9   Z&unsupported_ascii_compatible_encodingsZ(unsupported_ascii_incompatible_encodingsr   ©r.   r—  r   Útest_encoding  s(   





	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>rm  z/<html><link /><script>1 &lt; 2</script></html>
r‰   r—  Úhtmlz*<html><link><script>1 < 2</script></html>
rg   z1 < 2
)r2   r¢   rf   rk   rE   ©r.   r½   r   r   r   Útest_methodsL  s   

ÿÿÿÿzElementTreeTest.test_methodsc                 C   s2   t  d¡}|  t|ƒd¡ |  t|ddd¡ d S )Nz(<html><CamelCase>text</CamelCase></html>rÒ  r‰   ©r2   r¢   rk   rE   rÓ  r   r   r   Útest_issue18347[  s   

ÿÿzElementTreeTest.test_issue18347c                 C   s6  t  d¡}|  t|ddd¡ |  |d¡ |  t j¡}t  d¡ W d   ƒ n1 s+w   Y  |  t|jƒd¡ |  t j¡}t  t	¡ W d   ƒ n1 sOw   Y  |  t|jƒd¡ t  
¡ }d	|jd
< | t	¡ | ¡ }|  |d¡ |  t j¡}t  t¡ W d   ƒ n1 s‹w   Y  |  t|jƒd¡ d S )Nz*<document title='&#x8230;'>test</document>r™  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 10rg   Úentityz<document>text</document>z,undefined entity &entity;: line 4, column 10)r2   r¢   rk   rE   rx   rº   r&  r€   r¼   Ú
ENTITY_XMLrë   r×  rí   rî   ÚEXTERNAL_ENTITY_XML)r.   r½   r¾   rò   r  r   r   r   Útest_entityb  s8   
ÿÿÿÿÿ

ÿÿ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>)r2   r¢   rx   ÚSAMPLE_XML_NSr2  r   r   r   Útest_namespace‡  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" />rG  rH   Ztag1rµ   z;<ns0:tag xmlns:ns0="uri"><ns0:tag1 /><ns0:tag2 /></ns0:tag>r…   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)r2   rj   rx   ÚQNamer0  rœ   rh   r”   rk   r€   r\  )r.   r@   râ   Zq1Zq2r   r   r   Ú
test_qname¨  sb   
ÿ
ÿÿ
ÿÿ


ÿ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>)r2   r¢   r2  r   r   r   Útest_doctype_publicé  s   z#ElementTreeTest.test_doctype_publicc                    sô  ddl m‰  d?‡ ‡fdd„	}|ddgƒ |dddgƒ |d	d
dgƒ |dd
dgƒ |dg d¢ƒ |dg d¢ƒ |dg d¢ƒ |dg d¢ƒ |dg d¢ƒ |dddgƒ |dg d¢ƒ |ddgƒ |dg d¢ƒ |ddgƒ |d g d!¢ƒ |d"g d#¢ƒ |d$g d%¢ƒ |d&d
d'gƒ |d(d(gƒ |d)g d*¢ƒ |d+g d,¢ƒ |d-d-gƒ |d.d.gƒ |d/d/gƒ |d0d0gƒ |d1g d2¢ƒ |d3g d4¢d5d6iƒ |d7d8gd9d6iƒ |d:d
d8gd5d6iƒ |d;d
d7gd9d6iƒ |d<d
d=gd9d6iƒ |d&d
d'gd6d6d>œƒ d S )@Nr   r+   c                    s"   ˆ  dd„ ˆ  | |¡D ƒ|¡ d S )Nc                 S   s   g | ]\}}|p	|‘qS r   r   )rJ   ÚoprH   r   r   r   rK   õ  s    ÿzGElementTreeTest.test_xpath_tokenizer.<locals>.check.<locals>.<listcomp>)rk   Zxpath_tokenizer)rR  rw   Ú
namespaces©r,   r.   r   r   r˜  ô  s
   

ÿþz3ElementTreeTest.test_xpath_tokenizer.<locals>.checkr   ztext()rg   ú()z@nameú@r_   z@*zpara[1])Úparaú[Ú1ú]zpara[last()])ræ  rç  Úlasträ  ré  z*/para)r   ú/ræ  z/doc/chapter[5]/section[2])rë  Údocrë  Úchapterrç  Ú5ré  rë  Úsectionrç  Ú2ré  zchapter//para)rí  ú//ræ  z//pararñ  ræ  z//olist/item)rñ  Zolistrë  ÚitemÚ.z.//para)ró  rñ  ræ  ú..z../@lang)rô  rë  rå  Úlangzchapter[title])rí  rç  Útitleré  z#employee[@secretary and @assistant])
Zemployeerç  rå  Z	secretaryr  Úandr  rå  Z	assistantré  z	@{ns}attrz{ns}attrú{http://spam}eggz
./spam.egg)ró  rë  zspam.eggz.//{http://spam}egg)ró  rñ  rø  z{ns}*ú{}*ú{*}tagú{*}*z	.//{*}tag)ró  rñ  rú  z
./xsd:type)ró  rë  ú&{http://www.w3.org/2001/XMLSchema}typeZxsdz http://www.w3.org/2001/XMLSchemaÚtyperü  r  z	@xsd:typez@typez@{*}typez{*}type)r  rÝ  rQ   )r-   r,   )r.   r˜  r   rã  r   Útest_xpath_tokenizerñ  sd   ÿ
ÿÿ
ÿ
ÿ
ÿ
ÿÿ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&>ã?>)rk   r2   rÜ   r¥   r¤   r‹   r   r   r   Útest_processinginstruction+  s   ÿÿÿÿz*ElementTreeTest.test_processinginstructionc                 C   sp   dD ]3}||  ¡ fD ]*}d| }tt d| ¡dd}|  ||¡ tt d||f ¡dd}|  ||¡ q
qd S )N)ZAREAZBASEZBASEFONTZBRZCOLÚFRAMEZHRZIMGZINPUTZISINDEXZLINKZMETAZPARAMz<%s>z<%s />rÒ  r‰   z	<%s></%s>)ÚlowerrE   r2   r¢   rk   )r.   r   r@   rw   Z
serializedr   r   r   Ú#test_html_empty_elems_serialization;  s   ÿúþz3ElementTreeTest.test_html_empty_elems_serializationc                 C   sV   t jdddd}t ¡ }t  |¡ W d   ƒ n1 sw   Y  |  | ¡ d¡ d S )NÚ
cirriculumÚpublicÚexample©ÚstatusZcompanyz1<cirriculum status="public" company="example" />
)r2   rj   r   Úcaptured_stdoutÚdumprk   r>   )r.   r½   Ústdoutr   r   r   Útest_dump_attribute_orderH  s   
ÿ
ÿz)ElementTreeTest.test_dump_attribute_orderc                 C   s8   t jdddd}|  t|ƒd¡ |  t|ddd¡ d S )	Nr  r  r  r  z0<cirriculum status="public" company="example" />rÒ  r‰   z;<cirriculum status="public" company="example"></cirriculum>)r2   rj   rk   rE   ©r.   r  r   r   r   Útest_tree_write_attribute_orderP  s   
ÿÿz/ElementTreeTest.test_tree_write_attribute_orderc                 C   s$   t  t¡}|  |d jddi¡ d S )Nr   z*{http://www.w3.org/XML/1998/namespace}langZeng)r2   r£   ÚATTLIST_XMLrk   rh   r  r   r   r   Útest_attlist_defaultX  s   
ÿz$ElementTreeTest.test_attlist_defaultN)0r5   r6   r7   rx   r¦   r²   r¿   rÀ   rÅ   rË   rÓ   rÞ   rã   ró   rü   r-  r3  rO  rU  rW  r_  r`  rd  rg  rr  rv  r}  r€  rƒ  r„  rˆ  rŠ  r“  r”  r–  rÑ  rÔ  rÖ  rÚ  rÜ  rß  rà  rþ  rÿ  r  r  r  r  r   r   r   r   rv   Ç   s\    C,
6-x=	%, ,;%!A:rv   c                   @   sÒ   e Zd Zd.dd„Zd/dd„Zd/dd„Zd/d	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d„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Ze ejd'k d(ej› d)¡d*d+„ ƒZd,d-„ ZdS )0ÚXMLPullParserTestNFc                 C   sT   |d u r
|  |¡ ntdt|ƒ|ƒD ]}|  |||| … ¡ q|r(| ¡  d S d S ©Nr   )rí   rÈ   rl   Úflush)r.   rò   r#   Ú
chunk_sizer  rÊ   r   r   r   Ú_feeda  s   ÿzXMLPullParserTest._feedc                 C   s$   |   dd„ t| ¡ |ƒD ƒ|¡ d S )Nc                 S   s    g | ]\}}||j |jff‘qS r   )rH   rg   )rJ   Úeventr@   r   r   r   rK   l  s    ÿz3XMLPullParserTest.assert_events.<locals>.<listcomp>)rk   r   Úread_events©r.   rò   rw   Ú
max_eventsr   r   r   Úassert_eventsj  s   ÿýzXMLPullParserTest.assert_eventsc                 C   s   |   tt| ¡ |ƒƒ|¡ d S rQ   )rk   rm   r   r  r  r   r   r   Úassert_event_tuplesp  s   þz%XMLPullParserTest.assert_event_tuplesc                 C   s(   t | ¡ |ƒ}|  dd„ |D ƒ|¡ d S )Nc                 S   rÿ   r   rG   r   r   r   r   rK   w  r  z7XMLPullParserTest.assert_event_tags.<locals>.<listcomp>)r   r  rk   )r.   rò   rw   r  r  r   r   r   Úassert_event_tagsu  s   ÿz#XMLPullParserTest.assert_event_tagsc                 C   sÊ   t  ¡ }|  |g ¡ |  |d||¡ |  |g ¡ |  |d||¡ |  |g ¡ |  |d||¡ |  |dg¡ |  |d||¡ |  |d||¡ |  |ddg¡ |  |d||¡ |  |d	g¡ |  | ¡ ¡ d S )
Nú<!-- comment -->
z+<root>
  <element key='value'>text</elementú>
rý   ú<element>text</element>tail
ú<empty-element/>
r  ú</root>
r  ©r2   ÚXMLPullParserr  r  r±   rî   )r.   r  r  rò   r   r   r   Útest_simple_xmlz  s(   þþz!XMLPullParserTest.test_simple_xmlc                 C   ó   | j ddd d S )Nr·   T©r  r  ©r#  r‹   r   r   r   Útest_simple_xml_chunk_1  r%   z)XMLPullParserTest.test_simple_xml_chunk_1c                 C   r$  )Né   Tr%  r&  r‹   r   r   r   Útest_simple_xml_chunk_5’  r%   z)XMLPullParserTest.test_simple_xml_chunk_5c                 C   s   | j dd d S )Né   )r  r&  r‹   r   r   r   Útest_simple_xml_chunk_22•  ó   z*XMLPullParserTest.test_simple_xml_chunk_22c                 C   sœ   t  ¡ }| ¡ }|  |d¡ t|ƒ\}}|  ||jfd¡ |  |d¡ t|ƒ\}}|  ||jfd¡ |  t¡ t|ƒ W d   ƒ d S 1 sGw   Y  d S )Nz-<root>
  <element key='value'>text</element>
rý   r   r  )	r2   r"  r  r  r#  rk   rH   rº   ÚStopIteration)r.   rò   rŽ   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 )Nr  ú<root xmlns='namespace'>
ú"<element key='value'>text</elementr  r  r  r  r  r   r
  r!  ©r.   rò   r   r   r   Útest_simple_xml_with_ns¤  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 )Nr  r  r  r/  r  r0  r  r  r  r   r  )r2   r"  r  rk   rm   r  r±   rî   r1  r   r   r   Útest_ns_events¹  s   
þz XMLPullParserTest.test_ns_eventsc                 C   s€   t jdd}|  |d¡ | j|ddgdd | j|dgd	d |  |d
¡ |  |ddg¡ |  |d¡ | ¡  |  |dg¡ d S )N)r  r  rþ   r  ú <tag xmlns='abc' xmlns:p='xyz'>
©r  )r  Úabc©r  )rR  Zxyzr¹   ©r  ©r  ú{abc}tagr·   ú
<child />
©r  ú
{abc}child©rþ   r=  ú</tag>
©rþ   r:  ©r2   r"  r  r  r  rî   r1  r   r   r   Útest_ns_events_startÈ  s.   þýÿþþ
ÿz&XMLPullParserTest.test_ns_events_startc                 C   s”   t jdd}|  |d¡ | j|ddgdd | j|dgd	d |  |d
¡ |  |ddg¡ |  |d¡ | ¡  | j|dgd	d |  |ddg¡ d S )N)r  r  rþ   r  r  r4  r5  r7  r¹   r8  r9  r·   r;  r<  r>  r?  r@  r  rA  r1  r   r   r   Útest_ns_events_start_endß  s:   þýÿþþÿþ
þz*XMLPullParserTest.test_ns_events_start_endc                 C   s  t jdd}|  |d¡ |  |g ¡ t jdd}|  |d¡ |  |g ¡ t jdd}|  |d¡ |  |dg¡ |  |d¡ |  |d	g¡ |  |d
¡ |  |dg¡ |  |d¡ |  |g d¢¡ |  |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  ú<!-- text here -->
z<root>
r  r0  r  r  rý   z8<element xmlns='foo'>text<empty-element/></element>tail
)©r  ú{foo}element©r  ú{foo}empty-element)rþ   rH  )rþ   rF  z</root>r  )r  r  rE  rG  )r2   r"  r  r  r  r±   rî   r1  r   r   r   Útest_eventsú  sL   ÿÿþzXMLPullParserTest.test_eventsc                 C   s  t jdd}|  |d¡ |  |dt jdffg¡ |  |d¡ |  |dt jdffg¡ |  |d¡ |  |d	g¡ |  |d
¡ |  |dt jdffg¡ |  |d¡ |  |dg¡ |  |d¡ |  |dt jdffg¡ t jdd}|  |d¡ |  |dt jdffg¡ d S )N)r  r/  rþ   r  rD  r/  z text here z<!-- more text here -->
z more text here z<root-tag>text)r  úroot-tagz<!-- inner comment-->
z inner commentz</root-tag>
)rþ   rJ  z<!-- outer comment -->
z outer comment )r/  )r2   r"  r  r  r1  r  r1  r   r   r   Útest_events_comment(  s    z%XMLPullParserTest.test_events_commentc                 C   sd   t jdd}|  |d¡ |  |dt jdffg¡ t jdd}|  |d¡ |  |dt jdffg¡ d S )	N)r  rE  rþ   r  z<?pitarget?>
rE  Úpitarget)rE  z<?pitarget some text ?>
zpitarget some text )r2   r"  r  r  r¤   r1  r   r   r   Útest_events_pi;  s   z XMLPullParserTest.test_events_pic                 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                   @   r4  )z9XMLPullParserTest.test_events_sequence.<locals>.DummyIterc                 S   s   t g d¢ƒ| _d S )N)r  rþ   r  )r    r  r‹   r   r   r   Ú__init__K  r%   zBXMLPullParserTest.test_events_sequence.<locals>.DummyIter.__init__c                 S   s   | S rQ   r   r‹   r   r   r   Ú__iter__M  r@  zBXMLPullParserTest.test_events_sequence.<locals>.DummyIter.__iter__c                 S   s
   t | jƒS rQ   )r#  r  r‹   r   r   r   r   O  ó   
zBXMLPullParserTest.test_events_sequence.<locals>.DummyIter.__next__N)r5   r6   r7   rN  rO  r   r   r   r   r   Ú	DummyIterJ  rC  rQ  )r2   r"  r  r  )r.   Zeventsetrò   rQ  r   r   r   Útest_events_sequenceC  s   z&XMLPullParserTest.test_events_sequencec                 C   s<   |   t¡ tjdd W d   ƒ d S 1 sw   Y  d S )Nr  r  )rº   r»   r2   r"  r‹   r   r   r   Útest_unknown_eventV  s   "ÿz$XMLPullParserTest.test_unknown_event©r¹   é   r   zExpat z" does not support reparse deferralc                 C   sš   t jdd}dD ]}| |¡ q|  |g ¡ t tu r#|  |jj ¡ ¡ | ¡  |  |dg¡ t tu r;|  |jj ¡ ¡ | d¡ | 	¡  |  |dg¡ d S )Nr  r  ©z<docr•  ©r  rì  ú</doc>©rþ   rì  )
r2   r"  rí   r  rR   r|   Ú_parserÚGetReparseDeferralEnabledr  rî   ©r.   rò   Úchunkr   r   r   Ú#test_flush_reparse_deferral_enabledZ  s   
z5XMLPullParserTest.test_flush_reparse_deferral_enabledc                 C   sÄ   t jdd}dD ]}| |¡ qtjdkr+t tur|  d¡ |jj d¡ |  	|g ¡ t tu r8|  
|jj ¡ ¡ | ¡  |  	|dg¡ t tu rP|  
|jj ¡ ¡ | d¡ | ¡  |  	|d	g¡ d S )
Nr  r  rV  rT  zDXMLParser.(Get|Set)ReparseDeferralEnabled methods not available in CFrW  rX  rY  )r2   r"  rí   ÚpyexpatÚversion_inforR   ÚskipTestrZ  ZSetReparseDeferralEnabledr  r$  r[  r  rî   r\  r   r   r   Ú$test_flush_reparse_deferral_disabledr  s"   


z6XMLPullParserTest.test_flush_reparse_deferral_disabled©NFrQ   )r5   r6   r7   r  r  r  r  r#  r'  r)  r+  r.  r2  r3  rB  rC  rI  rK  rM  rR  rS  ÚunittestÚskipIfr_  r`  r^  rb  r   r   r   r   r  _  s0    

	


.ÿ
r  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>
ú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>
ú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>
ú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>
ú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>
úC5.xmlz„<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>Example.</p>
  <xi:include href="{}"/>
</document>
údefault.xmla  <?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>The following is the source code of Recursive1.xml:</p>
  <xi:include href="C1.xml"/>
  <xi:include href="C1.xml"/>
  <xi:include href="C1.xml"/>
  <xi:include href="C1.xml"/>
</document>
úinclude_c1_repeated.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>
úB1.xmlzn<?xml version='1.0'?>
<div xmlns:xi="http://www.w3.org/2001/XInclude">
    <xi:fallback></xi:fallback>
</div>
úB2.xmlz»<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>The following is the source code of Recursive2.xml:</p>
  <xi:include href="Recursive2.xml"/>
</document>
úRecursive1.xmlz»<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>The following is the source code of Recursive3.xml:</p>
  <xi:include href="Recursive3.xml"/>
</document>
zRecursive2.xmlz»<?xml version='1.0'?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
  <p>The following is the source code of Recursive1.xml:</p>
  <xi:include href="Recursive1.xml"/>
</document>
zRecursive3.xmlc                   @   sH   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d„ Z	dS )ÚXIncludeTestr—  Nc                 C   s:   zt | }W n ty   tdƒ‚w |dkrt |¡}|S )Núresource not foundr—  )ÚXINCLUDEÚKeyErrorÚOSErrorr2   r¢   )r.   Úhrefrç   r9   r#   r   r   r   Úxinclude_loader  s   ÿ
zXIncludeTest.xinclude_loaderc                 C   r>  rQ   r   )r.   ru  rò   r9   r   r   r   Únone_loader  r@  zXIncludeTest.none_loaderc                 C   sH   |dkr"t |dƒ}t |¡ ¡ W  d   ƒ S 1 sw   Y  d S d S )Nr—  r  )ré   r2   rç   r‘   )r.   ru  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)   rk  z”<document>
  <p>Example.</p>
  <root>
   <element key="value">text</element>
   <element>text</element>tail
   <empty-element />
</root>
</document>)r-   r*   rv  Úincluderx  rk   rE   )r.   r*   rì  r   r   r   Útest_xinclude_default(  s   

ÿz"XIncludeTest.test_xinclude_defaultc                 C   s  ddl m} |  d¡}| || j¡ |  t|ƒd¡ |  d¡}| || j¡ |  t|ƒd¡ |  d¡}| || j¡ |  t|ƒd¡ |  d	¡}| || j¡ |  t|ƒd
¡ |  d¡}|  t¡}| || j¡ W d   ƒ n1 srw   Y  |  t|j	ƒd¡ |  t|ƒd¡ d S )Nr   r)   rf  a  <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>rg  zO<document>
  <p>This document has been accessed
  324387 times.</p>
</document>rh  zX<document>
  <p>This document has been <em>accessed</em>
  324387 times.</p>
</document>ri  zæ<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>rj  rq  aI  <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*   rv  ry  rk   rE   rº   rt  r€   r¼   ©r.   r*   r   r¾   r   r   r   Útest_xinclude6  s:   

ÿ

ÿ

ÿ

ÿ
ÿ
ÿzXIncludeTest.test_xincludec                 C   s>   ddl m} |  d¡}| || j¡ |  dt| d¡ƒ¡ d S )Nr   r)   rl  r¸   z.//p)r-   r*   rv  ry  rk   rl   rš   )r.   r*   r   r   r   r   Útest_xinclude_repeatedv  s   
z#XIncludeTest.test_xinclude_repeatedc                 C   s¢  ddl m} t td ¡}|  |j¡}|j|| jd W d   ƒ n1 s&w   Y  |  	t
|jƒd¡ t td ¡}|  |j¡}|j|| jd W d   ƒ n1 sTw   Y  |  	t
|jƒd¡ t td ¡}|  |j¡}|j|| jd W d   ƒ n1 s‚w   Y  |  	t
|jƒd	¡ t td
 ¡}|  |j¡}|j|| jd W d   ƒ n1 s°w   Y  |  	t
|jƒd¡ |  d¡}|  |j¡}| || j¡ W d   ƒ n1 sÛw   Y  |  	t
|jƒd¡ |  d¡}|  |j¡}|j|| jd d W d   ƒ n	1 s	w   Y  |  	t
|jƒd¡ |  d¡}|  |j¡}|j|| jdd W d   ƒ n	1 s7w   Y  |  	t
|jƒd¡ |  d¡}|  |j¡}|j|| jdd W d   ƒ n	1 sew   Y  |  	t
|jƒd¡ |  d¡}|  |j¡}|j|| jdd W d   ƒ n	1 s“w   Y  |  	t
|jƒd¡ |  d¡}|  |j¡}|j|| jdd W d   ƒ n	1 sÁw   Y  |  	t
|jƒd¡ d S )Nr   r)   rf  )ra   z%cannot load 'disclaimer.xml' as 'xml'rg  z!cannot load 'count.txt' as 'text'rm  z1unknown parse type in xi:include tag ('BAD_TYPE')rn  zYxi:fallback tag must be child of xi:include ('{http://www.w3.org/2001/XInclude}fallback')ro  z#recursive include of Recursive2.xml)Z	max_depthzAmaximum xinclude depth reached when including file Recursive2.xmlr·   zAmaximum xinclude depth reached when including file Recursive3.xmlr¹   zAmaximum xinclude depth reached when including file Recursive1.xmlr[  )r-   r*   r2   r¢   rr  rº   ZFatalIncludeErrorry  rw  rk   r€   r¼   ÚXINCLUDE_BADrv  ZLimitedRecursiveIncludeErrorr{  r   r   r   Útest_xinclude_failures}  sŽ   ÿÿÿÿÿÿÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿz#XIncludeTest.test_xinclude_failures)r—  NrQ   )
r5   r6   r7   rv  rw  rx  rz  r|  r}  r  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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                    sH   ˆ   t¡}t| ƒ W d   ƒ n1 sw   Y  ˆ  t|jƒd¡ d S )Nzcannot serialize 123 (type int))rº   Ú	TypeErrorrE   rk   r€   r¼   )r@   r¾   r‹   r   r   r˜  Ì  s   
ÿÿz-BugsTest.test_bug_xmltoolkit21.<locals>.checké{   r@   Z123)r2   rj   rg   rf   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 )NrH   rg   rÁ   r.  )r2   r¢   rÃ   r(   rk   r›   )r.   r@   rD   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 )Nú"<doc><table><tbody/></table></doc>z.//theadz.//tbodyZtbody)r2   r¢   rk   rN   rš   ©r.   rD   r   r   r   Útest_bug_xmltoolkit28í  s   
zBugsTest.test_bug_xmltoolkit28c                 C   sR   t  d¡}t ¡ }t  |¡ |  | ¡ d¡ W d   ƒ d S 1 s"w   Y  d S )Nr…  z$<doc><table><tbody /></table></doc>
)r2   r¢   r   r  r	  rk   r>   )r.   rD   r
  r   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'?><täg />r   s   <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'?><täg>text</täg>s   <tÃ¤g>text</tÃ¤g>r„   rH   )r2   r¢   rk   rÜ   rh   rj   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>r™  rä   s   <doc>&#33328;</doc>u   <doc>èˆ°</doc>rÕ  rÓ  r   r   r   Útest_bug_xmltoolkit54  s
   
ÿzBugsTest.test_bug_xmltoolkit54c                 C   sL   |   tj¡}t d¡ W d   ƒ n1 sw   Y  |  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º   r2   r&  r¢   rk   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                   @   rP  )z5BugsTest.test_bug_xmltoolkit60.<locals>.ExceptionFilec                 S   s   t ‚rQ   )rt  ©r.   rs   r   r   r   rê   +  r@  z:BugsTest.test_bug_xmltoolkit60.<locals>.ExceptionFile.readN)r5   r6   r7   rê   r   r   r   r   ÚExceptionFile*  rQ  r  )rº   rt  r2   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â€™.)	r2   rë   r×  Úupdaterí   rî   rk   r˜   rg   )r.   ZENTITIESrò   Útr   r   r   Útest_bug_xmltoolkit620  s   

ÿzBugsTest.test_bug_xmltoolkit62zSkips under coverage.c                 C   sB   dd„ }|ƒ  t  d ¡}tdƒD ]}|ƒ  q|  t  d ¡|¡ d S )Nc                  S   s,   t  ¡ } |  di ¡ |  d¡ |  d¡ d S )NrH   rg   )r2   rï   r  r#   rþ   )rD   r   r   r   Úxmltoolkit63D  s   
z4BugsTest.test_bug_xmltoolkit63.<locals>.xmltoolkit63iè  )rW   ÚgetrefcountrÈ   rk   )r.   r’  ÚcountrÊ   r   r   r   Útest_bug_xmltoolkit63A  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
rp  s0   <SomeTag text="def _f():&#10;  return 3&#10;" />rg   )r2   rj   rk   rÜ   r¢   r]   rÓ  r   r   r   Útest_bug_200708_newlineP  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>r   c                   @   rP  )z2BugsTest.test_bug_200708_close.<locals>.EchoTargetc                 S   s
   t  d¡S )Nr   ©r2   rj   r‹   r   r   r   rî   c  rP  z8BugsTest.test_bug_200708_close.<locals>.EchoTarget.closeN©r5   r6   r7   rî   r   r   r   r   Ú
EchoTargetb  rQ  r™  rå   )r2   rë   rí   rk   rî   rH   )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   ƒ n1 sWw   Y  |  t|jƒd¡ d S )	Nz{default}elemrÔ   )rz  z%<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)	r2   rj   r0  rk   rE   rº   r»   r€   r¼   )r.   r½   Úsr¾   r   r   r   Ú!test_bug_200709_default_namespacei  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/" />)r2   rj   rk   rÜ   Úregister_namespacerÓ  r   r   r   Ú"test_bug_200709_register_namespace€  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   )r2   rj   r”   r1  rk   rH   r¤   )r.   r«   r   r   r   Útest_bug_200709_element_comment  s   

z(BugsTest.test_bug_200709_element_commentc                 C   sp   t  d¡}t  |d¡}t  |d¡}t  d¡}| d|¡ |  t|ƒg d¢¡ | d|¡ |  t|ƒg d¢¡ d S )	Nr«   r©   r¬   rª   r   )rª   r©   r¬   rs  )rª   r©   rª   r¬   )r2   rj   r0  r–   rk   rN   ©r.   r«   r©   r¬   rª   r   r   r   Útest_bug_200709_element_insert›  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)r2   rj   r0  r1  r”   rk   rN   r    )r.   r«   r©   Z	comment_br   r   r   Útest_bug_200709_iter_comment¥  s
   


 z%BugsTest.test_bug_200709_iter_commentc                 C   sD   t  ¡ }| d¡}| di ¡}| d¡}| ¡ }|  t|ƒd¡ d S )Nr#   rH   rß   )r2   rï   r#   r  rþ   rî   rk   rE   )r.   rr   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>tãg</body>r|  rÓ  r   r   r   Útest_issue6233·  s   
ÿ
ÿzBugsTest.test_issue6233c                 C   sR   t  d¡}|  t|ƒdg¡ t  t¡}|d d … |d d …< |  t|ƒg d¢¡ d S )Nr³   rH   ©rH   rH   rï  )r2   r¢   rk   rN   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/)r2   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                       ó   e Zd Z‡ fdd„ZdS )z%BugsTest.test_lost_text.<locals>.Textc                    s
   dˆ _ dS )NÚchangedTrp  r‹   ©r½   r   r   Ú__bool__Ô  s   z.BugsTest.test_lost_text.<locals>.Text.__bool__N©r5   r6   r7   r«  r   rª  r   r   r¨   Ó  ó    r¨   rH   r©  )r2   rj   rg   r¡   r#  ri   r€   rk   ©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                       r¨  )z%BugsTest.test_lost_tail.<locals>.Textc                    s   dˆ d _ dS ©Nr©  r   Tri  r‹   rª  r   r   r«  ã  ó   
z.BugsTest.test_lost_tail.<locals>.Text.__bool__Nr¬  r   rª  r   r   r¨   â  r­  r¨   r  rH   r   r©  )	r2   rj   r”   rf   r¡   r#  ri   r€   rk   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¡‰ztˆƒ}W n ty9   |  d¡ Y nw |  |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 r°  )r2   rj   r#  )r.   rÕ   ©r½   rÊ   r   r   Ú__eq__ó  s   z+BugsTest.test_lost_elem.<locals>.Tag.__eq__N©r5   r6   r7   r´  r   r³  r   r   r§   ò  s    r§   r  rH   zgenerators are not reentrantr   r©  )r2   rj   r”   r    r#  r»   ra  ri   rH   r€   rk   )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©   r   )r2   r¢   rk   r]   Údecode)r.   rg   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?  r   r   r   Útest_expat224_utf8_bug		  s   
zBugsTest.test_expat224_utf8_bugc                 C   s‚   t tdƒ}| ¡ }W d   ƒ n1 sw   Y  t |¡}| d¡}| d¡ ¡ }| dd¡}|dd… }|  	| d¡|¡ d S )Nr  r©   r   rÛ   ru  rU  éüÿÿÿ)
ré   ÚUTF8_BUG_XMLFILErê   r2   r£   r]   r·  Ústripr   rk   )r.   ÚfpÚrawr  Zxmlattrrg   r   r   r   Útest_expat224_utf8_bug_file	  s   
ÿ

z$BugsTest.test_expat224_utf8_bug_filec                 C   s.   |   tt ¡ jd¡ |   tt ¡ jdd ¡ d S )NrH   )rº   r  r2   rï   r  r‹   r   r   r   Útest_39495_treebuilder_start"	  s   z%BugsTest.test_39495_treebuilder_startN)#r5   r6   r7   rƒ  r„  r‡  rˆ  r‰  rŠ  r‹  rŽ  r‘  rd  re  rW   Úgettracer•  r–  rš  rœ  rž  rŸ  r¡  r¢  r£  r¤  r¦  r§  r¯  r²  r¶  r¸  r¹  r¿  rÀ  r   r   r   r   r€  Ç  s<    			


r€  c                   @   ó\   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S )ÚBasicElementTestc                 C   sÐ   d}ddi}t  ||¡}|  |t j¡ |  dt|ƒ¡ |  dt|ƒ¡ |  dt|ƒ¡ |  dt|ƒ¡ |  |j|¡ |  |j¡ |  |j	¡ |  
|j|¡ |  |j|¡ d|d	< |  
|j|¡ |  |j|¡ d S )
NrÍ   ÚzixÚwyprH   rh   rg   rf   ÚbazrÌ   )r2   rj   ri   r   r}   rk   rH   r±   rg   rf   rà   rh   r\  )r.   rH   rh   Úelement_foor   r   r   Útest___init__-	  s    zBasicElementTest.test___init__c                 C   sö   dt tjƒvrt d¡‚t dddi¡}| t dddi¡¡ |  t¡ | ¡ }W d   ƒ n1 s3w   Y  |  	||¡ |  
|j|j¡ |  
|j|j¡ |  
|j|j¡ |  
t|ƒt|ƒ¡ t ||¡D ]
\}}|  ||¡ qf|  
|j|j¡ d S )	NrÎ   zElement.copy() not presentrÍ   rÄ  rÅ  rÌ   rÆ  Úqix)r}   r2   rj   rd  ÚSkipTestr”   ZassertWarnsÚDeprecationWarningrÎ   rà   rk   rH   rg   rf   rl   Ú	itertoolsÚzip_longestÚassertIsrh   ©r.   rÇ  Zelement_foo2r]  r^  r   r   r   rÓ   H	  s   

ÿzBasicElementTest.test_copyc                 C   s¶   t  dddi¡}| t  dddi¡¡ t |¡}|  ||¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ |  t	|ƒt	|ƒ¡ t
 ||¡D ]
\}}|  ||¡ qF|  |j|j¡ d S ©NrÍ   rÄ  rÅ  rÌ   rÆ  rÉ  )r2   rj   r”   rÎ   rà   rk   rH   rg   rf   rl   rÌ  rÍ  rÎ  rh   rÏ  r   r   r   Útest___copy__e	  s   
zBasicElementTest.test___copy__c                 C   sð   t  dddi¡}| t  dddi¡¡ t |¡}|  ||¡ |  |j|j¡ |  |j|j¡ |  |j	|j	¡ |  t
|ƒt
|ƒ¡ t ||¡D ]
\}}|  ||¡ qF|  |j|j¡ |  |j|j¡ d|jd< |  |j|j¡ |  |j|j¡ d S rÐ  )r2   rj   r”   rÎ   rÏ   rà   rk   rH   rg   rf   rl   rÌ  rÍ  rh   r\  rÏ  r   r   r   Útest___deepcopy__}	  s   

z"BasicElementTest.test___deepcopy__c                 C   s>  t  d¡}|  t|jd¡ |  t|jt  d¡dg¡ |  t|jdd¡ t  d¡g|d d …< |  t¡ d|d< W d   ƒ n1 sAw   Y  |  t¡ t  d¡dg|d d …< W d   ƒ n1 saw   Y  t|dƒr|dd gdd	d
dœ}|  t|j|¡ t|dƒrG dd„ dt jƒ}|dƒg|d d …< |  tt	j
|¡ d S d S )NÚjoer©   rÌ   rÍ   r   Ú__setstate__rH   r‚   rf   rg   )rH   Ú	_childrenrh   rf   rg   Ú__deepcopy__c                   @   rP  )z9BasicElementTest.test_augmentation_type_errors.<locals>.Ec                 S   r>  rQ   r   )r.   Úmemor   r   r   rÖ  ²	  r@  zFBasicElementTest.test_augmentation_type_errors.<locals>.E.__deepcopy__N)r5   r6   r7   rÖ  r   r   r   r   ÚE±	  rQ  rØ  )r2   rj   rº   r  r”   r•   r–   r~   rÔ  rÎ   rÏ   )r.   r½   ÚstaterØ  r   r   r   Útest_augmentation_type_errors›	  s0   

ÿÿ
û
û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                   @   ó   e Zd ZdS )z.BasicElementTest.test_cyclic_gc.<locals>.DummyN©r5   r6   r7   r   r   r   r   ÚDummy¸	  ó    rÝ  rÓ  )r‚   rÍ   rÐ   rÑ   rÒ   )	r2   rj   ZdummyrefÚweakrefÚrefr	   r±   r0  r”   )r.   rÝ  rª   Úwrefr½   rÑ   rÐ   rÒ   r   r   r   Útest_cyclic_gc·	  s2   









zBasicElementTest.test_cyclic_gcc                    s\   d‰ ‡ fdd„}t  d¡}t ||¡}|  |ƒ jd¡ ~tƒ  |  ˆ d¡ |  |ƒ d ¡ d S )NFc                    s   d‰ d S ©NTr   )Úw©Úflagr   r   Úwref_cbÜ	  s   z.BasicElementTest.test_weakref.<locals>.wref_cbr½   T)r2   rj   rß  rà  rk   rH   r	   )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[  )rs   rt   Úzrs   é   )rÔ   rä  )r2   rj   rk   r]   )r.   rÐ   r   r   r   Útest_get_keyword_argsç	  s   z&BasicElementTest.test_get_keyword_argsc              	   C   sØ   t dtjd ƒD ]a}t| jddD ]W\}}|jddd}d|_d|_| |d	¡ 	| d
¡¡ | 	| d	¡¡ | 
d¡d  dd¡ |  |d|||¡}|  |jd¡ |  |jd d¡ |  t|ƒd¡ |  ||¡ qqd S )Nr¹   r·   ©ÚrepeatrÍ   é*   )rÌ   ztext goes herezopposite of headÚchildZ
grandchildz.//grandchildr   r‚   zother valuer0   rÌ   )rÈ   rX   ÚHIGHEST_PROTOCOLr   rS   rj   rg   rf   r0  r”   rš   r   re   rk   rH   rh   rl   ro   )r.   rb   r`   ra   r½   rÑ   r   r   r   Útest_pickleì	  s"   ÿòÿzBasicElementTest.test_picklec              	   C   s   t dtjd ƒD ]=}t| jddD ]3\}}d}| |¡}t|dƒr+|  | ¡ d d¡ |  	|d|||¡}|  |j
d¡ |  |d	 j
d
¡ qqd S )Nr¹   r·   rì  z\<?xml version="1.0"?>
                    <group><dogs>4</dogs>
                    </group>Ú__getstate__rH   Úgroupr0   r   Zdogs)rÈ   rX   rð  r   rS   r£   r~   rk   rò  re   rH   )r.   rb   r`   ra   ZXMLTEXTrÐ   rÑ   r   r   r   Útest_pickle_issue18997ÿ	  s   

ÿöÿz'BasicElementTest.test_pickle_issue18997N)r5   r6   r7   rÈ  rÓ   rÑ  rÒ  rÚ  râ  rè  rë  rñ  rô  r   r   r   r   rÃ  +	  s    #rÃ  c                   @   rÂ  )ÚBadElementTestc                    s|   G ‡ fdd„dƒ}|ƒ g‰ t  d¡}z| ˆ ¡ W n	 ty"   Y nw G dd„ d|t jƒ}|dƒg‰ t  d¡}| ˆ ¡ d S )Nc                       ó   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 )NrÆ  r—  r‹   ©ÚLr   r   Ú	__class__
  s   z<BadElementTest.test_extend_mutable_list.<locals>.X.__class__N©r5   r6   r7   Úpropertyrù  r   r÷  r   r   ÚX
  ó    rü  rÍ   c                   @   rÛ  )z2BadElementTest.test_extend_mutable_list.<locals>.YNrÜ  r   r   r   r   ÚY
  rÞ  rþ  rs   ©r2   rj   r•   r  ©r.   rü  r½   rþ  r   r÷  r   Útest_extend_mutable_list
  s   
ÿ

z'BadElementTest.test_extend_mutable_listc                    sŒ   G ‡ fdd„dƒ}|ƒ t  d¡g‰ t  d¡}z| ˆ ¡ W n	 ty&   Y nw G dd„ d|t jƒ}|dƒt  d¡g‰ t  d¡}| ˆ ¡ d S )Nc                       rö  )z3BadElementTest.test_extend_mutable_list2.<locals>.Xc                    s   ˆ d d …= t jS rQ   r—  r‹   r÷  r   r   rù  $
  s   
z=BadElementTest.test_extend_mutable_list2.<locals>.X.__class__Nrú  r   r÷  r   r   rü  #
  rý  rü  rÆ  rÍ   c                   @   rÛ  )z3BadElementTest.test_extend_mutable_list2.<locals>.YNrÜ  r   r   r   r   rþ  /
  rÞ  rþ  rÌ   rÿ  r   r   r÷  r   Útest_extend_mutable_list2"
  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                       r¨  )z3BadElementTest.test_remove_with_mutating.<locals>.Xc                    ó   ˆ d d …= dS rc  r   ©r.   Úorª  r   r   r´  7
  r±  z:BadElementTest.test_remove_with_mutating.<locals>.X.__eq__Nrµ  r   rª  r   r   rü  6
  r­  rü  rÍ   rÌ   rÆ  )r2   rj   r•   rº   r»   r—   ©r.   rü  r   rª  r   Útest_remove_with_mutating5
  s   

z(BadElementTest.test_remove_with_mutatingc              	   C   s~   t  d¡}t|d|ƒ* |  t¡ t|ƒ W d   ƒ n1 s w   Y  W d   ƒ d S W d   ƒ d S 1 s8w   Y  d S )NrÍ   rH   )r2   rj   r
   rº   ÚRuntimeErrorr“   rÓ  r   r   r   Útest_recursive_reprB
  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                       r¨  )z/BadElementTest.test_element_get_text.<locals>.Xc                    s"   zˆ j  W d S  ty   Y d S w rQ   )rg   Ú	NameErrorr‹   ©r@   r   r   Ú__del__L
  s
   ÿz7BadElementTest.test_element_get_text.<locals>.X.__del__N©r5   r6   r7   r  r   r  r   r   rü  K
  r­  rü  rH   ÚABCDÚEFGHÚIJKLÚABCDEFGHIJKL)	r€   r2   rï   r  r#   rþ   rî   rk   rg   ©r.   rü  r©   r   r  r   Útest_element_get_textI
  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                       r¨  )z/BadElementTest.test_element_get_tail.<locals>.Xc                    s&   zˆ d j  W d S  ty   Y d S w r  )rf   r
  r‹   r  r   r   r  _
  s
   ÿz7BadElementTest.test_element_get_tail.<locals>.X.__del__Nr  r   r  r   r   rü  ^
  r­  rü  r  rH   r  r  r  r   r  )	r€   r2   rï   r  rþ   r#   rî   rk   rf   r  r   r  r   Útest_element_get_tail\
  s   



z$BadElementTest.test_element_get_tailc                    s^   G ‡ fdd„dƒ}t  d¡‰ ˆ  t  d¡¡ ˆ d |ƒ …  ˆ  t  d¡¡ ˆ dd|ƒ …  d S )Nc                       r¨  )z%BadElementTest.test_subscr.<locals>.Xc                    r  ©Nr·   r   r‹   rª  r   r   Ú	__index__t
  r±  z/BadElementTest.test_subscr.<locals>.X.__index__N©r5   r6   r7   r  r   rª  r   r   rü  s
  r­  rü  r@   rï  r   rÆ   )r2   rj   r”   r  r   rª  r   Útest_subscrq
  s   
zBadElementTest.test_subscrc                    sP   G ‡ fdd„dƒ}t  d¡‰ tdƒD ]}ˆ  dt  d¡¡ qg ˆ dd|ƒ …< d S )Nc                       r¨  )z)BadElementTest.test_ass_subscr.<locals>.Xc                    s   g ˆ d d …< dS r  r   r‹   rª  r   r   r  ‚
  ó   z3BadElementTest.test_ass_subscr.<locals>.X.__index__Nr  r   rª  r   r   rü  
  r­  rü  r@   rÆ   r   rï  )r2   rj   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   ó   g S rQ   r   ©rs   rt   r   r   r   Úelement_factoryŽ
  r@  z>BadElementTest.test_treebuilder_start.<locals>.element_factory©r  rH   r  rµ   )r2   rï   r  r#   rº   ÚAttributeErrorr	   ©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   r  rQ   r   r  r   r   r   r  š
  r@  z<BadElementTest.test_treebuilder_end.<locals>.element_factoryr  rH   r  )r2   rï   r  r#   rº   r  rþ   r	   r   r   r   r   Útest_treebuilder_end˜
  s   

z#BadElementTest.test_treebuilder_endN)r5   r6   r7   r  r  r  r	  r  r  r  r  r!  r"  r   r   r   r   rõ  
  s    rõ  c                   @   r&   )ÚMutatingElementPathc                 G   s   t j| g|¢R Ž }||_|S rQ   )r€   Ú__new__r@   )rT   r@   r   r.   r   r   r   r$  ¦
  s   zMutatingElementPath.__new__c                 C   s   | j d d …= dS rã  r  r  r   r   r   r´  ª
  r  zMutatingElementPath.__eq__N)r5   r6   r7   r$  r´  r   r   r   r   r#  ¥
  s    r#  c                   @   rP  )ÚBadElementPathc                 C   s   dd ‚)Nr·   r   r   r  r   r   r   r´  °
  rž  zBadElementPath.__eq__Nrµ  r   r   r   r   r%  ¯
  rQ  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 r'  )r-   r,   r*  rÉ   r(  ÚtearDownr+  r,  r   r   r-  »
  s   zBadElementPathTest.tearDownc                 C   ó0   t  d¡}| t  d¡g¡ | t|dƒ¡ d S ©NrÍ   rÌ   rs   )r2   rj   r•   r˜   r#  rÓ  r   r   r   Útest_find_with_mutatingÀ
  ó   
z*BadElementPathTest.test_find_with_mutatingc                 C   óF   t  d¡}| t  d¡g¡ z
| tdƒ¡ W d S  ty"   Y d S w r/  )r2   rj   r•   r˜   r%  ÚZeroDivisionErrorrÓ  r   r   r   Útest_find_with_errorÅ
  ó   
ÿz'BadElementPathTest.test_find_with_errorc                 C   r.  r/  )r2   rj   r•   r›   r#  rÓ  r   r   r   Útest_findtext_with_mutatingÍ
  r1  z.BadElementPathTest.test_findtext_with_mutatingc                 C   r2  r/  )r2   rj   r•   r›   r%  r3  rÓ  r   r   r   Útest_findtext_with_errorÒ
  r5  z+BadElementPathTest.test_findtext_with_errorc                 C   r.  r/  )r2   rj   r•   rš   r#  rÓ  r   r   r   Útest_findall_with_mutatingÚ
  r1  z-BadElementPathTest.test_findall_with_mutatingc                 C   r2  r/  )r2   rj   r•   rš   r%  r3  rÓ  r   r   r   Útest_findall_with_errorß
  r5  z*BadElementPathTest.test_findall_with_error)r5   r6   r7   r)  r-  r0  r4  r6  r7  r8  r9  Ú__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 rQ   )	ri   r2   r&  rý  rÞ  r(   rj   rï   rë   r‹   r   r   r   Útest_istypeé
  s   zElementTreeTypeTest.test_istypec                 C   sZ   G dd„ dt jƒ}|dƒ}|  |t j¡ |  ||¡ |  |jd¡ d|_|  |jd¡ d S )Nc                   @   rÛ  )zDElementTreeTypeTest.test_Element_subclass_trivial.<locals>.MyElementNrÜ  r   r   r   r   Ú	MyElementò
  rÞ  r=  rÍ   rÓ  )r2   rj   ri   rk   rH   rg   ©r.   r=  Úmyer   r   r   Útest_Element_subclass_trivialñ
  s   z1ElementTreeTypeTest.test_Element_subclass_trivialc                    sV   G ‡ fdd„dt jƒ‰ ˆ ddddœddd	}|  |jd
¡ |  t| ¡ ƒg d¢¡ 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i |¤Ž d S )NÚ__)r(  rN  )r.   rH   rh   Úextra)r=  rù  r   r   rN     s   "zQElementTreeTypeTest.test_Element_subclass_constructor.<locals>.MyElement.__init__)r5   r6   r7   rN  r:  r   ©r=  r,  r   r=  ÿ
  s    r=  rÍ   r·   r¹   )r«   r©   r[  é   )r¬   rª   Zfoo__))r«   r·   )r©   r¹   )r¬   r[  )rª   rD  )r2   rj   rk   rH   rÝ   rŸ   )r.   r?  r   rC  r   Ú!test_Element_subclass_constructorþ
  s   ÿz5ElementTreeTypeTest.test_Element_subclass_constructorc                 C   s.   G dd„ dt jƒ}|dƒ}|  | ¡ d¡ d S )Nc                   @   rP  )zGElementTreeTypeTest.test_Element_subclass_new_method.<locals>.MyElementc                 S   ó   | j S rQ   rG   r‹   r   r   r   Ú	newmethod
  ó   zQElementTreeTypeTest.test_Element_subclass_new_method.<locals>.MyElement.newmethodN)r5   r6   r7   rG  r   r   r   r   r=  	  rQ  r=  rÓ  )r2   rj   rk   rG  r>  r   r   r   Ú test_Element_subclass_new_method  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                   @   rÛ  )zAElementTreeTypeTest.test_Element_subclass_find.<locals>.MyElementNrÜ  r   r   r   r   r=    rÞ  r=  rÍ   rg   rÌ   r.  r·   r   )r2   rj   rg   r”   rk   r›   r˜   rH   rm   rš   rl   )r.   r=  r½   ÚsubÚfoundr   r   r   Útest_Element_subclass_find  s   

z.ElementTreeTypeTest.test_Element_subclass_findN)r5   r6   r7   r<  r@  rE  rI  rL  r   r   r   r   r;  è
  s    
r;  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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 )NrH   rÁ   ú./tagr¹   zsection/nexttagÚnexttagrg   r.  r  rÔ   Útogz<tag><empty /></tag>Úempty)	r2   r¢   rÃ   rk   r˜   rH   ÚSAMPLE_SECTIONr›   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])r2   r¢   rk   r˜   rh   r‚  ÚSyntaxError)r.   Z
LINEAR_XMLr½   r   r   r   Útest_find_xpath8  s   
zElementFindTest.test_find_xpathc                 C   sp  t  t¡}t  t¡|d< |  t| d¡ƒdg¡ |  t| d¡ƒddg¡ |  t| d¡ƒg ¡ |  t| d¡ƒg ¡ |  t| d¡ƒg d¢¡ |  t| d	¡ƒdgd
 ¡ |  t| d¡ƒdg¡ |  t| d¡ƒdgd ¡ |  t| d¡ƒg d¢¡ |  t| d¡ƒg d¢¡ |  t| d¡ƒg d¢¡ |  t| d¡ƒg d¢¡ |  t| d¡ƒg d¢¡ |  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d ¡ |  t| d¡ƒdg¡ |  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*¡ƒg ¡ |  t| d+¡ƒg ¡ |  t| d,¡ƒg ¡ |  t| d-¡ƒg ¡ |  t| d.¡ƒg ¡ |  t| d/¡ƒdg¡ |  t| d0¡ƒdg¡ |  t| d1¡ƒdg¡ |  t| d2¡ƒdg¡ |  t| d3¡ƒdg¡ |  t| d4¡ƒg ¡ |  t| d5¡ƒg ¡ |  t| d6¡ƒdgd ¡ |  t| d7¡ƒdgd ¡ |  t| d8¡ƒdgd ¡ |  t| d9¡ƒdgd ¡ |  t| d:¡ƒdgd ¡ |  t| d;¡ƒdgd
 ¡ |  t| d<¡ƒdgd
 ¡ |d |d=< |  t| d(¡ƒd d g¡ |  t| d3¡ƒddg¡ d S )>Nr¹   ró  rø   rH   rP  ztog/foor   r¥  z.//tagrD  rÁ   zsection//tagz	section/*)rH   rO  Únextsectionz
section//*)rH   rO  rW  rH   zsection/.//*z*/*z*//*z*/tagz*/./tagrN  z././tagz.//tag[@class]r[  z.//tag[@class="a"]z.//tag[@class!="a"]z.//tag[@class="b"]z.//tag[@class!="b"]z.//tag[@id]z.//section[tag]rï  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.//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']z.//tag[.!='subtext']z.//tag[. !='subtext']z.//tag[.!= "subtext"]z.//tag[ . != "subtext" ]z.//tag[. != 'subtext']z.//tag[. != 'subtext ']z.//tag[.!= ' subtext']r·   )r2   r¢   rÃ   rR  rk   rN   rš   rÓ  r   r   r   Útest_findallN  s  
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzElementFindTest.test_findallc                 C   s\   t  t¡}|  t| d¡ƒg ¡ |  t| d¡ƒdgd ¡ |  t| d¡ƒdgd ¡ d S )NrH   z{http://effbot.org/ns}tagr¹   z.//{http://effbot.org/ns}tagr[  )r2   r¢   rÛ  rk   rN   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dd
œ}|  t|jd|dƒd¡ |  t|jd|dƒd	¡ d S )Nú–
            <a xmlns:x="X" xmlns:y="Y">
                <x:b><c/></x:b>
                <b/>
                <c><x:b/><b/></c><y:b/>
            </a>Úxxrü  z.//xx:b)râ  r¹   ú.//brþ  r·   )r[  r  )r2   r¢   rk   rl   rš   )r.   r  Únsmapr   r   r   Útest_findall_different_nsmapsÈ  s   

z-ElementFindTest.test_findall_different_nsmapsc                 C   sÐ  t  d¡}| t  d¡¡ |  t| d¡ƒg d¢¡ |  t| d¡ƒdg¡ |  t| d¡ƒdg¡ |  t| d	¡ƒd
g¡ |  t| d¡ƒddg¡ |  t| d¡ƒdg¡ |  t| d¡ƒt| d¡ƒ¡ |  t| d¡ƒg d¢¡ |  t| d¡|d g ƒt| d¡ƒ¡ |  t| d¡ƒg d¢¡ |  t| d¡ƒddg¡ |  t| d¡ƒddg¡ |  t| d¡ƒd
g¡ |  t| d¡ƒg d¢¡ |  t| d¡ƒddg¡ |  t| d¡ƒt| d¡ƒ¡ d S )NrZ  r   z{*}b)ú{X}br©   ú{Y}bz{*}cr¬   z{X}*r_  z{Y}*r`  rù  r©   z{}brû  )r_  r©   r¬   r`  rs  r   z.//{*}b)r_  r©   r_  r©   r`  z.//{*}cz.//{X}*z.//{Y}*z.//{}*)r¬   r©   r¬   r©   z.//{}br\  )r2   r¢   r”   r1  rk   rN   rš   r  r   r   r   Útest_findall_wildcardÙ  sd   
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz%ElementFindTest.test_findall_wildcardc                 C   sF   t  t¡}|  td¡ | d¡ W d   ƒ d S 1 sw   Y  d S )Nzcannot use absolute pathz/tag)r2   r¢   rÃ   r‚  rU  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   ƒ n1 sJw   Y  |  t|ƒdgd ¡ d S )NrH   rg   r¹   z‰This 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[  )r2   r¢   rÃ   rk   r(   r˜   rH   r›   rN   rš   ÚassertWarnsRegexÚFutureWarning)r.   r½   r{   rŽ   r   r   r   Útest_find_through_ElementTree
  s   
ÿÿz-ElementFindTest.test_find_through_ElementTreeN)r5   r6   r7   rS  rV  rX  rY  r^  ra  rb  re  r   r   r   r   rM     s    p
,rM  c                   @   s>   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ ZdS )ÚElementIterTestNc                 C   s   t | |¡ƒS rQ   )rN   r    )r.   r@   rH   r   r   r   Ú_ilist  rO   zElementIterTest._ilistc                 C   s4  t  d¡}|  |  |¡g d¢¡ |  |  | 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ø   rÊ   rÒ  r  zthis is a paragraph...zthis is a paragraph.z
this is a F)rA   r   rþ   rå   )rò   z*<root>a&amp;<sub>b&amp;</sub>c&amp;</root>za&b&c&)r2   r¢   rk   rg  r˜   r#  r    rH   rù   r¡   rE   r"  rë   rï   r(   rº   r  )r.   rì  Z
sourcefilerò   rD   r   r   r   Ú
test_basic  s(   
ÿÿ

zElementIterTest.test_basicc                 C   s°   t  d¡}|  |  |¡dg¡ t  |d¡}|  |  |¡ddg¡ t  |d¡}|  |  |¡g d¢¡ t  |d¡}|  |  |¡g d¢¡ |d |d< |d= |  |  |¡ddg¡ d S )	Nr«   r©   r¬   )r«   r©   r¬   rª   )r«   r©   r¬   rª   r·   r   )r2   rj   rk   rg  r0  r   r   r   r   Útest_corners8  s   
zElementIterTest.test_cornersc                 C   s¢   t  d¡}|  |  |d¡dgd ¡ |  |  |d¡dgd ¡ |  t|jddƒdgd ¡ g 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>Úroomr[  Úhouser¹   rG   )r   rk  rj  rj  Zshedrk  rj  r   )r2   r¢   rk   rg  rN   r    )r.   rì  Zall_tagsr   r   r   Útest_iter_by_tagN  s   
þz ElementIterTest.test_iter_by_tagc                 C   sL   t  d¡}| ¡ }|  t¡ t |¡ W d   ƒ d S 1 sw   Y  d S )Nr«   )r2   rj   r    rº   r  rÎ   )r.   r«   rŽ   r   r   r   rÓ   k  s
   
"ÿzElementIterTest.test_copyc              	   C   sf   t  d¡}| ¡ }ttjd ƒD ] }|  ttjf¡ t 	||¡ W d   ƒ n1 s+w   Y  qd S )Nr«   r·   )
r2   rj   r    rÈ   rX   rð  rº   r  r[   rY   )r.   r«   rŽ   rb   r   r   r   rñ  q  s   
ÿ€ÿzElementIterTest.test_picklerQ   )	r5   r6   r7   rg  rh  ri  rl  rÓ   rñ  r   r   r   r   rf    s    
rf  c                   @   sŒ   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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Ò  rg   r·   r   Zdivr.  rf   )rk   rH   rg   rf   rh   rm   rl   )r.   r½   Úchildrenrï  r   r   r   Ú_check_sample1_element  s   z&TreeBuilderTest._check_sample1_elementc                 C   sž   G dd„ dƒ}G dd„ d|ƒ}t j|ƒ d}| | j¡ |  | ¡ d¡ t j|ƒ d}| | j¡ |  | ¡ d¡ t jtƒ d}| | j¡ |  | ¡ ¡ d S )Nc                   @   rP  )z<TreeBuilderTest.test_dummy_builder.<locals>.BaseDummyBuilderc                 S   ó   dS )Nrî  r   r‹   r   r   r   rî     r@  zBTreeBuilderTest.test_dummy_builder.<locals>.BaseDummyBuilder.closeNr˜  r   r   r   r   ÚBaseDummyBuilder  rQ  rq  c                   @   s   e Zd Zdd„  Z ZZdS )z8TreeBuilderTest.test_dummy_builder.<locals>.DummyBuilderc                  W   r>  rQ   r   )r«   r   r   r   Ú<lambda>”  ó    zATreeBuilderTest.test_dummy_builder.<locals>.DummyBuilder.<lambda>N)r5   r6   r7   r#   r  rþ   r   r   r   r   ÚDummyBuilder“  s    rt  rå   rî  )r2   rë   rí   Úsample1rk   rî   Úobjectr±   )r.   rq  rt  rò   r   r   r   Útest_dummy_builderŽ  s   z"TreeBuilderTest.test_dummy_builderc                 C   s   t  ¡ }|  | d¡jt j¡ |  | d¡jd¡ t jt jd}|  | d¡jt j¡ |  | d¡jd¡ t jtd}|  | d¡tdƒ¡ d S )NZctext)Úcomment_factory)r2   rï   rk   r/  rH   r1  rg   rl   ©r.   r©   r   r   r   Útest_treebuilder_comment¢  s   z(TreeBuilderTest.test_treebuilder_commentc                 C   sæ   t  ¡ }|  | dd ¡jt j¡ |  | dd ¡jd¡ t jt jd}|  | d¡jt j¡ |  | d¡jd¡ |  | dd¡jt j¡ |  | dd¡jd¡ t jdd„ d}|  | d¡tdƒd f¡ |  | dd¡tdƒdf¡ d S )Nræ   )Ú
pi_factoryrL  z text zpitarget  text c                 S   s   t | ƒ|fS rQ   )rl   )ræ   rg   r   r   r   rr  ¹  s    z5TreeBuilderTest.test_treebuilder_pi.<locals>.<lambda>)r2   rï   rk   rE  rH   r¤   rg   rl   ry  r   r   r   Útest_treebuilder_pi®  s    z#TreeBuilderTest.test_treebuilder_pic                 C   s®   G dd„ dt jƒ}d}t  |¡}|  |jd¡ t j|ƒ d}| |¡ | ¡ }|  |jd¡ d}t  |¡}|  |jd¡ d}t j|ƒ d}| |¡ | ¡ }|  |jd¡ d S )Nc                   @   rÛ  )z;TreeBuilderTest.test_late_tail.<locals>.TreeBuilderSubclassNrÜ  r   r   r   r   ÚTreeBuilderSubclass¿  rÞ  r}  z<a>text<!-- comment -->tail</a>Ztexttailrå   z<a>text<?pi data?>tail</a>)r2   rï   r£   rk   rg   rë   rí   rî   )r.   r}  r—  r«   rò   r   r   r   Útest_late_tail½  s    



zTreeBuilderTest.test_late_tailc                 C   sz  G dd„ dt jƒ}d}t jt jddd}| |¡ | ¡ }|  |d jd¡ |  |d jd	¡ |  |jd
¡ t j|ddd}| |¡ | ¡ }|  |d jd¡ |  |d jd	¡ |  |jd
¡ d}t jt jddd}| |¡ | ¡ }|  |d jd¡ |  |d jd¡ |  |jd¡ t j|ddd}| |¡ | ¡ }|  |d jd¡ |  |d jd¡ |  |jd¡ d S )Nc                   @   rÛ  )zKTreeBuilderTest.test_late_tail_mix_pi_comments.<locals>.TreeBuilderSubclassNrÜ  r   r   r   r   r}  Ø  rÞ  r}  z/<a>text<?pi1?> <!-- comment -->
<?pi2?>tail</a>T)Zinsert_commentsrå   r   rL  z
tailztext z+<a>text<!-- comment -->
<?pi data?>tail</a>)Z
insert_piszpi datarf   ztext
)r2   rï   rë   rí   rî   rk   rg   rf   )r.   r}  r—  rò   r«   r   r   r   Útest_late_tail_mix_pi_commentsÕ  s6   



z.TreeBuilderTest.test_late_tail_mix_pi_commentsc                 C   s6   t jt jd dd}| | j¡ | ¡ }|  |¡ d S ©Nr  rå   )r2   rë   rï   rí   ru  rî   ro  ©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                   @   rP  )z4TreeBuilderTest.test_subclass.<locals>.MyTreeBuilderc                 S   ó   |d S ©Nr¹   r   rŒ  r   r   r   r    rž  z;TreeBuilderTest.test_subclass.<locals>.MyTreeBuilder.foobarN©r5   r6   r7   r  r   r   r   r   ÚMyTreeBuilder   rQ  r†  rÆ   rÇ   rå   )	r2   rï   rk   r  rë   rí   ru  rî   ro  ©r.   r†  Útbrò   r½   r   r   r   Útest_subclassÿ  s   zTreeBuilderTest.test_subclassc                 C   sl   G dd„ dt jƒ}|t jt jd}|  | d¡d¡ t j|d}| | j¡ | d¡ | 	¡ }|  
|¡ d S )Nc                   @   rP  )z?TreeBuilderTest.test_subclass_comment_pi.<locals>.MyTreeBuilderc                 S   rƒ  r„  r   rŒ  r   r   r   r    rž  zFTreeBuilderTest.test_subclass_comment_pi.<locals>.MyTreeBuilder.foobarNr…  r   r   r   r   r†    rQ  r†  )rx  r{  rÆ   rÇ   rå   z<!-- a comment--><?and a pi?>)r2   rï   r1  r¤   rk   r  rë   rí   ru  rî   ro  r‡  r   r   r   Útest_subclass_comment_pi  s   
z(TreeBuilderTest.test_subclass_comment_pic                    sN   g ‰ ‡ fdd„}t j|d}t j|d}| | j¡ | ¡  |  ˆ dg¡ d S )Nc                    s   ˆ   | ¡ t | |¡S rQ   )r”   r2   rj   )rH   rh   ©Zlstr   r   Ú	myfactory  s   
z7TreeBuilderTest.test_element_factory.<locals>.myfactoryr  rå   Ztoplevel)r2   rï   rë   rí   Úsample2rî   rk   )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 r€  )r2   rï   rë   rí   ru  rî   ri   ro  )r.   rT   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                   @   rÛ  )z@TreeBuilderTest.test_element_factory_subclass.<locals>.MyElementNrÜ  r   r   r   r   r=  4  rÞ  r=  )r2   rj   r  )r.   r=  r   r   r   Útest_element_factory_subclass3  s   z-TreeBuilderTest.test_element_factory_subclassc                 C   s4   t j}|  |jd¡ G dd„ d|tƒ}|  |¡ d S )Nr0   c                   @   rÛ  )zLTreeBuilderTest.test_element_factory_pure_python_subclass.<locals>.MyElementNrÜ  r   r   r   r   r=  A  rÞ  r=  )r2   Z_Element_Pyrk   r6   r»   r  )r.   Úbaser=  r   r   r   Ú)test_element_factory_pure_python_subclass8  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 rQ   ©Ú_doctype©r.   r_   ZpubidÚsystemr   r   r   ÚdoctypeI  r,  z;TreeBuilderTest.test_doctype.<locals>.DoctypeParser.doctypec                 S   rF  rQ   r“  r‹   r   r   r   rî   L  rH  z9TreeBuilderTest.test_doctype.<locals>.DoctypeParser.close)r5   r6   r7   r”  r—  rî   r   r   r   r   ÚDoctypeParserF  s    r˜  rå   ©rÒ  z&-//W3C//DTD XHTML 1.0 Transitional//ENz7http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd)r2   rë   rí   ru  rk   rî   )r.   r˜  rò   r   r   r   Útest_doctypeE  s   	
ÿzTreeBuilderTest.test_doctypec              	   C   s°   G dd„ dƒ}t j|ƒ d dD ] }|  t|¡ t j||ƒd W d   ƒ n1 s+w   Y  qt j|tdd dD ]}t j||tdd}| | j¡ |  | ¡ ¡ q<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 rQ   ©Úraise_inÚwhat)r.   rœ  r  r   r   r   rN  X  s   
zKTreeBuilderTest.test_builder_lookup_errors.<locals>.RaisingBuilder.__init__c                 S   s"   || j kr|  | j ¡‚dd„ }|S )Nc                  W   r>  rQ   r   )r   r   r   r   Úhandle_  r@  z^TreeBuilderTest.test_builder_lookup_errors.<locals>.RaisingBuilder.__getattr__.<locals>.handler›  )r.   r_   rž  r   r   r   Ú__getattr__\  s   
zNTreeBuilderTest.test_builder_lookup_errors.<locals>.RaisingBuilder.__getattr__)r5   r6   r7   r»   rN  rŸ  r   r   r   r   ÚRaisingBuilderW  s    r   rå   )r  r#   rþ   r/  rE  )r  )	r2   rë   r‚  r»   r  rí   ru  r±   rî   )r.   r   r  rò   r   r   r   Útest_builder_lookup_errorsV  s   ÿ€ýz*TreeBuilderTest.test_builder_lookup_errorsN)r5   r6   r7   ru  r  ro  rw  rz  r|  r~  r  r‚  r‰  rŠ  rŽ  r  r  r’  rš  r¡  r   r   r   r   rm  y  s$    $	rm  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 )NrC   r   ÚlineZ22)rk   rH   rg   rÓ  r   r   r   Ú_check_sample_elementy  s   z#XMLParserTest._check_sample_elementc                 C   s0   t jdt  ¡ d}| | j¡ |  | ¡ ¡ d S )Nr   )r9   ræ   )r2   rë   rï   rí   ru  r¤  rî   )r.   rV  r   r   r   Útest_constructor_args~  s
   ÿz#XMLParserTest.test_constructor_argsc                 C   s6   G dd„ dt jƒ}|ƒ }| | j¡ |  | ¡ ¡ d S )Nc                   @   rÛ  )z-XMLParserTest.test_subclass.<locals>.MyParserNrÜ  r   r   r   r   ÚMyParser…  rÞ  r¦  )r2   rë   rí   ru  r¤  rî   )r.   r¦  rò   r   r   r   r‰  „  s   zXMLParserTest.test_subclassc                 C   sV   t  ¡  t  dt¡ t ¡ }| | j¡ | ¡  W d   ƒ d S 1 s$w   Y  d S )NÚerror)	ÚwarningsÚcatch_warningsÚsimplefilterrË  r2   rë   rí   r  rî   r1  r   r   r   Útest_doctype_warning‹  s   

"üz"XMLParserTest.test_doctype_warningc                    s   d ‰ G ‡ fdd„dt jƒ}|ƒ }|  td¡ | | j¡ W d   ƒ n1 s'w   Y  | ¡  |  ˆ ¡ d  ‰ ‰t 	¡ 9 t 
dt¡ t 
dt¡ G ‡fdd„dƒ}||ƒ d}| | j¡ | ¡  |  ˆ ¡ |  ˆd¡ W d   ƒ d S 1 syw   Y  d S )	Nc                       r¨  )z@XMLParserTest.test_subclass_doctype.<locals>.MyParserWithDoctypec                    s   ||f‰ d S rQ   r   )r.   r   r   r“  r   r   r—  •  s   zHXMLParserTest.test_subclass_doctype.<locals>.MyParserWithDoctype.doctypeN©r5   r6   r7   r—  r   r“  r   r   ÚMyParserWithDoctype”  r­  r­  r—  r§  c                       r¨  )z:XMLParserTest.test_subclass_doctype.<locals>.DoctypeParserc                    s   |||f‰ d S rQ   r   r•  ©Ú	_doctype2r   r   r—  ¤  rV   zBXMLParserTest.test_subclass_doctype.<locals>.DoctypeParser.doctypeNr¬  r   r®  r   r   r˜  £  r­  r˜  rå   r™  )r2   rë   rc  ÚRuntimeWarningrí   r  rî   r±   r¨  r©  rª  rË  rk   )r.   r­  rò   r˜  r   )r”  r¯  r   Útest_subclass_doctype’  s*   ÿ


ÿ"ôz#XMLParserTest.test_subclass_doctypec                 C   st   	 t  ¡ + t  dt¡ t  dt¡ G dd„ dtjƒ}|ƒ }| | j¡ | 	¡  W d   ƒ d S 1 s3w   Y  d S )Nr§  c                   @   rÛ  )zDXMLParserTest.test_inherited_doctype.<locals>.MyParserWithoutDoctypeNrÜ  r   r   r   r   ÚMyParserWithoutDoctypeµ  rÞ  r²  )
r¨  r©  rª  rË  r°  r2   rë   rí   r  rî   )r.   r²  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 )Nrå   Zmoneyr…   u
   $Â£â‚¬ð…»)
r2   rë   rï   rí   Úsample3rî   rk   rH   rh   rg   r  r   r   r   Útest_parse_string»  s   zXMLParserTest.test_parse_stringN)r5   r6   r7   ru  r  r´  r¤  r¥  r‰  r«  r±  r³  rµ  r   r   r   r   r¢  p  s    r¢  c                   @   rP  )Ú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)r2   r£   ÚSAMPLE_XML_NS_ELEMSrk   rl   rš   )r.   r]  rì  r   r   r   Útest_find_with_namespaceÅ  s
   

z+NamespaceParseTest.test_find_with_namespaceN)r5   r6   r7   r¹  r   r   r   r   r¶  Ä  rQ  r¶  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   rF   r   rG   )rJ   r½   r   r   r   rK   Ð  rL   z1ElementSlicingTest._elem_tags.<locals>.<listcomp>r   )r.   Zelemlistr   r   r   Ú
_elem_tagsÏ  rO   zElementSlicingTest._elem_tagsc                 C   s   |   t|ƒ¡S rQ   )r»  rm   r2  r   r   r   Ú_subelem_tagsÒ  rO   z ElementSlicingTest._subelem_tagsc                 C   s.   	 t  d¡}t|ƒD ]
}t  |d| ¡ q
|S )Nr«   za%s)r2   rj   rÈ   r0  )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                      ó   ˆ d S )Né   r   r   rª  r   r   rr  å  ó    z?ElementSlicingTest.test_getslice_single_index.<locals>.<lambda>c                      rÁ  )Niôÿÿÿr   r   rª  r   r   rr  æ  rÃ  )r½  rk   rH   rº   Ú
IndexErrorr‹   r   rª  r   Útest_getslice_single_indexß  s
   
z-ElementSlicingTest.test_getslice_single_indexc                 C   sÂ   |   d¡}|  |  |dd … ¡g d¢¡ |  |  |dd… ¡g d¢¡ |  |  |dd… ¡g d¢¡ |  |  |dd… ¡ddg¡ |  |  |dd… ¡ddg¡ |  |  |d d	… ¡d
dg¡ d S )NrU  r[  )Úa3Úa4Úa5é   r(  rÆ  rÇ  rs  r¹   Úa0r¾  )r½  rk   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… ¡g 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 S )NrÆ   é   r·   rÀ  Úa9r[  )rÊ  rÆ  Za6rÍ  rÊ  r¾  rÆ  é@   ©r½  rk   r»  rW   ÚmaxsizerÓ  r   r   r   Útest_getslice_stepsò  s   
     (z&ElementSlicingTest.test_getslice_stepsc              	   C   s¼   |   d¡}|  |  |d d d… ¡g d¢¡ |  |  |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 )
NrD  rs  )rÆ  Úa2r¾  rÊ  r¿  rÆ  r¾  r[  r·   rÎ  rÏ  rÓ  r   r   r   Útest_getslice_negative_stepsü  s   
  "&*z/ElementSlicingTest.test_getslice_negative_stepsc                 C   sþ   |   d¡}|dd…= |  |  |¡ddg¡ |   d¡}|dd …= |  |  |¡g ¡ |   d¡}|d d d…= |  |  |¡g ¡ |   d¡}|d d d…= |  |  |¡ddg¡ |   d¡}|d	d d…= |  |  |¡ddg¡ |   d¡}|d d d…= |  |  |¡d
g¡ d S )NrD  r   r¹   rÒ  rÆ  rs  r¿  rÊ  r·   r¾  )r½  rk   r¼  rÓ  r   r   r   Útest_delslice  s$   







z ElementSlicingTest.test_delslicec                 C   sÜ   |   d¡}t d¡|d< |  |  |¡g d¢¡ t d¡|d< |  |  |¡g d¢¡ |  t¡ t d¡|d	< W d   ƒ n1 s@w   Y  |  t¡ t d¡|d
< W d   ƒ n1 s\w   Y  |  |  |¡g d¢¡ d S )NrD  r©   r·   ©rÊ  r©   rÒ  rÆ  r¬   r¿  )rÊ  r©   r¬   rÆ  rª   r(  éûÿÿÿ)r½  r2   rj   rk   r¼  rº   rÄ  rÓ  r   r   r   Útest_setslice_single_index  s   
ÿÿz-ElementSlicingTest.test_setslice_single_indexc                 C   s¬   |   d¡}dd„ tdƒD ƒ|dd…< |  |  |¡g d¢¡ |   d¡}t d¡g|dd…< |  |  |¡g d	¢¡ |   d¡}d
d„ tdƒD ƒ|dd…< |  |  |¡g d¢¡ d S )NrD  c                 S   ó   g | ]	}t  d | ¡‘qS ©zb%sr—  ©rJ   rÊ   r   r   r   rK   .  r  z:ElementSlicingTest.test_setslice_range.<locals>.<listcomp>r¹   r·   r[  )rÊ  Úb0Úb1rÆ  r©   )rÊ  r©   rÆ  c                 S   rØ  rÙ  r—  rÚ  r   r   r   rK   6  r  )rÊ  rÛ  rÜ  Úb2rÆ  )r½  rÈ   rk   r¼  r2   rj   rÓ  r   r   r   Útest_setslice_range,  s   


z&ElementSlicingTest.test_setslice_rangec                 C   sˆ  |   d¡}dd„ tdƒD ƒ|ddd…< |  |  |¡g d¢¡ |   d¡}|  t¡ t d¡g|ddd…< W d   ƒ n1 s>w   Y  |  t¡ d	d„ td
ƒD ƒ|ddd…< W d   ƒ n1 saw   Y  |  t¡ g |ddd…< W d   ƒ n1 s}w   Y  |  |  |¡g d¢¡ |   d¡}t d¡g|dd tj	…< |  |  |¡g d¢¡ t d¡g|dd tj	d> …< |  |  |¡g d¢¡ d S )NrU  c                 S   rØ  rÙ  r—  rÚ  r   r   r   rK   ;  r  z:ElementSlicingTest.test_setslice_steps.<locals>.<listcomp>r¹   r·   r(  )rÊ  rÛ  rÒ  rÜ  rÇ  rÈ  r©   c                 S   rØ  rÙ  r—  rÚ  r   r   r   rK   B  r  r[  )rÊ  r¾  rÒ  rÆ  rÇ  rÈ  rD  rÕ  r¬   rÎ  ©rÊ  r¬   rÒ  rÆ  ©
r½  rÈ   rk   r¼  rº   r»   r2   rj   rW   rÐ  rÓ  r   r   r   Útest_setslice_steps9  s&   

ÿÿÿ
z&ElementSlicingTest.test_setslice_stepsc                 C   sÀ  |   d¡}dd„ tdƒD ƒ|ddd…< |  |  |¡g d¢¡ |   d¡}|  t¡ t d¡g|ddd…< W d   ƒ n1 s>w   Y  |  t¡ d	d„ td
ƒD ƒ|ddd…< W d   ƒ n1 saw   Y  |  t¡ g |ddd…< W d   ƒ n1 s}w   Y  |  |  |¡g d¢¡ |   d¡}t d¡g|dd tj	 …< |  |  |¡g d¢¡ t d¡g|dd tj	 d …< |  |  |¡g d¢¡ t d¡g|dd tj	 d> …< |  |  |¡g d¢¡ d S )NrD  c                 S   rØ  rÙ  r—  rÚ  r   r   r   rK   O  r  zCElementSlicingTest.test_setslice_negative_steps.<locals>.<listcomp>r¹   r   rs  )rÊ  rÜ  rÛ  rÆ  r©   c                 S   rØ  rÙ  r—  rÚ  r   r   r   rK   V  r  r[  )rÊ  r¾  rÒ  rÆ  r·   rÕ  r¬   rß  rª   rÎ  )rÊ  rª   rÒ  rÆ  rà  rÓ  r   r   r   Útest_setslice_negative_stepsM  s*   

ÿÿÿ
z/ElementSlicingTest.test_setslice_negative_stepsN)r5   r6   r7   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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¡ dD ]-}|  |¡ |  t||dd¡ |  t|| ¡ dd¡ W d   ƒ n1 s:w   Y  qdD ]9}|  |¡* |  t||dd|  |¡¡ | ¡ }|  t||dd|  |¡¡ W d   ƒ n1 svw   Y  qBt  d¡}d	|_|  t|ƒd
¡ |  t|ddd¡ |  t|ddd¡ dD ]}|  t||dd|  |¡¡ q¢t  d¡}d	|jd< |  t|ƒd¡ |  t|ddd¡ |  t|ddd¡ dD ]}|  t||dd|  |¡¡ qÜt  d¡}d|_|  t|ƒd¡ |  t|ddd¡ |  t|ddd¡ dD ]}|  t||dd|  |¡¡ qt  d¡}d|jd< |  t|ƒd¡ |  t|ddd¡ |  t|ddd¡ dD ]}|  t||dd|  |¡¡ qOd S )NrH   r6  z<tag>abc</tag>)r   r™  rä   s   <tag>abc</tag>)rš  r   úutf-32z2<?xml version='1.0' encoding='%s'?>
<tag>abc</tag>z<&"'>z<tag>&lt;&amp;"'&gt;</tag>r   s   <tag>&lt;&amp;"'&gt;</tag>r™  z><?xml version='1.0' encoding='%s'?>
<tag>&lt;&amp;"'&gt;</tag>r‡   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;" />)rš  r   r¢  r¡  rä  u@   <?xml version='1.0' encoding='%s'?>
<tag key="Ã¥Ã¶Ã¶&lt;&gt;" />)	r2   rj   rg   rk   rE   r’  Úupperr"   rh   )r.   r@   Úencrå  r   r   r   rÑ  e  s¾   
ÿÿý€ÿþÿþû€
	ÿÿÿþ

ÿÿÿþ
ÿÿÿþ

ÿÿÿþÿzIOTest.test_encodingc                 C   sh   |   tjt¡ t t d¡¡}| t¡ ttdƒ}|  	| 
¡ d¡ W d   ƒ d S 1 s-w   Y  d S )Nõ   <site>Ã¸</site>r  ó   <site>&#248;</site>)r'  r   r(  r   r2   r(   r¢   r=   ré   rk   rê   ©r.   rD   rñ   r   r   r   Útest_write_to_filenameª  s   
"ÿzIOTest.test_write_to_filenamec                 C   s¸   |   tjt¡ t t d¡¡}|jtdd ttdƒ}|  	| 
¡ d¡ W d   ƒ n1 s.w   Y  |jtdd ttdƒ}|  	| 
¡ tdƒ¡ W d   ƒ d S 1 sUw   Y  d S )Nrç  r   rä   r  ó   <site>Ã¸</site>r‘  ó:   <?xml version='1.0' encoding='ISO-8859-1'?>
<site>ø</site>)r'  r   r(  r   r2   r(   r¢   r=   ré   rk   rê   r$   ré  r   r   r   Ú$test_write_to_filename_with_encoding±  s   ÿÿ"ÿz+IOTest.test_write_to_filename_with_encodingc                 C   s¦   |   tjt¡ ttdƒ}|j}W d   ƒ n1 sw   Y  t t¡ t t d¡¡}|j	tdd ttdƒ}|  
| ¡ d¡ W d   ƒ d S 1 sLw   Y  d S )Nrä  rç  r8   rä   r  rë  )r'  r   r(  r   ré   r9   r2   r(   r¢   r=   rk   rê   )r.   rñ   r9   rD   r   r   r   Ú!test_write_to_filename_as_unicode¾  s   ÿ
"ÿz(IOTest.test_write_to_filename_as_unicodec                 C   s¬  |   tjt¡ t t d¡¡}ttddd}|j|dd |  	|j
¡ W d   ƒ n1 s.w   Y  ttdƒ}|  | ¡ d¡ W d   ƒ n1 sKw   Y  ttddd	d
}|j|dd |  	|j
¡ W d   ƒ n1 spw   Y  ttdƒ}|  | ¡ d¡ W d   ƒ n1 sw   Y  ttddd}|j|dd |  	|j
¡ W d   ƒ n1 s±w   Y  ttdƒ}|  | ¡ d¡ W d   ƒ d S 1 sÏw   Y  d S )Nrç  rä  r   rä   r8   r  rë  r÷   Úxmlcharrefreplace)r9   Úerrorsrè  r‘  s   <site>ø</site>©r'  r   r(  r   r2   r(   r¢   ré   r=   r$  r%  rk   rê   ré  r   r   r   Útest_write_to_text_fileÉ  s.   þÿþÿþ"ÿzIOTest.test_write_to_text_filec                 C   sž   |   tjt¡ t t d¡¡}ttdƒ}| |¡ |  	|j
¡ W d   ƒ n1 s*w   Y  ttdƒ}|  | ¡ d¡ W d   ƒ d S 1 sHw   Y  d S )Nrç  r!  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   ƒ n1 s,w   Y  ttdƒ}|  | ¡ d¡ W d   ƒ n1 sIw   Y  ttdƒ}|j|dd |  	|j
¡ W d   ƒ n1 skw   Y  ttdƒ}|  | ¡ d¡ W d   ƒ d S 1 s‰w   Y  d S )	Nrç  r!  r   rä   r  rë  r‘  rì  rñ  ré  r   r   r   Ú'test_write_to_binary_file_with_encodingç  s$   þÿþ
ÿ"ÿz.IOTest.test_write_to_binary_file_with_encodingc                 C   s0  |   tjt¡ t t d¡¡}ttdƒ}|j|dd |  	|j
¡ W d   ƒ n1 s,w   Y  ttdƒ}|  | ¡ d d¡¡ W d   ƒ n1 sLw   Y  ttddd}|j|dd |  	|j
¡ W d   ƒ n1 spw   Y  ttdƒ}|  | ¡ d d¡¡ W d   ƒ d S 1 s‘w   Y  d S )	Nrç  r!  r   rä   r  u7   <?xml version='1.0' encoding='utf-16'?>
<site>Ã¸</site>r   )Ú	buffering)r'  r   r(  r   r2   r(   r¢   ré   r=   r$  r%  rk   rê   r"   ré  r   r   r   Ú"test_write_to_binary_file_with_bomø  s,   þ
þÿþ
þ"ÿz)IOTest.test_write_to_binary_file_with_bomc                 C   ó2   t  ¡ }t d¡}| |¡ |  | ¡ jd¡ d S ©Nz"<?xml version="1.0"?><site></site>Úsite)r2   r(   r:   r<   rç   rk   r‘   rH   ©r.   rD   rð   r   r   r   Útest_read_from_stringio  ó   

zIOTest.test_read_from_stringioc                 C   s:   t  t  d¡¡}t ¡ }|j|dd |  | ¡ d¡ d S ©Nrç  r8   rä   )r2   r(   r¢   r:   r<   r=   rk   r>   rú  r   r   r   Útest_write_to_stringio  s   zIOTest.test_write_to_stringioc                 C   r÷  ©Ns"   <?xml version="1.0"?><site></site>rù  )r2   r(   r:   r;   rç   rk   r‘   rH   ©r.   rD   r¾  r   r   r   Útest_read_from_bytesio  rü  zIOTest.test_read_from_bytesioc                 C   s6   t  t  d¡¡}t ¡ }| |¡ |  | ¡ d¡ d S ©Nrç  rè  )r2   r(   r¢   r:   r;   r=   rk   r>   r   r   r   r   Útest_write_to_bytesio  s   
zIOTest.test_write_to_bytesioc                   @   rÛ  )zIOTest.dummyNrÜ  r   r   r   r   Údummy$  rÞ  r  c                 C   sB   t  d¡}|  ¡ }|j|_t ¡ }| |¡ |  | ¡ j	d¡ d S rø  )
r:   r<   r  rê   r2   r(   rç   rk   r‘   rH   )r.   rð   ÚreaderrD   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 rý  )	r2   r(   r¢   r:   r<   r  r=   rk   r>   )r.   rD   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 rÿ  )
r:   r;   r  rê   r2   r(   rç   rk   r‘   rH   )r.   r¾  r  rD   r   r   r   Ú!test_read_from_user_binary_reader7  s   

z(IOTest.test_read_from_user_binary_readerc                 C   sF   t  t  d¡¡}t ¡ }|  ¡ }|j|_| |¡ |  | ¡ d¡ d S r  )	r2   r(   r¢   r:   r;   r  r=   rk   r>   ©r.   rD   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   rp  rã  r   r   r   r   r   rr  M  rs  zBIOTest.test_write_to_user_binary_writer_with_bom.<locals>.<lambda>r   rä   z0<?xml version='1.0' encoding='utf-16'?>
<site />)r2   r(   r¢   r:   r;   r  r=   ÚseekableÚtellrk   r>   r"   r
  r   r   r   Ú)test_write_to_user_binary_writer_with_bomH  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>r8   r  r   rö   )r2   r£   rk   rÜ   rù   rú   r  r   r   r   Útest_tostringlist_invariantT  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>r8   z<tag>a<x />b<y />c</tag>T)Zshort_empty_elementsFz<tag>a<x></x>b<y></y>c</tag>)r2   r£   rk   rÜ   r  r   r   r   Útest_short_empty_elements]  s   

þþþz IOTest.test_short_empty_elementsN)r5   r6   r7   rÑ  rê  rí  rî  rò  ró  rô  rö  rû  rþ  r  r  r  r  r  r	  r  r  r  r  r   r   r   r   rã  d  s*    E			rã  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚParseErrorTestc                 C   s   |   t ¡ t¡ d S rQ   )ri   r2   r&  rU  r‹   r   r   r   r‰  k  ry   zParseErrorTest.test_subclassc              
   C   s<   zt  |¡ W d S  t jy } z|W  Y d }~S d }~ww rQ   )r2   r£   r&  )r.   r›  r½   r   r   r   Ú
_get_errorn  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·   r(  zfoobar<)r·   rU  )rk   r  Zpositionr‹   r   r   r   Útest_error_positiont  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expatrð  rk   r  ÚcodeZcodesZXML_ERROR_SYNTAX)r.   ZERRORSr   r   r   Útest_error_codey  s   
ÿzParseErrorTest.test_error_codeN)r5   r6   r7   r‰  r  r  r  r   r   r   r   r  j  s
    r  c                   @   rP  )Ú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}|D ]}|  |jd¡ |  |j	t
ddd¡ q…t j|d dddid}|  |j	d d¡ |  td¡ t  dd¡ W d   ƒ n1 sÆw   Y  |  td¡ t jddd W d   ƒ d S 1 säw   Y  d S )Nz
<a>foo</a>r«   )Úpathrâ  )r  rÔ   râ  ú#rÍ   )ru  rq  )rh   )ru  )rq  r   r  Zkey1Zvalue1zmust be dict, not strzI'm not a dict)r2   r¢   rk   r˜   r›   rš   rm   r™   rj   rh   r\   rH   r0  r‚  r  )r.   rs   Úelementsr½   rÑ   r   r   r   Útest_issue14818‚  s>   
ÿÿÿÿûÿ"ÿzKeywordArgsTest.test_issue14818N)r5   r6   r7   r  r   r   r   r   r    s    r  c                   @   r&   )ÚNoAcceleratorTestc                 C   s   t st d¡‚d S )Nzonly for the Python version)rR   rd  rÊ  r‹   r   r   r   r)  ¤  s   
ÿzNoAcceleratorTest.setUpc                 C   s(   |   tjjtj¡ |   tjjtj¡ d S rQ   )ri   rR   rj   rN  ÚtypesÚFunctionTyperë   r‹   r   r   r   Útest_correct_import_pyET©  s   z*NoAcceleratorTest.test_correct_import_pyETN)r5   r6   r7   r)  r  r   r   r   r   r  £  s    r  c                 K   s   t j| fi |¤ŽS rQ   )rR   Úcanonicalize)r—  rB   r   r   r   Úc14n_roundtrip³  r%   r!  c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )ÚC14NTestNc                 C   s   |   tdƒd¡ |   tdƒd¡ |   tdƒd¡ |   tdƒd¡ |   td	ƒd
¡ |   tdƒd¡ |   tdƒd¡ |   tdƒd¡ |   tdƒd¡ |   tdƒd¡ |   tdƒd¡ |   tdƒd¡ d}|   t|ƒ|¡ d}|   t|ƒ|¡ d}|   t|ƒ|¡ d S )Nz<doc/>z<doc></doc>z<doc xmlns='uri'/>z<doc xmlns="uri"></doc>z <prefix:doc xmlns:prefix='uri'/>z,<prefix:doc xmlns:prefix="uri"></prefix:doc>z+<doc xmlns:prefix='uri'><prefix:bar/></doc>z7<doc><prefix:bar xmlns:prefix="uri"></prefix:bar></doc>z¢<elem xmlns:wsu='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd' xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' />z<elem></elem>z*<doc>Hello, world!<!-- Comment 1 --></doc>z<doc>Hello, world!</doc>z<value>&#x32;</value>z<value>2</value>zG<compute><![CDATA[value>"0" && value<"10" ?"valid":"error"]]></compute>zI<compute>value&gt;"0" &amp;&amp; value&lt;"10" ?"valid":"error"</compute>zS<compute expr='value>"0" &amp;&amp; value&lt;"10" ?"valid":"error"'>valid</compute>z{<compute expr="value>&quot;0&quot; &amp;&amp; value&lt;&quot;10&quot; ?&quot;valid&quot;:&quot;error&quot;">valid</compute>z7<norm attr=' &apos;   &#x20;&#13;&#xa;&#9;   &apos; '/>z/<norm attr=" '    &#xD;&#xA;&#x9;   ' "></norm>z6<normNames attr='   A   &#x20;&#13;&#xa;&#9;   B   '/>z=<normNames attr="   A    &#xD;&#xA;&#x9;   B   "></normNames>z7<normId id=' &apos;   &#x20;&#13;&#xa;&#9;   &apos; '/>z1<normId id=" '    &#xD;&#xA;&#x9;   ' "></normId>z5<X xmlns="http://nps/a"><Y targets="abc,xyz"></Y></X>zJ<X xmlns="http://nps/a"><Y xmlns="http://nsp/b" targets="abc,xyz"></Y></X>zN<X xmlns="http://nps/a"><Y xmlns:b="http://nsp/b" b:targets="abc,xyz"></Y></X>)rk   r!  rÐ  r   r   r   Útest_simple_roundtrip½  sP   
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿzC14NTest.test_simple_roundtripc                 C   sÒ   t  d¡}|  t|ddd¡ |  t|ddgdd¡ |  t|ddgd	d
¡ |  t|ddgdgdd¡ |  t|dddgd	d¡ |  t|ddgdd¡ |  t|dddgd	d¡ |  t|ddgdd¡ d S )Nzï        <root xmlns:x="http://example.com/x">
            <a x:attr="attrx">
                <b>abtext</b>
            </a>
            <b>btext</b>
            <c>
                <x:d>dtext</x:d>
            </c>
        </root>
        T)Ú
strip_textz‘<root><a xmlns:x="http://example.com/x" x:attr="attrx"><b>abtext</b></a><b>btext</b><c><x:d xmlns:x="http://example.com/x">dtext</x:d></c></root>z{http://example.com/x}attr)r$  Úexclude_attrszc<root><a><b>abtext</b></a><b>btext</b><c><x:d xmlns:x="http://example.com/x">dtext</x:d></c></root>z{http://example.com/x}d)r$  Úexclude_tagszb<root><a xmlns:x="http://example.com/x" x:attr="attrx"><b>abtext</b></a><b>btext</b><c></c></root>)r$  r%  r&  z4<root><a><b>abtext</b></a><b>btext</b><c></c></root>r«   r©   zC<root><c><x:d xmlns:x="http://example.com/x">dtext</x:d></c></root>)r&  za<root>
    
    
    <c>
        <x:d xmlns:x="http://example.com/x">dtext</x:d>
    </c>
</root>zI<root><a xmlns:x="http://example.com/x" x:attr="attrx"></a><c></c></root>zu<root>
    <a xmlns:x="http://example.com/x" x:attr="attrx">
        
    </a>
    
    <c>
        
    </c>
</root>)rS  rT  rk   r!  rÐ  r   r   r   Útest_c14n_exclusionå  sF   

þþþ
ÿýþþ	þþzC14NTest.test_c14n_exclusionc                    sô  t ddd}ttjj|ƒ‰dd„ tt |¡ƒD ƒ‰dd„ ˆD ƒ}‡fdd„ˆD ƒ‰ ‡ ‡fd	d„|D ƒ}|  d
tdd„ | 	¡ D ƒƒ¡ d/dd„}| 
¡ D ]+\}}|D ]#\}}||dƒdk}	||dƒdk}
||dƒdk}d|v rdd„ |d d  d¡D ƒ}dd„ |d d  d¡D ƒ}nd  }}d dd„ t| 
¡ ƒD ƒ¡}|  |› d|› d¡Ã |dkr¹|s¹|  d|› ¡ |d krÇ|sÇ|  d|› ¡ d|v rÞ|d d  d!¡d urÞ|  d"|› ¡ ˆ|d# ƒ}|d$kr$tˆd%ƒd&ƒ+}t|d&ƒ}t | ¡  d'| ¡ ¡¡}W d   ƒ n	1 sw   Y  W d   ƒ n	1 sw   Y  tj||	|
|||d(}tˆ|d# ƒd)d*d+}| ¡ }|d,krP| d-d.¡}| d-d.¡}W d   ƒ n	1 s[w   Y  |  ||¡ W d   ƒ n	1 sqw   Y  qRqKd S )0Nzc14n-20r   r   c                 S   s"   g | ]}|  d ¡r|dd… ‘qS )ú.xmlNrº  )Úendswith©rJ   Úfilenamer   r   r   rK   9  s    ÿz+C14NTest.test_xml_c14n2.<locals>.<listcomp>c                 S   s   g | ]	}|  d ¡r|‘qS )Úin)Ú
startswithr*  r   r   r   rK   ;  s    þÿc                    s8   i | ]}|  d ¡r|dd„ t ˆ |ƒd ¡ ¡ D ƒ“qS )Zc14nc                 S   s,   i | ]}|j  d ¡d |jpd ¡ |f“qS )ú}rs  r  )rH   Úsplitrg   r¼  )rJ   Úoptionr   r   r   Ú
<dictcomp>@  s    ÿþz6C14NTest.test_xml_c14n2.<locals>.<dictcomp>.<dictcomp>r(  )r-  r2   rç   r‘   r*  )Ú	full_pathr   r   r1  ?  s    ùýÿz+C14NTest.test_xml_c14n2.<locals>.<dictcomp>c                    s"   i | ]‰ ˆ ‡‡ fd d„ˆD ƒ“qS )c                    sJ   g | ]!}|  d ˆ› d¡r#| dd¡d ˆ v r|ˆ | dd¡d  f‘qS )Zout_rû   r·   rs  )r-  Úrsplitr*  )ÚconfigsÚ
input_filer   r   rK   J  s    ýýz6C14NTest.test_xml_c14n2.<locals>.<dictcomp>.<listcomp>r   )rJ   )r4  Úfiles)r5  r   r1  I  s    úþÿé   c                 S   s   g | ]	}|D ]}|‘qqS r   r   )rJ   Úoutput_filesÚoutput_filer   r   r   rK   T  s    þÿÿc                 S   s   |   ||df¡d S )Nr   r   ©r]   )ÚconfigZoption_namerÔ   r   r   r   Ú
get_optionX  ry   z+C14NTest.test_xml_c14n2.<locals>.get_optionZIgnoreCommentsÚtrueZTrimTextNodesZPrefixRewriteZ
sequentialZ
QNameAwarec                 S   ó(   g | ]}d |  d¡› d|  d¡› ‘qS ©ú{ZNSr.  ÚNamer:  rj  r   r   r   rK   d  ó    ÿÿr·   z/{http://www.w3.org/2010/xml-c14n2}QualifiedAttrc                 S   r>  r?  r:  rj  r   r   r   rK   i  rB  z){http://www.w3.org/2010/xml-c14n2}Elementú,c                 s   s:    | ]\}\}}|› d |pd  dd„ |D ƒ¡› V  qdS )ú=rC  c                 s   s     | ]}|j  d ¡d V  qdS )r.  rs  N)rH   r/  )rJ   r¬   r   r   r   Ú	<genexpr>s  s   € z4C14NTest.test_xml_c14n2.<locals>.<genexpr>.<genexpr>N)rù   )rJ   r_   r…   rn  r   r   r   rE  r  s
   € 
 ÿ
ÿz*C14NTest.test_xml_c14n2.<locals>.<genexpr>ú(ú)Z
inNsRedeclz2Redeclared namespace handling is not supported in ZinNsSuperfluousz.{http://www.w3.org/2010/xml-c14n2}XPathElementz2QName rewriting in XPath text is not supported in r(  ZinC14N5z	world.txtr  s   &ent2;)Z	from_fileZwith_commentsr$  Úrewrite_prefixesZqname_aware_tagsZqname_aware_attrsÚrr…  rä   ZinC14N3z attr="default"r  rQ   )r   r   r    r  rù   rÝ   Úlistdirrk   rl   ÚvaluesrŸ   rš   r’  ra  r˜   ré   r:   r;   rê   r   r2   r   )r.   ZdatadirZinput_filesZtestsr<  r5  r8  r9  r;  Zkeep_commentsr$  rH  ZqattrsZqtagsZconfig_descrrñ   Zentity_filerg   rw   r   )r4  r6  r2  r   Útest_xml_c14n25  s¸   ÿ
ú
ù
ÿ
ÿÿÿÿÿÿÿþÿþ

þÿÿÿÿÿ
ÿ€ÿû
€ûà€åÿzC14NTest.test_xml_c14n2)r5   r6   r7   ZmaxDiffr#  r'  rL  r   r   r   r   r"  ·  s
    (Pr"  c                 C   s6  t ddgda| d u rt} | attttttt	t
ttttttttttg}ttur-| tg¡ ddlm} tjj}| ¡ }|j}| ¡ |_ttdƒrQt tjtj ¡}nd }z't!j"|Ž  W ddlm} | #¡  | $|¡ ||_|d urutj|Ž  d  aad S ddlm} | #¡  | $|¡ ||_|d ur–tj|Ž  d  aaw )Nr0   r1   )Zblockedr   r+   Ú_set_factories)%r   rR   r2   r'   rº  rÃ  rõ  r&  rv   rã  r  rp  r;  rM  rf  rm  r¢  r  r€  r  r"  r•   r  r-   r,   r  Z_namespace_maprÎ   rÉ   r~   rM  r1  r¤   r   Zrun_unittestrœ   r  )ÚmoduleZtest_classesr,   r]  Z
nsmap_copyr*  Zold_factoriesr   r   r   Ú	test_mainœ  sj   ÿîÿ



ø


rO  Ú__main__)Tr8   rQ   )SrÎ   r   rÒ  r:   rÌ  rp   r    rX   r_  rW   rS  r  rd  r¨  rß  r   r   r   r   r   Ztest.supportr   r   r   r	   r
   r   Ztest.support.import_helperr   Ztest.support.os_helperr   rR   r2   rÄ   r"   ÚUnicodeEncodeErrorrÊ  rè   r»  rÃ   rR  rÛ  r¸  rØ  rÙ  r  r   r$   ZTestCaser'   rE   rN   rP   rv   r  rr  ÚformatÚescaper~  rp  r€  rÃ  rõ  r€   r#  Ú__hash__r%  r&  r;  rM  rf  rm  r¢  r¶  rº  rã  r  r  r  r!  r"  rO  r5   r   r   r   r   Ú<module>   sæ   
ÿ


	
          !  3	ú	 7  f d 48 z` xT
   $ 
f
E
ÿ