B
    u9aֵ              	   @   s  d dl mZmZmZmZmZ d dlZd dlmZ y
e  W n ek
rX   edY nX d dl	m
Z
mZmZmZmZmZ d dlmZ d dlmZmZ d dlmZmZmZ d d	lmZmZ d dlZd dlZd dlZd dl Z d d
l!m"Z" d dl#m$Z$ d dl%m&Z&m'Z'm(Z( e&dddZ)e&dddZ*ye)+d e*+d W n  e,k
rV   edY nX dZ-ej.j/sye$j0+e$j1 W n e2e3fk
r   dZ-Y nX e4e-dZ5dZ6G dd dej7Z8dAddZ9dBddZ:dCddZ;G d d! d!ej7Z<G d"d# d#ej7Z=G d$d% d%ej7Z>G d&d' d'ej7Z?G d(d) d)Z@G d*d+ d+e@ej7ZAG d,d- d-e@ej7ZBG d.d/ d/eBZCG d0d1 d1e@ej7ZDG d2d3 d3e@ej7ZEd4ZFG d5d6 d6ej7ZGeHe*d7ZIeIJ ZKW dQ R X G d8d9 d9e8ZLG d:d; d;ej7ZMG d<d= d=e8ZNd>d? ZOePd@kreO  dS )D    )make_parserContentHandlerSAXExceptionSAXReaderNotAvailableSAXParseExceptionN)mockzno XML parsers available)XMLGeneratorescapeunescape	quoteattrXMLFilterBaseprepare_input_source)create_parser)feature_namespacesfeature_external_ges)InputSourceAttributesImplAttributesNSImpl)BytesIOStringIO)URLError)support)findfilerun_unittestTESTFNztest.xmlZxmltestdata)Zsubdirztest.xml.outzutf-8z!filename is not encodable to utf8TFz$Requires non-ascii filenames supportz%http://www.python.org/xml-ns/saxtest/c               @   s$   e Zd Zdd Zdd Zdd ZdS )XmlTestBasec             C   s  |  t|jd |  t|jd |  t|jd |  t|jd |  t|jd | | d | |	 g  | |
 g  | t|d | d| | t| g  | |dd  | |ddd | t| g  | t| g  d S )Nattrr   attrs   )assertRaisesKeyErrorgetValuegetValueByQNamegetNameByQNamegetQNameByName__getitem__assertEqual	getLengthgetNames	getQNameslenassertNotInlistkeysgetitemsvalues)selfr    r2   /usr/lib/python3.7/test_sax.pyverify_empty_attrs2   s    zXmlTestBase.verify_empty_attrsc             C   s  |  t|jtdf |  t|jd |  t|jd |  t|jtdf |  t|jtdf | |	 d | |
 g  | | g  | t|d | tdf| | t| g  | |tdfd  | |tdfdd | t| g  | t| g  d S )Nr   zns:attrr   r   )r   r    r!   ns_urir"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   )r1   r   r2   r2   r3   verify_empty_nsattrsC   s    z XmlTestBase.verify_empty_nsattrsc             C   s  |  | d |  | dg |  | dg |  t|d | d| |  t| dg |  |dd |  |ddd |  t|	 dg |  t|
 dg |  |dd |  |dd |  |dd |  |d d |  |dd d S )N   r   valr   )r   r8   )r&   r'   r(   r)   r*   assertInr,   r-   r.   r/   r0   r!   r"   r#   r$   )r1   r   r2   r2   r3   verify_attrs_wattrT   s    zXmlTestBase.verify_attrs_wattrN)__name__
__module____qualname__r4   r6   r:   r2   r2   r2   r3   r   1   s   r   c             C   s   |d kr| S d|| f S )Nz&<?xml version="1.0" encoding="%s"?>
%sr2   )docencodingr2   r2   r3   xml_strf   s    r@   .c             C   s   |dkr|}t | ||dS )N.xmlcharrefreplace)r@   encode)r>   r?   decl_encodingr2   r2   r3   	xml_bytesk   s    rD   c          	   C   s<   |dkr|}t td|dd}|t| | W d Q R X d S )N.wrA   )r?   errors)openr   writer@   )r>   r?   rC   fr2   r2   r3   make_xml_filep   s    rJ   c               @   sX   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd ZdS )	ParseTestu,   <money value="$£€𐅻">$£€𐅻</money>c             C   s   t t d S )N)r   unlinkr   )r1   r2   r2   r3   tearDownz   s    zParseTest.tearDownc             C   s>   ddl m} t }||t|d | | t| jd d S )Nr   )parsezutf-8)xml.saxrN   r   r   r&   getvaluer@   data)r1   rI   rN   resultr2   r2   r3   check_parse}   s    zParseTest.check_parsec          
   C   s   d}x|D ]}|  tt| j| t| j| ttd|d}|  | W d Q R X |  t| j t| j|d  ttd|d}|  | W d Q R X q
W d S )N)zus-asciiz
iso-8859-1zutf-8zutf-16zutf-16lezutf-16ber)r?   )rS   r   r@   rQ   rJ   rG   r   )r1   	encodingsr?   rI   r2   r2   r3   test_parse_text   s    
zParseTest.test_parse_textc          
   C   s0  d}x|D ]}|  tt| j| t| j| |  t ttd}|  | W d Q R X |  tt| j|d  t| j|d  |  t ttd}|  | W d Q R X q
