o
    HXîh×T  ã                   @   sê   d dl mZmZ d dlmZ d dlZd dlZd dlZd dlm	Z	 d dl
Z
d dlZd dlZd dlZd dlZd dlZG dd„ dejƒZG dd„ dejƒZG d	d
„ d
ejƒZG dd„ dejƒZG dd„ dejƒZdd„ Zedkrse ¡  dS dS )é    )ÚunloadÚCleanImport)Úcheck_warningsN)Úspec_from_file_locationc                   @   sT   e Z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S )ÚPkgutilTestsc                 C   s.   t  ¡ | _|  tj| j¡ tj d| j¡ d S ©Nr   )	ÚtempfileÚmkdtempÚdirnameÚ
addCleanupÚshutilÚrmtreeÚsysÚpathÚinsert©Úself© r   ú;/opt/python-3.10.19/usr/lib/python3.10/test/test_pkgutil.pyÚsetUp   s   
zPkgutilTests.setUpc                 C   ó   t jd= d S r   )r   r   r   r   r   r   ÚtearDown   ó   zPkgutilTests.tearDownc                 C   sÜ   d}d}t j | j|¡}t  |¡ tt j |d¡dƒ}| ¡  tt j |d¡dƒ}| |¡ | ¡  t  t j |d¡¡ tt j |dd¡dƒ}| |¡ | ¡  t 	|d¡}|  
||¡ t 	|d¡}|  
||¡ tj|= d S )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Úres2r   r   r   r      s$   


z!PkgutilTests.test_getdata_filesysc           
      C   sð   d}d}d}t j | j|¡}t |d¡}| |d d¡ | |d |¡ | |d |¡ | ¡  tj 	d	|¡ t
 |d
¡}|  ||¡ t
 |d¡}|  ||¡ g }t
 |g¡D ]}	|  |	t
j¡ | |	j¡ qW|  |dg¡ tjd	= tj|= d S )Nztest_getdata_zipfile.zipÚtest_getdata_zipfiler   Úwú/__init__.pyÚ z/res.txtz/sub/res.txtr   r   r   )r    r   r!   r
   ÚzipfileÚZipFileÚwritestrr$   r   r   r&   r'   r(   Ziter_modulesÚassertIsInstanceZ
ModuleInfoÚappendÚnamer)   )
r   Úzipr*   r+   Úzip_fileÚzr-   r.   ÚnamesZ
moduleinfor   r   r   r/   ;   s*   z!PkgutilTests.test_getdata_zipfilec                 C   sR   d}t j | j|¡}t  |d¡ |  t j|¡ tj| jgdD ]}|  	d¡ qd S )NZunreadable_packager   )r   zunexpected package found)
r    r   r!   r
   r"   r   Úrmdirr&   Úwalk_packagesZfail)r   Zpackage_nameÚdÚtr   r   r   Útest_unreadable_dir_on_syspath^   s   ÿz+PkgutilTests.test_unreadable_dir_on_syspathc           	      C   sb  d}t j | j|¡}t  |¡ tt j |d¡dƒ}| ¡  t  t j |d¡¡ tt j |dd¡dƒ}| ¡  tt j |dd¡dƒ}| ¡  d}t j | j|¡}t  |¡ tt j |d¡dƒ}| ¡  t  t j |d¡¡ tt j |dd¡dƒ}| ¡  tt j |dd¡dƒ}| ¡  g d¢}dd„ t | jg¡D ƒ}|  	||¡ |D ]}| 
d	¡rªq¢tj|= q¢d S )
NÚtest_walkpackages_filesysr   r   r   zmod.py)r   zsub.test_walkpackages_filesysz!sub.test_walkpackages_filesys.modrB   ztest_walkpackages_filesys.subz!test_walkpackages_filesys.sub.modc                 S   ó   g | ]}|d  ‘qS ©é   r   ©Ú.0Úer   r   r   Ú
<listcomp>‰   ó    z:PkgutilTests.test_walkpackages_filesys.<locals>.<listcomp>Úmod)r    r   r!   r
   r"   r#   r$   r&   r>   r(   Úendswithr   r)   )	r   Úpkg1Zpkg1_dirr,   Úpkg2Zpkg2_dirÚexpectedÚactualr*   r   r   r   rB   i   s8   



