a
    ¼3jMÌ  ã                   @   s,  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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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Zd dlmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ d dlm%Z% d dl&m'Z' d dl(m)Z) e *ej+d¡Z,d	d
„ Z-ej.d'dd„ƒZ/G dd„ dej0ƒZ1e,G dd„ dej0ƒƒZ2G dd„ dej0ƒZ3G dd„ dej0ƒZ4G dd„ dej0ƒZ5G dd„ dej0ƒZ6G dd„ dej0ƒZ7G dd„ dej0ƒZ8e!G dd„ dej0ƒƒZ9e!G d d!„ d!ej0ƒƒZ:G d"d#„ d#ej0ƒZ;G d$d%„ d%ej0ƒZ<e=d&kr(e >¡  dS )(é    N)Ú_get_sourcefile)Úmock)ÚTESTFNÚforgetÚ	is_jythonÚmake_legacy_pycÚrmtreeÚ	swap_attrÚ	swap_itemÚ
temp_umaskÚunlinkÚunloadÚcpython_onlyÚTESTFN_UNENCODABLEÚtemp_dirÚDirsOnSysPath)Úscript_helper)Úuncache)Ú
ModuleTypez*test meaningful only when writing bytecodec                 C   s6   | d | d | d | d fD ]}t |ƒ qtdƒ d S )Nú.pyú.pycú.pywú	$py.classÚ__pycache__)r   r   )ÚnameÚf© r   úU/www/server/python_manager/versions/3.9.10/lib/python3.9/test/test_import/__init__.pyÚremove_files$   s    ý
r   Ú c              
   c   sÆ   | pd} t ƒ ¤}t || |¡}tj | d ¡}zNtj d|¡ | |fV  tj |¡ W |d urh|tj| < q¤| tjv r¤tj| = n(|d ur|tj| < n| tjv r¢tj| = 0 W d   ƒ n1 s¸0    Y  d S )NÚspamr   )	r   r   Úmake_scriptÚsysÚmodulesÚpopÚpathÚinsertÚremove)r   ÚsourceÚtempdirr%   Z
old_moduler   r   r   Ú_ready_to_import-   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e	dd„ ƒZ
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdAdd„Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zed&d'„ ƒZd(d)„ Zd*d+„ Zed,d-„ ƒZd.d/„ Ze	d0d1„ ƒZd2d3„ Zd4d5„ Zd6d7„ Ze	d8d9„ ƒZ d:d;„ Z!e" #e$j%d<kd=¡d>d?„ ƒZ&d@S )BÚImportTestsc                 C   s   t tƒ t ¡  d S ©N)r   r   Ú	importlibÚinvalidate_caches©Úselfr   r   r   ÚsetUpD   s    zImportTests.setUpc                 C   s   t tƒ d S r,   )r   r   r/   r   r   r   ÚtearDownH   s    zImportTests.tearDownc                 C   s6   |   t¡ dd l}W d   ƒ n1 s(0    Y  d S ©Nr   )ÚassertRaisesÚModuleNotFoundErrorÚ(something_that_should_not_exist_anywhere©r0   r6   r   r   r   Ú&test_import_raises_ModuleNotFoundErrorK   s    z2ImportTests.test_import_raises_ModuleNotFoundErrorc                 C   s:   |   t¡ ddlm} W d   ƒ n1 s,0    Y  d S )Nr   )Úblah)r4   r5   r6   r9   )r0   r9   r   r   r   Ú:test_from_import_missing_module_raises_ModuleNotFoundErrorO   s    zFImportTests.test_from_import_missing_module_raises_ModuleNotFoundErrorc                 C   s:   |   t¡ ddlm} W d   ƒ n1 s,0    Y  d S )Nr   )r6   )r4   ÚImportErrorr-   r6   r7   r   r   r   Ú0test_from_import_missing_attr_raises_ImportErrorS   s    z<ImportTests.test_from_import_missing_attr_raises_ImportErrorc                 C   sn   |   t¡}ddlm} W d   ƒ n1 s,0    Y  |  |jjd¡ |  |jjtj¡ |  	t
|jƒd¡ d S )Nr   ©Úi_dont_existÚosz7cannot import name 'i_dont_exist' from 'os' \(.*os.py\))r4   r;   r?   r>   ÚassertEqualÚ	exceptionr   r%   Ú__file__ÚassertRegexÚstr©r0   Úcmr>   r   r   r   Ú/test_from_import_missing_attr_has_name_and_pathW   s
    *z;ImportTests.test_from_import_missing_attr_has_name_and_pathc                 C   sv   dd l }|  t¡}ddl m} W d   ƒ n1 s40    Y  |  |jjd¡ |  |jj|j¡ |  	t
|jƒd¡ d S )Nr   r=   Ú	_testcapizCcannot import name 'i_dont_exist' from '_testcapi' \(.*\.(so|pyd)\))rH   r4   r;   r>   r@   rA   r   r%   rB   rC   rD   )r0   rH   rF   r>   r   r   r   Ú2test_from_import_missing_attr_has_name_and_so_path^   s    *z>ImportTests.test_from_import_missing_attr_has_name_and_so_pathc                 C   sX   |   t¡}ddlm} W d   ƒ n1 s,0    Y  |  |jjd¡ |  |jj¡ d S )Nr   r=   Ú_warning)	r4   r;   rJ   r>   r@   rA   r   ZassertIsNoner%   rE   r   r   r   Ú&test_from_import_missing_attr_has_nameg   s    *z2ImportTests.test_from_import_missing_attr_has_namec                 C   sZ   |   t¡}ddlm} W d   ƒ n1 s,0    Y  |  |jjddh¡ |  |j¡ d S )Nr   r=   Ú	posixpathÚntpath)r4   r;   Zos.pathr>   ÚassertInrA   r   ÚassertIsNotNonerE   r   r   r   Ú/test_from_import_missing_attr_path_is_canonicaln   s    *z;ImportTests.test_from_import_missing_attr_path_is_canonicalc              	   C   s€  dd l }tƒ ¢\}}t|dƒ}| d¡ W d   ƒ n1 s>0    Y  i }|  t| |¡› d¡" td|› d|ƒ W d   ƒ n1 sŒ0    Y  |  d|¡ W d   ƒ n1 s¶0    Y  tƒ ¤\}}t|dƒ}| d¡ W d   ƒ n1 sö0    Y  i }|  t| |¡› d	¡" td|› d|ƒ W d   ƒ n1 sF0    Y  |  d|¡ W d   ƒ n1 sr0    Y  d S )
Nr   Úwz__all__ = [b'invalid_type']z\.__all__ must be strzfrom z	 import *s   invalid_typez%globals()[b'invalid_type'] = object()z\.__dict__ must be str)	Úrer*   ÚopenÚwriteÚassertRaisesRegexÚ	TypeErrorÚescapeÚexecÚassertNotIn)r0   rR   r   r%   r   Úglobalsr   r   r   Ú"test_from_import_star_invalid_typet   s&    (ÿ0*(ÿ2z.ImportTests.test_from_import_star_invalid_typec                 C   s6   |   t¡ dd l}W d   ƒ n1 s(0    Y  d S r3   )r4   r;   ÚRAnDoM)r0   r\   r   r   r   Útest_case_sensitivity‰   s    z!ImportTests.test_case_sensitivityc                 C   s   ddl m} d S )Nr   )Údouble_const)Útestr^   )r0   r^   r   r   r   Útest_double_const   s    zImportTests.test_double_constc                    s^   ‡ fdd„}t j dtj¡ z2|dƒ t j d¡rDdD ]}||ƒ q6W t jd= n
t jd= 0 d S )Nc              
      sJ  t |  }trt d }nt d }t|dƒP}td| d|d t d¡}t d¡}td||d td	||d W d   ƒ n1 s~0    Y  t tjv rštjt = t 	¡  zˆzt