W |  tt| jdd t| jdd |  t ttd}|  | W d Q R X |  tt| jdd  t| jdd  |  t ttd}|  | W d Q R X |  tt| jd t| jd |  t ttd}|  | W d Q R X | t |  tt| jdd  W d Q R X t| jdd  | t |  t W d Q R X ttd&}| t |  | W d Q R X W d Q R X d S )N)zus-asciizutf-8zutf-16zutf-16lezutf-16berbz	utf-8-sigzutf-8z
iso-8859-1)	rS   r   rD   rQ   rJ   r   rG   r   r   )r1   rU   r?   rI   r2   r2   r3   test_parse_bytes   sF    





"zParseTest.test_parse_bytesc          	   C   sL   t | jdd  ttd*}t }|| |d | | W d Q R X d S )Nz
iso-8859-1rW   )rJ   rQ   rG   r   r   setByteStreamZsetEncodingrS   )r1   rI   inputr2   r2   r3   test_parse_InputSource   s    

z ParseTest.test_parse_InputSourcec          
      sn   t  d  fdd}tjd|d@ t| jdd  | t | t W d Q R X | 	j
 W d Q R X d S )Nc                 s    |  S )Nr2   )args)builtin_openfileobjr2   r3   	mock_open   s    z4ParseTest.test_parse_close_source.<locals>.mock_openzxml.sax.saxutils.open)Zside_effectz
iso-8859-1)rG   r   ZpatchrJ   rQ   r   r   rS   r   
assertTrueclosed)r1   r_   r2   )r]   r^   r3   test_parse_close_source   s    z!ParseTest.test_parse_close_sourcec             C   s>   ddl m} t }||t|d | | t| jd d S )Nr   )parseStringzutf-8)rO   rc   r   r   r&   rP   r@   rQ   )r1   src   rR   r2   r2   r3   check_parseString   s    zParseTest.check_parseStringc             C   s4   d}x|D ]}|  t| j| q
W |  | j d S )N)zus-asciiz
iso-8859-1zutf-8zutf-16zutf-16lezutf-16be)re   r@   rQ   )r1   rU   r?   r2   r2   r3   test_parseString_text   s    
zParseTest.test_parseString_textc          	   C   s   d}x2|D ]*}|  t| j| |  t| j|d  q
W |  t| jdd |  t| jdd  |  t| jd | t |  t| jdd  W d Q R X d S )N)zus-asciizutf-8zutf-16zutf-16lezutf-16bez	utf-8-sigzutf-8z
iso-8859-1)re   rD   rQ   r   r   )r1   rU   r?   r2   r2   r3   test_parseString_bytes   s    
z ParseTest.test_parseString_bytesN)r;   r<   r=   rQ   rM   rS   rV   rX   r[   rb   re   rf   rg   r2   r2   r2   r3   rK   w   s   *	rK   c               @   s   e Zd Zdd ZdS )MakeParserTestc             C   sp   ddl m} | }ddl m} | }ddl m} | }ddl m} | }ddl m} | }ddl m} | }d S )Nr   )r   )rO   r   )r1   r   pr2   r2   r3   test_make_parser2   s    z MakeParserTest.test_make_parser2N)r;   r<   r=   rj   r2   r2   r2   r3   rh      s   rh   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 )SaxutilsTestc             C   s   |  tdd d S )NzDonald Duck & CozDonald Duck &amp; Co)r&   r	   )r1   r2   r2   r3   test_escape_basic
  s    zSaxutilsTest.test_escape_basicc             C   s   |  tdd d S )Nz<Donald Duck & Co>z&lt;Donald Duck &amp; Co&gt;)r&   r	   )r1   r2   r2   r3   test_escape_all  s    
zSaxutilsTest.test_escape_allc             C   s   |  tdddid d S )Nu   Hei på deg   åz&aring;zHei p&aring; deg)r&   r	   )r1   r2   r2   r3   test_escape_extra  s    zSaxutilsTest.test_escape_extrac             C   s   |  tdd d S )NzDonald Duck &amp; CozDonald Duck & Co)r&   r
   )r1   r2   r2   r3   test_unescape_basic  s    z SaxutilsTest.test_unescape_basicc             C   s   |  tdd d S )Nz&lt;Donald Duck &amp; Co&gt;z<Donald Duck & Co>)r&   r
   )r1   r2   r2   r3   test_unescape_all  s    
zSaxutilsTest.test_unescape_allc             C   s   |  tdddid d S )Nu   Hei på degrn   z&aring;zHei p&aring; deg)r&   r
   )r1   r2   r2   r3   test_unescape_extra  s    z SaxutilsTest.test_unescape_extrac             C   s   |  tdddid d S )Nz	&amp;foo;z&foo;Zsplat)r&   r
   )r1   r2   r2   r3   test_unescape_amp_extra!  s    z$SaxutilsTest.test_unescape_amp_extrac             C   s   |  tdd d S )NzDonald Duck & Coz"Donald Duck &amp; Co")r&   r   )r1   r2   r2   r3   test_quoteattr_basic%  s    
