a
    äzeïF  ã                   @   s  d dl Z d dlZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
Z
d dlZe ¡ $ e de¡ d dlZW d  ƒ n1 sŠ0    Y  d dlZdd„ 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edkre
 ¡  dS )é    N)Úsupport)Úscript_helperÚignorec                 C   s"   t  | ¡} t ttdƒ d¡| ƒS )zXDecorator to skip a test if not running under CPython or lacking
    imp.load_dynamic().Úload_dynamiczimp.load_dynamic() required)r   Úcpython_onlyÚunittestÚskipIfÚhasattrÚimp)Úmeth© r   ú#/usr/lib/python3.9/test/test_imp.pyÚrequires_load_dynamic   s    
ÿÿr   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú	LockTestsz)Very basic test of import lock functions.c                 C   s   |   t ¡ |d| ¡ d S )Nz!expected imp.lock_held() to be %r)ÚassertEqualr
   Ú	lock_held)ÚselfÚexpectedr   r   r   Úverify_lock_state   s    ÿzLockTests.verify_lock_statec                 C   sˆ   d}t  ¡ }|  |¡ t|ƒD ]}t  ¡  |  d¡ qt|ƒD ]}t  ¡  q>|  |¡ |s„zt  ¡  W n tyx   Y n0 |  d¡ d S )Né2   Tz5release_lock() without lock should raise RuntimeError)r
   r   r   ÚrangeÚacquire_lockÚrelease_lockÚRuntimeErrorZfail)r   ZLOOPSZlock_held_at_startÚir   r   r   ÚtestLock    s    


zLockTests.testLockN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__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d	d
„ Zdd„ Zdd„ Z	dd„ Z
edd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZe ejd¡dd„ ƒZdd„ Zd d!„ Zejd"d#„ ƒZd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,S )-ÚImportTestsc                 C   s   t  d¡}|j| _|j| _d S )Nztest.encoded_modules)Ú	importlibÚimport_moduleÚtest_stringsÚ__path__Ú	test_path)r   Úmodr   r   r   ÚsetUp<   s    
zImportTests.setUpc                 C   s2   | j D ]&\}}}t d| ¡}|  ||j¡ qd S )Nztest.encoded_modules.module_)r#   r!   r"   r   Útest)r   ÚmodnameÚencodingZteststrr&   r   r   r   Útest_import_encoded_moduleA   s
    ÿz&ImportTests.test_import_encoded_modulec              	   C   sž   | j D ]N\}}}t d| | j¡d }|  |j|¡ W d   ƒ q1 sJ0    Y  qtj t	¡g}|  
t¡ t d|¡ W d   ƒ n1 s0    Y  d S )NÚmodule_r   Úbadsyntax_pep3120)r#   r
   Úfind_moduler%   r   r*   ÚosÚpathÚdirnameÚ__file__ÚassertRaisesÚSyntaxError)r   r&   r*   Ú_Úfdr0   r   r   r   Útest_find_module_encodingG   s    .z%ImportTests.test_find_module_encodingc              	   C   sþ   | j D ]„\}}}t d| | j¡\}}}|N |  |d ¡ |  |j|¡ |  | ¡ d¡ |  | ¡ d| ¡ W d   ƒ q1 s€0    Y  qt d¡\}}}|J |  |d ¡ |  |jd¡ |  | ¡ d¡ |  | ¡ d¡ W d   ƒ n1 sð0    Y  d S )Nr,   r   z# test %s encoding