t ƒ}W n6 tyæ } zˆ  d
| |f ¡ W Y d }~n
d }~0 0 ˆ  |j|d| ¡ ˆ  |j|d| ¡ W tt ƒ t|ƒ t|ƒ ntt ƒ t|ƒ t|ƒ 0 d S )Nr   r   rQ   z)# This tests Python's ability to import azfile.©Úfileiè  za =zb =zimport from %s failed: %sz'module loaded (%s) but contents invalid)r   r   rS   ÚprintÚrandomÚ	randranger"   r#   r-   r.   Ú
__import__r;   Úfailr@   ÚaÚbr   r   )Úextr(   Zpycr   rh   ri   ÚmodÚerrr/   r   r   Útest_with_extension•   s@    
ÿ

,
(
ÿ
ÿ
þz4ImportTests.test_import.<locals>.test_with_extensionr   r   Úwin)z.PYz.Pyz.pYr   z.PYWz.pYw)r"   r%   r&   r?   ÚcurdirÚplatformÚ
startswith)r0   rm   rj   r   r/   r   Útest_import”   s    "zImportTests.test_importÚlonglistc                 C   sN  |d }t |dƒ<}| d¡ tdƒD ]}| d¡ q&| d¡ W d   ƒ n1 sT0    Y  zt |¡ W t|ƒ n
t|ƒ 0 tj d¡ t	 
¡  i }zdt|ƒ td| d |ƒ W tjd	= t|d
 ƒ t|d ƒ | ¡  ztj|= W n tyú   Y n0 nLtjd	= t|d
 ƒ t|d ƒ | ¡  ztj|= W n tyF   Y n0 0 d S )Nr   rQ   zd = [
ièý  z"",
ú]r   zimport éÿÿÿÿÚcÚo)rS   rT   ÚrangeÚ
py_compileÚcompiler   r"   r%   Úappendr-   r.   r   rX   Úclearr#   ÚKeyError)r0   ÚmoduleÚfilenamer   ÚiÚ	namespacer   r   r   Útest_module_with_large_stackÀ   s>    
(÷z(ImportTests.test_module_with_large_stackc                 C   sÀ   t d }t|dƒ}td|d W d   ƒ n1 s40    Y  tj dtj¡ t 	¡  t tj
v rhtj
t = z@dD ]&}|  ttt ¡ |  t tj
d| ¡ qnW tjd= tt ƒ ntjd= tt ƒ 0 d S )Nr   rQ   za = 1/0ra   r   )é   é   é   z'damaged module in sys.modules on %i try)r   rS   rc   r"   r%   r&   r?   ro   r-   r.   r#   r4   ÚZeroDivisionErrorrf   rY   r   )r0   r(   r   r€   r   r   r   Útest_failing_import_sticksè   s"    *

ÿ
ÿz&ImportTests.test_failing_import_sticksc                 C   sT   dd l }dd l}|  |||j¡ |  t|jdƒ¡ dd lm} |  ||j|j¡ d S )Nr   rB   )r_   Útest.supportÚassertIsÚ__name__Ú
assertTrueÚhasattrÚsupport)r0   Úxr_   Úyr   r   r   Útest_import_name_bindingü   s    z$ImportTests.test_import_name_bindingc                 C   s|   zd}W dd l m  m} ndd l m  m} 0 d}|dk rXdd l m  m} |d7 }q4tdƒD ]}dd l m  m} q`d S )N.r   é
   rƒ   r„   )Ztest.support.script_helperr   r   rx   )r0   rŽ   r€   r   r   r   Útest_issue31286  s    (
zImportTests.test_issue31286c                 C   sH  t tj d }t|dƒ}| d¡ W d   ƒ n1 s80    Y  tj dtj¡ zÖt	t ƒ}|  
t tj¡ |  |jdd¡ |  |jdd¡ tt ƒ t|dƒ}| d¡ W d   ƒ n1 s¼0    Y  |  ttj|¡ tj t ¡}|  |d	¡ |  |jd
d¡ |  |jdd¡ W tjd= tt ƒ tt ƒ ntjd= tt ƒ tt ƒ 0 d S )NÚpyrQ   z
a = 1
b=2
r   rƒ   z!module has wrong attribute valuesr„   za = 10
b=20//0
z$expected module to be in sys.modulesr‘   )r   r?   ÚextseprS   rT   r"   r%   r&   ro   rf   rN   r#   r@   rh   ri   r   r4   r†   r-   ÚreloadÚgetrO   r   )r0   r(   r   rk   r   r   r   Útest_failing_reload  s.    ((
þzImportTests.test_failing_reloadc                 C   sþ   t d }t|dƒ}| d¡ W d   ƒ n1 s20    Y  tj dtj¡ zˆtt ƒ}|  	|j
 d¡¡ t |¡ tjt = t|ƒ t ¡  tt ƒ}tj |j
¡\}}|  |d¡ W tjd= tt ƒ t tjv rútjt = n$tjd= tt ƒ t tjv røtjt = 0 d S )Nr   rQ   ztest = None
r   r   )r   rS   rT   r"   r%   r&   r?   ro   rf   r‹   rB   Úendswithr'   r#   r   r-   r.   Úsplitextr@   r   )r0   r(   r   rk   Úbaserj   r   r   r   Útest_file_to_source>  s,    (


ý
zImportTests.test_file_to_sourcec                 C   s|   t j t¡}t ¡ }z| |¡ W n" tyD   |  d 	|¡¡ Y n0 |  
t¡}t|ƒ W d   ƒ n1 sn0    Y  d S )Nzpath is not encodable to {})r?   r%   Úabspathr   r"   ÚgetfilesystemencodingÚencodeÚUnicodeEncodeErrorÚskipTestÚformatr4   r;   rf   )r0   r%   Úencodingrv   r   r   r   Útest_import_by_filenameV  s    z#ImportTests.test_import_by_filenamec                 C   s"   t  dtt d¡¡}t  |¡ d S )Nr   z¡            import sys
            class C:
               def __del__(self):
                  import importlib
            sys.argv.insert(0, C())
            )r   r!   r   ÚtextwrapÚdedentÚassert_python_ok)r0   Ztestfnr   r   r   Ú!test_import_in_del_does_not_crash`  s    z-ImportTests.test_import_in_del_does_not_crashc              
   C   s  t j dtj¡ zätd }tj |¡}t	|dƒ}W d   ƒ n1 sF0    Y  zt 