z!SaxutilsTest.test_quoteattr_basicc             C   s   |  tdd d S )NzIncludes "double" quotesz'Includes "double" quotes')r&   r   )r1   r2   r2   r3   test_single_quoteattr)  s    
z"SaxutilsTest.test_single_quoteattrc             C   s   |  tdd d S )NzIncludes 'single' quotesz"Includes 'single' quotes")r&   r   )r1   r2   r2   r3   test_double_quoteattr-  s    
z"SaxutilsTest.test_double_quoteattrc             C   s   |  tdd d S )Nz%Includes 'single' and "double" quotesz1"Includes 'single' and &quot;double&quot; quotes")r&   r   )r1   r2   r2   r3   test_single_double_quoteattr1  s    
z)SaxutilsTest.test_single_double_quoteattrc             C   s   t dg}d S )Nzxml.parsers.no_such_parser)r   )r1   ri   r2   r2   r3   test_make_parser6  s    zSaxutilsTest.test_make_parserN)r;   r<   r=   rl   rm   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   r2   r2   r2   r3   rk     s   rk   c               @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )PrepareInputSourceTestc          	   C   s.   t j| _t| jd}|d W d Q R X d S )NrE   zThis was read from a file.)r   r   filerG   rH   )r1   Ztmpr2   r2   r3   setUp>  s    zPrepareInputSourceTest.setUpc             C   s   t | j d S )N)r   rL   rz   )r1   r2   r2   r3   rM   C  s    zPrepareInputSourceTest.tearDownc             C   s   t dS )Ns   This is a byte stream.)r   )r1   r2   r2   r3   make_byte_streamF  s    z'PrepareInputSourceTest.make_byte_streamc             C   s   t dS )NzThis is a character stream.)r   )r1   r2   r2   r3   make_character_streamI  s    z,PrepareInputSourceTest.make_character_streamc             C   s&   |  | | | | |  d S )N)ZassertIsNotNoner&   readclose)r1   streamcontentr2   r2   r3   checkContentL  s    
z#PrepareInputSourceTest.checkContentc             C   sB   t | j}||   t|}| |  | | d d S )NzThis is a character stream.)	r   rz   setCharacterStreamr}   r   assertIsNonegetByteStreamr   getCharacterStream)r1   srcprepr2   r2   r3   test_character_streamR  s    

z,PrepareInputSourceTest.test_character_streamc             C   sB   t | j}||   t|}| |  | | d d S )Ns   This is a byte stream.)	r   rz   rY   r|   r   r   r   r   r   )r1   r   r   r2   r2   r3   test_byte_stream[  s    

z'PrepareInputSourceTest.test_byte_streamc             C   s4   t | j}t|}| |  | | d d S )Ns   This was read from a file.)r   rz   r   r   r   r   r   )r1   r   r   r2   r2   r3   test_system_ide  s
    

z%PrepareInputSourceTest.test_system_idc             C   s,   t | j}| |  | | d d S )Ns   This was read from a file.)r   rz   r   r   r   r   )r1   r   r2   r2   r3   test_stringn  s    

z"PrepareInputSourceTest.test_stringc             C   s.   t |  }| |  | | d d S )Ns   This is a byte stream.)r   r|   r   r   r   r   )r1   r   r2   r2   r3   test_binary_fileu  s    
z'PrepareInputSourceTest.test_binary_filec             C   s.   t |  }| |  | | d d S )NzThis is a character stream.)r   r}   r   r   r   r   )r1   r   r2   r2   r3   test_text_file}  s    
z%PrepareInputSourceTest.test_text_fileN)r;   r<   r=   r{   rM   r|   r}   r   r   r   r   r   r   r   r2   r2   r2   r3   ry   <  s   	
	ry   c               @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Z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d1S )2
XmlgenTestc             C   sP   |   }t|}|  |di  |d |  | | | d d S )Nr>   z<doc></doc>)	ioclassr   startDocumentstartElement
endElementendDocumentr&   rP   xml)r1   rR   genr2   r2   r3   test_xmlgen_basic  s    
zXmlgenTest.test_xmlgen_basicc             C   sT   |   }t|dd}|  |di  |d |  | | | d d S )NT)short_empty_elementsr>   z<doc/>)	r   r   r   r   r   r   r&   rP   r   )r1   rR   r   r2   r2   r3   test_xmlgen_basic_empty  s    
z"XmlgenTest.test_xmlgen_basic_emptyc             C   sZ   |   }t|}|  |di  |d |d |  | | | 	d d S )Nr>   huheiz<doc>huhei</doc>)
r   r   r   r   
charactersr   r   r&   rP   r   )r1   rR   r   r2   r2   r3   test_xmlgen_content  s    

zXmlgenTest.test_xmlgen_contentc             C   s^   |   }t|dd}|  |di  |d |d |  | | | 	d d S )NT)r   r>   r   z<doc>huhei</doc>)
r   r   r   r   r   r   r   r&   rP   r   )r1   rR   r   r2   r2   r3   test_xmlgen_content_empty  s    

z$XmlgenTest.test_xmlgen_content_emptyc             C   s\   |   }t|}|  |dd |di  |d |  | | | 	d d S )NtestrQ   r>   z<?test data?><doc></doc>)
r   r   r   ZprocessingInstructionr   r   r   r&   rP   r   )r1   rR   r   r2   r2   r3   test_xmlgen_pi  s    

zXmlgenTest.test_xmlgen_pic             C   sZ   |   }t|}|  |di  |d |d |  | | | 	d d S )Nr>   z<huhei&z<doc>&lt;huhei&amp;</doc>)
r   r   r   r   r   r   r   r&   rP   r   )r1   rR   r   r2   r2   r3   test_xmlgen_content_escape  s    


z%XmlgenTest.test_xmlgen_content_escapec             C   s   |   }t|}|  |dddi |dddi |d |dddi |d |dddi |d |d |  | | | d d S )	Nr>   a"e'z'"z
	zK<doc a='"'><e a="'"></e><e a="'&quot;"></e><e a="&#10;&#13;&#9;"></e></doc>)	r   r   r   r   r   r   r&   rP   r   )r1   rR   r   r2   r2   r3   test_xmlgen_attr_escape  s    