Útokenizeúutf-8z*"""Tokenization help for Python programs.
)	r#   r
   r.   r%   ZassertNotEqualr   r*   ÚtellÚreadline)r   r&   r*   r5   ÚfpÚfilenameÚinfor   r   r   Útest_issue1267P   s&    
ÿ
ÿ&
ÿzImportTests.test_issue1267c              
   C   sÄ   d}t j dd¡ z†t|d dƒ}| d¡ W d   ƒ n1 sB0    Y  t |¡\}}}| ¡  |  |j	d¡ W t jd= t
 |d ¡ t
 |d ¡ n&t jd= t
 |d ¡ t
 |d ¡ 0 d S )	NZtest_imp_helperr   Ú.ú.pyÚwz%# coding: cp1252
u = 'test.test_imp'
Úcp1252ú.pyc)Úsysr0   ÚinsertÚopenÚwriter
   r.   Úcloser   r*   r   Úunlink)r   Útemp_mod_nameÚfiler=   r>   r   r   r   Útest_issue3594c   s    (þzImportTests.test_issue3594c                 C   sV  t  ¡ }dddddddddddœ
}t jdkr>|  |d¡ d	}n
| |¡}|sZ|  d
| ¡ | |¡}d| }d| }tj 	|d¡}z†t j 
dtj¡ t|d dƒ}| d¡ W d   ƒ n1 sÄ0    Y  t |¡\}}	}
|‚ |  |¡ |  |	d d…  |¡¡ |  |
d d¡ |  |
d d¡ |  |
d tj¡ t |||	|
¡}|  |jd¡ W d   ƒ n1 sl0    Y  t ¡ * t d¡ t ||d ¡}W d   ƒ n1 s°0    Y  |  |jd¡ t ¡ 8 t d¡ t jsút |t |d ¡¡}W d   ƒ n1 s0    Y  |  |jd¡ tj |¡s@t |¡ t|dƒ}| d¡ W d   ƒ n1 sl0    Y  t ¡ & t d¡ t ||¡}W d   ƒ n1 s¬0    Y  |  |j d¡ W t jd= dD ]"}t! "|| ¡ t! "|| ¡ qÒt! #|¡ t! #d¡ nFt jd= dD ]"}t! "|| ¡ t! "|| ¡ qt! #|¡ t! #d¡ 0 d S )Ns   Ã¤ó   Œó   Àó   Áó   à)
r9   Úcp1250Úcp1251rC   Úcp1253Úcp1254Úcp1255Úcp1256Úcp1257Úcp1258Údarwinr9   s   aÌˆz2can't run this test with %s as filesystem encodingZtest_imp_helper_Ztest_imp_helper_package_z__init__.pyr   rA   rB   za = 1
éýÿÿÿé   Úré   r   zb = 2
)rA   rD   Ú__pycache__)$rE   ÚgetfilesystemencodingÚplatformr   ÚgetÚskipTestÚdecoder/   r0   ÚjoinrF   ÚcurdirrG   rH   r
   r.   ZassertIsNotNoneZ
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Úbr   rJ   Úrmtree)r   Zfs_encodingZknown_localesZspecial_charZdecoded_charrK   Ztest_package_nameZinit_file_namerL   r=   r>   r&   ÚpackageÚextr   r   r   Útest_issue5604q   sŠ    ö

ÿ
(
.

0

þ$
*

,
û
zImportTests.test_issue5604c                 C   s$   t j t¡}|  ttjd|g¡ d S )Nr-   )r/   r0   r1   r2   r3   r4   r
   r.   )r   r0   r   r   r   Útest_issue9319È   s    
ÿzImportTests.test_issue9319c                 C   sŒ   t j}t j}t ¡ d t d¡}|  |d j¡ tj	dg|¢R Ž }|  
t |¡ |  
||j¡ |  ||j¡ W d   ƒ n1 s~0    Y  d S )Nr/   r   )r/   r0   Úgetenvr   ÚEnvironmentVarGuardr
   r.   Ú
addCleanuprI   rh   ÚassertIsZassertIsNot)r   Ú	orig_pathZorig_getenvÚxZnew_osr   r   r   Útest_load_from_sourceÍ   s    	

z!ImportTests.test_load_from_sourcec                 C   sN   d}t  |¡}|d }|d ur*|  |j¡ t j|g|¢R Ž }|  |j|¡ d S )NÚ_heapqr   )r
   r.   rz   rI   rh   r   r   )r   Zexampler}   Zfile_r&   r   r   r   Útest_issue15828_load_extensionsà   s    
z+ImportTests.test_issue15828_load_extensionsc                 C   s¤   d}t  |¡\}}}| ¡  t  ||¡}t  d|¡}t  d|¡}|  |j|¡ |  |jd¡ |  |jd¡ |  t¡ t  d|¡ W d   ƒ n1 s–0    Y  d S )NÚ_testimportmultipleZ_testimportmultiple_fooZ_testimportmultiple_barZnonexistent)r
   r.   rI   r   r   r   r3   ÚImportError)r   ÚmÚfileobjÚpathnameÚdescriptionZmod0Zmod1Zmod2r   r   r   Ú+test_issue16421_multiple_modules_in_one_dllì   s    z7ImportTests.test_issue16421_multiple_modules_in_one_dllc                 C   sb   d}d}|   t¡}t ||¡ W d   ƒ n1 s40    Y  |  ||jj¡ |  ||jj¡ d S )Nzbogus file pathÚ	extension)	r3   r‚   r
   r   ZassertInÚ	exceptionr0   r   Úname)r   r0   rŠ   Úerrr   r   r   Ú"test_load_dynamic_ImportError_pathû   s    *z.ImportTests.test_load_dynamic_ImportError_pathc                 C   sb   d}t  |¡}|d d ur&|d  ¡  |d d t jkrB|  d¡ t j|d g|dd … ¢R Ž  d S )Nr   r   r^   z/found module doesn't appear to be a C extensionr\   )r
   r.   rI   ZC_EXTENSIONrc   rh   )r   rŠ   Úfoundr   r   r   Ú'test_load_module_extension_file_is_None  s    

z3ImportTests.test_load_module_extension_file_is_Nonec                 C   sô   d}zt j|= W n ty"   Y n0 z¨t |¡}tj d¡}t ||j	¡}|  
|j|¡ |  
|jj|¡ |  
|jj	|j	¡ |  tt|d¡ |  
|jd¡ |  t j| |¡ W zt j|= W qð tyÊ   Y qð0 n"zt j|= W n tyì   Y n0 0 d S )Nztest.imp_dummyZ_testmultiphaseZ
dummy_namei±  )rE   ÚmodulesÚKeyErrorr!   r"   ÚutilÚ	find_specr
   r   Úoriginr   r   Ú__spec__rŠ   r3   ÚAttributeErrorÚgetattrZ	int_constr{   )r   rŠ   ÚmoduleÚspecr   r   r   Ú3test_issue24748_load_module_skips_sys_modules_check  s.    
ýz?ImportTests.test_issue24748_load_module_skips_sys_modules_checkz*test meaningful only when writing bytecodec                 C   sX   t  ¡ < t jd }t |¡ |  tdtjt jdg¡ W d   ƒ n1 sJ0    Y  d S )NrA   z
^No moduler@   )	r   Útemp_cwdZTESTFNr/   rq   ÚassertRaisesRegexr‚   r
   r.   )r   Úsourcer   r   r   Útest_bug7732+  s    


ÿzImportTests.test_bug7732c                 C   s2   t  dt jtt jƒ¡}| t j¡ | t j¡ d S )Nr
   )r
   Z_LoadSourceCompatibilityr2   rG   Úget_data)r   Úloaderr   r   r   Útest_multiple_calls_to_get_data4  s
    
ÿz+ImportTests.test_multiple_calls_to_get_datac              	   C   sŒ   dt › }ttjt  ƒ|ƒ}t tj||¡L |  td¡  t 	|t
d ¡ W d   ƒ n1 s`0    Y  W d   ƒ n1 s~0    Y  d S )NÚtmpzembedded nullú )r   ÚtyperE   r   r   Z	swap_itemr›   Ú
ValueErrorr
   rm   r2   )r   r)   r&   r   r   r   Útest_load_source;  s
    
zImportTests.test_load_sourcec                 C   sR   t  td¡}G dd„ dƒ}|  t¡ ||ƒ ƒ W d   ƒ n1 sD0    Y  d S )NÚcreate_dynamicc                   @   s   e Zd ZdZdZdS )z,ImportTests.test_issue31315.<locals>.BadSpecNÚfoo)r   r   r   rŠ   r“   r   r   r   r   ÚBadSpecI  s   r¨   )r   Zget_attributer
   r3   Ú	TypeError)r   r¦   r¨   r   r   r   Útest_issue31315D  s    zImportTests.test_issue31315c                 C   s4   dd l }|  |jjd¡ dd l}|  |jjd¡ d S )Nr   Úfrozen)Ú_frozen_importlib_externalr   r”   r“   Ú_frozen_importlib)r   r¬   r­   r   r   r   Útest_issue_35321O  s    zImportTests.test_issue_35321c                 C   s,   |   t dd¡d¡ |   t dd¡d¡ d S )Né*   s   his   ÆçZ:}«é+   s   …—65øš‹9)r   Ú_impÚsource_hash)r   r   r   r   Útest_source_hashZ  s    zImportTests.test_source_hashc                 C   sh   g dfddgdfddgdfddgdfg}|D ]6\}}|ddg }t j|Ž }|  |j ¡  d¡|¡ q,d S )NÚdefaultz--check-hash-based-pycsÚalwaysÚneverz-cz.import _imp; print(_imp.check_hash_based_pycs)r9   )r   Zassert_python_okr   ÚoutÚstriprd   )r   ZcasesZinterp_argsr   ÚargsÚresr   r   r   Ú'test_pyc_invalidation_mode_from_cmdline^  s    


üþ
z3ImportTests.test_pyc_invalidation_mode_from_cmdlinec              	   C   s¨   t  ¡ ~ tddƒ}| d¡ W d   ƒ n1 s40    Y  tjddtjjd tj	ddgd\}}}t 
d|||¡}W d   ƒ n1 sŒ0    Y  |  |jd	¡ d S )
Nzmymod.pyÚwbs   x = 42
T)ÚdoraiseÚinvalidation_modeZmymodr@   )r0   r¯   )r   rš   rG   rH   Ú
py_compileÚcompileÚPycInvalidationModeÚCHECKED_HASHr
   r.   rh   r   r}   )r   r<   rL   r0   r†   r&   r   r   r   Útest_find_and_load_checked_pycm  s    
(ý.z*ImportTests.test_find_and_load_checked_pycN)r   r   r   r'   r+   r7   r?   rM   rv   rw   r~   r   r€   r‡   rŒ   rŽ   r™   r   r   rE   rn   r   r    r¥   r   r   rª   r®   r³   r»   rÃ   r   r   r   r   r    ;   s<   	W




ÿ
	

r    c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚReloadTestszPVery basic tests to make sure that imp.reload() operates just like
    reload().c                 C   s>   t  ¡ " dd l}t |¡ W d   ƒ n1 s00    Y  d S )Nr   )r   ry   r/   r
   Úreload)r   r/   r   r   r   Útest_source  s    
zReloadTests.test_sourcec                 C   s@   t  d¡" dd l}t |¡ W d   ƒ n1 s20    Y  d S )NÚtimer   )r   ÚCleanImportrÇ   r
   rÅ   )r   rÇ   r   r   r   Útest_extension  s    zReloadTests.test_extensionc                 C   s@   t  d¡" dd l}t |¡ W d   ƒ n1 s20    Y  d S )NÚmarshalr   )r   rÈ   rÊ   r
   rÅ   )r   rÊ   r   r   r   Útest_builtin’  s    zReloadTests.test_builtinc                    sh   ddl m} tj d¡‰ ‡ fdd„}|  |¡ |  td¡ t 	|¡ W d   ƒ n1 sZ0    Y  d S )Nr   )ÚparserÚhtmlc                      s   ˆ t jd< d S )NrÍ   )rE   r   r   ©rÍ   r   r   Úcleanup›  s    z5ReloadTests.test_with_deleted_parent.<locals>.cleanup)
rÍ   rÌ   rE   r   Úpoprz   r›   r‚   r
   rÅ   )r   rÌ   rÏ   r   rÎ   r   Útest_with_deleted_parent—  s    
z$ReloadTests.test_with_deleted_parentN)r   r   r   r   rÆ   rÉ   rË   rÑ   r   r   r   r   rÄ   |  s
   rÄ   c                   @   sP   e Zd ZdZe ¡ Ze e	j
jdud¡dd„ ƒZe e	j
jdud¡dd„ ƒZdS )	ÚPEP3147TestszTests of PEP 3147.Nz1requires sys.implementation.cache_tag not be Nonec              	   C   sF   t j dddd¡}t j ddddd | j¡¡}|  t |d¡|¡ d S )Nr§   ÚbarÚbazúqux.pyr_   ú
qux.{}.pycT)r/   r0   re   ÚformatÚtagr   r
   ro   ©r   r0   Úexpectr   r   r   Útest_cache_from_source§  s
    
ÿz#PEP3147Tests.test_cache_from_sourcez4requires sys.implementation.cache_tag to not be Nonec              	   C   sD   t j ddddd | j¡¡}t j dddd¡}|  t |¡|¡ d S )Nr§   rÓ   rÔ   r_   rÖ   rÕ   )r/   r0   re   r×   rØ   r   r
   Úsource_from_cacherÙ   r   r   r   Útest_source_from_cache±  s
    
ÿz#PEP3147Tests.test_source_from_cache)r   r   r   r   r
   Zget_tagrØ   r   Z
skipUnlessrE   ÚimplementationÚ	cache_tagrÛ   rÝ   r   r   r   r   rÒ   ¢  s   ÿ
ÿrÒ   c                   @   s&   e Zd Ze ejdu d¡dd„ ƒZdS )ÚNullImporterTestsNzNeed an undecodeable filenamec              	   C   s@   t j}t |¡ z|  ttj|¡ W t |¡ nt |¡ 0 d S )N)	r   ÚTESTFN_UNENCODABLEr/   rq   r3   r‚   r
   ZNullImporterÚrmdir)r   rŠ   r   r   r   Útest_unencodeable¾  s
    
z#NullImporterTests.test_unencodeable)r   r   r   r   r   r   rá   rã   r   r   r   r   rà   ½  s   ÿrà   Ú__main__)r!   Úimportlib.utilr/   Zos.pathr¿   rE   r(   r   Ztest.supportr   r   rj   rk   rl   ÚDeprecationWarningr
   r±   r   ZTestCaser   r    rÄ   rÒ   rà   r   Úmainr   r   r   r   Ú<module>   s.   
&"  C&
