a
    äze¨2  ã                   @   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                   @   sP   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d„ ZdS )ÚPullDOMTestCasec                 C   s\   t  t¡}|  |jj¡ t|ƒ ttdƒ}tt  |¡ƒ W d   ƒ n1 sN0    Y  d S )NÚrb)r   ÚparseÚtstfileZ
addCleanupÚstreamÚcloseÚlistÚopen)ÚselfÚhandlerÚfin© r   ú'/usr/lib/python3.9/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	¡ |  ||u ¡ 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+   sh    
ÿz$PullDOMTestCase.test_parse_semanticsc                 C   s@  t  t¡}|D ]<\}}|t jkr|jdkr| |¡ |  dt|jƒ¡  qVq|  	d¡ |D ]\}}|t jkrZ qrqZ|  d|jd¡ | |¡ |  t
|ƒd t j¡ t
|ƒ\}}|  |jd¡ | |¡ t
|ƒ t
|ƒ\}}|  |jd¡ |  t¡ t
|ƒ W d   ƒ n1 s0    Y  | ¡  |  |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   s4    




ÿ

(zPullDOMTestCase.test_expandItemc                 C   s4   t  t¡}|D ]\}}|t jkr q0q|  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   sp   t  t¡}|D ] \}}|t jkr|jdkr q0qzt|ƒ\}}|  t j|¡ W n tyj   |  	d¡ Y n0 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   sP   t  t¡}|  td¡& |  |d d t j¡ W d   ƒ n1 sB0    Y  d S )NzUse iterator protocol insteadéÿÿÿÿr   )r   r   r   ZassertWarnsRegexÚDeprecationWarningr   r    )r   r2   r   r   r   Útest_getitem_deprecation£   s
    
ÿz(PullDOMTestCase.test_getitem_deprecationc                 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   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é   )ÚSAX2DOMTestHelperrE   rD   ©r   Úpdr   r   r   Útest_sax2dom_fail¸   s    z"ThoroughTestCase.test_sax2dom_failc                 C   s   t d tƒ dƒ}|  |d¡ d S )NrH   F)rI   ÚSAX2DOMExerciserrD   rJ   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   ú	a commentÚtargetr&   r   r   Útext)r   r   r   r    r   r   r5   r&   ZPROCESSING_INSTRUCTIONrP   r!   r"   r%   r'   r8   )r   rK   Zbefore_rootr)   r*   r   r   r   rD   Ã   sF    zThoroughTestCase._test_thoroughN)T)	r>   r?   r@   rG   rA   rB   rL   rN   rD   r   r   r   r   rC   ±   s
   
rC   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ ZeZeZdS )rE   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 )	NrO   rP   r&   r   r   ÚclassÚ	paraclassrQ   )	rS   ÚstartDocumentÚcommentÚprocessingInstructionÚstartElementr   Ú
charactersÚ
endElementÚendDocument©r   r6   Úhr   r   r   r   ù   s    




zSAXExerciser.parsec                 O   s   d S rR   r   )r   ÚargsÚkwargsr   r   r   Ústub  s    zSAXExerciser.stubN)r>   r?   r@   rT   r   rb   ZsetPropertyÚ
setFeaturer   r   r   r   rE   ò   s
   rE   c                   @   s   e Zd Zdd„ ZdS )rM   c                 C   sr   | j }| ¡  | dti ƒ¡ | d¡ | dd¡ | dtddiƒ¡ | d¡ | d¡ | d¡ | ¡  d S )	Nr   rO   rP   r&   r   rU   rV   rQ   )	rS   rW   rZ   r   rX   rY   r[   r\   r]   r^   r   r   r   r     s    



zSAX2DOMExerciser.parseN)r>   r?   r@   r   r   r   r   r   rM     s   rM   c                   @   s   e Zd Zdd„ ZdS )rI   c                 C   s0   t  ¡ | _ | j tjjjd¡ | j | j ¡ d S )Nr,   )	r   ÚSAX2DOMr2   rc   ÚxmlÚsaxr   Zfeature_namespacesrT   rF   r   r   r   Úreset(  s    
zSAX2DOMTestHelper.resetN)r>   r?   r@   rg   r   r   r   r   rI   %  s   rI   c                   @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
ÚSAX2DOMTestCaseÚTestc                 C   s   |   ||¡ d S rR   )r   )r   ÚtestZtestnamer   r   r   Úconfirm1  s    zSAX2DOMTestCase.confirmc                 C   s|   t  t¡^}t|tj ¡ ttƒƒ}|D ] \}}|tj	kr&|j
dkr& qHq&|  t|jƒd¡ W d   ƒ n1 sn0    Y  d S )Nr   r   )ÚioÚStringIOr   rI   re   rf   Zmake_parserr#   r   r!   r"   ZassertGreaterr-   )r   r   Úsdr)   r*   r   r   r   Ú
test_basic4  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ÚdocrQ   Zsubelmr   )r   rd   rW   rZ   r[   r\   r]   ZdocumentZdocumentElementr-   r1   ZpreviousSiblingZassertIsZnextSiblingZ
parentNodeÚunlink)r   Zsax2domrp   ÚrootZtext1Zelm1Ztext2Ztext3r   r   r   ÚtestSAX2DOM@  s8    





zSAX2DOMTestCase.testSAX2DOMN)ri   )r>   r?   r@   rk   ro   rs   r   r   r   r   rh   /  s   
rh   Ú__main__)rl   rA   Zxml.saxre   Zxml.sax.xmlreaderr   Zxml.sax.handlerr   Zxml.domr   Ztest.supportr   r	   r   ZTestCaser   rC   ÚobjectrE   rM   ZDOMEventStreamrI   rh   r>   Úmainr   r   r   r   Ú<module>   s"   	 A"
4