z"XmlgenTest.test_xmlgen_attr_escapec             C   sx   d}xn|D ]f}|   }t||d}|  |dddi |d |d |  | | | j	d|d q
W d S )N)	ziso-8859-15zutf-8z	utf-8-sigzutf-16zutf-16bezutf-16lezutf-32zutf-32bezutf-32le)r?   r>   r   u   €u   <doc a="€">€</doc>)
r   r   r   r   r   r   r   r&   rP   r   )r1   rU   r?   rR   r   r2   r2   r3   test_xmlgen_encoding  s    



zXmlgenTest.test_xmlgen_encodingc             C   sf   |   }t|dd}|  |dddi |d |d |  | | | j	ddd d S )Nascii)r?   r>   r   u   €z<doc a="&#8364;">&#8364;</doc>)
r   r   r   r   r   r   r   r&   rP   r   )r1   rR   r   r2   r2   r3   test_xmlgen_unencodable  s    


z"XmlgenTest.test_xmlgen_unencodablec             C   sZ   |   }t|}|  |di  |d |d |  | | | 	d d S )Nr>    z<doc> </doc>)
r   r   r   r   ignorableWhitespacer   r   r&   rP   r   )r1   rR   r   r2   r2   r3   test_xmlgen_ignorable  s    

z XmlgenTest.test_xmlgen_ignorablec             C   s^   |   }t|dd}|  |di  |d |d |  | | | 	d d S )NT)r   r>   r   z<doc> </doc>)
r   r   r   r   r   r   r   r&   rP   r   )r1   rR   r   r2   r2   r3   test_xmlgen_ignorable_empty  s    

z&XmlgenTest.test_xmlgen_ignorable_emptyc             C   s   d}x|D ]|}|   }t||d}|  |dddi |d| |d| |d |  | 	|
 | jd|d q
W d S )N)	ziso-8859-15zutf-8z	utf-8-sigzutf-16zutf-16bezutf-16lezutf-32zutf-32bezutf-32le)r?   r>   r   u   €r   u   <doc a="€">€ </doc>)r   r   r   r   r   rB   r   r   r   r&   rP   r   )r1   rU   r?   rR   r   r2   r2   r3   test_xmlgen_encoding_bytes  s    


z%XmlgenTest.test_xmlgen_encoding_bytesc             C   s   |   }t|}|  |dt |tdfdi  |dd i  |dd  |tdfd |d |  | 	|
 | dt  d S )Nns1r>   zns1:doc)Nudocz/<ns1:doc xmlns:ns1="%s"><udoc></udoc></ns1:doc>)r   r   r   startPrefixMappingr5   startElementNSendElementNSendPrefixMappingr   r&   rP   r   )r1   rR   r   r2   r2   r3   test_xmlgen_ns+  s    
zXmlgenTest.test_xmlgen_nsc             C   s   |   }t|dd}|  |dt |tdfdi  |dd i  |dd  |tdfd |d |  | 	|
 | dt  d S )NT)r   r   r>   zns1:doc)Nr   z)<ns1:doc xmlns:ns1="%s"><udoc/></ns1:doc>)r   r   r   r   r5   r   r   r   r   r&   rP   r   )r1   rR   r   r2   r2   r3   test_xmlgen_ns_empty=  s    
zXmlgenTest.test_xmlgen_ns_emptyc             C   sX   |   }t|}|  |ddddi |dd |  | | | d d S )N)Nr   r   )Nbcz<a b="c"></a>)	r   r   r   r   r   r   r&   rP   r   )r1   rR   r   r2   r2   r3   test_1463026_1O  s    zXmlgenTest.test_1463026_1c             C   s\   |   }t|dd}|  |ddddi |dd |  | | | d d S )NT)r   )Nr   r   )Nr   r   z
<a b="c"/>)	r   r   r   r   r   r   r&   rP   r   )r1   rR   r   r2   r2   r3   test_1463026_1_emptyZ  s    zXmlgenTest.test_1463026_1_emptyc             C   sj   |   }t|}|  |d d |ddi  |dd |d  |  | |	 | 
d d S )Nqux)r   r   r   z<a xmlns="qux"></a>)r   r   r   r   r   r   r   r   r&   rP   r   )r1   rR   r   r2   r2   r3   test_1463026_2e  s    
zXmlgenTest.test_1463026_2c             C   sn   |   }t|dd}|  |d d |ddi  |dd |d  |  | |	 | 
d d S )NT)r   r   )r   r   r   z<a xmlns="qux"/>)r   r   r   r   r   r   r   r   r&   rP   r   )r1   rR   r   r2   r2   r3   test_1463026_2_emptyr  s    
zXmlgenTest.test_1463026_2_emptyc             C   sn   |   }t|}|  |dd |ddddi |dd |d |  | |	 | 
d d S )Nmyr   )r   r   r   )Nr   r   z"<my:a xmlns:my="qux" b="c"></my:a>)r   r   r   r   r   r   r   r   r&   rP   r   )r1   rR   r   r2   r2   r3   test_1463026_3  s    

zXmlgenTest.test_1463026_3c             C   sr   |   }t|dd}|  |dd |ddddi |dd |d |  | |	 | 
d	 d S )
NT)r   r   r   )r   r   r   )Nr   r   z<my:a xmlns:my="qux" b="c"/>)r   r   r   r   r   r   r   r   r&   rP   r   )r1   rR   r   r2   r2   r3   test_1463026_3_empty  s    

zXmlgenTest.test_1463026_3_emptyc             C   sX   t d}t }|td |  }t|}|| || | |	 | 
d d S )Nzb<?xml version="1.0"?><a:g1 xmlns:a="http://example.com/ns"><a:g2 xml:lang="en">Hello</a:g2></a:g1>TzM<a:g1 xmlns:a="http://example.com/ns"><a:g2 xml:lang="en">Hello</a:g2></a:g1>)r   r   
setFeaturer   r   r   setContentHandlerrN   r&   rP   r   )r1   Ztest_xmlparserrR   r   r2   r2   r3   test_5027_1  s    


