B
    18™\DE  ã            	   @   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Q R X 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   úQ/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/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  ¡ }|  |¡ x"t|ƒD ]}t  ¡  |  d¡ q W xt|ƒD ]}t  ¡  qDW |  |¡ |sŽyt  ¡  W n tk
r‚   Y nX |  d¡ d S )Né2   Tz5release_lock() without lock should raise RuntimeError)r
   r   r   ÚrangeÚacquire_lockÚrelease_lockÚRuntimeErrorÚ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*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   s6   x0| j D ]&\}}}t d| ¡}|  ||j¡ qW 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   sz   xD| j D ]:\}}}t d| | j¡d }|  |j|¡ W d Q R X qW tj t	¡g}|  
t¡ t d|¡ W d Q R X d S )NÚmodule_r   Úbadsyntax_pep3120)r$   r
   Úfind_moduler&   r   r+   ÚosÚpathÚdirnameÚ__file__ÚassertRaisesÚSyntaxError)r   r'   r+   Ú_Úfdr1   r   r   r   Útest_find_module_encodingG   s    z%ImportTests.test_find_module_encodingc          
   C   sÚ   xz| j D ]p\}}}t d| | j¡\}}}|D |  |d ¡ |  |j|¡ |  | ¡ d¡ |  | ¡ d| ¡ W d Q R X qW t d¡\}}}|@ |  |d ¡ |  |jd¡ |  | ¡ d¡ |  | ¡ d¡ W d Q R X d S )Nr-   r   z# test %s encoding
