o
    wi                     @   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                   @   s   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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   _/home/ubuntu/sommelier/.venv/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   s
   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   //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   sz   |   }| dtt|d | 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   z1//DefNode[.//ReturnStatNode and .//DecoratorNode]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   s   zTestTreePath.test_node_path_andc                 C   s   |   }| dtt|d | dtt|d | dtt|d | dtt|d | dtt|d | dtt|d d S )	Nr   z0//DefNode[.//ReturnStatNode or .//DecoratorNode]r(   r   z//NameNode[@honking]z//NameNode[@name or @honking]z//NameNode[@honking or @name]z&//DefNode[.//NameNode[@name] or @name]r   r   r   r   r   test_node_path_orS   s   zTestTreePath.test_node_path_orc                 C   s"   |   }| dtt|d d S )Nr   z//NameNode[@name = 'decorator']r   r   r   r   r   )test_node_path_attribute_string_predicate\   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_predicate`   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   r      s     	r   __main__)unittestCython.TestUtilsr   Cython.Compiler.TreePathr   r   Cython.Compilerr   r   r   r0   mainr   r   r   r   <module>   s    `