|d¡ W nn ty|   |  d¡ Y nT tyÎ } z<|jttdd ƒttdd ƒfvrª‚ |  d |¡¡ W Y d }~n
d }~0 0 ttƒ t |¡ W t jd= ttƒ nt jd= ttƒ 0 d S )	Nr   r   rQ   )ì   ûÿ r¨   z-cannot set modification time to large integerZ	EOVERFLOWÚEINVALz2cannot set modification time to large integer ({}))r"   r%   r&   r?   ro   r   r-   ÚutilÚcache_from_sourcerS   ÚutimeÚOverflowErrorr    ÚOSErrorÚerrnoÚgetattrr¡   rf   Ústatr   )r0   r(   Zcompiledr   Úer   r   r   Útest_timestamp_overflowk  s,    
ÿ&
ÿz#ImportTests.test_timestamp_overflowc                 C   s4   zt ddgd W n ty.   |  d¡ Y n0 d S )NÚhttpr9   )Úfromlistzfromlist must allow bogus names)rf   r;   rg   r/   r   r   r   Útest_bogus_fromlist…  s    zImportTests.test_bogus_fromlistc                 C   s.   ddg}t j|Ž }| ¡ \}}|  d|¡ d S )Nú-cz&del __builtins__.__import__; import oss   ImportError)r   Zspawn_pythonÚcommunicaterN   )r0   ÚargsÚpopenÚstdoutÚstderrr   r   r   Útest_delete_builtins_import‹  s    
z'ImportTests.test_delete_builtins_importc                 C   s<   |   td¡ ddlm} W d   ƒ n1 s.0    Y  d S )Nz^No module named 'bogus'r   )Úfoo)rU   r;   Úbogusr¾   )r0   r¾   r   r   r   Ú/test_from_import_message_for_nonexistent_module’  s    z;ImportTests.test_from_import_message_for_nonexistent_modulec                 C   s<   |   td¡ ddlm} W d   ƒ n1 s.0    Y  d S )Nz^cannot import name 'bogus'r   )r¿   )rU   r;   rR   r¿   )r0   r¿   r   r   r   Ú,test_from_import_message_for_existing_module–  s    z8ImportTests.test_from_import_message_for_existing_modulec                 C   sv   G dd„ dƒ}d}|   t|¡ |ƒ tj|< |  t¡}ddlm} W d   ƒ n1 sV0    Y  |  t	|j
ƒd¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )zIImportTests.test_from_import_AttributeError.<locals>.AlwaysAttributeErrorc                 S   s   t ‚d S r,   )ÚAttributeError)r0   Ú_r   r   r   Ú__getattr__ž  s    zUImportTests.test_from_import_AttributeError.<locals>.AlwaysAttributeError.__getattr__N)rŠ   Ú
__module__Ú__qualname__rÄ   r   r   r   r   ÚAlwaysAttributeError  s   rÇ   Útest_from_import_AttributeErrorr   ©Údoes_not_existzScannot import name 'does_not_exist' from '<unknown module name>' (unknown location))Ú
addCleanupr   r"   r#   r4   r;   rÈ   rÊ   r@   rD   rA   )r0   rÇ   Úmodule_namerF   rÊ   r   r   r   rÈ   š  s    *ÿz+ImportTests.test_from_import_AttributeErrorc              	   C   s–   t tdd ƒv |  t¡ ddlm} W d   ƒ n1 s:0    Y  |  t¡ tj W d   ƒ n1 sj0    Y  W d   ƒ n1 sˆ0    Y  d S )NrŠ   r   rÉ   )r	   r?   r4   r;   rÊ   rÂ   )r0   rÊ   r   r   r   Útest_issue31492ª  s
    *zImportTests.test_issue31492c                    s
  dd„ ‰ t j dtj tj t¡d¡¡ zÒd ‰‡ ‡‡fdd„‰tdƒD ]¨}t 	¡ ‰‡fdd	„td
ƒD ƒ}zZt
j |ˆj¡ t d¡ W d   ƒ n1 sš0    Y  W t j dd ¡ t j dd ¡ nt j dd ¡ t j dd ¡ 0 ˆd urFˆ‚qFW t jd= n
t jd= 0 d S )Nc                 S   s"   |dkr| j jdkrt d¡ d S )NÚcallÚhas_deadlockgš™™™™™¹?)Úf_codeÚco_nameÚtimeÚsleep)ÚframeÚeventÚargr   r   r   Údelay_has_deadlock¹  s    z8ImportTests.test_concurrency.<locals>.delay_has_deadlockr   Údatac               
      sV   t  ˆ ¡ ˆ ¡  zdd l} W n( tyF } z|‰W Y d }~n
d }~0 0 t  d ¡ d S r3   )r"   ÚsettraceÚwaitÚpackageÚBaseException)rÛ   r²   )r×   rÕ   Úexcr   r   ÚrunÀ  s    
z)ImportTests.test_concurrency.<locals>.runr‘   c                    s   g | ]}t jˆ d ‘qS ))Útarget)Ú	threadingÚThread)Ú.0rŽ   )rÞ   r   r   Ú
<listcomp>Ì  ó    z0ImportTests.test_concurrency.<locals>.<listcomp>r„   rÛ   zpackage.submodule)r"   r%   r&   r?   ÚjoinÚdirnamerB   rx   rà   ÚEventr_   r   Zstart_threadsÚsetrÒ   rÓ   r#   r$   )r0   r€   Úthreadsr   )r×   rÕ   rÝ   rÞ   r   Útest_concurrency¶  s$     
*ÿzImportTests.test_concurrencyÚwin32úWindows-specificc           
      C   sœ  ddl m} |tjƒ}tj d¡j}tj	 
tj	 |¡d d|v rDdnd¡¡}tj ¡ .}tj	 
|d¡}t |¡ tj	 
|tj	 tj¡¡}t tj|¡ t ||¡ t tj	 
t tj¡d¡¡D ]}t ||¡ qÀt ||¡ d }	d	d
„ tjD ƒ}	|d tj	 tj¡ |	d< tj|dd 
dd tj	 |¡¡ddg¡gtj|	tj	 |¡d t ||¡ tj|ddgtj|	tj	 |¡d W d   ƒ n1 sŽ0    Y  d S )Nr   )ÚGetModuleFileNameZ_sqlite3zsqlite3{}.dllZ_dr   ZDLLszvcruntime*.dllc                 S   s   i | ]}|  ¡ tj| “qS r   )Úupperr?   Úenviron)râ   Úkr   r   r   Ú
<dictcomp>î  rä   z:ImportTests.test_dll_dependency_import.<locals>.<dictcomp>ú;Z
PYTHONPATHz-Scz	import oszp = os.add_dll_directory({!r})zimport _sqlite3zp.close)r¼   ÚenvÚcwd)Ú_winapirí   r"   Z	dllhandler-   rª   Ú	find_specÚoriginr?   r%   rå   ræ   r¡   r_   r   r   ÚmkdirÚbasenameÚ
executableÚshutilÚcopyÚglobrW   Úprefixrï   rB   Ú
subprocessÚ
check_callÚSTDOUT)
r0   rí   ZdllnameZpydnameZdepnameÚtmpZtmp2Zpyexer   ró   r   r   r   Útest_dll_dependency_importØ  sN    

þ
 
