B
    u9aT1  ã               @   sÔ   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	 d dl
mZ edddZd	ZG d
d„ dejƒZG dd„ dejƒZG dd„ deƒZG dd„ deƒZG dd„ de	jƒZG dd„ dejƒZedkrÐe ¡  dS )é    N)ÚAttributesImpl)Úfeature_external_ges)Úpulldom)Úfindfileztest.xmlZxmltestdata)Zsubdira  <?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xdc="http://www.xml.com/books">
<!-- A comment -->
<title>Introduction to XSL</title>
<hr/>
<p><xdc:author xdc:attrib="prefixed attribute" attrib="other attrib">A. Namespace</xdc:author></p>
</html>c               @   sH   e Zd Zdd„ Zdd„ Zdd„ Zejdd„ ƒZejd	d
„ ƒZ	dd„ Z
dS )ÚPullDOMTestCasec          	   C   sH   t  t¡}|  |jj¡ t|ƒ ttdƒ}tt  |¡ƒ W d Q R X d S )NÚrb)r   ÚparseÚtstfileZ
addCleanupÚstreamÚcloseÚlistÚopen)ÚselfÚhandlerÚfin© r   ú"/usr/lib/python3.7/test_pulldom.pyÚ
test_parse   s
    
zPullDOMTestCase.test_parsec             C   sœ  t  t¡}t|ƒ\}}|  t|dƒ¡ |  t j|¡ t|ƒ\}}|  t j|¡ |  d|j	¡ |  dt
|jƒ¡ |  |j d¡jd¡ t|ƒ\}}|  t j|¡ t|ƒ\}}|  t j|¡ t|ƒ\}}|  d|j	¡ |}t|ƒ\}}|  t j|¡ |  d|j¡ t|ƒ\}}|  t j|¡ |  d|j	¡ |  ||k¡ t|ƒ\}}|  t j|¡ t|ƒ\}}|  t j|¡ |  d|j	¡ t|ƒ\}}|  t j|¡ |  d|j	¡ t|ƒ\}}|  t j|¡ t|ƒ\}}|  t j|¡ |  d	|j	¡ t|ƒ\}}|  t j|¡ |  d
|j	¡ t|ƒ\}}|  t j|¡ t|ƒ\}}|  t j|¡ |  d
|j	¡ t|ƒ\}}|  t j|¡ t|ƒ\}}|  t j|¡ t|ƒ\}}|  t j|¡ d S )NÚcreateElementÚhtmlé   z	xmlns:xdczhttp://www.xml.com/booksÚtitlezIntroduction to XSLÚhrÚpz
xdc:author)r   ÚparseStringÚSMALL_SAMPLEÚnextÚ
assertTrueÚhasattrÚassertEqualÚSTART_DOCUMENTÚSTART_ELEMENTÚtagNameÚlenZ
attributesZgetNamedItemÚvalueÚ
CHARACTERSÚdataÚEND_ELEMENT)r   ÚitemsÚevtÚnodeZ
title_noder   r   r   Útest_parse_semantics+   sf    
z$PullDOMTestCase.test_parse_semanticsc          	   C   s.  t  t¡}xL|D ]:\}}|t jkr|jdkr| |¡ |  dt|jƒ¡ P qW |  	d¡ x|D ]\}}|t jkr^P q^W |  d|jd¡ | |¡ |  t
|ƒd t j¡ t
|ƒ\}}|  |jd¡ | |¡ t
|ƒ t
|ƒ\}}|  |jd¡ |  t¡ t
|ƒ W d Q R X | ¡  |  |j¡ |  |j¡ d S )	Nr   é   z,No "title" element detected in SMALL_SAMPLE!r   z=expandNode did not leave DOMEventStream in the correct state.r   r   r   )r   r   r   r!   r"   Z
expandNoder   r#   Ú
childNodesÚfailr   r%   ZassertRaisesÚStopIterationÚclearÚassertIsNoneÚparserr
   )r   r(   r)   Úitemr*   r   r   r   Útest_expandItemi   s2    






zPullDOMTestCase.test_expandItemc             C   s6   t  t¡}x&|D ]\}}|t jkrP qW |  d¡ d S )NzNo comment was encountered)r   r   r   ÚCOMMENTr.   )r   r(   r)   Ú_r   r   r   Útest_comment‰   s
    

zPullDOMTestCase.test_commentc             C   st   t  t¡}x&|D ]\}}|t jkr|jdkrP qW yt|ƒ\}}|  t j|¡ W n tk
rn   |  	d¡ Y nX d S )Nr   z8Ran out of events, but should have received END_DOCUMENT)
r   r   r   r'   r"   r   r   ÚEND_DOCUMENTr/   r.   )r   r(   r)   r*   r   r   r   Útest_end_document“   s    
z!PullDOMTestCase.test_end_documentc             C   s*   t  t¡}|j}| t¡}|  |d¡ d S )NF)r   r   r   r2   Z
getFeaturer   r   )r   r2   Z	saxparserZgesr   r   r   Útest_external_ges_default£   s    