ýz&PkgutilTests.test_walkpackages_filesysc           	      C   s  	 d}d}d}t j | j|¡}t |d¡}| |d d¡ | |d | d d¡ | |d | d d¡ | |d d¡ | |d | d d¡ | |d | d d¡ | ¡  tj 	d	|¡ g d
¢}dd„ t
 |g¡D ƒ}|  ||¡ tjd	= |D ]}| d¡rƒq{tj|= q{d S )Nztest_walkpackages_zipfile.zipÚtest_walkpackages_zipfiler   r0   r1   r2   ú/z/mod.pyr   )r   zsub.test_walkpackages_zipfilez!sub.test_walkpackages_zipfile.modrQ   ztest_walkpackages_zipfile.subz!test_walkpackages_zipfile.sub.modc                 S   rC   rD   r   rF   r   r   r   rI   «   rJ   z:PkgutilTests.test_walkpackages_zipfile.<locals>.<listcomp>rK   )r    r   r!   r
   r3   r4   r5   r$   r   r   r&   r>   r(   rL   r)   )	r   r9   rM   rN   r:   r;   rO   rP   r*   r   r   r   rQ   ‘   s.   

ýz&PkgutilTests.test_walkpackages_zipfilec                 C   s†   d}|   ttf¡ tt |¡ƒ W d   ƒ n1 sw   Y  d}|   ttf¡ tt |¡ƒ W d   ƒ d S 1 s<w   Y  d S )NZtest_dirs   test_dir)ÚassertRaisesÚ	TypeErrorÚ
ValueErrorÚlistr&   r>   )r   Ú	str_inputZbytes_inputr   r   r   Ú2test_walk_packages_raises_on_string_or_bytes_input´   s   ÿ"ÿz?PkgutilTests.test_walk_packages_raises_on_string_or_bytes_inputc                 C   s¶  dd l }dd l}dtfdtjfdtjjfd|fd|fd|jfd|jfd	|jjfd
|jjfd|jjjfd|jjjfdtfdtfdtj	fdtj	fdt
fdt
fdtjff}d tfdtfdtfdtfdtfdtfdtfdtfdtfdtfdtfdtfdtfd tfd!tfd"tfd#tff}d$}|D ]c}tj | j|¡}z	tj|dd% W n	 ty§   Y q‹w tj |d&¡}t|d'ƒ}| d¡ | ¡  W d   ƒ n1 sÈw   Y  t ¡  t |¡}|||ff7 }t|ƒdkrî||d d(… tff7 }q‹|d)tff7 }|D ]&\}	}
| j|	d* t |	¡}|  ||
¡ W d   ƒ n	1 sw   Y  qø|D ]7\}	}| j|	d*# |  |¡ t |	¡ W d   ƒ n	1 sBw   Y  W d   ƒ n	1 sRw   Y  q!d S )+Nr   r    zos.pathzos.path:pathsepÚloggingzlogging:zlogging.handlerszlogging.handlers:zlogging.handlers:SysLogHandlerzlogging.handlers.SysLogHandlerz(logging.handlers:SysLogHandler.LOG_ALERTz(logging.handlers.SysLogHandler.LOG_ALERTzbuiltins.intzbuiltins:intzbuiltins.int.from_byteszbuiltins:int.from_byteszbuiltins.ZeroDivisionErrorzbuiltins:ZeroDivisionErrorzos:pathrE   g       @Tr2   z?abczabc/fooÚfoozos.foozos.foo:zos.pth:pathsepzlogging.handlers:NoSuchHandlerz,logging.handlers:SysLogHandler.NO_SUCH_VALUEz,logging.handlers.SysLogHandler.NO_SUCH_VALUEÚZeroDivisionErrorzos.path.9abcZ9abc)	u	   à¤µà¤®à¤¸õ   Ã©õ   Ãˆu   ì•ˆë…•í•˜ì„¸ìš”u   ã•ã‚ˆãªã‚‰u   ã‚ã‚ŠãŒã¨ã†u   Ð¥Ð¾Ñ€Ð¾ÑˆÐ¾u   ÑÐ¿Ð°ÑÐ¸Ð±Ð¾u   çŽ°ä»£æ±‰è¯­å¸¸ç”¨å­—è¡¨©Úexist_okr   r0   éÿÿÿÿu   à¥¦à¤µà¤®à¤¸)Ús)rY   Zlogging.handlersr    r   ÚpathsepÚhandlersZSysLogHandlerZ	LOG_ALERTÚintÚ
from_bytesr[   rT   rU   ÚImportErrorÚAttributeErrorr!   r
   ÚmakedirsÚUnicodeEncodeErrorr#   r%   ÚflushÚ	importlibÚinvalidate_cachesÚimport_moduleÚlenZsubTestr&   Úresolve_namer(   rS   )r   rY   Zsuccess_casesZfailure_casesZunicode_wordsZuwr?   r,   rK   ra   rO   ÚoÚexcr   r   r   Útest_name_resolution¾   sœ   


ÿÿìï	þ

þ
€
þ€ÿ€ÿ€ÿz!PkgutilTests.test_name_resolutionN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r/   rA   rB   rQ   rX   rr   r   r   r   r   r      s    #(#
r   c                   @   sL   e Zd ZG dd„ deƒZG dd„ deƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dS )ÚPkgutilPEP302Testsc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )zPkgutilPEP302Tests.MyTestLoaderc                 C   s   d S ©Nr   )r   Úspecr   r   r   Úcreate_module  ó   z-PkgutilPEP302Tests.MyTestLoader.create_modulec                 C   s   |j  dd¡d |j d< d S )NÚloadsr   rE   )Ú__dict__Úget)r   rK   r   r   r   Úexec_module   s   z+PkgutilPEP302Tests.MyTestLoader.exec_modulec                 C   s   dS )NúHello, world!r   )r   r   r   r   r   r'   $  rz   z(PkgutilPEP302Tests.MyTestLoader.get_dataN)rs   rt   ru   ry   r~   r'   r   r   r   r   ÚMyTestLoader  s    r€   c                   @   s   e Zd Zddd„ZdS )z!PkgutilPEP302Tests.MyTestImporterNc                 C   s    t  ¡ }t|d|jj |g dS )Nz<%s>)ÚloaderÚsubmodule_search_locations)rv   r€   r   Ú	__class__rs   )r   Úfullnamer   Útargetr   r   r   r   Ú	find_spec(  s   
ýz+PkgutilPEP302Tests.MyTestImporter.find_spec)NN)rs   rt   ru   r†   r   r   r   r   ÚMyTestImporter'  s    r‡   c                 C   s   t j d|  ¡ ¡ d S r   )r   Ú	meta_pathr   r‡   r   r   r   r   r   /  s   zPkgutilPEP302Tests.setUpc                 C   r   r   )r   rˆ   r   r   r   r   r   2  r   zPkgutilPEP302Tests.tearDownc                 C   s    |   t dd¡d¡ tjd= d S )NrZ   Údummyr   )r(   r&   r'   r   r)   r   r   r   r   Útest_getdata_pep3025  s   z&PkgutilPEP302Tests.test_getdata_pep302c                 C   sD   dd l }|  |jd¡ |  t dd¡d¡ |  |jd¡ tjd= d S )Nr   rE   rZ   r‰   r   )rZ   r(   r{   r&   r'   r   r)   )r   rZ   r   r   r   Útest_alreadyloaded:  s
   z%PkgutilPEP302Tests.test_alreadyloadedN)
rs   rt   ru   Úobjectr€   r‡   r   r   rŠ   r‹   r   r   r   r   rv     s    rv   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚExtendPathTestsc                 C   sr   t  ¡ }tj d|¡ tj ||¡}t |¡ ttj |d¡dƒ}| 	d¡ W d   ƒ |S 1 s2w   Y  |S )Nr   r   r0   zKfrom pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
)
r   r	   r   r   r   r    r!   r"   r#   r%   )r   Úpkgnamer
   ZpkgdirÚflr   r   r   Úcreate_initH  s   

