a 5êdg‚[ã@sìddlmZddlmZmZmZmZddlZddlZddl Z ddl m Z ddl Z ddl Z ddlZ ddlZddlZddlZGdd„dejƒZGdd„dejƒZGd d „d ejƒZGd d „d ejƒZGd d„dejƒZdd„ZedkrèeƒdS)é)ÚPath)Ú run_unittestÚunloadÚcheck_warningsÚ CleanImportN)Úspec_from_file_locationc@s\eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dS)Ú PkgutilTestscCs.t ¡|_| tj|j¡tj d|j¡dS©Nr) ÚtempfileÚmkdtempÚdirnameÚ addCleanupÚshutilÚrmtreeÚsysÚpathÚinsert©Úself©rú-/usr/local/lib/python3.9/test/test_pkgutil.pyÚsetUps zPkgutilTests.setUpcCs tjd=dSr )rrrrrrÚtearDownszPkgutilTests.tearDowncCsÜd}d}tj |j|¡}t |¡ttj |d¡dƒ}| ¡ttj |d¡dƒ}| |¡| ¡t tj |d¡¡ttj |dd¡dƒ}| |¡| ¡t  |d¡}|  ||¡t  |d¡}|  ||¡t j |=dS)NÚtest_getdata_filesysó%Hello, world! Second line Third lineú __init__.pyÚwbúres.txtÚsubú sub/res.txt) ÚosrÚjoinr ÚmkdirÚopenÚcloseÚwriteÚpkgutilÚget_dataÚ assertEqualrÚmodules)rÚpkgÚ RESOURCE_DATAZ package_dirÚfÚres1Úres2rrrrs$       z!PkgutilTests.test_getdata_filesysc Csðd}d}d}tj |j|¡}t |d¡}| |dd¡| |d|¡| |d|¡| ¡tj  d |¡t   |d ¡}|  ||¡t   |d ¡}|  ||¡g}t   |g¡D]} | | t j¡| | j¡q®|  |dg¡tjd =tj|=dS) Nútest_getdata_zipfile.zipÚtest_getdata_zipfilerÚwú /__init__.pyÚú/res.txtz /sub/res.txtrrr)r rr!r ÚzipfileÚZipFileÚwritestrr$rrr&r'r(Ú iter_modulesÚassertIsInstanceÚ ModuleInfoÚappendÚnamer)) rÚzipr*r+Úzip_fileÚzr-r.ÚnamesÚ moduleinforrrr0;s*     z!PkgutilTests.test_getdata_zipfilec Cs0d}d}d}tj |j|¡}t |d¡}| |dd¡| |d|¡| ¡tj  d|¡ztt   |d ¡}|  ||¡g}t   t|ƒg¡D]}| |t j¡| |j¡qŒ|  ||g¡Wtjd=tj |d¡ntjd=tj |d¡0d } | t| ¡tt   d ¡ƒWdƒn1s"0YdS) Nr/r0rr1r2r3r4rrz9path must be None or list of paths to look for modules inZ invalid_path)r rr!r r5r6r7r$rrr&r'r(r8rr9r:r;r<r)ÚpopZassertRaisesRegexÚ ValueErrorÚlist) rr=r*r+r>r?Úresr@rAZ expected_msgrrrÚtest_issue44061_iter_modules^s0   ÿz)PkgutilTests.test_issue44061_iter_modulescCsRd}tj |j|¡}t |d¡| tj|¡tj|jgdD]}|  d¡q>dS)NZunreadable_packager)rzunexpected package found) r rr!r r"r Úrmdirr&Ú walk_packagesÚfail)rZ package_nameÚdÚtrrrÚtest_unreadable_dir_on_syspath…s  z+PkgutilTests.test_unreadable_dir_on_syspathc Cshd}tj |j|¡}t |¡ttj |d¡dƒ}| ¡t tj |d¡¡ttj |dd¡dƒ}| ¡ttj |dd¡dƒ}| ¡d}tj |j|¡}t |¡ttj |d¡dƒ}| ¡t tj |d¡¡ttj |dd¡dƒ}| ¡ttj |dd¡dƒ}| ¡gd¢}dd„t |jg¡Dƒ}|  ||¡|D]}|  d ¡rXqDt j |=qDdS) NÚtest_walkpackages_filesysrrrzmod.py)rzsub.test_walkpackages_filesysz!sub.test_walkpackages_filesys.modrMztest_walkpackages_filesys.subz!test_walkpackages_filesys.sub.modcSsg|] }|d‘qS©ér©Ú.0ÚerrrÚ °óz:PkgutilTests.test_walkpackages_filesys..Úmod) r rr!r r"r#r$r&rHr(Úendswithrr)) rÚpkg1Zpkg1_dirr,Úpkg2Zpkg2_dirÚexpectedÚactualr*rrrrMs6    z&PkgutilTests.test_walkpackages_filesysc Csd}d}d}tj |j|¡}t |d¡}| |dd¡| |d|dd¡| |d|dd¡| |dd¡| |d|dd¡| |d|dd¡| ¡tj  d |¡gd ¢}d d „t   |g¡Dƒ}|  ||¡tjd =|D]}|  d ¡rqôtj|=qôdS)Nztest_walkpackages_zipfile.zipÚtest_walkpackages_zipfilerr1r2r3ú/z/mod.pyr)rzsub.test_walkpackages_zipfilez!sub.test_walkpackages_zipfile.modr[ztest_walkpackages_zipfile.subz!test_walkpackages_zipfile.sub.modcSsg|] }|d‘qSrNrrPrrrrSÒrTz:PkgutilTests.test_walkpackages_zipfile..rU)r rr!r r5r6r7r$rrr&rHr(rVr)) rr=rWrXr>r?rYrZr*rrrr[¸s*   z&PkgutilTests.test_walkpackages_zipfilecCs„d}| ttf¡tt |¡ƒWdƒn1s60Yd}| ttf¡tt |¡ƒWdƒn1sv0YdS)NZtest_dirstest_dir)Ú assertRaisesÚ TypeErrorrCrDr&rH)rÚ str_inputZ bytes_inputrrrÚ2test_walk_packages_raises_on_string_or_bytes_inputÛs ,z?PkgutilTests.test_walk_packages_raises_on_string_or_bytes_inputc CsÆddl}ddl}dtfdtjfdtjjfd|fd|fd|jfd|jfd |jjfd |jjfd |jjjfd |jjjfd tfdtfdtj fdtj fdt fdt fdtjff}dt fdt fdt fdt fdt fdt fdt fdt fdtfdt fdt fdtfdtfd tfd!t fd"t fd#t ff}d$}|D]Ô}tj |j|¡}ztj|dd%WntyVYqYn0tj |d&¡}t|d'ƒ"}| d¡| ¡Wdƒn1sš0Yt ¡t |¡}|||ff7}t|ƒdkr||dd(…t ff7}q|d)t ff7}|D]N\} } |j| d*&t | ¡} | | | ¡Wdƒn1s@0Yqþ|D]n\} } |j| d*F| | ¡t | ¡Wdƒn1s”0YWdƒn1s´0YqRdS)+Nrr zos.pathzos.path:pathsepÚloggingzlogging:zlogging.handlerszlogging.handlers:zlogging.handlers:SysLogHandlerzlogging.handlers.SysLogHandlerz(logging.handlers:SysLogHandler.LOG_ALERTz(logging.handlers.SysLogHandler.LOG_ALERTz builtins.intz builtins:intzbuiltins.int.from_byteszbuiltins:int.from_byteszbuiltins.ZeroDivisionErrorzbuiltins:ZeroDivisionErrorzos:pathrOg@Tr3z?abczabc/fooÚfoozos.foozos.foo:zos.pth:pathsepzlogging.handlers:NoSuchHandlerz,logging.handlers:SysLogHandler.NO_SUCH_VALUEz,logging.handlers.SysLogHandler.NO_SUCH_VALUEÚZeroDivisionErrorz os.path.9abcZ9abc) u वमसõéõÈu안녕하세요u ã•よãªã‚‰uã‚りãŒã¨ã†u ХорошоuÑпаÑибоu现代汉语常用字表©Úexist_okrr1éÿÿÿÿu ०वमस)Ús)raZlogging.handlersr rÚpathsepÚhandlersZ SysLogHandlerZ LOG_ALERTÚintÚ from_bytesrcr^rCÚ ImportErrorÚAttributeErrorr!r ÚmakedirsÚUnicodeEncodeErrorr#r%ÚflushÚ importlibÚinvalidate_cachesÚ import_moduleÚlenZsubTestr&Ú resolve_namer(r]) rraZ success_casesZ failure_casesZ unicode_wordsZuwrJr,rUrirYÚoÚexcrrrÚtest_name_resolutionåsˆ   ÿÿìï    (   0  z!PkgutilTests.test_name_resolutionN) Ú__name__Ú __module__Ú __qualname__rrrr0rFrLrMr[r`rzrrrrrs#' (# rc@sLeZdZGdd„deƒZGdd„deƒZdd„Zdd„Zd d „Zd d „Z d S)ÚPkgutilPEP302Testsc@s$eZdZdd„Zdd„Zdd„ZdS)zPkgutilPEP302Tests.MyTestLoadercCsdS©Nr)rÚspecrrrÚ create_moduleDsz-PkgutilPEP302Tests.MyTestLoader.create_modulecCs|j dd¡d|jd<dS)NÚloadsrrO)Ú__dict__Úget)rrUrrrÚ exec_moduleGsz+PkgutilPEP302Tests.MyTestLoader.exec_modulecCsdS)Nú Hello, world!r)rrrrrr'Ksz(PkgutilPEP302Tests.MyTestLoader.get_dataN)r{r|r}rr…r'rrrrÚ MyTestLoaderCsr‡c@seZdZddd„ZdS)z!PkgutilPEP302Tests.MyTestImporterNcCs t ¡}t|d|jj|gdS)Nz<%s>)ÚloaderÚsubmodule_search_locations)r~r‡rÚ __class__r{)rÚfullnamerÚtargetrˆrrrÚ find_specOs  ýz+PkgutilPEP302Tests.MyTestImporter.find_spec)NN)r{r|r}rrrrrÚMyTestImporterNsrŽcCstj d| ¡¡dSr )rÚ meta_pathrrŽrrrrrVszPkgutilPEP302Tests.setUpcCs tjd=dSr )rrrrrrrYszPkgutilPEP302Tests.tearDowncCs | t dd¡d¡tjd=dS)NrbÚdummyr†)r(r&r'rr)rrrrÚtest_getdata_pep302\sz&PkgutilPEP302Tests.test_getdata_pep302cCsDddl}| |jd¡| t dd¡d¡| |jd¡tjd=dS)NrrOrbrr†)rbr(r‚r&r'rr))rrbrrrÚtest_alreadyloadedas z%PkgutilPEP302Tests.test_alreadyloadedN) r{r|r}Úobjectr‡rŽrrr‘r’rrrrr~As  r~c@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚExtendPathTestscCspt ¡}tj d|¡tj ||¡}t |¡ttj |d¡dƒ}|  d¡Wdƒn1sb0Y|S)Nrrr1zKfrom pkgutil import extend_path __path__ = extend_path(__path__, __name__) ) r r rrrr r!r"r#r%)rÚpkgnamer ZpkgdirÚflrrrÚ create_initos (zExtendPathTests.create_initcCsTtj |||d¡}t|dƒ"}td |¡|dWdƒn1sF0YdS)Nú.pyr1zvalue={})Úfile)r rr!r#ÚprintÚformat)rr r•Zsubmodule_nameÚvalueÚ module_namer–rrrÚcreate_submodulezs z ExtendPathTests.create_submodulec CsÖd}| |¡}| |¡}| ||dd¡| ||dd¡ddl}ddl}| |jjd¡| |jjd¡| t|j ƒtt j   ||¡t j   ||¡gƒ¡t  |¡t  |¡tj d=tj d=tjd=tjd=tjd=dS)NrbÚbarrÚbazrOúfoo.barúfoo.baz)r—ržÚfoo.barÚfoo.bazr(rŸrœr ÚsortedÚ__path__r rr!rrrr)©rr•Z dirname_0Z dirname_1rbrrrÚ test_simples*    ÿÿ  zExtendPathTests.test_simplec Csðtj}tj}d}d}| |¡}tj ||¡}d ||¡}tj   |d¡tj   |d¡zV|  |||d¡t   |¡t||ƒƒ}||ƒ} |D]r} t | |¡} | j} z | j} Wnty¼Yn0| | t jj¡| | | ¡| | t jj¡| t | |¡¡qŠ| t¡t|dƒƒWdƒn1s,0Y| t¡t|dƒƒWdƒn1sd0YWt |¡tjd=ztj d=tj d=WntyªYn0n>t |¡tjd=ztj d=tj d=WntyèYn00dS)NÚspamZeggsz{}.{}rzinvalid.modulez.spamz spam.eggs)r&Úiter_importersÚ get_importerr—r rr!r›rr)rBržrsrurDÚ _get_specrˆror9Ú machineryÚ FileFinderr(ÚSourceFileLoaderÚ assertIsNoner]rnrrÚKeyError) rrªr«r•Úmodnamer Zpathitemr‹Z importersZexpected_importerÚfinderr€rˆrrrÚtest_iter_importersœsZ        ÿ , .  ú  z#ExtendPathTests.test_iter_importersc Csìd}| |¡}| |¡}| ||dd¡t tj ||d¡¡| ||dd¡ddl}ddl}| |j j d¡| |j j d¡| t |j ƒt tj ||¡tj ||¡gƒ¡t |¡t |¡tjd=tjd=tjd=tjd=tjd=dS) NrbrŸrrr rOr¡r¢)r—ržr Úunlinkrr!r£r¤r(rŸrœr r¥r¦rrrr)r§rrrÚtest_mixed_namespaceÌs,    ÿÿ  z$ExtendPathTests.test_mixed_namespaceN)r{r|r}r—ržr¨r´r¶rrrrr”ns  0r”c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚNestedNamespacePackageTestcCst ¡|_tjdd…|_dSr)r r ÚbasedirrrÚold_pathrrrrrís z NestedNamespacePackageTest.setUpcCs |jtjdd…<t |j¡dSr)r¹rrrrr¸rrrrrñsz#NestedNamespacePackageTest.tearDowncCs€| dd¡\}}tj |j| dtjj¡¡}tj|ddttj ||d¡dƒ}|  |¡Wdƒn1sr0YdS)NÚ.rOTrfr˜r1) Úrsplitr rr!r¸ÚreplaceÚseprpr#r%)rr<ÚcontentsÚbaseÚfinalÚ base_pathr,rrrrõs z(NestedNamespacePackageTest.create_modulecCsd}| d|¡| d|¡| d|¡| d|¡| dd¡| dd ¡tj d tj |jd ¡¡tj d tj |jd ¡¡d dl}| t d ¡|  t |j ƒd¡d dl }| t d¡|  t |jj ƒd¡d dlm}d dlm}|  |d¡|  |d¡dS)NzBimport pkgutil; __path__ = pkgutil.extend_path(__path__, __name__)za.pkg.__init__zb.pkg.__init__za.pkg.subpkg.__init__zb.pkg.subpkg.__init__za.pkg.subpkg.czc = 1zb.pkg.subpkg.dzd = 2rÚaÚbr*éz pkg.subpkg)Úc)rJrO)rrrrr r!r¸r*r rr(rvr¦Z pkg.subpkgZsubpkgZ pkg.subpkg.crÅZ pkg.subpkg.drJ)rZpkgutil_boilerplater*rÅrJrrrÚ test_nestedüs(ÿ           z&NestedNamespacePackageTest.test_nestedN)r{r|r}rrrrÆrrrrr·ësr·c@s„eZdZdd„Zdd„Zdd„Zdd„Ze ed kd ¡d d „ƒZ d d„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„ZdS)ÚImportlibMigrationTestscCs tdtfƒS)Nz5This emulation is deprecated, use 'importlib' instead)rÚDeprecationWarningrrrrÚcheck_deprecateds ÿÿz(ImportlibMigrationTests.check_deprecatedcCs6| ¡t d¡Wdƒn1s(0YdS©Nr3)rÉr&Z ImpImporterrrrrÚtest_importer_deprecateds z0ImportlibMigrationTests.test_importer_deprecatedcCs<| ¡ t dddd¡Wdƒn1s.0YdSrÊ)rÉr&Z ImpLoaderrrrrÚtest_loader_deprecated"s z.ImportlibMigrationTests.test_loader_deprecatedcCsltƒR}| t d¡¡| t d¡¡| t d¡¡| t|jƒd¡Wdƒn1s^0YdS©Nrr z test.supportr)rÚassertIsNotNoner&Ú get_loaderr(rvÚwarnings©rr1rrrÚ test_get_loader_avoids_emulation&s z8ImportlibMigrationTests.test_get_loader_avoids_emulationÚ__main__znot compatible with __main__cCsbt}bzPtƒ2}| t t¡¡| t|jƒd¡Wdƒn1sF0YW|an|a0dSr ) Ú __loader__rrÎr&rÏr{r(rvrÐ)rZ this_loaderr1rrrÚ0test_get_loader_handles_missing_loader_attribute-s2zHImportlibMigrationTests.test_get_loader_handles_missing_loader_attributecCs^d}ttƒ|ƒ}|`t|ƒ$|tj|<t |¡}Wdƒn1sF0Y| |¡dS©Nr©©ÚtyperÚ__spec__rr)r&rÏr°©rr<rUrˆrrrÚ.test_get_loader_handles_missing_spec_attribute9s   (zFImportlibMigrationTests.test_get_loader_handles_missing_spec_attributecCs`d}ttƒ|ƒ}d|_t|ƒ$|tj|<t |¡}Wdƒn1sH0Y| |¡dSrÖr×rÚrrrÚ+test_get_loader_handles_spec_attribute_noneBs   (zCImportlibMigrationTests.test_get_loader_handles_spec_attribute_nonecCs>d}dtj|<zt |¡}Wtj|=n tj|=0| |¡dS©Nz totally bogus)rr)r&rÏr°©rr<rˆrrrÚ#test_get_loader_None_in_sys_modulesKs   z;ImportlibMigrationTests.test_get_loader_None_in_sys_modulescCsd}t |¡}| |¡dSrÝ)r&Ú find_loaderr°rÞrrrÚtest_find_loader_missing_moduleTs z7ImportlibMigrationTests.test_find_loader_missing_modulecCsltƒR}| t d¡¡| t d¡¡| t d¡¡| t|jƒd¡Wdƒn1s^0YdSrÍ)rrÎr&ràr(rvrÐrÑrrrÚ!test_find_loader_avoids_emulationYs z9ImportlibMigrationTests.test_find_loader_avoids_emulationcCsLtƒ2}| t d¡¡| t|jƒd¡Wdƒn1s>0YdS)Nz*??r)rr°r&r«r(rvrÐrÑrrrÚ"test_get_importer_avoids_emulation`sz:ImportlibMigrationTests.test_get_importer_avoids_emulationcCs4zt tdƒ¡Wnty.| d¡Yn0dS)Nz/homez3Unexpected AttributeError when calling get_importer)r&r«rrorIrrrrÚtest_issue44061fs z'ImportlibMigrationTests.test_issue44061cCsJtƒ0}t ¡D]}q| t|jƒd¡Wdƒn1s<0YdSr )rr&rªr(rvrÐ)rr1ZimporterrrrÚ$test_iter_importers_avoids_emulationlszs*  /-})^