Útokenizezutf-8z*"""Tokenization help for Python programs.
)	r$   r
   r/   r&   ÚassertNotEqualr   r+   ÚtellÚreadline)r   r'   r+   r6   ÚfpÚfilenameÚinfor   r   r   Útest_issue1267P   s     

zImportTests.test_issue1267c          
   C   sŒ   d}t j dd¡ zNt|d dƒ}| d¡ W d Q R X t |¡\}}}| ¡  |  |j	d¡ W d t jd= t
 |d ¡ t
 |d ¡ X d S )	NZtest_imp_helperr   Ú.z.pyÚwz%# coding: cp1252
u = 'test.test_imp'
Úcp1252z.pyc)Úsysr1   Ú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   s”  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 Q R X t |¡\}}	}
|x |  |¡ |  |	d d…  |¡¡ |  |
d d¡ |  |
d d¡ |  |
d tj¡ t |||	|
¡}|  |jd¡ W d Q R X t ¡   t d¡ t ||d ¡}W d Q R X |  |jd¡ t ¡ . t d¡ t jsºt |t |d ¡¡}W d Q R X |  |jd¡ tj |¡sêt |¡ t|dƒ}| d¡ W d Q R X t ¡  t d¡ t ||¡}W d Q R X |  |j d¡ W d t jd= x*dD ]"}t! "|| ¡ t! "|| ¡ qTW t! #|¡ t! #d¡ X d S )Ns   Ã¤ó   Œó   Àó   Áó   à)
zutf-8Úcp1250Úcp1251rC   Úcp1253Úcp1254Úcp1255Úcp1256Úcp1257Úcp1258Údarwinzutf-8s   aÌˆz2can't run this test with %s as filesystem encodingZtest_imp_helper_Ztest_imp_helper_package_z__init__.pyr   z.pyrB   za = 1
éýÿÿÿé   Úré   r   zb = 2
)z.pyz.pycÚ__pycache__)$rD   ÚgetfilesystemencodingÚplatformr   ÚgetÚskipTestÚdecoder0   r1   ÚjoinrE   ÚcurdirrF   rG   r
   r/   ÚassertIsNotNoneÚ
assertTrueÚendswithÚ	PY_SOURCEÚload_moduleÚaÚwarningsÚcatch_warningsÚsimplefilterÚload_sourceÚdont_write_bytecodeZload_compiledÚcache_from_sourceÚexistsÚmkdirZload_packageÚbr   rI   Úrmtree)r   Zfs_encodingZknown_localesZspecial_charZdecoded_charrJ   Ztest_package_nameZinit_file_namerK   r>   r?   r'   ÚpackageÚextr   r   r   Útest_issue5604q   sx    












zImportTests.test_issue5604c             C   s$   t j t¡}|  ttjd|g¡ d S )Nr.   )r0   r1   r2   r3   r4   r5   r
   r/   )r   r1   r   r   r   Útest_issue9319È   s    zImportTests.test_issue9319c          	   C   st   t j}t j}t ¡ V t d¡}|  |d j¡ tj	d|žŽ }|  
t |¡ |  
||j¡ |  ||j¡ W d Q R X d S )Nr0   r   )r0   )r0   r1   Úgetenvr   ÚEnvironmentVarGuardr
   r/   Ú
addCleanuprH   rj   ÚassertIsÚassertIsNot)r   Ú	orig_pathZorig_getenvÚxZnew_osr   r   r   Útest_load_from_sourceÍ   s    	

z!ImportTests.test_load_from_sourcec             C   sL   d}t  |¡}|d }|d k	r*|  |j¡ t j|f|žŽ }|  |j|¡ d S )NÚ_heapqr   )r
   r/   r|   rH   rj   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 Q R X d S )NÚ_testimportmultipleZ_testimportmultiple_fooZ_testimportmultiple_barZnonexistent)r
   r/   rH   r   r   r   r4   Ú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   sN   d}d}|   t¡}t ||¡ W d Q R X |  ||jj¡ |  ||jj¡ d S )Nzbogus file pathÚ	extension)	r4   r…   r
   r   ÚassertInÚ	exceptionr1   r   Úname)r   r1   rŽ   Úerrr   r   r   Ú"test_load_dynamic_ImportError_pathû   s    z.ImportTests.test_load_dynamic_ImportError_pathc             C   s`   d}t  |¡}|d d k	r&|d  ¡  |d d t jkrB|  d¡ t j|d f|dd … žŽ  d S )Nr„   r   r]   z/found module doesn't appear to be a C extensionr[   )r
   r/   rH   ÚC_EXTENSIONrb   rj   )r   rŽ   Úfoundr   r   r   Ú'test_load_module_extension_file_is_None  s    

z3ImportTests.test_load_module_extension_file_is_Nonec             C   sØ   d}yt j|= W n tk
r$   Y nX zˆt |¡}tj d¡}t ||j	¡}|  
|j|¡ |  
|jj|¡ |  
|jj	|j	¡ |  tt|d¡ |  
|jd¡ |  t j| |¡ W d yt j|= W n tk
rÐ   Y nX X d S )Nztest.imp_dummyZ_testmultiphaseZ
dummy_namei±  )rD   ÚmodulesÚKeyErrorr"   r#   ÚutilÚ	find_specr
   r   Úoriginr   r   Ú__spec__rŽ   r4   Ú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   sD   t  ¡ 2 t jd }t |¡ |  tdtjt jdg¡ W d Q R X d S )Nz.pyz
^No modulerA   )	r   Útemp_cwdÚTESTFNr0   rs   Ú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_LoadSourceCompatibilityr3   rF   Úget_data)r   Úloaderr   r   r   Útest_multiple_calls_to_get_data4  s    
z+ImportTests.test_multiple_calls_to_get_datac          
   C   sd   dt › }ttjt  ƒ|ƒ}t tj||¡. |  td¡ t 	|t
d ¡ W d Q R X W d Q R X d S )NÚtmpzembedded nullú )r   ÚtyperD   r”   r   Ú	swap_itemr¡   Ú
ValueErrorr
   ro   r3   )r   r*   r'   r   r   r   Útest_load_source;  s
    
zImportTests.test_load_sourcec          	   C   s>   t  td¡}G dd„ dƒ}|  t¡ ||ƒ ƒ W d Q R X 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   Úget_attributer
   r4   Ú	TypeError)r   r­   r¯   r   r   r   Útest_issue31315D  s    zImportTests.test_issue31315c             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_hashO  s    zImportTests.test_source_hashc             C   sl   g dfddgdfddgdfddgdfg}x>|D ]6\}}|ddg }t j|Ž }|  |j ¡  d¡|¡ q.W d S )NÚdefaultz--check-hash-based-pycsÚalwaysÚneverz-cz.import _imp; print(_imp.check_hash_based_pycs)zutf-8)r   Zassert_python_okr   ÚoutÚstriprc   )r   ÚcasesZinterp_argsr   ÚargsÚresr   r   r   Ú'test_pyc_invalidation_mode_from_cmdlineS  s    


z3ImportTests.test_pyc_invalidation_mode_from_cmdlinec          
   C   s€   t  ¡ ` tddƒ}| d¡ W d Q R X tjddtjjd tj	ddgd\}}}t 
d|||¡}W d Q R X |  |jd	¡ d S )
Nzmymod.pyÚwbs   x = 42
T)ZdoraiseZinvalidation_modeZmymodrA   )r1   r³   )r   rŸ   rF   rG   Ú
py_compileÚcompileZPycInvalidationModeZCHECKED_HASHr
   r/   rj   r   r€   )r   r=   rK   r1   r‰   r'   r   r   r   Útest_find_and_load_checked_pycb  s    
z*ImportTests.test_find_and_load_checked_pycN)r   r   r   r(   r,   r8   r@   rL   rx   ry   r   r   rƒ   rŠ   r   r“   rž   r   r   rD   rp   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 Q R X d S )Nr   )r   r{   r0   r
   Úreload)r   r0   r   r   r   Útest_sourcev  s    
zReloadTests.test_sourcec          	   C   s,   t  d¡ dd l}t |¡ W d Q R X 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 Q R X d S )NÚmarshalr   )r   rÉ   rË   r
   rÆ   )r   rË   r   r   r   Útest_builtin‡  s    zReloadTests.test_builtinc          	      sT   ddl m} tj d¡‰ ‡ fdd„}|  |¡ |  td¡ t 	|¡ W d Q R X d S )Nr   )ÚparserÚhtmlc                  s   ˆ t jd< d S )NrÎ   )rD   r”   r   )rÎ   r   r   Úcleanup  s    z5ReloadTests.test_with_deleted_parent.<locals>.cleanup)
rÎ   rÍ   rD   r”   Úpopr|   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Å   q  s
   rÅ   c               @   sP   e Zd ZdZe ¡ Ze e	j
jdk	d¡dd„ ƒZe e	j
jdk	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Úbazzqux.pyr^   z
qux.{}.pycT)r0   r1   rd   ÚformatÚtagr   r
   rq   )r   r1   Ú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^   z
qux.{}.pyczqux.py)r0   r1   rd   rÕ   rÖ   r   r
   Úsource_from_cache)r   r1   r×   r   r   r   Útest_source_from_cache¦  s    z#PEP3147Tests.test_source_from_cache)r   r   r   r    r
   Zget_tagrÖ   r   Ú
skipUnlessrD   ÚimplementationÚ	cache_tagrØ   rÚ   r   r   r   r   rÒ   —  s   	rÒ   c               @   s&   e Zd Ze ejdkd¡dd„ ƒZdS )ÚNullImporterTestsNzNeed an undecodeable filenamec          	   C   s6   t j}t |¡ z|  ttj|¡ W d t |¡ X d S )N)	r   ÚTESTFN_UNENCODABLEr0   rs   r4   r…   r
   Ú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.utilr0   Úos.pathrÂ   rD   r)   r   Ztest.supportr   r   rl   rm   rn   ÚDeprecationWarningr
   rµ   r   ÚTestCaser   r!   rÅ   rÒ   rÞ   r   Úmainr   r   r   r   Ú<module>   s.   
"  8&