
    5\hz&                         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	 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)dedent)compile_commandPyCF_DONT_IMPLY_DEDENTc                 d    |                                  D ]\  }}t          |d          rd| |<   | S )N__call__T)itemshasattr)dnvs      :/opt/python-3.11.14/usr/lib/python3.11/test/test_codeop.pyunify_callablesr      s>    7799 	 	CAaq*%% !    c                   b    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 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.assertIncomplete0   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.assertInvalid4   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 = '''xyr8   r   r:   (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)r6   rC   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?+1rH   rC   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_filename1  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assertRaisesr3   simplefilterr$   ws     r   test_warningzCodeopTests.test_warning7  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' + ()rY   rZ   r\   r/   r#   r]   s     r   test_incomplete_warningz#CodeopTests.test_incomplete_warningJ  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 )	NTra   rc   z'\e' 1r0   r   zinvalid escape sequencer   )rY   rZ   r\   r6   r#   rX   categoryrW   assertRegexr%   messagefilenamer]   s     r   test_invalid_warningz CodeopTests.test_invalid_warningP  s   $D111 	*Q!(+++y)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	Q###1(:;;;QqT\**,EFFF1	22222re   c                     |                      |          5  |                     t          |          5  t          |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 )Nr!   r.   )subTestassertRaisesRegexr3   r   )r$   r'   ri   s      r   assertSyntaxErrorMatchesz$CodeopTests.assertSyntaxErrorMatchesY  s    \\$ 	5 	5''W== 5 5V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 	5 	5 	5s4   A(AA(A	A(A	A((A,/A,c                 L    |                      t          d          d           d S )NzB                def foo(x,x):
                   pass
            z-duplicate argument 'x' in function definition)ro   r   rQ   s    r   test_syntax_errorszCodeopTests.test_syntax_errors^  sA    %%    B		C 	C 	C 	C 	Cr   N)r   )r   r0   )__name__
__module____qualname__r,   r/   r6   r>   rE   rI   rK   rR   r_   rd   rk   ro   rq    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5 5 5
C C C C Cr   r   __main__)__doc__r   unittestrY   testr   test.supportr   textwrapr   codeopr   r   r   r   r   TestCaser   rr   mainru   r   r   <module>r      s    


         ( ( ( ( ( (       : : : : : : : : 				
   LC LC LC LC LC(# LC LC LC`
 zHMOOOOO r   