
    ;e$                         d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
 ddlZej        rd Z G d dej                  Zed	k    r ej                     dS dS )
z/
   Test cases for codeop.py
   Nick Mathewson
    N)support)warnings_helper)compile_commandPyCF_DONT_IMPLY_DEDENTc                 d    |                                  D ]\  }}t          |d          rd| |<   | S )N__call__T)itemshasattr)dnvs      '/usr/lib/python3.11/test/test_codeop.pyunify_callablesr      s>    7799 	 	CAaq*%% !    c                   V    e Zd ZddZddZddZd Zd Zd Zd	 Z	d
 Z
d Zd Zd ZdS )CodeopTestssinglec                    t           j        rt          |d|          }|                     |           |dk    r{i i }}t          j        }t          j                    t          _        	 t          ||           t          t          |dd          |           |t          _        n?# |t          _        w xY w|dk    r(ddi}dt          ||          i}dt          ||          i}|                     t          |          t          |                     dS t          |d|t                    }|                     t          |d|          |           dS )z(succeed iff str is a valid piece of code<input>r   evala   valueN)r   	is_jythonr   
assertTruesysstdoutioStringIOexeccompiler   assertEqualr   r   )	selfstrsymbolcoder   rsaved_stdoutctxexpecteds	            r   assertValidzCodeopTests.assertValid   sC    	P"3	6::DOOD!!!!!!"z[]]
.qMMMYx88!<<<!-CJJCJ----6!!AhtD~~/tC}}._Q//0B0BCCCCCsIv7MNNH_S)VDDhOOOOOs   (/B$ $B2c                 P    |                      t          ||          d           dS )z5succeed iff str is the start of a valid piece of coder%   N)r"   r   )r#   r$   r%   s      r   assertIncompletezCodeopTests.assertIncomplete/   s+    V<<<dCCCCCr      c                     	 t          ||           |                     d           dS # t          $ r |                     |           Y dS t          $ r |                     |            Y dS w xY w)z8succeed iff str is the start of an invalid piece of coder-   z$No exception raised for invalid codeN)r   failSyntaxErrorr   OverflowError)r#   r$   r%   	is_syntaxs       r   assertInvalidzCodeopTests.assertInvalid3   s    	+Cv....II<===== 	' 	' 	'OOI&&&&&& 	+ 	+ 	+OO	M******	+s   &* A/A/.A/c           	      |   | j         }t          j        sq|                     t	          d          t          dddt                               |                     t	          d          t          dddt                               n |d            |d            |d            |d            |d            |d	            |d
            |d            |d            |d            |d            |d            |d            |d            |d            |d            |d            |d            |d            |d            |d            |d            |dd            |dd            |dd            |dd            |dd            |d d            |d!d            |d
            |d"            |d            |d#            |dd            |d d            |d!d            |d$            |d%            |d&           d S )'N passr   r   
a = 1z
a = 1a = 1
za = 1

z	

a = 1

zdef x():
  pass
zif 1:
 pass
z

if 1: pass
z

if 1: pass

zdef x():

 pass
zdef x():
  pass
  
zdef x():
  pass
 
zpass
z3**3
zif 9==3:
   pass
else:
   pass
z(if 1:
 pass
 if 1:
  pass
 else:
  pass
z#a
#b
a = 3
z#a

   
a=3
za=3

z
a = 9+ \
3z3**3r   z(lambda z: 
 z**3)z9+ \
3z9+ \
3
z

a**3z
 
a**3z
#a
#b
a**3z

if 1: a=1

z#a

   
a=3

z1def f():
 try: pass
 finally: [x for x in (1,2)]
zdef f():
 pass
#foo
z@a.b.c
def f():
 pass
)r+   r   r   r"   r   r!   r   )r#   avs     r   
test_validzCodeopTests.test_valid=   s      		_R00$VY%;= => > > _T22$VY%;= => > > > BrFFFBtHHH
7
9
9
;
?
   


   
 !!!
#$$$
"###
8
8
0111
;<<<