ÿýzExtendPathTests.create_initc                 C   sV   t j |||d ¡}t|dƒ}td |¡|d W d   ƒ d S 1 s$w   Y  d S )Nú.pyr0   zvalue={})Úfile)r    r   r!   r#   ÚprintÚformat)r   r
   rŽ   Zsubmodule_nameÚvalueÚmodule_namer   r   r   r   Úcreate_submoduleS  s   "ÿz ExtendPathTests.create_submodulec              	   C   sÖ   d}|   |¡}|   |¡}|  ||dd¡ |  ||dd¡ dd l}dd l}|  |jjd¡ |  |jjd¡ |  t|j	ƒtt
j ||¡t
j ||¡gƒ¡ t |¡ t |¡ tjd= tjd= tjd= tjd= tjd= d S )NrZ   Úbarr   ÚbazrE   úfoo.barúfoo.baz)r   r—   Úfoo.barÚfoo.bazr(   r˜   r•   r™   ÚsortedÚ__path__r    r   r!   r   r   r   r)   ©r   rŽ   Z	dirname_0Z	dirname_1rZ   r   r   r   Útest_simpleX  s*   

ÿÿ

zExtendPathTests.test_simplec                 C   sâ  t j}t j}d}d}|  |¡}tj ||¡}d ||¡}tj	 
|d ¡ tj	 
|d ¡ z©|  |||d¡ t |¡ t||ƒƒ}||ƒ}	|D ]9}
t  |
|¡}|j}z|j}W n	 ty]   Y nw |  |
tjj¡ |  |
|	¡ |  |tjj¡ |  t  |
|¡¡ qD|  t¡ t|dƒƒ W d   ƒ n1 s”w   Y  |  t¡ t|dƒƒ W d   ƒ n1 s¯w   Y  W t |¡ tjd= ztj	d= tj	d= W d S  tyÓ   Y d S w t |¡ tjd= z
tj	d= tj	d= W w  tyð   Y w w )NÚspamZeggsz{}.{}r   zinvalid.modulez.spamz	spam.eggs)r&   Úiter_importersÚget_importerr   r    r   r!   r”   r   r)   Úpopr—   rk   rm   rV   Ú	_get_specr   rg   r6   Ú	machineryÚ
FileFinderr(   ÚSourceFileLoaderÚassertIsNonerS   rf   r   r   ÚKeyError)r   r£   r¤   rŽ   Úmodnamer
   Zpathitemr„   Z	importersZexpected_importerÚfinderrx   r   r   r   r   Útest_iter_importersu  sf   


