B
    18™\T1  ã               @   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)Ú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 )z&Minimal test of DOMEventStream.parse()ÚrbN)r   ÚparseÚtstfileÚ
addCleanupÚstreamÚcloseÚlistÚopen)ÚselfÚhandlerÚfin© r   úU/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/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 )z&Test DOMEventStream parsing semantics.ÚcreateElementÚhtmlé   z	xmlns:xdczhttp://www.xml.com/booksÚtitlezIntroduction to XSLÚhrÚpz
xdc:authorN)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 )
z$Ensure expandItem works as expected.r   é   z,No "title" element detected in SMALL_SAMPLE!r   z=expandNode did not leave DOMEventStream in the correct state.r   r   r   N)r   r   r   r#   r$   Z
expandNoder!   r%   Ú
childNodesÚfailr   r'   Ú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 )z*PullDOM does not receive "comment" events.zNo comment was encounteredN)r   r   r   ÚCOMMENTr0   )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 )z/PullDOM does not receive "end-document" events.r   z8Ran out of events, but should have received END_DOCUMENTN)
r   r   r   r)   r$   r   r!   ÚEND_DOCUMENTr2   r0   )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   r5   Z
getFeaturer   r!   )r   r5   Z	saxparserZgesr   r   r   Útest_external_ges_default£   s    

z)PullDOMTestCase.test_external_ges_defaultN)Ú__name__Ú
__module__Ú__qualname__r   r-   r7   ÚunittestÚexpectedFailurer:   r<   r=   r   r   r   r   r      s   > 
r   c               @   s8   e Zd ZdZdd„ Zejdd„ ƒZdd„ Zdd	d
„Z	dS )ÚThoroughTestCasez(Test the hard-to-reach parts of pulldom.c             C   s   |   tjdtƒ d¡ dS )z0Test some of the hard-to-reach parts of PullDOM.N)r5   )Ú_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 )z2SAX2DOM can"t handle a PI before the root element.Né   )ÚSAX2DOMTestHelperrE   rD   )r   Úpdr   r   r   Útest_sax2dom_fail±   s    z"ThoroughTestCase.test_sax2dom_failc             C   s   t dtƒ dƒ}|  |d¡ dS )z0Test some of the hard-to-reach parts of SAX2DOM.NrG   F)rH   ÚSAX2DOMExerciserrD   )r   rI   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 )	zPTest some of the hard-to-reach parts of the parser, using a mock
        parser.r   z	a commentÚtargetr(   r   r   ÚtextN)r   r!   r   r"   r   r    r8   r(   ZPROCESSING_INSTRUCTIONrM   r#   r$   r'   r)   r;   )r   rI   Zbefore_rootr+   r,   r   r   r   rD   ¼   sF    zThoroughTestCase._test_thoroughN)T)
r>   r?   r@   Ú__doc__rF   rA   rB   rJ   rL   rD   r   r   r   r   rC   ª   s
   rC   c               @   s0   e Zd ZdZdd„ Zdd„ Zdd„ ZeZeZdS )	rE   znA fake sax parser that calls some of the harder-to-reach sax methods to
    ensure it emits the correct eventsc             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 commentrM   r(   r   r   ÚclassÚ	paraclassrN   )	rP   ÚstartDocumentÚcommentÚprocessingInstructionÚstartElementr   Ú
charactersÚ
endElementÚendDocument)r   r9   Úhr   r   r   r	   ò   s    




zSAXExerciser.parsec             O   s   dS )zStub method. Does nothing.Nr   )r   ÚargsÚkwargsr   r   r   Ústub  s    zSAXExerciser.stubN)	r>   r?   r@   rO   rQ   r	   r^   ZsetPropertyÚ
setFeaturer   r   r   r   rE   ë   s   rE   c               @   s   e Zd ZdZdd„ ZdS )rK   z…The same as SAXExerciser, but without the processing instruction and
    comment before the root element, because S2D can"t handle itc             C   sr   | j }| ¡  | dti ƒ¡ | d¡ | dd¡ | dtddiƒ¡ | d¡ | d¡ | d¡ | ¡  d S )	Nr   z	a commentrM   r(   r   rR   rS   rN   )	rP   rT   rW   r   rU   rV   rX   rY   rZ   )r   r9   r[   r   r   r   r	     s    



zSAX2DOMExerciser.parseN)r>   r?   r@   rO   r	   r   r   r   r   rK     s   rK   c               @   s   e Zd ZdZdd„ ZdS )rH   z1Allows us to drive SAX2DOM from a DOMEventStream.c             C   s0   t  ¡ | _ | j tjjjd¡ | j | j ¡ d S )Nr.   )	r   ÚSAX2DOMr5   r_   ÚxmlÚsaxr   Zfeature_namespacesrQ   )r   r   r   r   Úreset!  s    
zSAX2DOMTestHelper.resetN)r>   r?   r@   rO   rc   r   r   r   r   rH     s   rH   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   ÚtestÚ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 )z'Ensure SAX2DOM can parse from a stream.r   r   N)ÚioÚStringIOr   rH   ra   rb   Zmake_parserr%   r   r#   r$   Ú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 )z)Ensure SAX2DOM expands nodes as expected.ÚdocrN   Zsubelmr   N)r   r`   rT   rW   rX   rY   rZ   ZdocumentZdocumentElementr/   r4   ZpreviousSiblingÚassertIsZnextSiblingZ
parentNodeÚunlink)r   Zsax2domrn   ÚrootZtext1Zelm1Ztext2Ztext3r   r   r   ÚtestSAX2DOM9  s8    





zSAX2DOMTestCase.testSAX2DOMN)re   )r>   r?   r@   rh   rm   rr   r   r   r   r   rd   (  s   
rd   Ú__main__)ri   rA   Zxml.saxra   Zxml.sax.xmlreaderr   Zxml.sax.handlerr   Zxml.domr   Ztest.supportr   r
   r   ÚTestCaser   rC   ÚobjectrE   rK   ZDOMEventStreamrH   rd   r>   Úmainr   r   r   r   Ú<module>   s"   
 A"
4