o
    HXîhs%  ã                   @   sJ   d Z ddlZddlZdZdd„ ZG dd„ dejƒZedkr#e ¡  dS dS )	z&
Test the API of the symtable module.
é    Na:  
import sys

glob = 42
some_var = 12
some_non_assigned_global_var = 11
some_assigned_global_var = 11

class Mine:
    instance_var = 24
    def a_method(p1, p2):
        pass

def spam(a, b, *var, **kw):
    global bar
    global some_assigned_global_var
    some_assigned_global_var = 12
    bar = 47
    some_var = 10
    x = 23
    glob
    def internal():
        return x
    def other_internal():
        nonlocal some_var
        some_var = 3
        return some_var
    return internal

def foo():
    pass

def namespace_test(): pass
def namespace_test(): pass
c                 C   s&   |   ¡ D ]}| ¡ |kr|  S qd S ©N)Úget_childrenÚget_name)ÚblockÚnameZch© r   ú</opt/python-3.10.19/usr/lib/python3.10/test/test_symtable.pyÚ
find_block.   s
   ÿÿr	   c                   @   s&  e Zd Ze edd¡ZeedƒZeedƒZeedƒZ	ee	dƒZ
ee	dƒZee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#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Z d1d2„ Z!d3d4„ Z"d5d6„ Z#d7d8„ Z$d9d:„ Z%d;d<„ Z&d=S )>ÚSymtableTestú?ÚexecÚMineÚa_methodÚspamÚinternalÚother_internalÚfooc                 C   s^   |   | j ¡ d¡ |   | j ¡ d¡ |   | j ¡ d¡ |   | j ¡ d¡ |   | j ¡ d¡ d S )NÚmoduleÚclassÚfunction)ÚassertEqualÚtopZget_typer   r   r   r   ©Úselfr   r   r   Ú	test_type?   ó
   zSymtableTest.test_typec                 C   s^   |   | j ¡ d¡ |   | j ¡ d¡ |   | j ¡ d¡ |   | j ¡ d¡ |   | j ¡ d¡ d S )Nr   )ZassertGreaterr   Zget_idr   r   r   r   r   r   r   r   Útest_idF   r   zSymtableTest.test_idc                 C   s$   |   | j ¡ ¡ |  | j ¡ ¡ d S r   )ÚassertFalser   Zis_optimizedÚ