ýÿÿÿ€
ÿ
ûÿz#ExtendPathTests.test_iter_importersc              	   C   sì   d}|   |¡}|   |¡}|  ||dd¡ t tj ||d¡¡ |  ||dd¡ dd l}dd l}|  |j	j
d¡ |  |jj
d¡ |  t|jƒttj ||¡tj ||¡gƒ¡ t |¡ t |¡ tjd= tjd= tjd= tjd= tjd= d S )	NrZ   r˜   r   r   r™   rE   rš   r›   )r   r—   r    Úunlinkr   r!   rœ   r   r(   r˜   r•   r™   rž   rŸ   r   r   r   r)   r    r   r   r   Útest_mixed_namespace¥  s,   

ÿÿ

z$ExtendPathTests.test_mixed_namespaceN)rs   rt   ru   r   r—   r¡   r®   r°   r   r   r   r   r   G  s    0r   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚNestedNamespacePackageTestc                 C   s   t  ¡ | _tjd d … | _d S rw   )r   r	   Úbasedirr   r   Úold_pathr   r   r   r   r   Æ  s   
z NestedNamespacePackageTest.setUpc                 C   s    | j tjd d …< t | j¡ d S rw   )r³   r   r   r   r   r²   r   r   r   r   r   Ê  s   z#NestedNamespacePackageTest.tearDownc                 C   s‚   |  dd¡\}}tj | j| dtjj¡¡}tj|dd ttj ||d ¡dƒ}| 	|¡ W d   ƒ d S 1 s:w   Y  d S )NÚ.rE   Tr^   r‘   r0   )
Úrsplitr    r   r!   r²   ÚreplaceÚseprh   r#   r%   )r   r8   ÚcontentsÚbaseÚfinalÚ	base_pathr,   r   r   r   ry   Î  s   "ÿz(NestedNamespacePackageTest.create_modulec                 C   s  d}|   d|¡ |   d|¡ |   d|¡ |   d|¡ |   dd¡ |   dd	¡ tj d
tj | jd¡¡ tj d
tj | jd¡¡ d
d l}|  t	d¡ |  
t|jƒd¡ d
d l}|  t	d¡ |  
t|jjƒd¡ d
dlm} d
dlm} |  
|d¡ |  
|d¡ d S )NzBimport pkgutil; __path__ = pkgutil.extend_path(__path__, __name__)za.pkg.__init__zb.pkg.__init__za.pkg.subpkg.__init__zb.pkg.subpkg.__init__za.pkg.subpkg.czc = 1zb.pkg.subpkg.dzd = 2r   ÚaÚbr*   é   z
pkg.subpkg)Úc)r?   rE   )ry   r   r   r   r    r!   r²   r*   r   r   r(   rn   rŸ   Z
pkg.subpkgZsubpkgZpkg.subpkg.cr¿   Zpkg.subpkg.dr?   )r   Zpkgutil_boilerplater*   r¿   r?   r   r   r   Útest_nestedÕ  s(   ÿz&NestedNamespacePackageTest.test_nestedN)rs   rt   ru   r   r   ry   rÀ   r   r   r   r   r±   Ä  s
    r±   c                   @   s|   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Ze e d	kd