ÿûÿ
ö
ýz&ImportTests.test_dll_dependency_importN)rs   )'rŠ   rÅ   rÆ   r1   r2   r8   r:   r<   rG   r   rI   rK   rP   r[   r]   r`   rr   r‚   r‡   r   r’   r—   Úskip_if_dont_write_bytecoder›   r£   r§   r³   r¶   r½   rÀ   rÁ   rÈ   rÍ   rê   ÚunittestÚ
skipUnlessr"   rp   r  r   r   r   r   r+   B   sH   
,
(&




"r+   c                   @   sb   e Zd Ze ejdkd¡dd„ ƒZe ejdkd¡dd„ ƒZe ejdkd¡dd„ ƒZ	d	d
„ Z
dS )ÚFilePermissionTestsÚposixú%test meaningful only on posix systemsc              	   C   s°   d}t |ƒn tƒ H\}}tj |¡}t|ƒ}tj |¡sD|  	d¡ t 
|¡}W d   ƒ n1 sb0    Y  W d   ƒ n1 s€0    Y  |  tt
 |j¡ƒtd| @ ƒ¡ d S )Né   ú4__import__ did not result in creation of a .pyc filei¶  )r   r*   r-   rª   r«   rf   r?   r%   Úexistsrg   r±   r@   ÚoctÚS_IMODEÚst_mode)r0   Úmaskr   r%   Úcached_pathr~   Ú	stat_infor   r   r   Útest_creation_mode
  s    
Fÿz&FilePermissionTests.test_creation_modec              	   C   s¶   d}t dƒz tƒ T\}}tj |¡}t ||¡ t|ƒ tj 	|¡sP|  
d¡ t |¡}W d   ƒ n1 sn0    Y  W d   ƒ n1 sŒ0    Y  |  tt |j¡ƒt|ƒ¡ d S )Né€  r
  r  ©r   r*   r-   rª   r«   r?   Úchmodrf   r%   r  rg   r±   r@   r  r  r  )r0   Úmoder   r%   r  r  r   r   r   Útest_cached_mode_issue_2051  s    
Fz/FilePermissionTests.test_cached_mode_issue_2051c              	   C   s¾   d}t dƒz tƒ T\}}tj |¡}t ||¡ t|ƒ tj 	|¡sP|  
d¡ t |¡}W d   ƒ n1 sn0    Y  W d   ƒ n1 sŒ0    Y  |dB }|  tt |j¡ƒt|ƒ¡ d S )Né   r
  r  é€   r  )r0   r  r   r%   r  r  Zexpectedr   r   r   Útest_cached_readonly+  s    
Fz(FilePermissionTests.test_cached_readonlyc              	   C   sZ  t ƒ <\}}t|dƒ}| d¡ W d   ƒ n1 s80    Y  t |¡}t ||j|jd f¡ t |d¡ t	|ƒ}|  
|jd¡ t |d¡ t|dƒ}| d¡ W d   ƒ n1 s¼0    Y  t|ƒ t ¡  t	|ƒ}|  
|jd¡ t|ƒ t|ƒ t ¡  |d	 }t tj |¡|¡ t	|ƒ}|  
|jd¡ W d   ƒ n1 sL0    Y  d S )
NrQ   zx = 'original'
i áõr  Zoriginalr  zx = 'rewritten'
Z	rewrittenrv   )r*   rS   rT   r?   r±   r¬   Úst_atimeÚst_mtimer  rf   r@   rŽ   r   r-   r.   r   Úrenamerª   r«   )r0   r   r%   r   ÚsÚmZbytecode_onlyr   r   r   Útest_pyc_always_writable;  s,    (
(z,FilePermissionTests.test_pyc_always_writableN)rŠ   rÅ   rÆ   r  r  r?   r   r  r  r  r!  r   r   r   r   r    s   ÿ
ÿ
ÿ
r  c                   @   s|   e Zd ZdZdZej e¡Z	ej 
e	e¡ej d Zej e¡Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ ZdS )ÚPycRewritingTestsZunlikely_module_namez¦
import sys
code_filename = sys._getframe().f_code.co_filename
module_filename = __file__
constant = 1
def func():
    pass
func_filename = func.__code__.co_filename
r“   c                 C   s‚   t jd d … | _t j | jd ¡| _t | j	¡ t
| jdƒ}| | j¡ W d   ƒ n1 s\0    Y  t j d| j	¡ t ¡  d S )NrQ   r   )r"   r%   Úsys_pathr#   r$   rÌ   Úorig_moduler?   rø   Údir_namerS   Ú	file_namerT   Úmodule_sourcer&   r-   r.   )r0   r   r   r   r   r1   m  s    *zPycRewritingTests.setUpc                 C   sV   | j tjd d …< | jd ur*| jtj| j< n
t| jƒ t| jƒ t| j	ƒ t
| jƒ d S r,   )r#  r"   r%   r$  r#   rÌ   r   r   r&  Úcompiled_namer   r%  r/   r   r   r   r2   v  s    



zPycRewritingTests.tearDownc                 C   s    t ƒ }t| j||ƒ tj| j S r,   )rZ   rf   rÌ   r"   r#   )r0   Únsr   r   r   Úimport_module€  s    zPycRewritingTests.import_modulec                 C   s~   |   ¡ }|  |j| j¡ |  |j| j¡ |  |j| j¡ tj| j= |   ¡ }|  |j| j¡ |  |j| j¡ |  |j| j¡ d S r,   )	r*  r@   Úmodule_filenamer&  Úcode_filenameÚfunc_filenamer"   r#   rÌ   ©r0   rk   r   r   r   Útest_basics…  s    
zPycRewritingTests.test_basicsc                 C   sL   t j| jdd |  ¡ }|  |j| j¡ |  |j| j¡ |  |j| j¡ d S ©Nzanother_module.py)Údfile)ry   rz   r&  r*  r@   r+  r,  r-  r.  r   r   r   Útest_incorrect_code_name  s
    z*PycRewritingTests.test_incorrect_code_namec                 C   sh   d}t j| j|d t | j¡ t| jƒ}t ¡  |  ¡ }|  	|j
|¡ |  	|j|¡ |  	|j|¡ d S r0  )ry   rz   r&  r?   r'   r   r-   r.   r*  r@   r+  r,  r-  )r0   rß   Úpyc_filerk   r   r   r   Útest_module_without_source—  s    
z,PycRewritingTests.test_module_without_sourcec                 C   sà   t  | j¡ t| jdƒ$}| d¡}t |¡}W d   ƒ n1 sB0    Y  t|j	ƒ}t
jj}| d¡}|||< |jt|ƒd}t| jdƒ&}| |¡ t ||¡ W d   ƒ n1 s¸0    Y  |  ¡ }|  |jj|j¡ d S )NÚrbé   rƒ   )Ú	co_constsÚwb)ry   rz   r&  rS   r(  ÚreadÚmarshalÚloadÚlistr7  r-   r*  Ú__code__ÚindexÚreplaceÚtuplerT   Údumpr@   ZconstantÚco_filename)r0   r   ÚheaderÚcodeZ	constantsZforeign_codeÚposrk   r   r   r   Útest_foreign_code¢  s    
(


*z#PycRewritingTests.test_foreign_codeN)rŠ   rÅ   rÆ   rÌ   r'  r?   r%   rœ   r   r%  rå   r”   r&  r-   rª   r«   r(  r1   r2   r*  r/  r2  r4  rF  r   r   r   r   r"  Z  s   		
r"  c                   @   sF   e Zd ZdZeZdd„ Zdd„ Zdd„ Ze	 
ejdkd	¡d
d„ ƒZdS )Ú
PathsTests)r_   u   testÃ¤Ã¶Ã¼ÃŸu   testÃ©Ã¨u
   testÂ°Â³Â²c                 C   s    t  | j¡ tjd d … | _d S r,   )r?   rø   r%   r"   Úsyspathr/   r   r   r   r1   ¸  s    zPathsTests.setUpc                 C   s   t | jƒ | jtjd d …< d S r,   )r   r%   rH  r"   r/   r   r   r   r2   ¼  s    
