o
    g~U                     @   s   d dl mZ 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rxe  dS dS )    )run_unittest)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   G/Users/admin/.pyenv/versions/3.10.0/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)   iter_modulesassertIsInstance
ModuleInfoappendnamer*   )
r   zipr+   r,   zip_filezr.   r/   namesZ
moduleinfor   r   r   r0   <   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	rqtj|= qd S )
Ntest_walkpackages_filesysr   r   r   zmod.py)r   zsub.test_walkpackages_filesysz!sub.test_walkpackages_filesys.modrE   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'   rA   r)   endswithr   r*   )	r   pkg1Zpkg1_dirr-   pkg2Zpkg2_direxpectedactualr+   r   r   r   rE   j   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rqztj|= qzdS )zBTests the same as test_walkpackages_filesys, only with a zip file.ztest_walkpackages_zipfile.ziptest_walkpackages_zipfiler   r1   r2   r3   /z/mod.pyr   )r   zsub.test_walkpackages_zipfilez!sub.test_walkpackages_zipfile.modrT   ztest_walkpackages_zipfile.subz!test_walkpackages_zipfile.sub.modc                 S   rF   rG   r   rI   r   r   r   rL      rM   z:PkgutilTests.test_walkpackages_zipfile.<locals>.<listcomp>rN   N)r!   r   r"   r   r4   r5   r6   r%   r   r   r'   rA   r)   rO   r*   )	r   r<   rP   rQ   r=   r>   rR   rS   r+   r   r   r   rT      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'   rA   )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 qw tj|d&}t|d'}|d |  W d    n1 sw   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    q1 sw   Y  q|D ]8\}	}| j|	d*$ | | t|	 W d    n	1 sBw   Y  W d    q!1 sSw   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:pathrH   g       @Tr3   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   r1   u   ०वमस)s)r\   Zlogging.handlersr!   r   pathsephandlersZSysLogHandlerZ	LOG_ALERTint
from_bytesr^   rW   rX   ImportErrorAttributeErrorr"   r   makedirsUnicodeEncodeErrorr$   r&   flush	importlibinvalidate_cachesimport_modulelenZsubTestr'   resolve_namer)   rV   )r   r\   Zsuccess_casesZfailure_casesZunicode_wordsZuwrB   r-   rN   rd   rR   oexcr   r   r   test_name_resolution   s   


	



 $z!PkgutilTests.test_name_resolutionN)__name__
__module____qualname__r   r   r   r0   rD   rE   rT   r[   ru   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   rH   )__dict__get)r   rN   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(   %  r}   z(PkgutilPEP302Tests.MyTestLoader.get_dataN)rv   rw   rx   r|   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)ry   r   r   	__class__rv   )r   fullnamer   targetr   r   r   r   	find_spec)  s   
z+PkgutilPEP302Tests.MyTestImporter.find_spec)NN)rv   rw   rx   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   0  s   zPkgutilPEP302Tests.setUpc                 C   r   r   )r   r   r   r   r   r   r   3  r   zPkgutilPEP302Tests.tearDownc                 C   s    |  tddd tjd= d S )Nr]   dummyr   )r)   r'   r(   r   r*   r   r   r   r   test_getdata_pep3026  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   rH   r]   r   r   )r]   r)   r~   r'   r(   r   r*   )r   r]   r   r   r   test_alreadyloaded;  s
   z%PkgutilPEP302Tests.test_alreadyloadedN)
rv   rw   rx   objectr   r   r   r   r   r   r   r   r   r   ry     s    ry   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   r1   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_initI  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.pyr1   zvalue={})file)r!   r   r"   r$   printformat)r   r   r   Zsubmodule_namevaluemodule_namer   r   r   r   create_submoduleT  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 )Nr]   barr   bazrH   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_1r]   r   r   r   test_simpleY  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 sw   Y  | t t|d W d    n1 sw   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   rn   rp   rY   	_get_specr   rj   r8   	machinery
FileFinderr)   SourceFileLoaderassertIsNonerV   ri   r   r   KeyError)r   r   r   r   modnamer   Zpathitemr   	importersZexpected_importerfinderr{   r   r   r   r   test_iter_importersv  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 )	Nr]   r   r   r   r   rH   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)rv   rw   rx   r   r   r   r   r   r   r   r   r   r   H  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 rz   )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 rz   )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.rH   Tra   r   r1   )
rsplitr!   r   r"   r   replaceseprk   r$   r&   )r   r;   contentsbasefinal	base_pathr-   r   r   r   r|     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)rB   rH   )r|   r   r   r   r!   r"   r   r+   r   r   r)   rq   r   Z
pkg.subpkgZsubpkgZpkg.subpkg.cr   Zpkg.subpkg.drB   )r   Zpkgutil_boilerplater+   r   rB   r   r   r   test_nested  s(   z&NestedNamespacePackageTest.test_nestedN)rv   rw   rx   r   r   r|   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 Nr3   )r   r'   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'   	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)   rq   warningsr   r1   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   rv   r)   rq   r   )r   Zthis_loaderr1   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   r;   rN   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   r;   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)   rq   r   r   r   r   r   !test_find_loader_avoids_emulation4  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)   rq   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)   rq   r   )r   r1   importerr   r   r   $test_iter_importers_avoids_emulationA  s   "z<ImportlibMigrationTests.test_iter_importers_avoids_emulationN)rv   rw   rx   r   r   r   r   unittestZskipIfr   r   r   r   r   r   r   r   r   r   r   r   r     s    
			r   c                  C   s6   t ttttt dd l} dd l}| j	  |
  d S r   )r   r   ry   r   r   r   	zipimportrn   _zip_directory_cacheclearro   )r   rn   r   r   r   	test_mainG  s   
r   r   )Ztest.supportr   Ztest.support.import_helperr   r   Ztest.support.warnings_helperr   r   r   rn   importlib.utilr   r'   r!   Zos.pathr	   r   r4   ZTestCaser   ry   r   r   r   r   rv   r   r   r   r   <module>   s0      -})Y