zXmlgenTest.test_5027_1c             C   s   |   }t|}|  |dd |ddi  ddi}|dd| |d	 |dd |dd |d |  | 	|
 | d
 d S )Nr   zhttp://example.com/ns)zhttp://example.com/nsg1r   )z$http://www.w3.org/XML/1998/namespacelangen)zhttp://example.com/nsg2r   HellozM<a:g1 xmlns:a="http://example.com/ns"><a:g2 xml:lang="en">Hello</a:g2></a:g1>)r   r   r   r   r   r   r   r   r   r&   rP   r   )r1   rR   r   Z	lang_attrr2   r2   r3   test_5027_2  s    


zXmlgenTest.test_5027_2c             C   s(   |   }dd }|| | |j d S )Nc             S   s    t | }|  |di  d S )Nr>   )r   r   r   )outr   r2   r2   r3   func  s    z+XmlgenTest.test_no_close_file.<locals>.func)r   ZassertFalsera   )r1   rR   r   r2   r2   r3   test_no_close_file  s    zXmlgenTest.test_no_close_filec             C   sz   |   }t|}|dddi |d |d |dddi |d | | | dt| d	d   d S )
NZfoor   z1.0r   Zbarr   z2.0z+<foo a="1.0">Hello</foo><bar b="2.0"></bar> )	r   r   r   r   r   r&   rP   r   r*   )r1   rR   r   r2   r2   r3   test_xmlgen_fragment  s    



zXmlgenTest.test_xmlgen_fragmentN)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   r   r2   r2   r2   r3   r     s0   

	r   c               @   s   e Zd ZeZdddZdZdS )StringXmlgenTest
iso-8859-1c             C   s   d||f S )Nz&<?xml version="1.0" encoding="%s"?>
%sr2   )r1   r>   r?   r2   r2   r3   r     s    zStringXmlgenTest.xmlN)r   )r;   r<   r=   r   r   r   r   r2   r2   r2   r3   r     s   
r   c               @   s   e Zd ZeZdddZdS )BytesXmlgenTest
iso-8859-1c             C   s   d||f  |dS )Nz&<?xml version="1.0" encoding="%s"?>
%srA   )rB   )r1   r>   r?   r2   r2   r3   r     s    zBytesXmlgenTest.xmlN)r   )r;   r<   r=   r   r   r   r2   r2   r2   r3   r     s   r   c               @   s   e Zd ZG dd deZdS )WriterXmlgenTestc               @   s.   e Zd ZejZdZdd Zdd Zdd Z	dS )	zWriterXmlgenTest.ioclassFc             C   s   dS )NTr2   )r1   r2   r2   r3   seekable  s    z!WriterXmlgenTest.ioclass.seekablec             C   s   t | S )N)r*   )r1   r2   r2   r3   tell   s    zWriterXmlgenTest.ioclass.tellc             C   s
   d | S )N    )join)r1   r2   r2   r3   rP     s    z!WriterXmlgenTest.ioclass.getvalueN)
r;   r<   r=   r,   appendrH   ra   r   r   rP   r2   r2   r2   r3   r     s
   r   N)r;   r<   r=   r,   r   r2   r2   r2   r3   r     s   r   c               @   s   e Zd Zdd ZdddZdS )StreamWriterXmlgenTestc             C   s"   t  }td|d}|j|_|S )Nr   rA   )r   codecs	getwriterrP   )r1   rawwriterr2   r2   r3   r     s    zStreamWriterXmlgenTest.ioclass
iso-8859-1c             C   s   d||f  ddS )Nz&<?xml version="1.0" encoding="%s"?>
%sr   rA   )rB   )r1   r>   r?   r2   r2   r3   r     s    zStreamWriterXmlgenTest.xmlN)r   )r;   r<   r=   r   r   r2   r2   r2   r3   r     s   r   c               @   s(   e Zd Zejd Zdd ZdddZdS )	StreamReaderWriterXmlgenTestz-codecsc                sD   t j jddddd fdd} | fdd	}|_S )
NrE   r   rA   r   )r?   rF   	bufferingc                  s      t j d S )N)r   r   rL   fnamer2   )r1   r   r2   r3   cleanup  s    z5StreamReaderWriterXmlgenTest.ioclass.<locals>.cleanupc           	      s(       t jd
} |  S Q R X d S )NrW   )r   rG   namer~   )rI   )r   r2   r3   rP     s    z6StreamReaderWriterXmlgenTest.ioclass.<locals>.getvalue)r   rG   r   
addCleanuprP   )r1   r   rP   r2   )r1   r   r3   r     s    

z$StreamReaderWriterXmlgenTest.ioclass
iso-8859-1c             C   s   d||f  ddS )Nz&<?xml version="1.0" encoding="%s"?>
%sr   rA   )rB   )r1   r>   r?   r2   r2   r3   r   $  s    z StreamReaderWriterXmlgenTest.xmlN)r   )r;   r<   r=   r   r   r   r   r   r2   r2   r2   r3   r     s   
r   s,   <?xml version="1.0" encoding="iso-8859-1"?>
c               @   s   e Zd Zdd ZdS )XMLFilterBaseTestc             C   sp   t  }t|}t }|| |  |di  |d |d |d |	  | 
| td  d S )Nr>   r   r   s   <doc>content </doc>)r   r   r   r   r   r   r   r   r   r   r&   rP   start)r1   rR   r   filterr2   r2   r3   test_filter_basic,  s    