zPathsTests.tearDownc                 C   st   t tj | jd¡dƒ}| d¡ W d   ƒ n1 s60    Y  tj | jd ¡ tdƒ}|  |j	d¡ t
dƒ d S )Nztest_trailing_slash.pyrQ   z testdata = 'test_trailing_slash'ú/Útest_trailing_slash)rS   r?   r%   rå   rT   r"   r{   rf   r@   Útestdatar   )r0   r   rk   r   r   r   rJ  Á  s    (zPathsTests.test_trailing_slashrë   rì   c           	   
   C   sj  t tj | jd¡dƒ}| d¡ W d   ƒ n1 s60    Y  t ¡  tj | j¡}dd l}| 	¡ }|d }d||f }||dd … 7 }zt 
|¡ W nL tyä } z4|jtjtjtjfv rÎ|  d|f ¡ ‚ W Y d }~n
d }~0 0 tj d|¡ ztdƒ}W n8 ty8 } z|  d	||f ¡ W Y d }~n
d }~0 0 |  |jd¡ |  |j |¡|j¡ tdƒ d S )
Nztest_unc_path.pyrQ   ztestdata = 'test_unc_path'r   z\\%s\%s$r„   z%cannot access administrative share %rZtest_unc_pathz,could not import 'test_unc_path' from %r: %r)rS   r?   r%   rå   rT   r-   r.   rœ   ÚsocketÚgethostnameÚlistdirr®   r¯   ÚEPERMZEACCESÚENOENTr    r"   r&   rf   r;   rg   r@   rK  r‹   rB   rq   r   )	r0   r   r%   rL  ZhnÚdriveZuncr²   rk   r   r   r   Útest_UNC_pathÊ  s2    (ÿzPathsTests.test_UNC_pathN)rŠ   rÅ   rÆ   ZSAMPLESr   r%   r1   r2   rJ  r  r  r"   rp   rR  r   r   r   r   rG  ³  s   	rG  c                   @   sH   e Zd Zdd„ ZeZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dS )ÚRelativeImportTestsc                 C   s   t dƒ d S )Nztest.relimport)r   r/   r   r   r   r2   ê  s    zRelativeImportTests.tearDownc                 C   s    ddl m} |  t|dƒ¡ d S )Nr„   )Ú	relimportrS  )r   rT  r‹   rŒ   )r0   rT  r   r   r   Útest_relimport_starî  s    z'RelativeImportTests.test_relimport_starc                    s|   ‡ fdd„}t ddd‰ |ƒ  t ddd‰ |ƒ  t ddd‰ |  t|¡ t ddd‰ |  t|¡ t tƒ d‰ |  t|¡ d S )	Nc                      s   t dˆ ƒ d S )Nzfrom . import relimport)rX   r   ©r)  r   r   Úcheck_relativeù  s    z:RelativeImportTests.test_issue3221.<locals>.check_relativer_   ztest.notarealmodule)Ú__package__rŠ   znotarealpkg.notarealmoduler¾   )rX  )Údictr4   r5   ÚobjectrV   )r0   rW  r   rV  r   Útest_issue3221ó  s    z"RelativeImportTests.test_issue3221c                 C   s   t  dddd¡ d S )Nz-WÚignorer·   zfoo = 1; from . import foo)r   Zassert_python_failurer/   r   r   r   Ú)test_parentless_import_shadowed_by_global  s    
ÿz=RelativeImportTests.test_parentless_import_shadowed_by_globalc                 C   sD   |   t¡& ddlm} |  d¡ W d   ƒ n1 s60    Y  d S )Nrƒ   )Úsepz>explicit relative import triggered an implicit absolute import)r4   r;   r?   r^  rg   )r0   r^  r   r   r   Ú#test_absolute_import_without_future  s    z7RelativeImportTests.test_absolute_import_without_futurec              
   C   s¼   t j t j t¡dd¡}tddƒ† t|ƒ^ |  t¡ dd l	}W d   ƒ n1 sV0    Y  |  
dtj¡ |  
dtj¡ W d   ƒ n1 s0    Y  W d   ƒ n1 s®0    Y  d S )NrØ   Úpackage2Ú
submodule1Ú
submodule2r   )r?   r%   rå   ræ   rB   r   r   r4   r;   ra  rY   r"   r#   )r0   r%   ra  r   r   r   Útest_import_from_non_package  s    &z0RelativeImportTests.test_import_from_non_packagec              	   C   sz   t dddƒZ ttj tj t¡d¡ƒ  dd l}|jj	 W d   ƒ n1 sN0    Y  W d   ƒ n1 sl0    Y  d S )Nr`  zpackage2.submodule1zpackage2.submodule2rØ   r   )
r   r   r?   r%   rå   ræ   rB   Zpackage2.submodule1ra  rb  )r0   r`  r   r   r   Ú!test_import_from_unloaded_package&  s
    ÿz5RelativeImportTests.test_import_from_unloaded_packageN)rŠ   rÅ   rÆ   r2   r1   rU  r[  r]  r_  rc  rd  r   r   r   r   rS  è  s   	rS  c                   @   s   e Zd Zdd„ ZdS )ÚOverridingImportBuiltinTestsc                 C   s    dd l }dd„ }|  |ƒ |¡ ttddd„ ƒ |  |ƒ d¡ W d   ƒ n1 sR0    Y  ttƒ ddd„ ƒ |  |ƒ |¡ W d   ƒ n1 s’0    Y  d S )	Nr   c                  S   s   dd l } | S r3   ©r?   rf  r   r   r   r¾   2  s    z?OverridingImportBuiltinTests.test_override_builtin.<locals>.foorf   c                  W   s   dS ©Né   r   ©rŽ   r   r   r   Ú<lambda>7  rä   zDOverridingImportBuiltinTests.test_override_builtin.<locals>.<lambda>rh  c                  W   s   dS rg  r   ri  r   r   r   rj  =  rä   )r?   r@   r	   Úbuiltinsr
   rZ   )r0   r?   r¾   r   r   r   Útest_override_builtin.  s    ,z2OverridingImportBuiltinTests.test_override_builtinN)rŠ   rÅ   rÆ   rl  r   r   r   r   re  -  s   re  c                   @   s´   e Zd Zdd„ Zdd„ Zdd„ Zedd„ ƒZe 	e
jd	kd
¡e ee
dƒoTe
 ¡ dkd¡edd„ ƒƒƒZedd„ ƒZedd„ ƒZdd„ Zedd„ ƒZedd„ ƒZdd„ Zdd„ ZdS )ÚPycacheTestsc                 C   s   t tƒ tdƒ t| jƒ d S )Nr   )r   r   r   r   r(   r/   r   r   r   Ú_cleanD  s    zPycacheTests._cleanc                 C   sf   t d | _|  ¡  t| jdƒ}td|d W d   ƒ n1 s@0    Y  tj dtj	¡ t
 ¡  d S )Nr   rQ   z/# This is a test file written by test_import.pyra   r   )r   r(   rn  rS   rc   r"   r%   r&   r?   ro   r-   r.   )r0   Úfpr   r   r   r1   I  s    
*zPycacheTests.setUpc                 C   s   t jd= |  ¡  d S r3   )r"   r%   rn  r/   r   r   r   r2   Q  s    zPycacheTests.tearDownc                 C   sZ   |   tj d¡¡ ttƒ |  tj d¡¡ tj 	| j
¡}|  tj |¡d |t¡¡ d S )Nr   z*bytecode file {!r} for {!r} does not exist)ÚassertFalser?   r%   r  rf   r   r‹   r-   rª   r«   r(   r¡   ©r0   Zpyc_pathr   r   r   Útest_import_pyc_pathV  s    ÿÿz!PycacheTests.test_import_pyc_pathr  r	  Úgeteuidr   z=due to varying filesystem permission semantics (issue #11956)c                 C   sp   t dƒ ttƒ W d   ƒ n1 s&0    Y  |  tj d¡¡ tj 	| j
¡}|  tj |¡d |t¡¡ d S )Né’   r   z"bytecode file {!r} for {!r} exists)r   rf   r   r‹   r?   r%   r  r-   rª   r«   r(   rp  r¡   rq  r   r   r   Útest_unwritable_directory`  s    
&ÿÿz&PycacheTests.test_unwritable_directoryc                 C   sV   t tƒ tj | j¡}|  tj 	|¡¡ t 
| j¡ ttƒ t ¡  |  tt t¡ d S r,   )rf   r   r-   rª   r«   r(   r‹   r?   r%   r  r'   r   r.   r4   r;   )r0   r3  r   r   r   Útest_missing_sourcep  s    z PycacheTests.test_missing_sourcec              
   C   s~   t tƒ t| jƒ}t | j¡ ttƒ t ¡  t tƒ}z6|  	|j
