U
    {h                     @   sX   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rTe   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 k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
   F/tmp/pip-unpacked-wheel-fhl22ezh/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   s    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!   s    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+   s    z!TestTreePath.test_node_path_childc                 C   sf   |   }| 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   s    z*TestTreePath.test_node_path_node_predicatec                 C   sf   |   }| dtt|d | dtt|d | dtt|d | tjtt|d d S )Nr   r   r   z//DefNode[.//NameNode]//*r   z&//DefNode[.//NameNode]//ReturnStatNoder   r   r
   r
   r   "test_node_path_node_predicate_step8   s    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   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   s    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`   s    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__)ZunittestZCython.TestUtilsr   ZCython.Compiler.TreePathr   r   ZCython.Compilerr   r   r   r)   mainr
   r
   r
   r   <module>   s   `