z#XMLFilterBaseTest.test_filter_basicN)r;   r<   r=   r   r2   r2   r2   r3   r   +  s   r   rW   c               @   s  e Zd Zdd Zdd Zedd Zdd Zd	d
 ZG dd dZ	G dd dZ
dd Zdd Zdd ZG dd dZdd Zdd ZG dd deZdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zed)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zed7d8 Z d9S ):ExpatReaderTestc          	   C   sR   t  }t }t|}|| ttd}|| W d Q R X | | t	 d S )NrW   )
r   r   r   r   rG   TEST_XMLFILErN   r&   rP   xml_test_out)r1   r   rR   xmlgenrI   r2   r2   r3   test_expat_binary_fileH  s    
z&ExpatReaderTest.test_expat_binary_filec          	   C   sV   t  }t }t|}|| ttddd}|| W d Q R X | | t	 d S )Nrtz
iso-8859-1)r?   )
r   r   r   r   rG   r   rN   r&   rP   r   )r1   r   rR   r   rI   r2   r2   r3   test_expat_text_fileS  s    
z$ExpatReaderTest.test_expat_text_filec             C   sb   t j}tt| | t j| t }t }t	|}|
| |t|d | | t d S )NrW   )r   TESTFN_UNICODEshutilcopyfiler   r   rL   r   r   r   r   rN   rG   r&   rP   r   )r1   r   r   rR   r   r2   r2   r3   test_expat_binary_file_nonascii^  s    
z/ExpatReaderTest.test_expat_binary_file_nonasciic          	   C   s\   t t}t }t }t|}|| t|d}|| W d Q R X | 	|
 t d S )NrW   )osfsencoder   r   r   r   r   rG   rN   r&   rP   r   )r1   r   r   rR   r   rI   r2   r2   r3   !test_expat_binary_file_bytes_namem  s    

z1ExpatReaderTest.test_expat_binary_file_bytes_namec          
   C   sp   t  }t }t|}|| ttd.}t| ddd}|| W d Q R X W d Q R X | |	 t
 d S )NrW   F)closefd)r   r   r   r   rG   r   filenorN   r&   rP   r   )r1   r   rR   r   rI   f2r2   r2   r3   test_expat_binary_file_int_namey  s    
z/ExpatReaderTest.test_expat_binary_file_int_namec               @   s$   e Zd Zdd Zdd Zdd ZdS )zExpatReaderTest.TestDTDHandlerc             C   s   g | _ g | _d S )N)
_notations	_entities)r1   r2   r2   r3   __init__  s    z'ExpatReaderTest.TestDTDHandler.__init__c             C   s   | j |||f d S )N)r   r   )r1   r   publicIdsystemIdr2   r2   r3   notationDecl  s    z+ExpatReaderTest.TestDTDHandler.notationDeclc             C   s   | j ||||f d S )N)r   r   )r1   r   r   r   Zndatar2   r2   r3   unparsedEntityDecl  s    z1ExpatReaderTest.TestDTDHandler.unparsedEntityDeclN)r;   r<   r=   r   r  r  r2   r2   r2   r3   TestDTDHandler  s   r  c               @   s   e Zd Zdd Zdd ZdS )z"ExpatReaderTest.TestEntityRecorderc             C   s
   g | _ d S )N)entities)r1   r2   r2   r3   r     s    z+ExpatReaderTest.TestEntityRecorder.__init__c             C   s.   | j ||f t }|| || |S )N)r  r   r   ZsetPublicIdsetSystemId)r1   r   r   sourcer2   r2   r3   resolveEntity  s
    

z0ExpatReaderTest.TestEntityRecorder.resolveEntityN)r;   r<   r=   r   r  r2   r2   r2   r3   TestEntityRecorder  s   r  c             C   sv   t  }|  }|| |d |d |d |d |d |  | |jdg | |jdg d S )Nz<!DOCTYPE doc [
z-  <!ENTITY img SYSTEM "expat.gif" NDATA GIF>
zW  <!NOTATION GIF PUBLIC "-//CompuServe//NOTATION Graphics Interchange Format 89a//EN">
z]>
z<doc></doc>)GIFz;-//CompuServe//NOTATION Graphics Interchange Format 89a//ENN)ZimgNz	expat.gifr	  )r   r  ZsetDTDHandlerfeedr   r&   r   r   )r1   r   Zhandlerr2   r2   r3   test_expat_dtdhandler  s    





z%ExpatReaderTest.test_expat_dtdhandlerc          	   C   sX   t  }|td |  }|| | t |d W d Q R X | |j	dg d S )NTz8<!DOCTYPE external SYSTEM "unsupported://non-existing">
)Nzunsupported://non-existing)
r   r   r   r  setEntityResolverr   r   r
  r&   r  )r1   r   resolverr2   r2   r3   test_expat_external_dtd_enabled  s    
z/ExpatReaderTest.test_expat_external_dtd_enabledc             C   sF   t  }|  }|| |d |d |  | |jg  d S )Nz8<!DOCTYPE external SYSTEM "unsupported://non-existing">
z<doc />)r   r  r  r
  r   r&   r  )r1   r   r  r2   r2   r3   test_expat_external_dtd_default  s    