tj t ¡ tjtj |¡¡¡ W t |¡ nt |¡ 0 d S r,   )rf   r   r   r(   r?   r'   r   r-   r.   r@   rB   r%   rå   Úgetcwdro   Úrelpath©r0   r3  r   r   r   r   Útest_missing_source_legacy|  s    
ÿz'PycacheTests.test_missing_source_legacyc                 C   s<   t tƒ}tj td ¡}|  |jtj 	t 
¡ tj|¡¡ d S )Nr   )rf   r   r-   rª   r«   r@   Ú
__cached__r?   r%   rå   rw  ro   )r0   r   r3  r   r   r   Útest___cached__  s    zPycacheTests.test___cached__c              
   C   sb   t tƒ t| jƒ}t | j¡ ttƒ t ¡  t tƒ}|  	|j
tj t ¡ tjtj |¡¡¡ d S r,   )rf   r   r   r(   r?   r'   r   r-   r.   r@   r{  r%   rå   rw  ro   rx  ry  r   r   r   Útest___cached___legacy_pyc•  s    
ÿz'PycacheTests.test___cached___legacy_pycc                 C   s
  dd„ }t  d¡ |  |¡ tt j dd¡dƒ W d   ƒ n1 sF0    Y  tt j dd¡dƒ W d   ƒ n1 sz0    Y  t ¡  tdƒ}tj	 
t j dd¡¡}|  |jt j t  ¡ t j|¡¡ tj	 
t j dd¡¡}|  tjd jt j t  ¡ t j|¡¡ d S )Nc                   S   s   t dƒ tdƒ tdƒ d S ©NÚpep3147úpep3147.foo©r   r   r   r   r   r   Úcleanup¨  s    z5PycacheTests.test_package___cached__.<locals>.cleanupr  ú__init__.pyrQ   úfoo.pyr€  )r?   rø   rË   rS   r%   rå   r-   r.   rf   rª   r«   r@   r{  rw  ro   r"   r#   ©r0   r‚  r   Zinit_pycZfoo_pycr   r   r   Útest_package___cached__¥  s"    

ÿ ÿz$PycacheTests.test_package___cached__c                 C   s*  dd„ }t  d¡ |  |¡ tt j dd¡dƒ W d   ƒ n1 sF0    Y  tt j dd¡dƒ W d   ƒ n1 sz0    Y  t ¡  tdƒ}t	dƒ t	dƒ t ¡  tdƒ}tj
 t j dd¡¡}|  |jt j t  ¡ t j|¡¡ tj
 t j dd¡¡}|  tjd jt j t  ¡ t j|¡¡ d S )Nc                   S   s   t dƒ tdƒ tdƒ d S r~  r  r   r   r   r   r‚  ¿  s    z>PycacheTests.test_package___cached___from_pyc.<locals>.cleanupr  rƒ  rQ   r„  r€  )r?   rø   rË   rS   r%   rå   r-   r.   rf   r   rª   r«   r@   r{  rw  ro   r"   r#   r…  r   r   r   Ú test_package___cached___from_pyc¼  s*    

ÿ ÿz-PycacheTests.test_package___cached___from_pycc                 C   sb   t tƒ ttƒ t| jdƒ}td|d W d   ƒ n1 s>0    Y  t tƒ}|  |jd¡ d S )Nrh   zx = 5ra   rh  )rf   r   r   rS   r(   rc   r@   rŽ   )r0   ro  r   r   r   r   Útest_recompute_pyc_same_second×  s    *z+PycacheTests.test_recompute_pyc_same_secondN)rŠ   rÅ   rÆ   rn  r1   r2   r  rr  r  r  r?   r   ÚskipIfrŒ   rs  ru  rv  rz  r|  r}  r†  r‡  rˆ  r   r   r   r   rm  A  s0   
	ÿÿ



rm  c                   @   sX   e Zd ZdZed Zdd„ Zdd„ Ze e	e
dƒ p>e
 ¡ dkd	¡ejjd