¡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S )ÚImportlibMigrationTestsc                 C   s   t dtfƒS )Nz[This emulation is deprecated and slated for removal in Python 3.12; use 'importlib' instead)r   ÚDeprecationWarningr   r   r   r   Úcheck_deprecatedò  s
   þÿz(ImportlibMigrationTests.check_deprecatedc                 C   s8   |   ¡  t d¡ W d   ƒ d S 1 sw   Y  d S ©Nr2   )rÃ   r&   ZImpImporterr   r   r   r   Útest_importer_deprecatedø  s   
"ÿz0ImportlibMigrationTests.test_importer_deprecatedc                 C   s>   |   ¡  t dddd¡ W d   ƒ d S 1 sw   Y  d S rÄ   )rÃ   r&   Z	ImpLoaderr   r   r   r   Útest_loader_deprecatedü  s   
"ÿz.ImportlibMigrationTests.test_loader_deprecatedc                 C   ón   t ƒ *}|  t d¡¡ |  t d¡¡ |  t d¡¡ |  t|jƒd¡ W d   ƒ d S 1 s0w   Y  d S ©Nr   r    ztest.supportr   )r   ÚassertIsNotNoner&   Ú
get_loaderr(   rn   Úwarnings©r   r0   r   r   r   Ú test_get_loader_avoids_emulation   ó   "üz8ImportlibMigrationTests.test_get_loader_avoids_emulationÚ__main__znot compatible with __main__c                 C   sj   t }b z.tƒ }|  t t¡¡ |  t|jƒd¡ W d   ƒ n1 s#w   Y  W |a d S W |a d S |a w r   )	Ú
__loader__r   rÉ   r&   rÊ   rs   r(   rn   rË   )r   Zthis_loaderr0   r   r   r   Ú0test_get_loader_handles_missing_loader_attribute  s   þüzHImportlibMigrationTests.test_get_loader_handles_missing_loader_attributec                 C   s^   d}t tƒ|ƒ}|`t|ƒ |tj|< t |¡}W d   ƒ n1 s#w   Y  |  |¡ d S ©Nr¢   ©Útyper   Ú__spec__r   r)   r&   rÊ   rª   ©r   r8   rK   r   r   r   r   Ú.test_get_loader_handles_missing_spec_attribute  s   

þzFImportlibMigrationTests.test_get_loader_handles_missing_spec_attributec                 C   s`   d}t tƒ|ƒ}d |_t|ƒ |tj|< t |¡}W d   ƒ n1 s$w   Y  |  |¡ d S rÒ   rÓ   rÖ   r   r   r   Ú+test_get_loader_handles_spec_attribute_none  s   

