a 5êdgZ$ã@sFdZddlZddlZdZdd„ZGdd„dejƒZedkrBe ¡dS) 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 cCs&| ¡D]}| ¡|kr|SqdS©N)Ú get_childrenÚget_name)ÚblockÚnameZch©rú./usr/local/lib/python3.9/test/test_symtable.pyÚ find_block.s  r c@seZdZe edd¡ZeedƒZeedƒZeedƒZ ee dƒZ ee dƒZ eedƒZ d d „Z d d „Zd d„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Z d1d2„Z!d3d4„Z"d5d6„Z#d7d8„Z$d9d:„Z%d;S)<Ú SymtableTestú?ÚexecÚMineÚa_methodÚspamÚinternalÚother_internalÚfoocCs^| |j ¡d¡| |j ¡d¡| |j ¡d¡| |j ¡d¡| |j ¡d¡dS)NÚmoduleÚclassÚfunction)Ú assertEqualÚtopZget_typer rrr©ÚselfrrrÚ test_type?s zSymtableTest.test_typecCs$| |j ¡¡| |j ¡¡dSr)Ú assertFalserZ is_optimizedÚ assertTruerrrrrÚtest_optimizedFszSymtableTest.test_optimizedcCsD| |j ¡¡| |j ¡¡| |j ¡¡| |j ¡¡dSr)rrZ is_nestedr rrrrrrrÚ test_nestedKszSymtableTest.test_nestedcCs4| |j ¡¡| |j ¡¡| |j ¡¡dSr)rrZ has_childrenr rrrrrrÚ test_childrenQszSymtableTest.test_childrencCs(| |j ¡d¡| |j ¡d¡dS)Nré)rrZ get_linenorrrrrÚ test_linenoVszSymtableTest.test_linenocCsh|j}| t| ¡ƒgd¢¡gd¢}| t| ¡ƒ|¡| t| ¡ƒgd¢¡| |j ¡d¡dS)N)ÚaÚbÚkwÚvar)r"r#rr$rÚsome_varr%Úx)ÚbarÚglobÚsome_assigned_global_var)r')rrÚsortedZget_parametersZ get_localsZ get_globalsrZ get_frees)rÚfuncÚexpectedrrrÚtest_function_infoZs zSymtableTest.test_function_infocCsÊ| |j d¡ ¡¡| |j d¡ ¡¡| |j d¡ ¡¡| |j d¡ ¡¡| |j d¡ ¡¡| |j d¡ ¡¡| |j d¡ ¡¡| |j d¡ ¡¡| |j d¡ ¡¡dS)Nr)r(r'Z instance_varÚsome_non_assigned_global_varr*) rrÚlookupÚ is_globalrZis_declared_globalrr rrrrrÚ test_globalsbszSymtableTest.test_globalscCsF| |j d¡ ¡¡| |j d¡ ¡¡d}| |j ¡|¡dS)Nr&)r&)rrr0Z is_nonlocalrrrZ get_nonlocals)rr-rrrÚ test_nonlocalnszSymtableTest.test_nonlocalcCs\| |j d¡ ¡¡| |j d¡ ¡¡| |j d¡ ¡¡| |j d¡ ¡¡dS)Nr'r(r/r*)rrr0Úis_localrrrrrrÚ test_localtszSymtableTest.test_localcCs| |j d¡ ¡¡dS)Nr')rrr0Zis_freerrrrÚ test_free{szSymtableTest.test_freecCsF| |j d¡ ¡¡| |j d¡ ¡¡| |j d¡ ¡¡dS)Nr'r)rrr0Z is_referencedrrrrrrÚtest_referenced~szSymtableTest.test_referencedcCs:dD]}| |j |¡ ¡¡q| |j d¡ ¡¡dS)N)r"r%r$r')rrr0Z is_parameterr)rZsymrrrÚtest_parametersƒszSymtableTest.test_parameterscCs6| t|j ¡ƒt|j ¡ƒ¡| t|jjd¡dS)NZnot_here)rÚlenrZget_identifiersZ get_symbolsÚ assertRaisesÚKeyErrorr0rrrrÚtest_symbol_lookupˆs ÿzSymtableTest.test_symbol_lookupcCsÒ| |j d¡ ¡¡| |j d¡ ¡¡| |j d¡ ¡¡| |j d¡ ¡¡| |j d¡ ¡¡| |j d¡ ¡¡| |j d¡ ¡|ju¡|j d¡}| t |  ¡ƒd¡|  t |j¡dS)Nr rrrZnamespace_testr'é) rrr0Ú is_namespacer rrZ get_namespacerr9Zget_namespacesr:Ú ValueError)rZns_testrrrÚtest_namespacesŽs zSymtableTest.test_namespacescCsr| |j d¡ ¡¡| |j d¡ ¡¡| |j d¡ ¡¡| |j d¡ ¡¡| |j d¡ ¡¡dS)Nr'r(rr)rrr0Z is_assignedrr rrrrrrÚ test_assigned›s zSymtableTest.test_assignedcCsÌt ddd¡}| ¡d}| | d¡ ¡¡| | d¡ ¡¡| | d¡ ¡¡t ddd¡}| ¡d}| | d¡ ¡¡| | d¡ ¡¡t ddd¡}| | d¡ ¡¡t ddd¡}dS) Nzdef f(): x: int Útestr rr'zdef f(): x = 1 zglobal x x: intz=def g(): x = 2 def f(): nonlocal x x: int)Úsymtablerrr0r4Z is_annotatedrr1)rZst1Zst2Zst3Zst4Zst5Zst6rrrÚtest_annotated¢s  ûzSymtableTest.test_annotatedcCs| |j d¡ ¡¡dS)NÚsys)rrr0Z is_importedrrrrÚ test_imported»szSymtableTest.test_importedcCsR| |j ¡d¡| |j ¡d¡| |j d¡ ¡d¡| |j ¡d¡dS)Nrrr'r )rrrrr0r rrrrÚ test_name¾szSymtableTest.test_namecCs| |j ¡d¡dS)N)r)rr Z get_methodsrrrrÚtest_class_infoÄszSymtableTest.test_class_infoc s‡fdd„}|ddƒ|ddƒt ddd ¡ˆ t¡Lˆ t¡"t dtdƒd ¡Wdƒn1sl0YWdƒn1sŠ0Yˆ t¡"t dtdƒd ¡Wdƒn1sÆ0Yˆ t¡"t dtdƒd ¡Wdƒn1s0YdS) Nc svzt |dd¡WnNty`}z6ˆ |jd¡ˆ |jd¡ˆ |j|¡WYd}~nd}~00ˆ d|f¡dS)Nrr ézno SyntaxError for %r)rCÚ SyntaxErrorrÚfilenameÚlinenoÚoffsetZfail)Z brokencoderMÚerrrÚ checkfilenameÊs$z9SymtableTest.test_filename_correct..checkfilenamezdef f(x): foo)(r zdef f(x): global xé Úpasssspamr )rCZ assertWarnsÚDeprecationWarningr:Ú TypeErrorÚ bytearrayÚ memoryviewÚlist)rrOrrrÚtest_filename_correctÇs   ÿN 0 z"SymtableTest.test_filename_correctcCst ddd¡}dS)NÚ42r Úeval©rC©rZsymbolsrrrÚ test_evalÞszSymtableTest.test_evalcCst ddd¡}dS)NrXr ZsinglerZr[rrrÚ test_singleászSymtableTest.test_singlecCst ddd¡}dS)Nzdef f(x): return xr r rZr[rrrÚ test_execäszSymtableTest.test_execcCsJt t d¡dd¡}| t|dƒ¡d}t |dd¡}| t|dƒ¡dS)NÚutf8r r r s+# -*- coding: iso8859-15 -*- class ´: pass uŽ)rCÚ TEST_CODEÚencodeZassertIsNotNoner )rrÚcoderrrÚ test_bytesçs zSymtableTest.test_bytescCs(| t|jƒd¡| t|jƒd¡dS)Nzz$)rÚstrrrrrrrÚtest_symtable_reprðszSymtableTest.test_symtable_reprN)&Ú__name__Ú __module__Ú __qualname__rCr`rr r rrrrrrrrrr!r.r2r3r5r6r7r8r<r@rArDrFrGrHrWr\r]r^rcrerrrrr 4s@         r Ú__main__) Ú__doc__rCZunittestr`r ZTestCaser rfÚmainrrrrÚs%B