d„ ƒƒZdS )ÚTestSymbolicallyLinkedPackageÚsamplez-taggedc                 C   s®   t j | j¡ t j | j¡ tjd d … | _t 	| j¡ |  
t jj| j¡ tj | jd¡}t j |¡ tj| j| jdd |  
t jj| j¡ t ¡  |  tj | j¡d¡ d S )Nrƒ  T)Útarget_is_directory)r_   r   r   ÚtaggedÚpackage_namer"   r%   Úorig_sys_pathr?   rø   rË   rå   Zcreate_empty_fileÚsymlinkr   r-   r.   r@   Úisdir)r0   Z	init_filer   r   r   r1   æ  s    z#TestSymbolicallyLinkedPackage.setUpc                 C   s   | j tjd d …< d S r,   )r  r"   r%   r/   r   r   r   r2   ý  s    z&TestSymbolicallyLinkedPackage.tearDownÚgetwindowsversion)é   r   zWindows Vista or later requiredc                 C   s    dgt jd d …< t | j¡ d S )NÚ.)r"   r%   r-   r*  rŽ  r/   r   r   r   Útest_symlinked_dir_importable  s    z;TestSymbolicallyLinkedPackage.test_symlinked_dir_importableN)rŠ   rÅ   rÆ   rŽ  r  r1   r2   r  r  rŒ   r"   r’  r_   r   Zskip_unless_symlinkr•  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	S )
ÚImportlibBootstrapTestsc                 C   s   t jd }|  |¡ d S )NÚ_frozen_importlib)r"   r#   r‹   r.  r   r   r   Útest_frozen_importlib  s    
z-ImportlibBootstrapTests.test_frozen_importlibc                 C   sX   ddl m} tjd }|  ||¡ |  |jd¡ |  |jd¡ |  |j	 
d¡|j	¡ d S )Nr   )Ú
_bootstrapr—  zimportlib._bootstrapr-   z_bootstrap.py)r-   r™  r"   r#   r‰   r@   rŠ   rX  r‹   rB   r˜   )r0   r™  rk   r   r   r   Ú"test_frozen_importlib_is_bootstrap  s    
z:ImportlibBootstrapTests.test_frozen_importlib_is_bootstrapc                 C   sX   ddl m} tjd }|  ||¡ |  |jd¡ |  |jd¡ |  |j	 
d¡|j	¡ d S )Nr   )Ú_bootstrap_externalÚ_frozen_importlib_externalzimportlib._bootstrap_externalr-   z_bootstrap_external.py)r-   r›  r"   r#   r‰   r@   rŠ   rX  r‹   rB   r˜   )r0   r›  rk   r   r   r   Ú4test_frozen_importlib_external_is_bootstrap_external   s    
zLImportlibBootstrapTests.test_frozen_importlib_external_is_bootstrap_externalc                 C   s*   ddl m} tjd }|  |j|j¡ d S )Nr   )Ú	machineryr—  )r-   rž  r"   r#   r‰   Ú
ModuleSpec)r0   rž  rk   r   r   r   Útest_there_can_be_only_one(  s    
z2ImportlibBootstrapTests.test_there_can_be_only_oneN)rŠ   rÅ   rÆ   r˜  rš  r  r   r   r   r   r   r–    s   r–  c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚGetSourcefileTestsz¼Test importlib._bootstrap_external._get_sourcefile() as used by the C API.

    Because of the peculiarities of the need of this function, the tests are
    knowingly whitebox tests.

    c                 C   sT   t  d¡6}d|_td }td }|  t|ƒ|¡ W d   ƒ n1 sF0    Y  d S )Nú*importlib._bootstrap_external._path_isfileTr   r   ©r   ZpatchZreturn_valuer   r@   r   )r0   Ú_path_isfiler%   Úexpectr   r   r   Útest_get_sourcefile;  s
    z&GetSourcefileTests.test_get_sourcefilec                 C   sL   t  d¡.}d|_td }|  t|ƒ|¡ W d   ƒ n1 s>0    Y  d S )Nr¢  Fr   r£  )r0   r¤  r%   r   r   r   Útest_get_sourcefile_no_sourceD  s    z0GetSourcefileTests.test_get_sourcefile_no_sourcec                 C   s   t d }|  t|ƒ|¡ d S )Nz.bad_ext)r   r@   r   )r0   r%   r   r   r   Útest_get_sourcefile_bad_extL  s    z.GetSourcefileTests.test_get_sourcefile_bad_extN)rŠ   rÅ   rÆ   Ú__doc__r¦  r§  r¨  r   r   r   r   r¡  1  s   	r¡  c                   @   sž   e Zd Zdd„ Zdd„ Z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d„ Zdd„ Zdd„ Zdd„ Zedd„ ƒZe ed ¡d!d"„ ƒZd#S )%ÚImportTracebackTestsc                 C   s,   t  t¡ tjd d … | _tj dt¡ d S r3   )r?   rø   r   r"   r%   Úold_pathr&   r/   r   r   r   r1   U  s    
zImportTracebackTests.setUpc                 C   s   | j tjd d …< ttƒ d S r,   )r«  r"   r%   r   r   r/   r   r   r   r2   Z  s    zImportTracebackTests.tearDownr   c                 C   s^   t j t|| ¡}t|dƒ}| |¡ W d   ƒ n1 s<0    Y  |  t|¡ t 	¡  |S )NrQ   )
r?   r%   rå   r   rS   rT   rË   r   r-   r.   )r0   rk   Úcontentsrj   Zfnamer   r   r   r   Úcreate_module^  s    (z"ImportTracebackTests.create_modulec                 C   sr   g }|r8|j j}|j}|r&||d kr0| |¡ |j}q|  t|ƒt|ƒ|¡ t||ƒD ]\}}|  ||¡ qXd S )Nru   )	Útb_framerÐ   rB  r{   Útb_nextr@   ÚlenÚziprN   )r0   ÚtbÚfilesZdeduped_filesrD  ÚfnÚpatr   r   r   Úassert_tracebackf  s    
z%ImportTracebackTests.assert_tracebackc              
   C   sT   zdd l }W n* ty6 } z|j}W Y d }~nd }~0 0 |  d¡ |  |tg¡ d S )Nr   ú#ImportError should have been raised)Únonexistent_xyzzyr;   Ú__traceback__rg   r¶  rB   )r0   r¸  r²   r²  r   r   r   Útest_nonexistent_moduler  s    
z,ImportTracebackTests.test_nonexistent_modulec              
   C   sb   |   dd¡ zdd l}W n* tyB } z|j}W Y d }~nd }~0 0 |  d¡ |  |tdg¡ d S )Nr¾   zimport nonexistent_xyzzyr   r·  r„  )r­  r¾   r;   r¹  rg   r¶  rB   ©r0   r¾   r²   r²  r   r   r   Útest_nonexistent_module_nested|  s    
z3ImportTracebackTests.test_nonexistent_module_nestedc              
   C   sb   |   dd¡ zdd l}W n* tyB } z|j}W Y d }~nd }~0 0 |  d¡ |  |tdg¡ d S )Nr¾   ú1/0r   ú)ZeroDivisionError should have been raisedr„  ©r­  r¾   r†   r¹  rg   r¶  rB   r»  r   r   r   Útest_exec_failure†  s    
z&ImportTracebackTests.test_exec_failurec              
   C   sp   |   dd¡ |   dd¡ zdd l}W n* tyN } z|j}W Y d }~nd }~0 0 |  d¡ |  |tddg¡ d S )	Nr¾   z
import barÚbarr½  r   r¾  r„  úbar.pyr¿  r»  r   r   r   Útest_exec_failure_nested  s    
z-ImportTracebackTests.test_exec_failure_nestedc              
   C   s`   |   dd¡ zdd l}W n* tyB } z|j}W Y d }~nd }~0 0 |  d¡ |  |tg¡ d S )Nr¾   zinvalid syntax is invalidr   z#SyntaxError should have been raised)r­  r¾   ÚSyntaxErrorr¹  rg   r¶  rB   r»  r   r   r   Útest_syntax_errorœ  s    
z&ImportTracebackTests.test_syntax_errorc                 C   s¼   d}|   t|¡ tj t|¡}t |¡ tj |d¡}t|dƒ}| |¡ W d   ƒ n1 s`0    Y  tj |d¡}t|dƒ}| |¡ W d   ƒ n1 s¢0    Y  t	 
¡  ||fS )NÚ_parent_foorƒ  rQ   rÂ  )rË   r   r?   r%   rå   r   rø   rS   rT   r-   r.   )r0   ÚparentÚchildZpkg_nameZpkg_pathÚ	init_pathr   Úbar_pathr   r   r   Ú_setup_broken_package¦  s    
((z*ImportTracebackTests._setup_broken_packagec              
   C   sf   |   dd¡\}}zdd l}W n* tyF } z|j}W Y d }~nd }~0 0 |  d¡ |  |t|g¡ d S )Nr   r½  r   r¾  ©rË  Z_parent_foo.barr†   r¹  rg   r¶  rB   ©r0   rÉ  rÊ  rÆ  r²   r²  r   r   r   Útest_broken_submoduleµ  s    
z*ImportTracebackTests.test_broken_submodulec              
   C   sj   |   dd¡\}}zddlm} W n* tyJ } z|j}W Y d }~nd }~0 0 |  d¡ |  |t|g¡ d S )Nr   r½  r   ©rÁ  r·  ©rË  rÆ  rÁ  r†   r¹  rg   r¶  rB   ©r0   rÉ  rÊ  rÁ  r²   r²  r   r   r   Útest_broken_from¿  s    
