o
    €e½  ã                   @   s\   d dl Z d dlmZ d dlmZmZ d dlmZmZ G dd„ deƒZ	e
dkr,e  ¡  dS dS )é    N)ÚTransformTest)Ú
find_firstÚfind_all)ÚNodesÚ	ExprNodesc                   @   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d„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestTreePathNc                 C   s   | j d u r|  g d¡| _ | j S )Nzà
            def decorator(fun):  # DefNode
                return fun       # ReturnStatNode, NameNode
            @decorator           # NameNode
            def decorated():     # DefNode
                pass
            )Ú_treeZrun_pipeline)Úself© r
   úRD:\Projects\ConvertPro\env\Lib\site-packages\Cython/Compiler/Tests/TestTreePath.pyÚ_build_tree	   s   
zTestTreePath._build_treec                 C   sd   |   ¡ }|  dtt|dƒƒ¡ |  dtt|dƒƒ¡ |  dtt|dƒƒ¡ |  dtt|dƒƒ¡ d S )Né   z	//DefNodez
//NameNodeé   z//ReturnStatNodez//DefNode//ReturnStatNode©r   ÚassertEqualÚlenr   ©r	   Útr
   r
   r   Útest_node_path   ó
   zTestTreePath.test_node_pathc                 C   sN   |   ¡ }|  dtt|dƒƒ¡ |  dtt|dƒƒ¡ |  dtt|dƒƒ¡ d S )Né
   z//*é   z//DefNode//*r   z//NameNode//*r   r   r
   r
   r   Útest_node_path_star   ó   z TestTreePath.test_node_path_starc                 C   s8   |   ¡ }|  dtt|dƒƒ¡ |  ddgt|dƒ¡ d S )Nr   z//NameNode/@nameÚfunÚ	decoratorr   r   r
   r
   r   Útest_node_path_attribute!   ó   z%TestTreePath.test_node_path_attributec                 C   s6   |   ¡ }|  dtt|dƒƒ¡ |  dgt|dƒ¡ d S )Nr   z//ReturnStatNode/@value.namer   r   r   r
   r
   r   Útest_node_path_attribute_dotted&   s   z,TestTreePath.test_node_path_attribute_dottedc                 C   s8   |   ¡ }|  dtt|dƒƒ¡ |  dtt|dƒƒ¡ d S )Nr   z!//DefNode/ReturnStatNode/NameNodez//ReturnStatNode/NameNoder   r   r
   r
   r   Útest_node_path_child+   r   z!TestTreePath.test_node_path_childc                 C   óf   |   ¡ }|  dtt|dƒƒ¡ |  dtt|dƒƒ¡ |  dtt|dƒƒ¡ |  tjtt|dƒƒ¡ d S )Nr   z//DefNode[.//ForInStatNode]r   ú//DefNode[.//NameNode]r   z//ReturnStatNode[./NameNode]©r   r   r   r   r   ZReturnStatNodeÚtyper   r   r
   r
   r   Útest_node_path_node_predicate0   ó   ÿz*TestTreePath.test_node_path_node_predicatec                 C   r    )Nr   r!   r   z//DefNode[.//NameNode]//*r   z&//DefNode[.//NameNode]//ReturnStatNoder"   r   r
   r
   r   Ú"test_node_path_node_predicate_step8   r%   z/TestTreePath.test_node_path_node_predicate_stepc                 C   s:   |   ¡ }|  dtt|dƒƒ¡ |  tjtt|dƒƒ¡ d S )Nr   z//NameNode[@name])r   r   r   r   r   ZNameNoder#   r   r   r
   r
   r   Útest_node_path_attribute_exists@   s
   ÿz,TestTreePath.test_node_path_attribute_existsc                 C   s8   |   ¡ }|  dtt|dƒƒ¡ |  dtt|dƒƒ¡ d S )Nr   z//NameNode[not(@name)]r   z//NameNode[not(@honking)]r   r   r
   r
   r   Ú#test_node_path_attribute_exists_notF   r   z0TestTreePath.test_node_path_attribute_exists_notc                 C   sd   |   ¡ }|  dtt|dƒƒ¡ |  dtt|dƒƒ¡ |  dtt|dƒƒ¡ |  dtt|dƒƒ¡ d S )Nr   z,//DefNode[.//ReturnStatNode and .//NameNode]r   z//NameNode[@honking and @name]z//NameNode[@name and @honking]r   z'//DefNode[.//NameNode[@name] and @name]r   r   r
   r
   r   Útest_node_path_andK   r   zTestTreePath.test_node_path_andc                 C   s"   |   ¡ }|  dtt|dƒƒ¡ d S )Nr   z//NameNode[@name = 'decorator']r   r   r
   r
   r   Ú)test_node_path_attribute_string_predicateR   s   z6TestTreePath.test_node_path_attribute_string_predicatec                 C   sN   |   ¡ }|  dtt|dƒƒ¡ |  dtt|dƒƒ¡ |  dtt|dƒƒ¡ d S )Nr   z//DefNode[.//NameNode[@name]]r   z+//DefNode[.//NameNode[@name = 'decorator']]z@//DefNode[.//ReturnStatNode[./NameNode[@name = 'fun']]/NameNode]r   r   r
   r
   r   Ú"test_node_path_recursive_predicateV   r   z/TestTreePath.test_node_path_recursive_predicate)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r$   r&   r'   r(   r)   r*   r+   r
   r
   r
   r   r      s    r   Ú__main__)ZunittestZCython.TestUtilsr   ZCython.Compiler.TreePathr   r   ZCython.Compilerr   r   r   r,   Úmainr
   r
   r
   r   Ú<module>   s    Vÿ