a
    äzeZ$  ã                   @   sB   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 )é    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   ú(/usr/lib/python3.9/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;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?   s
    zSymtableTest.test_typec                 C   s$   |   | j ¡ ¡ |  | j ¡ ¡ d S r   )ÚassertFalser   Zis_optimizedÚ
assertTruer   r   r   r   r   Útest_optimizedF   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_nestedK   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_childrenQ   s    zSymtableTest.test_childrenc                 C   s(   |   | j ¡ d¡ |   | j ¡ d¡ d S )Nr   é   )r   r   Z
get_linenor   r   r   r   r   Útest_linenoV   s    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_infoZ   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_globalsb   s    zSymtableTest.test_globalsc                 C   sF   |   | j d¡ ¡ ¡ |  | j d¡ ¡ ¡ d}|  | j ¡ |¡ d S )Nr&   )r&   )r   r   r0   Zis_nonlocalr   r   r   Zget_nonlocals)r   r-   r   r   r   Útest_nonlocaln   s    zSymtableTest.test_nonlocalc                 C   s\   |   | j d¡ ¡ ¡ |  | j d¡ ¡ ¡ |   | j d¡ ¡ ¡ |   | j d¡ ¡ ¡ d S )Nr'   r(   r/   r*   )r   r   r0   Úis_localr   r   r   r   r   r   Ú
test_localt   s    zSymtableTest.test_localc                 C   s   |   | j d¡ ¡ ¡ d S )Nr'   )r   r   r0   Zis_freer   r   r   r   Ú	test_free{   s    zSymtableTest.test_freec                 C   sF   |   | j d¡ ¡ ¡ |   | j d¡ ¡ ¡ |  | j d¡ ¡ ¡ d S )Nr'   r   )r   r   r0   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   r0   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ÚKeyErrorr0   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   r0   Úis_namespacer   r   r   Zget_namespacer   r9   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   r0   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   r0   r4   Zis_annotatedr   r1   )r   Zst1Zst2Zst3Zst4Zst5Zst6r   r   r   Útest_annotated¢   s    ûzSymtableTest.test_annotatedc                 C   s   |   | j d¡ ¡ ¡ d S )NÚsys)r   r   r0   Zis_importedr   r   r   r   Útest_imported»   s    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   r0   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¡L ˆ  t¡" t   dtdƒd	¡ W d   ƒ n1 sl0    Y  W d   ƒ n1 sŠ0    Y  ˆ  t¡" t   dtdƒd	¡ W d   ƒ n1 sÆ0    Y  ˆ  t¡" t   dtdƒd	¡ W d   ƒ n1 s0    Y  d S )
Nc              
      sv   zt   | dd¡ W nN ty` } z6ˆ  |jd¡ ˆ  |jd¡ ˆ  |j|¡ W Y d }~nd }~0 0 ˆ  d| f ¡ d S )Nr   r   é   zno SyntaxError for %r)rC   ÚSyntaxErrorr   ÚfilenameÚlinenoÚoffsetZfail)Z
brokencoderM   Úer   r   r   ÚcheckfilenameÊ   s    $z9SymtableTest.test_filename_correct.<locals>.checkfilenamezdef f(x): foo)(r    zdef f(x): global xé   Úpasss   spamr   )rC   ZassertWarnsÚDeprecationWarningr:   Ú	TypeErrorÚ	bytearrayÚ
memoryviewÚlist)r   rO   r   r   r   Útest_filename_correctÇ   s    	

ÿN0z"SymtableTest.test_filename_correctc                 C   s   t   ddd¡}d S )NÚ42r   Úeval©rC   ©r   Zsymbolsr   r   r   Ú	test_evalÞ   s    zSymtableTest.test_evalc                 C   s   t   ddd¡}d S )NrX   r   ZsinglerZ   r[   r   r   r   Útest_singleá   s    zSymtableTest.test_singlec                 C   s   t   ddd¡}d S )Nzdef f(x): return xr   r   rZ   r[   r   r   r   Ú	test_execä   s    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   Å½)rC   Ú	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ð   s    zSymtableTest.test_symtable_reprN)&Ú__name__Ú
__module__Ú__qualname__rC   r`   r   r	   r   r   r   r   r   r   r   r   r   r   r!   r.   r2   r3   r5   r6   r7   r8   r<   r@   rA   rD   rF   rG   rH   rW   r\   r]   r^   rc   re   r   r   r   r   r
   4   s@   





	r
   Ú__main__)rC   Zunittestr`   r	   ZTestCaser
   rf   Úmainr   r   r   r   Ú<module>   s   % B