a 5êdgïFã@sddlZddlZddlZddlZddlZddlZddlmZddlm Z ddl Z ddl Z e   ¡$e   de¡ddlZWdƒn1sŠ0YddlZdd„ZGdd„de jƒZGd d „d e jƒZGd d „d e jƒZGd d„de jƒZGdd„de jƒZedkre  ¡dS)éN)Úsupport)Ú script_helperÚignorecCs"t |¡}t ttdƒ d¡|ƒS)zXDecorator to skip a test if not running under CPython or lacking imp.load_dynamic().Ú load_dynamiczimp.load_dynamic() required)rÚ cpython_onlyÚunittestÚskipIfÚhasattrÚimp)Úmeth©r ú)/usr/local/lib/python3.9/test/test_imp.pyÚrequires_load_dynamics  ÿÿrc@s eZdZdZdd„Zdd„ZdS)Ú LockTestsz)Very basic test of import lock functions.cCs| t ¡|d|¡dS)Nz!expected imp.lock_held() to be %r)Ú assertEqualr Ú lock_held)ÚselfÚexpectedr r r Úverify_lock_states ÿzLockTests.verify_lock_statecCsˆd}t ¡}| |¡t|ƒD]}t ¡| d¡qt|ƒD] }t ¡q>| |¡|s„z t ¡WntyxYn 0| d¡dS)Né2Tz5release_lock() without lock should raise RuntimeError)r rrÚrangeÚ acquire_lockÚ release_lockÚ RuntimeErrorZfail)rZLOOPSZlock_held_at_startÚir r r ÚtestLock s        zLockTests.testLockN)Ú__name__Ú __module__Ú __qualname__Ú__doc__rrr r r r rsrc@sÜeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z e dd„ƒZ e dd„ƒZ e dd„ƒZe dd„ƒZe dd„ƒZe ejd¡dd„ƒZdd„Zd d!„Zejd"d#„ƒZd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,S)-Ú ImportTestscCst d¡}|j|_|j|_dS)Nztest.encoded_modules)Ú importlibÚ import_moduleÚ test_stringsÚ__path__Ú test_path)rÚmodr r r ÚsetUp<s zImportTests.setUpcCs2|jD]&\}}}t d|¡}| ||j¡qdS)Nztest.encoded_modules.module_)r#r!r"rÚtest)rÚmodnameÚencodingZteststrr&r r r Útest_import_encoded_moduleAs ÿz&ImportTests.test_import_encoded_modulec Csž|jD]N\}}}t d||j¡d}| |j|¡Wdƒq1sJ0Yqtj t ¡g}|  t ¡t d|¡Wdƒn1s0YdS)NÚmodule_rÚbadsyntax_pep3120) r#r Ú find_moduler%rr*ÚosÚpathÚdirnameÚ__file__Ú assertRaisesÚ SyntaxError)rr&r*Ú_Úfdr0r r r Útest_find_module_encodingGs . z%ImportTests.test_find_module_encodingc Csþ|jD]„\}}}t d||j¡\}}}|N| |d¡| |j|¡| | ¡d¡| | ¡d|¡Wdƒq1s€0Yqt d¡\}}}|J| |d¡| |jd¡| | ¡d¡| | ¡d¡Wdƒn1sð0YdS)Nr,rz# test %s encoding Útokenizeúutf-8z*"""Tokenization help for Python programs. ) r#r r.r%ZassertNotEqualrr*ÚtellÚreadline)rr&r*r5ÚfpÚfilenameÚinfor r r Útest_issue1267Ps& ÿ   ÿ&  ÿzImportTests.test_issue1267c CsÄd}tj dd¡z†t|ddƒ}| d¡Wdƒn1sB0Yt |¡\}}}| ¡| |j d¡Wtjd=t   |d¡t   |d¡n&tjd=t   |d¡t   |d¡0dS) NZtest_imp_helperrÚ.ú.pyÚwz%# coding: cp1252 u = 'test.test_imp' Úcp1252ú.pyc) Úsysr0ÚinsertÚopenÚwriter r.Úcloserr*rÚunlink)rÚ temp_mod_nameÚfiler=r>r r r Útest_issue3594cs(þzImportTests.test_issue3594c CsVt ¡}dddddddddddœ }tjdkr>| |d¡d }n | |¡}|sZ| d |¡| |¡}d |}d |}tj  |d ¡}z†tj  dtj ¡t |ddƒ}|  d¡Wdƒn1sÄ0Yt |¡\}} } |‚| |¡| | dd… |¡¡| | dd¡| | dd¡| | dtj¡t ||| | ¡} | | jd¡Wdƒn1sl0Yt ¡*t d¡t ||d¡} Wdƒn1s°0Y| | jd¡t ¡8t d¡tjsút |t |d¡¡} Wdƒn1s0Y| | jd¡tj |¡s@t |¡t |dƒ}|  d¡Wdƒn1sl0Yt ¡&t d¡t ||¡} Wdƒn1s¬0Y| | j d¡Wtjd=dD]"} t! "|| ¡t! "|| ¡qÒt! #|¡t! #d¡nFtjd=dD]"} t! "|| ¡t! "|| ¡qt! #|¡t! #d¡0dS)NsäóŒóÀóÁóà) r9Úcp1250Úcp1251rCÚcp1253Úcp1254Úcp1255Úcp1256Úcp1257Úcp1258Údarwinr9säz2can't run this test with %s as filesystem encodingZtest_imp_helper_Ztest_imp_helper_package_z __init__.pyrrArBza = 1 éýÿÿÿéÚrérzb = 2 )rArDÚ __pycache__)$rEÚgetfilesystemencodingÚplatformrÚgetÚskipTestÚdecoder/r0ÚjoinrFÚcurdirrGrHr r.ZassertIsNotNoneZ assertTrueÚendswithZ PY_SOURCEÚ load_moduleÚaÚwarningsÚcatch_warningsÚ simplefilterÚ load_sourceÚdont_write_bytecodeZ load_compiledÚcache_from_sourceÚexistsÚmkdirZ load_packageÚbrrJÚrmtree)rZ fs_encodingZ known_localesZ special_charZ decoded_charrKZtest_package_nameZinit_file_namerLr=r>r&ÚpackageÚextr r r Útest_issue5604qsŠö   ÿ ( .  0   þ$  *  ,  û zImportTests.test_issue5604cCs$tj t¡}| ttjd|g¡dS)Nr-)r/r0r1r2r3r4r r.)rr0r r r Útest_issue9319Ès  ÿzImportTests.test_issue9319cCsŒtj}tj}t ¡dt d¡}| |dj¡tj dg|¢RŽ}|  t|¡|  ||j¡|  ||j¡Wdƒn1s~0YdS)Nr/r) r/r0ÚgetenvrÚEnvironmentVarGuardr r.Ú addCleanuprIrhÚassertIsZ assertIsNot)rÚ orig_pathZ orig_getenvÚxZnew_osr r r Útest_load_from_sourceÍs    z!ImportTests.test_load_from_sourcecCsNd}t |¡}|d}|dur*| |j¡tj|g|¢RŽ}| |j|¡dS)NÚ_heapqr)r r.rzrIrhrr)rZexampler}Zfile_r&r r r Útest_issue15828_load_extensionsàs  z+ImportTests.test_issue15828_load_extensionscCs¤d}t |¡\}}}| ¡t ||¡}t d|¡}t d|¡}| |j|¡| |jd¡| |jd¡| t¡t d|¡Wdƒn1s–0YdS)NÚ_testimportmultipleZ_testimportmultiple_fooZ_testimportmultiple_barZ nonexistent)r r.rIrrrr3Ú ImportError)rÚmÚfileobjÚpathnameÚ descriptionZmod0Zmod1Zmod2r r r Ú+test_issue16421_multiple_modules_in_one_dllìs    z7ImportTests.test_issue16421_multiple_modules_in_one_dllcCsbd}d}| t¡}t ||¡Wdƒn1s40Y| ||jj¡| ||jj¡dS)Nzbogus file pathÚ extension) r3r‚r rZassertInÚ exceptionr0rÚname)rr0rŠÚerrr r r Ú"test_load_dynamic_ImportError_pathûs  *z.ImportTests.test_load_dynamic_ImportError_pathcCsbd}t |¡}|ddur&|d ¡|ddtjkrB| d¡tj|dg|dd…¢RŽdS)Nrrr^z/found module doesn't appear to be a C extensionr\)r r.rIZ C_EXTENSIONrcrh)rrŠÚfoundr r r Ú'test_load_module_extension_file_is_Nones    z3ImportTests.test_load_module_extension_file_is_NonecCsôd}z tj|=Wnty"Yn0z¨t |¡}tj d¡}t ||j ¡}|  |j |¡|  |j j |¡|  |j j |j ¡| tt|d¡|  |jd¡| tj||¡Wz tj|=WqðtyÊYqð0n"z tj|=WntyìYn00dS)Nztest.imp_dummyZ_testmultiphaseZ dummy_namei±)rEÚmodulesÚKeyErrorr!r"ÚutilÚ find_specr rÚoriginrrÚ__spec__rŠr3ÚAttributeErrorÚgetattrZ int_constr{)rrŠÚmoduleÚspecr r r Ú3test_issue24748_load_module_skips_sys_modules_checks.      ý  z?ImportTests.test_issue24748_load_module_skips_sys_modules_checkz*test meaningful only when writing bytecodecCsXt ¡<tjd}t |¡| tdtjtjdg¡Wdƒn1sJ0YdS)NrAz ^No moduler@) rÚtemp_cwdZTESTFNr/rqÚassertRaisesRegexr‚r r.)rÚsourcer r r Ú test_bug7732+s     ÿzImportTests.test_bug7732cCs2t dtjttjƒ¡}| tj¡| tj¡dS)Nr )r Z_LoadSourceCompatibilityr2rGÚget_data)rÚloaderr r r Útest_multiple_calls_to_get_data4s  ÿ z+ImportTests.test_multiple_calls_to_get_datac CsŒdt›}ttjtƒ|ƒ}t tj||¡L| td¡ t  |t d¡Wdƒn1s`0YWdƒn1s~0YdS)NÚtmpz embedded nullú) rÚtyperErrZ swap_itemr›Ú ValueErrorr rmr2)rr)r&r r r Útest_load_source;s  zImportTests.test_load_sourcecCsRt td¡}Gdd„dƒ}| t¡||ƒƒWdƒn1sD0YdS)NÚcreate_dynamicc@seZdZdZdZdS)z,ImportTests.test_issue31315..BadSpecNÚfoo)rrrrŠr“r r r r ÚBadSpecIsr¨)rZ get_attributer r3Ú TypeError)rr¦r¨r r r Útest_issue31315Ds  zImportTests.test_issue31315cCs4ddl}| |jjd¡ddl}| |jjd¡dS)NrÚfrozen)Ú_frozen_importlib_externalrr”r“Ú_frozen_importlib)rr¬r­r r r Útest_issue_35321OszImportTests.test_issue_35321cCs,| t dd¡d¡| t dd¡d¡dS)Né*shisÆçZ :}«é+s…—65øš‹9)rÚ_impÚ source_hash)rr r r Útest_source_hashZszImportTests.test_source_hashcCshgdfddgdfddgdfddgdfg}|D]6\}}|ddg}tj|Ž}| |j ¡ d¡|¡q,dS)NÚdefaultz--check-hash-based-pycsÚalwaysÚneverz-cz.import _imp; print(_imp.check_hash_based_pycs)r9)rZassert_python_okrÚoutÚstriprd)rZcasesZ interp_argsrÚargsÚresr r r Ú'test_pyc_invalidation_mode_from_cmdline^s   ü þ z3ImportTests.test_pyc_invalidation_mode_from_cmdlinec Cs¨t ¡~tddƒ}| d¡Wdƒn1s40Ytjddtjjdtj ddgd\}}}t  d|||¡}Wdƒn1sŒ0Y|  |j d ¡dS) Nzmymod.pyÚwbsx = 42 T)ÚdoraiseÚinvalidation_modeZmymodr@)r0r¯) rršrGrHÚ py_compileÚcompileÚPycInvalidationModeÚ CHECKED_HASHr r.rhrr})rr<rLr0r†r&r r r Útest_find_and_load_checked_pycms  (ý.z*ImportTests.test_find_and_load_checked_pycN)rrrr'r+r7r?rMrvrwr~rr€r‡rŒrŽr™rrrErnrr r¥rrrªr®r³r»rÃr r r r r ;s< W     ÿ    r c@s0eZdZdZdd„Zdd„Zdd„Zdd „Zd S) Ú ReloadTestszPVery basic tests to make sure that imp.reload() operates just like reload().cCs>t ¡"ddl}t |¡Wdƒn1s00YdS)Nr)rryr/r Úreload)rr/r r r Ú test_sources zReloadTests.test_sourcecCs@t d¡"ddl}t |¡Wdƒn1s20YdS)NÚtimer)rÚ CleanImportrÇr rÅ)rrÇr r r Útest_extensions zReloadTests.test_extensioncCs@t d¡"ddl}t |¡Wdƒn1s20YdS)NÚmarshalr)rrÈrÊr rÅ)rrÊr r r Ú test_builtin’s zReloadTests.test_builtincshddlm}tj d¡‰‡fdd„}| |¡| td¡t  |¡Wdƒn1sZ0YdS)Nr)ÚparserÚhtmlcsˆtjd<dS)NrÍ)rErr ©rÍr r Úcleanup›sz5ReloadTests.test_with_deleted_parent..cleanup) rÍrÌrErÚpoprzr›r‚r rÅ)rrÌrÏr rÎr Útest_with_deleted_parent—s     z$ReloadTests.test_with_deleted_parentN)rrrrrÆrÉrËrÑr r r r rÄ|s  rÄc@sPeZdZdZe ¡Ze e j j dud¡dd„ƒZ e e j j dud¡dd„ƒZ dS) Ú PEP3147TestszTests of PEP 3147.Nz1requires sys.implementation.cache_tag not be Nonec CsFtj dddd¡}tj ddddd |j¡¡}| t |d¡|¡dS)Nr§ÚbarÚbazúqux.pyr_ú qux.{}.pycT)r/r0reÚformatÚtagrr ro©rr0Úexpectr r r Útest_cache_from_source§s  ÿz#PEP3147Tests.test_cache_from_sourcez4requires sys.implementation.cache_tag to not be Nonec CsDtj ddddd |j¡¡}tj dddd¡}| t |¡|¡dS)Nr§rÓrÔr_rÖrÕ)r/r0rer×rØrr Úsource_from_cacherÙr r r Útest_source_from_cache±s  ÿz#PEP3147Tests.test_source_from_cache)rrrrr Zget_tagrØrZ skipUnlessrEÚimplementationÚ cache_tagrÛrÝr r r r rÒ¢sÿ ÿrÒc@s&eZdZe ejdud¡dd„ƒZdS)ÚNullImporterTestsNzNeed an undecodeable filenamec Cs@tj}t |¡z| ttj|¡Wt |¡n t |¡0dS)N) rÚTESTFN_UNENCODABLEr/rqr3r‚r Z NullImporterÚrmdir)rrŠr r r Útest_unencodeable¾s  z#NullImporterTests.test_unencodeable)rrrrrrrárãr r r r rà½s ÿràÚ__main__)r!Úimportlib.utilr/Zos.pathr¿rEr(rZ test.supportrrrjrkrlÚDeprecationWarningr r±rZTestCaserr rÄrÒràrÚmainr r r r Ús.    &"C&