z/ExpatReaderTest.test_expat_external_dtd_defaultc               @   s   e Zd Zdd ZdS )z"ExpatReaderTest.TestEntityResolverc             C   s   t  }|td |S )Ns	   <entity/>)r   rY   r   )r1   r   r   inpsrcr2   r2   r3   r    s    z0ExpatReaderTest.TestEntityResolver.resolveEntityN)r;   r<   r=   r  r2   r2   r2   r3   TestEntityResolver  s   r  c             C   s|   t  }|td ||   t }|t| |d |d |d |d |	  | 
| td  d S )NTz<!DOCTYPE doc [
z#  <!ENTITY test SYSTEM "whatever">
z]>
z<doc>&test;</doc>s   <doc><entity></entity></doc>)r   r   r   r  r  r   r   r   r
  r   r&   rP   r   )r1   r   rR   r2   r2   r3   !test_expat_entityresolver_enabled  s    



z1ExpatReaderTest.test_expat_entityresolver_enabledc             C   s   t  }| |td ||   t }|t| |	d |	d |	d |	d |
  | | td  d S )NFz<!DOCTYPE doc [
z#  <!ENTITY test SYSTEM "whatever">
z]>
z<doc>&test;</doc>s   <doc></doc>)r   r&   Z
getFeaturer   r  r  r   r   r   r
  r   rP   r   )r1   r   rR   r2   r2   r3   !test_expat_entityresolver_default  s    



z1ExpatReaderTest.test_expat_entityresolver_defaultc               @   s   e Zd Zdd Zdd ZdS )zExpatReaderTest.AttrGathererc             C   s
   || _ d S )N)_attrs)r1   r   r   r2   r2   r3   r     s    z)ExpatReaderTest.AttrGatherer.startElementc             C   s
   || _ d S )N)r  )r1   r   Zqnamer   r2   r2   r3   r     s    z+ExpatReaderTest.AttrGatherer.startElementNSN)r;   r<   r=   r   r   r2   r2   r2   r3   AttrGatherer  s   r  c             C   s:   t  }|  }|| |d |  | |j d S )Nz<doc/>)r   r  r   r
  r   r4   r  )r1   r   gatherr2   r2   r3   test_expat_attrs_empty  s    

z&ExpatReaderTest.test_expat_attrs_emptyc             C   s:   t  }|  }|| |d |  | |j d S )Nz<doc attr='val'/>)r   r  r   r
  r   r:   r  )r1   r   r  r2   r2   r3   test_expat_attrs_wattr  s    

z&ExpatReaderTest.test_expat_attrs_wattrc             C   s<   t d}|  }|| |d |  | |j d S )Nr7   z<doc/>)r   r  r   r
  r   r6   r  )r1   r   r  r2   r2   r3   test_expat_nsattrs_empty  s    

z(ExpatReaderTest.test_expat_nsattrs_emptyc             C   s,  t d}|  }|| |dt  |  |j}| | d | |	 tdfg | 
| g kpx| dgk | t|d | tdf| | |tdfd | |tdfdd | t| tdfdfg | t| dg | |tdfd | |tdf d d S )Nr7   z"<doc xmlns:ns='%s' ns:attr='val'/>r   zns:attrr8   r   )r   r  r   r
  r5   r   r  r&   r'   r(   r`   r)   r*   r9   r.   r,   r/   r0   r!   )r1   r   r  r   r2   r2   r3   test_expat_nsattrs_wattr  s$    
z(ExpatReaderTest.test_expat_nsattrs_wattrc             C   s<   t  }t }t|}|| |t | | t d S )N)	r   r   r   r   rN   r   r&   rP   r   )r1   r   rR   r   r2   r2   r3   test_expat_inpsource_filename3  s    

