B
    d                 @   s   d Z ddlmZ ddlmZ ddlmZ ddlZddlZddlZddlm	Z	 G dd dej
Z
ee
d	svee
d	e
j d
d Zdd ZdS )zUseful stuff for tests.    )absolute_import)division)print_functionN)zipc               @   s   e Zd Zdd ZdS )TestCasec          
   C   s  |dkr|dkrdS y(|  | |  | xtt|t|D ]\}}| t|t| xt| jD ]}t||d}t||d}t|t	rxt||D ]\}}	| 
||	 qW qpt|tjst|tjr(t|tjtjtjfs4t|tjtjtjfs4|  | |  | | 
|| qp| || qpW qFW W nD tk
r }
 z$| dt|t||
f  W dd}
~
X Y nX dS )ziCompares two ASTs and fails if there are differences.

    Ignores `ctx` fields and formatting info.
    NzASTs differ:
%s
  !=
%s

%s)ZassertIsNotNoner   astwalkassertEqualtype_fieldsgetattr
isinstancelistcheckAstsEqualASTLoadStoreParamAssertionErrorZfaildump)selfabZnode_aZnode_bfieldZa_valZb_valZitem_aZitem_bZae r   G/var/www/html/venv/lib/python3.7/site-packages/pasta/base/test_utils.pyr      s.    

"


zTestCase.checkAstsEqualN)__name__
__module____qualname__r   r   r   r   r   r      s   r   ZassertItemsEqualc              G   s(   t tdd | D ddd | D  S )Nc             s   s   | ]}t | V  qd S )N)supports_feature).0featurer   r   r   	<genexpr>D   s    z$requires_features.<locals>.<genexpr>zMTests features which are not supported by this version of python. Missing: %rc             S   s   g | ]}t |s|qS r   )r   )r    fr   r   r   
<listcomp>F   s    z%requires_features.<locals>.<listcomp>)unittestZskipIfany)featuresr   r   r   requires_featuresB   s    r(   c             C   s   | dkr t tdottjtjS | dkr@t tdo>ttjtjS | dkrpytd W n tk
rj   dS X dS | d	krt td
ottjtjS | dkrt	j
d dk S dS )NZ
bytes_nodeBytesZ	exec_nodeExecZtype_annotationsz#def foo(bar: str=123) -> None: passFTZfstring	JoinedStrZmixed_tabs_spacesr      )hasattrr   
issubclassr)   r   r*   parseSyntaxErrorr+   sysversion_info)r!   r   r   r   r   I   s    r   )__doc__
__future__r   r   r   r   r1   r%   Z	six.movesr   r   r-   setattrassertCountEqualr(   r   r   r   r   r   <module>   s   "