þzCImportlibMigrationTests.test_get_loader_handles_spec_attribute_nonec                 C   s>   d}d t j|< zt |¡}W t j|= nt j|= w |  |¡ d S ©Nztotally bogus)r   r)   r&   rÊ   rª   ©r   r8   r   r   r   r   Ú#test_get_loader_None_in_sys_modules%  s   
z;ImportlibMigrationTests.test_get_loader_None_in_sys_modulesc                 C   s   d}t  |¡}|  |¡ d S rÙ   )r&   Úfind_loaderrª   rÚ   r   r   r   Útest_find_loader_missing_module.  s   
z7ImportlibMigrationTests.test_find_loader_missing_modulec                 C   rÇ   rÈ   )r   rÉ   r&   rÜ   r(   rn   rË   rÌ   r   r   r   Ú!test_find_loader_avoids_emulation3  rÎ   z9ImportlibMigrationTests.test_find_loader_avoids_emulationc                 C   sN   t ƒ }|  t d¡¡ |  t|jƒd¡ W d   ƒ d S 1 s w   Y  d S )Nz*??r   )r   rª   r&   r¤   r(   rn   rË   rÌ   r   r   r   Ú"test_get_importer_avoids_emulation:  s   "þz:ImportlibMigrationTests.test_get_importer_avoids_emulationc                 C   sL   t ƒ }t ¡ D ]}q|  t|jƒd¡ W d   ƒ d S 1 sw   Y  d S r   )r   r&   r£   r(   rn   rË   )r   r0   Zimporterr   r   r   Ú$test_iter_importers_avoids_emulation@  s   "þz<ImportlibMigrationTests.test_iter_importers_avoids_emulationN)rs   rt   ru   rÃ   rÅ   rÆ   rÍ   ÚunittestZskipIfrÑ   r×   rØ   rÛ   rÝ   rÞ   rß   rà   r   r   r   r   rÁ   í  s    
			rÁ   c                  C   s&   dd l } dd l}| j ¡  | ¡  d S r   )Ú	zipimportrk   Ú_zip_directory_cacheÚclearrl   )râ   rk   r   r   r   ÚtearDownModuleF  s   
rå   rÏ   )Ztest.support.import_helperr   r   Ztest.support.warnings_helperr   rá   r   rk   Úimportlib.utilr   r&   r    Zos.pathr   r   r3   ZTestCaser   rv   r   r±   rÁ   rå   rs   Úmainr   r   r   r   Ú<module>   s.      -})Yÿ