z%ImportTracebackTests.test_broken_fromc              
   C   sf   |   dd¡\}}zdd l}W n* tyF } z|j}W Y d }~nd }~0 0 |  d¡ |  |t|g¡ d S )Nr½  r   r   r¾  rÌ  rÍ  r   r   r   Útest_broken_parentÉ  s    
z'ImportTracebackTests.test_broken_parentc              
   C   sj   |   dd¡\}}zddlm} W n* tyJ } z|j}W Y d }~nd }~0 0 |  d¡ |  |t|g¡ d S )Nr½  r   r   rÏ  r¾  rÐ  rÑ  r   r   r   Útest_broken_parent_fromÓ  s    
z,ImportTracebackTests.test_broken_parent_fromc              
   C   sÒ   |   dd¡ tjd }dt|jƒv r.|jj}nd }z€dd„ }||j_zdd l}W n* tyz } z|j}W Y d }~nd }~0 0 |  	d¡ |  
|td	tg¡ W |d u rª|j`qÎ||j_n|d u rÄ|j`n||j_0 d S )
Nr¾   r   rœ  Úload_modulec                  W   s   dd  d S )Nrƒ   r   r   )r¹   r   r   r   Úexec_moduleè  s    z9ImportTracebackTests.test_import_bug.<locals>.exec_moduler   r¾  z<frozen importlib)r­  r"   r#   ÚvarsÚSourceLoaderrÖ  r¾   r†   r¹  rg   r¶  rB   )r0   r-   Zold_exec_modulerÖ  r¾   r²   r²  r   r   r   Útest_import_bugÝ  s(    



ýz$ImportTracebackTests.test_import_bugzneed TESTFN_UNENCODABLEc                 C   s>   t  dtd¡}|  t|¡ |d d… }t jdd| dd d S )Nr   Úpasséýÿÿÿr·   zmod = __import__(%a)F)Z
__isolated)r   r!   r   rË   r   r¦   )r0   Zpynamer   r   r   r   Útest_unencodable_filenameø  s    ÿz.ImportTracebackTests.test_unencodable_filenameN)r   )rŠ   rÅ   rÆ   r1   r2   r­  r¶  rº  r¼  rÀ  rÃ  rÅ  rË  rÎ  rÒ  rÓ  rÔ  r   rÙ  r  r  r   rÜ  r   r   r   r   rª  S  s$   










rª  c                   @   s`   e Zd 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d„ ZdS )ÚCircularImportTestszQSee the docstrings of the modules being imported for the purpose of the
    test.c                 C   s*   t tj ¡ ƒD ]}| d¡rtj|= qdS )zSMake sure no modules pre-exist in sys.modules which are being used to
        test.z&test.test_import.data.circular_importsN)r<  r"   r#   Úkeysrq   )r0   Úkeyr   r   r   r2     s    
zCircularImportTests.tearDownc                 C   s.   zdd l }W n ty(   |  d¡ Y n0 d S )Nr   z/circular import through relative imports failed)Z,test.test_import.data.circular_imports.basicr;   rg   ©r0   r_   r   r   r   Útest_direct  s    zCircularImportTests.test_directc                 C   s.   zdd l }W n ty(   |  d¡ Y n0 d S )Nr   z@relative import in module contributing to circular import failed)Z/test.test_import.data.circular_imports.indirectr;   rg   rà  r   r   r   Útest_indirect  s    z!CircularImportTests.test_indirectc                 C   s.   zdd l }W n ty(   |  d¡ Y n0 d S )Nr   z-circular import involving a subpackage failed)Z1test.test_import.data.circular_imports.subpackager;   rg   rà  r   r   r   Útest_subpackage  s    z#CircularImportTests.test_subpackagec                 C   s`   z"dd l m  m  m  m} W n ty>   |  d¡ Y n0 ddlm} |  	|j|j¡ d S )Nr   z9circular import with rebinding of module attribute failed)rª   )
Z0test.test_import.data.circular_imports.rebindingrr   rØ   Zcircular_importsÚ	rebindingr;   rg   Z-test.test_import.data.circular_imports.subpkgrª   r‰   )r0   rä  rª   r   r   r   Útest_rebinding"  s    "z"CircularImportTests.test_rebindingc                 C   s.   zdd l }W n ty(   |  d¡ Y n0 d S )Nr   z9circular import with binding a submodule to a name failed)Z.test.test_import.data.circular_imports.bindingr;   rg   rà  r   r   r   Útest_binding*  s    z CircularImportTests.test_bindingc                 C   s   dd l }dd l}d S r3   )Z*test.test_import.data.circular_imports.useÚ-test.test_import.data.circular_imports.sourcerà  r   r   r   Útest_crossreference10  s    z(CircularImportTests.test_crossreference1c                 C   sp   |   t¡}dd l}W d   ƒ n1 s(0    Y  t|jƒ}|  d|¡ |  d|¡ |  d|¡ |  d|¡ d S )Nr   z-test.test_import.data.circular_imports.sourcer    zpartially initialized modulezcircular import)r4   rÂ   rç  rD   rA   rN   )r0   rF   r_   Úerrmsgr   r   r   Útest_crossreference24  s    &
z(CircularImportTests.test_crossreference2c                 C   sH   |   t¡}dd l}W d   ƒ n1 s(0    Y  |  dt|jƒ¡ d S )Nr   z”cannot import name 'b' from partially initialized module 'test.test_import.data.circular_imports.from_cycle1' (most likely due to a circular import))r4   r;   Z2test.test_import.data.circular_imports.from_cycle1rN   rD   rA   )r0   rF   r_   r   r   r   Útest_circular_from_import=  s    &üz-CircularImportTests.test_circular_from_importc                 C   sº   |   td¡ |   td¡ dd lm  m  m} |  t¡ ddlm} W d   ƒ n1 s\0    Y  |  	t
|ƒt¡ |  t
|ƒt¡ |  t¡ d|_W d   ƒ n1 s¬0    Y  d S )Nz test.test_import.data.unwritablez"test.test_import.data.unwritable.xr   ri  é*   )rË   r   Z test.test_import.data.unwritablerr   rØ   Ú
unwritableZassertWarnsÚImportWarningrŽ   ZassertNotEqualÚtyper   r@   r4   rÂ   )r0   rí  rŽ   r   r   r   Útest_unwritable_moduleG  s    *z*CircularImportTests.test_unwritable_moduleN)rŠ   rÅ   rÆ   r©  r2   rá  râ  rã  rå  ræ  rè  rê  rë  rð  r   r   r   r   rÝ    s   	
rÝ  Ú__main__)Nr   )?rk  Ú
contextlibr¯   rý   Úimportlib.utilr-   Zimportlib._bootstrap_externalr   r:  r?   ry   rd   rû   r±   rÿ   r"   r¤   rà   rÒ   r  r   rˆ   r_   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   Ztest.test_importlib.utilr   Útypesr   r‰  Údont_write_bytecoder  r   Úcontextmanagerr*   ZTestCaser+   r  r"  rG  rS  re  rm  rŠ  r–  r¡  rª  rÝ  rŠ   Úmainr   r   r   r   Ú<module>   sh   @þ	   GSY5E ". ! 1R
