
    1Vh                         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ej                        Z
 ee
d	      s ee
d	e
j                         d
 Zd Zy)zUseful stuff for tests.    )absolute_import)division)print_functionN)zipc                       e Zd Zd Zy)TestCasec           	         ||y	 | j                  |       | j                  |       t        t        j                  |      t        j                  |            D ]  \  }}| j	                  t        |      t        |              t        |             j                  D ]D  }t        ||d      }t        ||d      }t        |t              r't        ||      D ]  \  }}	| j                  ||	        Ut        |t        j                        st        |t        j                        rt        |t        j                  t        j                  t        j                  f      rt        |t        j                  t        j                  t        j                  f      r| j                  |       | j                  |       | j                  ||       3| j	                  ||       G  y# t        $ rJ}
| j!                  dt        j"                  |      dt        j"                  |      d|
       Y d}
~
yd}
~
ww xY w)ziCompares two ASTs and fails if there are differences.

    Ignores `ctx` fields and formatting info.
    NzASTs differ:
z
  !=
z

)assertIsNotNoner   astwalkassertEqualtype_fieldsgetattr
isinstancelistcheckAstsEqualASTLoadStoreParamAssertionErrorfaildump)selfabnode_anode_bfielda_valb_valitem_aitem_baes              E/home/dcms/DCMS/lib/python3.12/site-packages/pasta/base/test_utils.pyr   zTestCase.checkAstsEqual   s   
 	yQY)
1
1SXXa[9 +.&&ftF|4!T&\^++ 	+E&%.%&%.%t$"%eU"3 2!!&&12%)Zsww-GusxxCII&FGusxxCII&FG""5)""5)!!%/UE*	++"  )
ii
((1+sxx{B( ) ))s&   EG, #9G, AG, ,	H?5A H::H?N)__name__
__module____qualname__r        r&   r   r      s    )r+   r   assertItemsEqualc            
          t        j                  t        d | D              d| D cg c]  }t        |      r| c}z        S c c}w )Nc              3   4   K   | ]  }t        |         y w)N)supports_feature).0features     r&   	<genexpr>z$requires_features.<locals>.<genexpr>D   s     	@Gw'
'	@s   zMTests features which are not supported by this version of python. Missing: %r)unittestskipIfanyr/   )featuresfs     r&   requires_featuresr8   B   sJ    			@x	@@"*FQ2B12EqFG
H H Gs
   AAc                 
   | dk(  r:t        t        d      xr( t        t        j                  t        j                        S | dk(  r:t        t        d      xr( t        t        j
                  t        j                        S | dk(  r	 t        j                  d       y| d	k(  r:t        t        d
      xr( t        t        j                  t        j                        S | dk(  rt        j                  d   dk  S y# t        $ r Y yw xY w)N
bytes_nodeBytes	exec_nodeExectype_annotationsz#def foo(bar: str=123) -> None: passFTfstring	JoinedStrmixed_tabs_spacesr      )hasattrr   
issubclassr;   r   r=   parseSyntaxErrorr@   sysversion_info)r1   s    r&   r/   r/   I   s    3 CZ		377%CC3AJsxx$AA""	ii56 	3$KCMM377)KK##A""	  s   C6 6	DD)__doc__
__future__r   r   r   r   rG   r3   	six.movesr   r   rC   setattrassertCountEqualr8   r/   r*   r+   r&   <module>rN      s]     '  % 
 
  )x   )D x+,	(&(A(ABHr+   