z)PullDOMTestCase.test_external_ges_defaultN)Ú__name__Ú
__module__Ú__qualname__r   r+   r4   ÚunittestÚexpectedFailurer7   r9   r:   r   r   r   r   r      s   > 
r   c               @   s4   e Zd Zdd„ Zejdd„ ƒZdd„ Zddd	„Zd
S )ÚThoroughTestCasec             C   s   |   tjd tƒ d¡ d S )N)r2   )Ú_test_thoroughr   r   ÚSAXExerciser)r   r   r   r   Útest_thorough_parse­   s    z$ThoroughTestCase.test_thorough_parsec             C   s   t d tƒ dƒ}|  |¡ d S )Né   )ÚSAX2DOMTestHelperrB   rA   )r   Úpdr   r   r   Útest_sax2dom_fail±   s    z"ThoroughTestCase.test_sax2dom_failc             C   s   t d tƒ dƒ}|  |d¡ d S )NrD   F)rE   ÚSAX2DOMExerciserrA   )r   rF   r   r   r   Útest_thorough_sax2dom·   s    z&ThoroughTestCase.test_thorough_sax2domTc             C   sÐ  t |ƒ\}}|  tj|¡ |  t|dƒ¡ |rŒt |ƒ\}}|  tj|¡ |  d|j¡ t |ƒ\}}|  tj|¡ |  d|j	¡ |  d|j¡ t |ƒ\}}|  tj
|¡ |  d|j¡ t |ƒ\}}|  tj|¡ |  d|j¡ t |ƒ\}}|  tj|¡ |  d|j	¡ |  d|j¡ t |ƒ\}}|  tj
|¡ |  d|j¡ t |ƒ\}}|  tj|¡ |  d|j¡ t |ƒ\}}|  tj|¡ |  d|j¡ t |ƒ\}}|  tj|¡ |  d|j¡ t |ƒ\}}|  tj|¡ d S )Nr   z	a commentÚtargetr&   r   r   Útext)r   r   r   r    r   r   r5   r&   ZPROCESSING_INSTRUCTIONrJ   r!   r"   r%   r'   r8   )r   rF   Zbefore_rootr)   r*   r   r   r   rA   ¼   sF    zThoroughTestCase._test_thoroughN)T)	r;   r<   r=   rC   r>   r?   rG   rI   rA   r   r   r   r   r@   ª   s   r@   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ ZeZeZdS )rB   c             C   s
   || _ d S )N)Ú_handler)r   r   r   r   r   ÚsetContentHandlerï   s    zSAXExerciser.setContentHandlerc             C   sˆ   | j }| ¡  | d¡ | dd¡ | dti ƒ¡ | d¡ | dd¡ | dtddiƒ¡ | d¡ | d¡ | d¡ | ¡  d S )	Nz	a commentrJ   r&   r   r   ÚclassÚ	paraclassrK   )	rL   ÚstartDocumentÚcommentÚprocessingInstructionÚstartElementr   Ú
charactersÚ
endElementÚendDocument)r   r6   Úhr   r   r   r   ò   s    




zSAXExerciser.parsec             O   s   d S )Nr   )r   ÚargsÚkwargsr   r   r   Ústub  s    zSAXExerciser.stubN)r;   r<   r=   rM   r   rZ   ZsetPropertyÚ
setFeaturer   r   r   r   rB   ë   s
   rB   c               @   s   e Zd Zdd„ ZdS )rH   c             C   sr   | j }| ¡  | dti ƒ¡ | d¡ | dd¡ | dtddiƒ¡ | d¡ | d¡ | d¡ | ¡  d S )	Nr   z	a commentrJ   r&   r   rN   rO   rK   )	rL   rP   rS   r   rQ   rR   rT   rU   rV   )r   r6   rW   r   r   r   r     s    



zSAX2DOMExerciser.parseN)r;   r<   r=   r   r   r   r   r   rH     s   rH   c               @   s   e Zd Zdd„ ZdS )rE   c             C   s0   t  ¡ | _ | j tjjjd¡ | j | j ¡ d S )Nr,   )	r   ÚSAX2DOMr2   r[   ÚxmlÚsaxr   Zfeature_namespacesrM   )r   r   r   r   Úreset!  s    
zSAX2DOMTestHelper.resetN)r;   r<   r=   r_   r   r   r   r   rE     s   rE   c               @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
ÚSAX2DOMTestCaseÚTestc             C   s   |   ||¡ d S )N)r   )r   ZtestZtestnamer   r   r   Úconfirm*  s    zSAX2DOMTestCase.confirmc          	   C   sj   t  t¡V}t|tj ¡ ttƒƒ}x&|D ]\}}|tj	kr(|j
dkr(P q(W |  t|jƒd¡ W d Q R X d S )Nr   r   )ÚioÚStringIOr   rE   r]   r^   Zmake_parserr#   r   r!   r"   ZassertGreaterr-   )r   r   Úsdr)   r*   r   r   r   Ú
test_basic-  s    
zSAX2DOMTestCase.test_basicc             C   s>  t  ¡ }| ¡  | di ¡ | d¡ | di ¡ | d¡ | d¡ | d¡ | d¡ | ¡  |j}|j}|j	\}}}|j	d }|  
|j¡ |  |j|¡ |  |j|¡ |  |j|¡ |  |j|¡ |  
|j¡ |  
|j¡ |  
|j¡ |  |j|¡ |  |j|¡ |  |j|¡ |  |j|¡ |  |j|¡ | ¡  d S )NÚdocrK   Zsubelmr   )r   r\   rP   rS   rT   rU   rV   ZdocumentZdocumentElementr-   r1   ZpreviousSiblingZassertIsZnextSiblingZ
parentNodeÚunlink)r   Zsax2domrg   ÚrootZtext1Zelm1Ztext2Ztext3r   r   r   ÚtestSAX2DOM9  s8    





zSAX2DOMTestCase.testSAX2DOMN)ra   )r;   r<   r=   rb   rf   rj   r   r   r   r   r`   (  s   
r`   Ú__main__)rc   r>   Zxml.saxr]   Zxml.sax.xmlreaderr   Zxml.sax.handlerr   Zxml.domr   Ztest.supportr   r	   r   ZTestCaser   r@   ÚobjectrB   rH   ZDOMEventStreamrE   r`   r;   Úmainr   r   r   r   Ú<module>   s"   
 A"
4