o
    &[h`  ã                   @   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
            )Ú_treeÚrun_pipeline)Úself© r   úW/var/www/vscode/pina/lib/python3.10/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   Ú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   Ú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__)ÚunittestÚCython.TestUtilsr   ÚCython.Compiler.TreePathr   r   ÚCython.Compilerr   r   r   r/   Úmainr   r   r   r   Ú<module>   s    Vÿ