assertTruer   r   r   r   r   Útest_optimizedM   s   zSymtableTest.test_optimizedc                 C   sD   |   | j ¡ ¡ |   | j ¡ ¡ |   | j ¡ ¡ |  | j ¡ ¡ d S r   )r   r   Z	is_nestedr   r   r   r   r   r   r   r   Útest_nestedR   s   zSymtableTest.test_nestedc                 C   s4   |   | j ¡ ¡ |   | j ¡ ¡ |  | j ¡ ¡ d S r   )r   r   Zhas_childrenr   r   r   r   r   r   r   Útest_childrenX   s   zSymtableTest.test_childrenc                 C   s(   |   | j ¡ d¡ |   | j ¡ d¡ d S )Nr   é   )r   r   Z
get_linenor   r   r   r   r   Útest_lineno]   ó   zSymtableTest.test_linenoc                 C   sh   | j }|  t| ¡ ƒg d¢¡ g d¢}|  t| ¡ ƒ|¡ |  t| ¡ ƒg d¢¡ |  | j ¡ d¡ d S )N)ÚaÚbÚkwÚvar)r%   r&   r   r'   r   Úsome_varr(   Úx)ÚbarÚglobÚsome_assigned_global_var)r*   )r   r   ÚsortedZget_parametersZ
get_localsZget_globalsr   Z	get_frees)r   ÚfuncÚexpectedr   r   r   Útest_function_infoa   s   zSymtableTest.test_function_infoc                 C   sÊ   |   | j d¡ ¡ ¡ |  | j d¡ ¡ ¡ |   | j d¡ ¡ ¡ |   | j d¡ ¡ ¡ |  | j d¡ ¡ ¡ |  | j d¡ ¡ ¡ |   | j d¡ ¡ ¡ |   | j d¡ ¡ ¡ |   | j d¡ ¡ ¡ d S )Nr,   r+   r*   Zinstance_varÚsome_non_assigned_global_varr-   )	r   r   ÚlookupÚ	is_globalr   Zis_declared_globalr   r   r   r   r   r   r   Útest_globalsi   s   zSymtableTest.test_globalsc                 C   sF   |   | j d¡ ¡ ¡ |  | j d¡ ¡ ¡ d}|  | j ¡ |¡ d S )Nr)   )r)   )r   r   r3   Zis_nonlocalr   r   r   Zget_nonlocals)r   r0   r   r   r   Útest_nonlocalu   s   zSymtableTest.test_nonlocalc                 C   s\   |   | j d¡ ¡ ¡ |  | j d¡ ¡ ¡ |   | j d¡ ¡ ¡ |   | j d¡ ¡ ¡ d S )Nr*   r+   r2   r-   )r   r   r3   Úis_localr   r   r   r   r   r   Ú
test_local{   s   zSymtableTest.test_localc                 C   ó   |   | j d¡ ¡ ¡ d S )Nr*   )r   r   r3   Zis_freer   r   r   r   Ú	test_free‚   ó   zSymtableTest.test_freec                 C   sF   |   | j d¡ ¡ ¡ |   | j d¡ ¡ ¡ |  | j d¡ ¡ ¡ d S )Nr*   r   )r   r   r3   Zis_referencedr   r   r   r   r   r   Útest_referenced…   s   zSymtableTest.test_referencedc                 C   s:   dD ]}|   | j |¡ ¡ ¡ q|  | j d¡ ¡ ¡ d S )N)r%   r(   r'   r*   )r   r   r3   Zis_parameterr   )r   Zsymr   r   r   Útest_parametersŠ   s   zSymtableTest.test_parametersc                 C   s6   |   t| j ¡ ƒt| j ¡ ƒ¡ |  t| jjd¡ d S )NZnot_here)r   Úlenr   Zget_identifiersZget_symbolsÚassertRaisesÚKeyErrorr3   r   r   r   r   Útest_symbol_lookup   s   ÿzSymtableTest.test_symbol_lookupc                 C   sÒ   |   | j d¡ ¡ ¡ |   | j d¡ ¡ ¡ |   | j d¡ ¡ ¡ |   | j d¡ ¡ ¡ |   | j d¡ ¡ ¡ |  | j d¡ ¡ ¡ |   | j d¡ ¡ | ju ¡ | j d¡}|  t	| 
¡ ƒd¡ |  t|j¡ d S )Nr   r   r   r   Znamespace_testr*   é   )r   r   r3   Úis_namespacer   r   r   Zget_namespacer   r>   Zget_namespacesr?   Ú
ValueError)r   Zns_testr   r   r   Útest_namespaces•   s   zSymtableTest.test_namespacesc                 C   sr   |   | j d¡ ¡ ¡ |   | j d¡ ¡ ¡ |   | j d¡ ¡ ¡ |   | j d¡ ¡ ¡ |  | j d¡ ¡ ¡ d S )Nr*   r+   r   r   )r   r   r3   Zis_assignedr   r   r   r   r   r   r   r   Útest_assigned¢   s
   zSymtableTest.test_assignedc                 C   sÌ   t   ddd¡}| ¡ d }|  | d¡ ¡ ¡ |  | d¡ ¡ ¡ |  | d¡ ¡ ¡ t   ddd¡}| ¡ d }|  | d¡ ¡ ¡ |  | d¡ ¡ ¡ t   ddd¡}|  | d¡ ¡ ¡ t   ddd¡}d S )	Nzdef f():
    x: int
Útestr   r   r*   zdef f():
    x = 1