z-ExpatReaderTest.test_expat_inpsource_filenamec             C   s@   t  }t }t|}|| |tt | | t	 d S )N)
r   r   r   r   rN   r   r   r&   rP   r   )r1   r   rR   r   r2   r2   r3   test_expat_inpsource_sysid=  s    
z*ExpatReaderTest.test_expat_inpsource_sysidc             C   s`   t j}tt| | t j| t }t }t	|}|
| |t| | | t d S )N)r   r   r   r   r   r   rL   r   r   r   r   rN   r   r&   rP   r   )r1   r   r   rR   r   r2   r2   r3   #test_expat_inpsource_sysid_nonasciiG  s    
z3ExpatReaderTest.test_expat_inpsource_sysid_nonasciic          	   C   sb   t  }t }t|}|| t }ttd}|| || W d Q R X | 	|
 t d S )NrW   )r   r   r   r   r   rG   r   rY   rN   r&   rP   r   )r1   r   rR   r   r  rI   r2   r2   r3    test_expat_inpsource_byte_streamV  s    

z0ExpatReaderTest.test_expat_inpsource_byte_streamc          	   C   sf   t  }t }t|}|| t }ttddd}|| || W d Q R X | 	|
 t d S )Nr   z
iso-8859-1)r?   )r   r   r   r   r   rG   r   r   rN   r&   rP   r   )r1   r   rR   r   r  rI   r2   r2   r3   %test_expat_inpsource_character_streamc  s    

z5ExpatReaderTest.test_expat_inpsource_character_streamc             C   sR   t  }t|}t }|| |d |d |  | | td  d S )Nz<doc>z</doc>s   <doc></doc>)	r   r   r   r   r
  r   r&   rP   r   )r1   rR   r   r   r2   r2   r3   test_expat_incrementalr  s    


z&ExpatReaderTest.test_expat_incrementalc             C   s   t  }t|}t }|| |d |d t  }t|}|| |  |d |d |d |  | | t	d  d S )Nz<doc>textz</doc>s   <doc>text</doc>)
r   r   r   r   r
  resetr   r&   rP   r   )r1   rR   r   r   r2   r2   r3   test_expat_incremental_reset~  s    






z,ExpatReaderTest.test_expat_incremental_resetc             C   sn   t  }t|}t }|| |d |d |  | | d  | | d  | |	 d d S )Nz<doc>z</doc>r7   )
r   r   r   r   r
  r   r&   getSystemIdgetPublicIdgetLineNumber)r1   rR   r   r   r2   r2   r3   test_expat_locator_noinfo  s    


z)ExpatReaderTest.test_expat_locator_noinfoc             C   sL   t  }t|}t }|| |t | | t | | d  d S )N)	r   r   r   r   rN   r   r&   r$  r%  )r1   rR   r   r   r2   r2   r3   test_expat_locator_withinfo  s    

z+ExpatReaderTest.test_expat_locator_withinfoc             C   sl   t j}tt| | t j| t }t|}t	 }|
| || | | | | | d  d S )N)r   r   r   r   r   r   rL   r   r   r   r   rN   r&   r$  r%  )r1   r   rR   r   r   r2   r2   r3   $test_expat_locator_withinfo_nonascii  s    

z4ExpatReaderTest.test_expat_locator_withinfo_nonasciiN)!r;   r<   r=   r   r   requires_nonascii_filenamesr   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)  r2   r2   r2   r3   r   D  s8   





r   c               @   s2   e Zd Zdd Zdd Zdd ZG dd dZd	S )
ErrorReportingTestc          
   C   s   t  }|t  t }|td d}|| y|| |   W n2 t	k
r| } z| 
| | W d d }~X Y nX d S )Ns   <foo bar foobar>za file name)r   r   r   r   rY   r   r  rN   Zfailr   r&   r$  )r1   r   r  r   r   r2   r2   r3   test_expat_inpsource_location  s    

z0ErrorReportingTest.test_expat_inpsource_locationc             C   sJ   t  }|t  | t|jtd | | d | |	 d d S )Nz<foo>   r7   )
r   r   r   r   r   rN   r   r&   getColumnNumberr&  )r1   r   r2   r2   r3   test_expat_incomplete  s
    z(ErrorReportingTest.test_expat_incompletec             C   sd   t tdd | dd t tdd | d d t tdd | dd  t tdd | d d  d S )Nmessager7   )strr   DummyLocator)r1   r2   r2   r3   test_sax_parse_exception_str  s    z/ErrorReportingTest.test_sax_parse_exception_strc               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )zErrorReportingTest.DummyLocatorc             C   s   || _ || _d S )N)_lineno_colno)r1   linenocolnor2   r2   r3   r     s    z(ErrorReportingTest.DummyLocator.__init__c             C   s   dS )NZpubidr2   )r1   r2   r2   r3   r%    s    z+ErrorReportingTest.DummyLocator.getPublicIdc             C   s   dS )NZsysidr2   )r1   r2   r2   r3   r$    s    z+ErrorReportingTest.DummyLocator.getSystemIdc             C   s   | j S )N)r4  )r1   r2   r2   r3   r&    s    z-ErrorReportingTest.DummyLocator.getLineNumberc             C   s   | j S )N)r5  )r1   r2   r2   r3   r.    s    z/ErrorReportingTest.DummyLocator.getColumnNumberN)r;   r<   r=   r   r%  r$  r&  r.  r2   r2   r2   r3   r2    s
   r2  N)r;   r<   r=   r,  r/  r3  r2  r2   r2   r2   r3   r+    s   r+  c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
XmlReaderTestc             C   s   |  ti  d S )N)r4   r   )r1   r2   r2   r3   test_attrs_empty  s    zXmlReaderTest.test_attrs_emptyc             C   s   |  tddi d S )Nr   r8   )r:   r   )r1   r2   r2   r3   test_attrs_wattr  s    zXmlReaderTest.test_attrs_wattrc             C   s   |  ti i  d S )N)r6   r   )r1   r2   r2   r3   test_nsattrs_empty
  s    z XmlReaderTest.test_nsattrs_emptyc             C   sZ  t tdfditdfdi}| | d | | tdfg | | dg | t|d | tdf| | t|	 tdfg | |
tdfd | |
tdfdd | t| tdfdfg | t| dg | |tdfd | |dd | |dtdf | |tdf d | |tdfd d S )Nr   r8   zns:attrr7   r   )r   r5   r&   r'   r(   r)   r*   r9   r,   r-   r.   r/   r0   r!   r"   r#   r$   )r1   r   r2   r2   r3   test_nsattrs_wattr  s"    z XmlReaderTest.test_nsattrs_wattrN)r;   r<   r=   r9  r:  r;  r<  r2   r2   r2   r3   r8    s   r8  c               C   s"   t ttttttttt	t
tt d S )N)r   rh   rK   rk   ry   r   r   r   r   r   r   r+  r8  r2   r2   r2   r3   	test_main"  s    r=  __main__)N).).)QrO   r   r   r   r   r   Zunittestr   ZSkipTestZxml.sax.saxutilsr   r	   r
   r   r   r   Zxml.sax.expatreaderr   Zxml.sax.handlerr   r   Zxml.sax.xmlreaderr   r   r   ior   r   r   ZgcZos.pathr   r   Zurllib.errorr   r   r   Ztest.supportr   r   r   r   ZTEST_XMLFILE_OUTrB   UnicodeEncodeErrorZsupports_nonascii_filenamespathsupports_unicode_filenamesr   ZTESTFN_ENCODINGUnicodeError	TypeErrorZ
skipUnlessr*  r5   ZTestCaser   r@   rD   rJ   rK   rh   rk   ry   r   r   r   r   r   r   r   r   rG   rI   r~   r   r   r+  r8  r=  r;   r2   r2   r2   r3   <module>   s   
 


5


x4L  c   >!
