B
    ž†\Ž  ã               @   sd   d dl Z d dlm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 )	é    N)Ú	PrintTree)Ú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 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   úAlib/python3.7/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
   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ÚfunZ	decorator)r   r   r   r   )r
   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
   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/NameNode)r   r   r   r   )r
   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   z//DefNode[.//NameNode]r   z//ReturnStatNode[./NameNode])r   r   r   r   r   ÚReturnStatNodeÚtyper   )r
   r   r   r   r   Útest_node_path_node_predicate1   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   z//DefNode[.//NameNode]r   z//DefNode[.//NameNode]//*r   z&//DefNode[.//NameNode]//ReturnStatNode)r   r   r   r   r   r   r   r   )r
   r   r   r   r   Ú"test_node_path_node_predicate_step9   s    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   r   Útest_node_path_attribute_existsA   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
   r   r   r   r   Ú#test_node_path_attribute_exists_notG   s    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
   r   r   r   r   Útest_node_path_andL   s
    zTestTreePath.test_node_path_andc             C   s"   |   ¡ }|  dtt|dƒƒ¡ d S )Nr   z//NameNode[@name = 'decorator'])r   r   r   r   )r
   r   r   r   r   Ú)test_node_path_attribute_string_predicateS   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
   r   r   r   r   Ú"test_node_path_recursive_predicateW   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      s   r   Ú__main__)ZunittestZCython.Compiler.Visitorr   ZCython.TestUtilsr   ZCython.Compiler.TreePathr   r   ZCython.Compilerr   r   r   r$   Úmainr   r   r   r   Ú<module>   s   V