9
>
6&
 (((
:f
<
:f
;v
>&!!!
?

;<<<
   
:f
;v
>&!!!
ABBB
$%%%
&'''''r   c                 	   | j         } |d            |d            |d            |d            |d            |d            |d            |d            |d            |d	            |d
            |d            |d            |d            |d            |d            |d            |d            |d            |d            |d            |d            |d            |d            |d            |d            |d            |d            |dd            |dd            |dd            |d d            |d!d            |d"d            |d#            |d$            |d%            |d&            |d'            |d(            |d)            |d*            |d+            |d,            |d-            |d.            |d/            |d0            |d1            |d2            |d3            |d4            |d5            |d6            |d7            |d8            |d9            |d:            |d;            |d<            |d=            |d>            |d?            |d@            |dA            |dB            |dC            |dD            |dE            |dF            |dG            |dH            |dI            |dJ            |dK            |dL            |d            |dM            |dN            |dO            |d            |dP            |dQ            |dR            |dS            |dT            |dU            |dV            |dW            |dX            |dY            |dZ            |d[            |d\            |d]            |d^            |d_            |d`            |da            |db            |dc            |dd            |de            |df           d S )gNz(a **z(a,b,z(a,b,(za = (za = {zb + {zprint([1,
2,zprint({1:1,
2:3,zprint((1,
2,zif 9==3:
   pass
else:zif 9==3:
   pass
else:
zif 9==3:
   pass
else:
   passzif 1:zif 1:
z if 1:
 pass
 if 1:
  pass
 else:z!if 1:
 pass
 if 1:
  pass
 else:
z'if 1:
 pass
 if 1:
  pass
 else:
  passzdef x():z	def x():
z
def x():

zdef x():
  passzdef x():
  pass
 zdef x():
  pass
  z

def x():
  passza = 9+ \za = 'a\z	a = '''xyr7   r   r9   (z(9+z9+ \zlambda z: \z!if True:
 if True:
  if True:   
z@a(z@a(bz@a(b,z@a(b,cz@a(b,c,zfrom a import (zfrom a import (bzfrom a import (b,zfrom a import (b,czfrom a import (b,c,[z[az[a,z[a,bz[a,b,{z{az{a:z{a:bz{a:b,z{a:b,cz{a:b,c:z{a:b,c:dz	{a:b,c:d,za(za(bza(b,za(b,cza(b,c,za[za[bza[b,za[b:za[b:cza[b:c:za[b:c:dzdef a(zdef a(bzdef a(b,z	def a(b,cz
def a(b,c,z(az(a,z(a,bzif a:
 pass
elif b:zif a:
 pass
elif b:
 pass
else:zwhile a:zwhile a:
 pass
else:zfor a in b:zfor a in b:
 pass
else:ztry:ztry:
 pass
except:ztry:
 pass
finally:z!try:
 pass
except:
 pass
finally:zwith a:zwith a as b:zclass a:zclass a(z	class a(bz
class a(b,z
class a():z[x forz[x for x inz[x for x in (z(x forz(x for x inz(x for x in ()r.   r#   ais     r   test_incompletezCodeopTests.test_incomplete   s   "
7
7
8
8
7
7
7
?

?
%&&&
'(((
.///
7
9
1222
3444
9:::
:
<
>

 !!!
!"""
!"""
;
:
;
2f
4
3v
5
76
>&!!!
1222
5			
6



7
8
9



   
 !!!
3
4
5			
6



7
3
4
5			
6



7
8
9
:
;
4
5			
6



7
8
4
5			
6



6



7
8
9
8
9
:
;
<
3
4
5			
6



7
"###
0111
:
#$$$
=
&'''
6



!"""
"###
2333
9
>
:
:
;
<
<
8
=
?
8
=
?r   c                 H   | j         } |d            |d            |d            |d            |d            |d            |d            |d            |d	            |d
            |d            |dd            |dd            |dd            |dd            |dd            |dd            |dd            |d            |d            |d            |d            |d            |d            |d           d S )Nza bza @za b @za ** @za = za = 9 +zdef x():

pass
z

 if 1: pass

passz	a = 9+ \
za = 'a\ za = 'a\
r:   r   ]z())z[}z9+z	lambda z:z
return 2.3zif (a == 1 and b = 2): passzdel 1zdel (1,)zdel [1]zdel '1'z"[i for i in range(10)] = (1, 2, 3)r5   rB   s     r   test_invalidzCodeopTests.test_invalid  s   
5			
5			
7
8
6



9
   
$%%%
=
;
<
76
3v
5
4
4
;v
5
<
()))
7
:
9
9
/00000r   c                     | j         } |dd            |dd            |dd            |dd            |dd            |dd           d S )	Nz	raise = 4r    r-   zdef a-bzawait?z=!=za await raise bza await raise b?+1rG   rB   s     r   test_invalid_execzCodeopTests.test_invalid_exec'  s    
;v&&&&
9V$$$$
8F####
5    
V,,,,
//////r   c                     |                      t          dd          j        t          ddd          j                   |                     t          dd          j        t          ddd          j                   d S )Nr;   abcr   def)r"   r   co_filenamer!   assertNotEqual)r#   s    r   test_filenamezCodeopTests.test_filename0  s    E::F E8<<H	J 	J 	JOIu==I#Iuh??K	M 	M 	M 	M 	Mr   c                    t          j        dt          fdt          f          5 }t	          d           |                     t          |j                  d           d d d            n# 1 swxY w Y   t          j                    5  | 	                    t                    5  t          j        dt                     t	          dd           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j                    5  | 	                    t                    5  t          j        dt                     t	          d	d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )
Nz	.*literalz	.*invalidz	'\e' is 0r   errorz1 is 1r    r-   z'\e')r   check_warningsSyntaxWarningDeprecationWarningr   r"   lenwarningscatch_warningsassertRaisesr2   simplefilterr#   ws     r   test_warningzCodeopTests.test_warning6  s   +m,01  	1 L)))S__a000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 $&& 	5 	5(9(9+(F(F 	5 	5!'=999HV4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5
 $&& 	4 	4(9(9+(F(F 	4 	4!'+=>>>GF3333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s}   8A((A,/A,C0!,CC0C	C0 C	!C00C47C4E9),E!E9!E%	%E9(E%	)E99E= E=c                     t          j        d          5 }t          j        d           |                     d           d d d            n# 1 swxY w Y   |                     |g            d S )NTrecordalwaysz'\e' + ()rW   rX   rZ   r.   r"   r[   s     r   test_incomplete_warningz#CodeopTests.test_incomplete_warningI  s    $D111 	/Q!(+++!!+...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	B   *AAAc                    t          j        d          5 }t          j        d           |                     d           d d d            n# 1 swxY w Y   |                     t          |          d           |                     |d         j        t                     |                     t          |d         j
                  d           |                     |d         j        d           d S )	NTr_   ra   z'\e' 1r/   r   zinvalid escape sequencer   )rW   rX   rZ   r5   r"   rV   categoryrU   assertRegexr$   messagefilenamer[   s     r   test_invalid_warningz CodeopTests.test_invalid_warningO  s   $D111 	*Q!(+++y)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	Q###1(:;;;QqT\**,EFFF1	22222rc   N)r   )r   r/   )__name__
__module____qualname__r+   r.   r5   r=   rD   rH   rJ   rP   r]   rb   ri    r   r   r   r      s        P P P P.D D D D+ + + +@( @( @(DA A AF#1 #1 #1J0 0 0M M M4 4 4&     3 3 3 3 3r   r   __main__)__doc__r   unittestrW   testr   test.supportr   codeopr   r   r   r   r   TestCaser   rj   mainrm   r   r   <module>rv      s     


         ( ( ( ( ( ( : : : : : : : : 				
   @3 @3 @3 @3 @3(# @3 @3 @3F
 zHMOOOOO r   