zglobal x
x: intz=def g():
    x = 2
    def f():
        nonlocal x
    x: int)Úsymtabler   r   r3   r7   Zis_annotatedr   r4   )r   Zst1Zst2Zst3Zst4Zst5Zst6r   r   r   Útest_annotated©   s   ûzSymtableTest.test_annotatedc                 C   r9   )NÚsys)r   r   r3   Zis_importedr   r   r   r   Útest_importedÂ   r;   zSymtableTest.test_importedc                 C   sR   |   | j ¡ d¡ |   | j ¡ d¡ |   | j d¡ ¡ d¡ |   | j ¡ d¡ d S )Nr   r   r*   r   )r   r   r   r   r3   r   r   r   r   r   Ú	test_nameÅ   s   zSymtableTest.test_namec                 C   s   |   | j ¡ d¡ d S )N)r   )r   r   Zget_methodsr   r   r   r   Útest_class_infoË   s   zSymtableTest.test_class_infoc              	      s  ‡ fdd„}|ddƒ |ddƒ t   ddd	¡ ˆ  t¡& ˆ  t¡ t   dtdƒd	¡ W d   ƒ n1 s6w   Y  W d   ƒ n1 sEw   Y  ˆ  t¡ t   dtdƒd	¡ W d   ƒ n1 scw   Y  ˆ  t¡ t   dtdƒd	¡ W d   ƒ d S 1 s‚w   Y  d S )
Nc              
      sx   z	t   | dd¡ W n( ty1 } zˆ  |jd¡ ˆ  |jd¡ ˆ  |j|¡ W Y d }~d S d }~ww ˆ  d| f ¡ d S )Nr   r   é   zno SyntaxError for %r)rH   ÚSyntaxErrorr   ÚfilenameÚlinenoÚoffsetZfail)Z
brokencoderR   Úer   r   r   ÚcheckfilenameÑ   s   €ýz9SymtableTest.test_filename_correct.<locals>.checkfilenamezdef f(x): foo)(r"   zdef f(x): global xé   Úpasss   spamr   )rH   ZassertWarnsÚDeprecationWarningr?   Ú	TypeErrorÚ	bytearrayÚ
memoryviewÚlist)r   rT   r   r   r   Útest_filename_correctÎ   s"   
	
ÿþ€ ÿ"ÿz"SymtableTest.test_filename_correctc                 C   ó   t   ddd¡}d S )NÚ42r   Úeval©rH   ©r   Úsymbolsr   r   r   Ú	test_evalå   ó   zSymtableTest.test_evalc                 C   r]   )Nr^   r   Zsingler`   ra   r   r   r   Útest_singleè   rd   zSymtableTest.test_singlec                 C   r]   )Nzdef f(x): return xr   r   r`   ra   r   r   r   Ú	test_execë   rd   zSymtableTest.test_execc                 C   sJ   t   t d¡dd¡}|  t|dƒ¡ d}t   |dd¡}|  t|dƒ¡ d S )NÚutf8r   r   r   s+   # -*- coding: iso8859-15 -*-
class ´: pass
u   Å½)rH   Ú	TEST_CODEÚencodeZassertIsNotNoner	   )r   r   Úcoder   r   r   Ú
test_bytesî   s
   zSymtableTest.test_bytesc                 C   s(   |   t| jƒd¡ |   t| jƒd¡ d S )Nz<SymbolTable for module ?>z$<Function SymbolTable for spam in ?>)r   Ústrr   r   r   r   r   r   Útest_symtable_repr÷   r$   zSymtableTest.test_symtable_reprN)'Ú__name__Ú
__module__Ú__qualname__rH   rh   r   r	   r   r   r   r   r   r   r   r   r   r    r!   r#   r1   r5   r6   r8   r:   r<   r=   rA   rE   rF   rI   rK   rL   rM   r\   rc   re   rf   rk   rm   r   r   r   r   r
   4   sD    





	r
   Ú__main__)	Ú__doc__rH   Zunittestrh   r	   ZTestCaser
   rn   Úmainr   r   r   r   Ú<module>   s    % Iÿ