o
    gYJ                     @   st  d dl mZ edZedZedZddlZddlZddl	m
Z
 ddlmZ dd	lmZ ddlZddlZddlZG d
d dZejeed\ZZG dd dZG dd deZejeed\ZZG dd deZejeed\ZZG dd dZejeeed\ZZG dd dZejeed\Z Z!G dd dej"Z#G dd dZ$eje$ed\Z%Z&e'dkre(  dS dS )   )util	importlibzimportlib.utilzimportlib.machinery    N)support)import_helper)	os_helperc                   @   sF   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S )ImportModuleTestsc              	   C   s   t d5}t j|gd | jd}| |jd W d    n1 s%w   Y  W d    d S W d    d S 1 s=w   Y  d S )N	top_level	meta_path	test_util	mock_specimport_stateinitimport_moduleassertEqual__name__)selfmockmodule r   R/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_importlib/test_api.pytest_module_import   s   "z$ImportModuleTests.test_module_importc              	   C   s   d}d |}d |}t||5}tj|gd | j|}| |j| W d    n1 s2w   Y  W d    d S W d    d S 1 sJw   Y  d S Npkg{0}.__init__z{0}.modr
   formatr   r   r   r   r   r   r   r   pkg_namepkg_long_namenamer   r   r   r   r   test_absolute_package_import   s   

"z.ImportModuleTests.test_absolute_package_importc              	   C   s   d}d |}d}d ||}d |}t||<}tj|gd | j| | j||}| |j| W d    n1 sAw   Y  W d    d S W d    d S 1 sYw   Y  d S )Nr   r   modz{0}.{1}z.{0}r
   r   )r   r    r!   module_nameZabsolute_nameZrelative_namer   r   r   r   r   $test_shallow_relative_package_import&   s   

"z6ImportModuleTests.test_shallow_relative_package_importc              	   C   s   g d}t j| B}t j|gd" | jd | jd | jdd}| |jd W d    n1 s6w   Y  W d    d S W d    d S 1 sNw   Y  d S )N)
a.__init__za.b.__init__a.cr
   aa.bz..cr(   r   )r   modulesr   r   r   r   r   !test_deep_relative_package_import3   s   "z3ImportModuleTests.test_deep_relative_package_importc              	   C   s   d}d |}d |}t||<}tj|gd | j| | j||}| |j| W d    n1 s9w   Y  W d    d S W d    d S 1 sQw   Y  d S r   r   r   r   r   r   !test_absolute_import_with_package<   s   

"z3ImportModuleTests.test_absolute_import_with_packagec                 C   s<   |  t | jd W d    d S 1 sw   Y  d S )Nz.support)assertRaises	TypeErrorr   r   r   r   r   r   test_relative_import_wo_packageH   s   "z1ImportModuleTests.test_relative_import_wo_packagec              	      s   d fdd} fdd}||d}ddg}t j|d	|i%}t j|gd
 jd W d    n1 s8w   Y  W d    n1 sGw   Y   d d S )Nr   c                      s    j d d S )Nr*   )r   r   r   r0   r   r   load_aT   s   z2ImportModuleTests.test_loaded_once.<locals>.load_ac                      s    d7  d S )Nr   r   r   )b_load_countr   r   load_bV   s   z2ImportModuleTests.test_loaded_once.<locals>.load_b)r)   r*   r'   r*   module_coder
   r   )r   r   r   r   r   r   )r   r2   r4   coder+   r   r   )r3   r   r   test_loaded_onceO   s   
z"ImportModuleTests.test_loaded_onceN)
r   
__module____qualname__r   r#   r&   r,   r-   r1   r7   r   r   r   r   r      s    
	r   )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S )FindLoaderTestsNc              	   C   s   d}t |> t|}d}||_|tj|< t  t	dt
 | j|}W d    n1 s2w   Y  | || W d    d S 1 sHw   Y  d S )Nsome_modz	a loader!ignore)r   uncachetypes
ModuleType
__loader__sysr+   warningscatch_warningssimplefilterDeprecationWarningr   find_loaderr   )r   r"   r   loaderfoundr   r   r   test_sys_modulesj   s   


"z FindLoaderTests.test_sys_modulesc              
   C   s   d}t |S t|}d |_|tj|< | t( t	
  t	dt | j| W d    n1 s6w   Y  W d    n1 sEw   Y  W d    d S W d    d S 1 s]w   Y  d S Nr;   r<   )r   r=   r>   r?   r@   rA   r+   r.   
ValueErrorrB   rC   rD   rE   r   rF   r   r"   r   r   r   r   test_sys_modules_loader_is_Nonew   s   


"z/FindLoaderTests.test_sys_modules_loader_is_Nonec              
   C   s   d}t |^ t|}z|`W n	 ty   Y nw |tj|< | t	( t
  t
dt | j| W d    n1 sAw   Y  W d    n1 sPw   Y  W d    d S W d    d S 1 shw   Y  d S rJ   )r   r=   r>   r?   r@   AttributeErrorrA   r+   r.   rK   rB   rC   rD   rE   r   rF   rL   r   r   r   "test_sys_modules_loader_is_not_set   s&   


"z2FindLoaderTests.test_sys_modules_loader_is_not_setc              
   C   s   d}t |U t j| jgd4 t   tdt tdt | 	|d f| j
| W d    n1 s8w   Y  W d    n1 sGw   Y  W d    d S W d    d S 1 s_w   Y  d S )Nr;   r
   r<   r   r=   r   FakeMetaFinderrB   rC   rD   rE   ImportWarningr   r   rF   )r   r"   r   r   r   test_success   s   
"zFindLoaderTests.test_successc              
   C   s   d}d}t |V t j| jgd5 t ! tdt tdt | 	||f| j
|| W d    n1 s;w   Y  W d    n1 sJw   Y  W d    d S W d    d S 1 sbw   Y  d S )Nr;   zpath to some placer
   r<   rP   )r   r"   pathr   r   r   test_success_path   s    

"z!FindLoaderTests.test_success_pathc                 C   sL   t   t dt | | jd W d    d S 1 sw   Y  d S )Nr<   Znevergoingtofindthismodule)rB   rC   rD   rE   assertIsNoner   rF   r0   r   r   r   test_nothing   s   
"zFindLoaderTests.test_nothing)
r   r8   r9   rQ   rI   rM   rO   rS   rU   rW   r   r   r   r   r:   f   s    
r:   c                   @      e Zd ZG dd dZdS )FindLoaderPEP451Testsc                   @      e Zd ZedddZdS )z$FindLoaderPEP451Tests.FakeMetaFinderNc                 C   s   t d | | |fS )NSource)	machinery
ModuleSpec)r"   rT   targetr   r   r   	find_spec   s   z.FindLoaderPEP451Tests.FakeMetaFinder.find_spec)NN)r   r8   r9   staticmethodr_   r   r   r   r   rQ          rQ   Nr   r8   r9   rQ   r   r   r   r   rY          rY   c                   @   rX   )FindLoaderPEP302Testsc                   @   rZ   )z$FindLoaderPEP302Tests.FakeMetaFinderNc                 C   s   | |fS Nr   )r"   rT   r   r   r   find_module   s   z0FindLoaderPEP302Tests.FakeMetaFinder.find_modulere   )r   r8   r9   r`   rf   r   r   r   r   rQ      ra   rQ   Nrb   r   r   r   r   rd      rc   rd   c                   @   sL   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S )ReloadTestsc              
   C   s|   dD ]9}| j |d) t| | j|}| j| W d    n1 s'w   Y  W d    q1 s6w   Y  qd S )N)tokenizetimemarshal)r   )subTestr   CleanImportr   r   reload)r   r$   r   r   r   r   test_reload_modules   s   zReloadTests.test_reload_modulesc              	   C   s   dd }t jdd|id}|G t j|gd' | jd}| j|}tjd }| |j	d | |j	d W d    n1 sAw   Y  W d    d S W d    d S 1 sYw   Y  d S )Nc                  S   s(   dd l } t| d}d|_|| jd< d S )Nr   r	      )rA   typespamr+   )rA   r   r   r   r   r6      s   z.ReloadTests.test_module_replaced.<locals>.coder	   )r5   r
   ro   )
r   r   r   r   r   rm   rA   r+   r   rq   )r   r6   r   r   reloadedactualr   r   r   test_module_replaced   s   
"z ReloadTests.test_module_replacedc                 C   s~   t d0 dd l}|j}|`| j|}| || | tjd | | 	|jj
|j
 W d    d S 1 s8w   Y  d S Nr>   r   )r   rl   r>   r@   r   rm   assertIsrA   r+   r   rT   )r   r>   rG   rr   r   r   r   test_reload_missing_loader   s   "z&ReloadTests.test_reload_missing_loaderc                 C   s   t d1 dd l}d |_| j  | j|}| |jd  | || | t	j
d | W d    d S 1 s9w   Y  d S ru   )r   rl   r>   r@   r   invalidate_cachesrm   assertIsNotrv   rA   r+   )r   r>   rr   r   r   r   test_reload_loader_replaced   s   
"z'ReloadTests.test_reload_loader_replacedc              
   C   s"  d}t d }td t| | j  tj	
||d }| j|}|d||d d}t | | j|}t| }|d}|d}	|dd  | |	j| | |	j| | |j	| | || | j  tj	
||d}
| j|
}|||
|tj	|
gd d	}t| t||
 | j|}t| }|d}|d}	|dd  | |	j| | |	j| | || | |j	|
 d | _| || W d    n1 sw   Y  W d    n1 sw   Y  W d    d S W d    d S 1 s
w   Y  d S )
Nrq   z.py )r   __package____file__
__cached____doc__r@   __spec____builtins____init__.py)r   r|   r}   r~   __path__r   )r   temp_cwdr   r=   r   DirsOnSysPathr   rx   osrT   joinr   cache_from_sourceZcreate_empty_filer   varscopypopr   r"   rG   dirnamemkdirrenamerm   rv   ZmaxDiff)r   r"   cwdrT   cachedexpectedr   nsrG   spec	init_pathrr   r   r   r   test_reload_location_changed   sh   







$z(ReloadTests.test_reload_location_changedc                 C   s  d}t d F}td& t| | j  tj	
||d}| j|}||d d d}t| t|ddd}|d W d    n1 sMw   Y  | j|}t| }|d}	|d	}
|d
}|dd  | |j| | |j | |	 | |j|	 | t|
ttj	|g | t |	j	 W d    n1 sw   Y  | || | j  tj	
||d}| j|}||||tj	|gd d d}t|| | j|}t| }|d}	|d
}|dd  | |j| | |j|	 | || | |	j	| | || W d    n	1 s)w   Y  W d    n1 s9w   Y  W d    d S W d    d S 1 sRw   Y  d S )Nrq   z	__init.py)r   r|   r   r}   wzutf-8)encodingzeggs = Noner@   r   r   r   r   )r   r|   r}   r~   r   r   Zeggs)r   r   r   r=   r   r   r   rx   r   rT   r   r   r   r   openwriter   r   r   r   r   r"   ZassertIsNotNonerG   setr   r.   rN   r   rm   rv   )r   r"   r   Zbad_pathr   r   Z	init_filer   r   rG   rT   r   r   rr   r   r   r   test_reload_namespace_changed,  sz   









 $z)ReloadTests.test_reload_namespace_changedc                 C   sr   d}d}t j|dd$}t |||\}}| j|}| j|}| || W d    d S 1 s2w   Y  d S )Nrq   hamT)r   )r   temp_moduleZ	submoduler   r   rm   rv   )r   r"   subnameZpkg_dirfullname_r   rr   r   r   r   test_reload_submodulef  s   "z!ReloadTests.test_reload_submodulec              	   C   s   d}t |B t| }tj|< | j|}| |j	 | 
t | j| W d    n1 s4w   Y  W d    d S W d    d S 1 sLw   Y  d S )Nrq   )r   r=   r>   r?   rA   r+   r   r   rV   r   r.   ModuleNotFoundErrorrm   rL   r   r   r   test_module_missing_specp  s   "z$ReloadTests.test_module_missing_specN)r   r8   r9   rn   rt   rw   rz   r   r   r   r   r   r   r   r   rg      s    3:
rg   )r   r   c                   @      e Zd Zdd Zdd ZdS )InvalidateCacheTestsc                    s   G dd d}d | | }t jd |  fdd |t j < | fdd | j  | j | |j d S )Nc                   @   s$   e Zd Zdd Zdd Zdd ZdS )zGInvalidateCacheTests.test_method_called.<locals>.InvalidatingNullFinderc                 W   
   d| _ d S )NFcalled)r   Zignoredr   r   r   __init__     
zPInvalidateCacheTests.test_method_called.<locals>.InvalidatingNullFinder.__init__c                 W   s   d S re   r   )r   argsr   r   r   rf     s   zSInvalidateCacheTests.test_method_called.<locals>.InvalidatingNullFinder.find_modulec                 S   r   )NTr   r0   r   r   r   rx     r   zYInvalidateCacheTests.test_method_called.<locals>.InvalidatingNullFinder.invalidate_cachesN)r   r8   r9   r   rf   rx   r   r   r   r   InvalidatingNullFinder  s    r   Zgobledeegookr   c                         t j S re   )rA   path_importer_cache__delitem__r   keyr   r   <lambda>      z9InvalidateCacheTests.test_method_called.<locals>.<lambda>c                      r   re   )rA   r   remover   )meta_insr   r   r     r   )	rA   r   insert
addCleanupr   r   rx   
assertTruer   )r   r   Zpath_insr   )r   r   r   test_method_called  s   

z'InvalidateCacheTests.test_method_calledc                    s.   d d t j < |  fdd | j  d S )NZgobbledeegookc                      s   t j d S re   )rA   r   r   r   r   r   r   r     s    z:InvalidateCacheTests.test_method_lacking.<locals>.<lambda>)rA   r   r   r   rx   r0   r   r   r   test_method_lacking  s   
z(InvalidateCacheTests.test_method_lackingN)r   r8   r9   r   r   r   r   r   r   r     s    r   c                   @   s   e Zd Zdd ZdS )FrozenImportlibTestsc                 C   s   t d }| |jjjd d S )Nr[   FrozenImporter)r   ZassertNotEqualr@   	__class__r   )r   Zsource_initr   r   r   test_no_frozen_importlib  s   z-FrozenImportlibTests.test_no_frozen_importlibN)r   r8   r9   r   r   r   r   r   r     s    r   c                   @   r   )StartupTestsc              	   C   s   t j D ]I\}}t|tjrN| j|d1 | t|dd	| | j
j|r1| |jd  n| j
j|r?| |jd  W d    q1 sIw   Y  qd S )Nr"   r@   z!{!r} lacks a __loader__ attribute)rA   r+   items
isinstancer>   r?   rk   r   hasattrr   r\   BuiltinImporterr_   ry   r@   r   rL   r   r   r   test_everyone_has___loader__  s   z)StartupTests.test_everyone_has___loader__c              	   C   s   t j D ]E\}}t|tjrJ| j|d- | t|d | j	j
|r-| |jd  n| j	j|r;| |jd  W d    q1 sEw   Y  qd S )Nr   r   )rA   r+   r   r   r>   r?   rk   r   r   r\   r   r_   ry   r   r   rL   r   r   r   test_everyone_has___spec__  s   z'StartupTests.test_everyone_has___spec__N)r   r8   r9   r   r   r   r   r   r   r     s    r   )r\   __main__))r{   r   r   Zimport_importlibr   r\   Zos.pathr   rA   testr   Ztest.supportr   r   r>   ZunittestrB   r   Z	test_bothZFrozen_ImportModuleTestsZSource_ImportModuleTestsr:   rY   ZFrozen_FindLoaderPEP451TestsZSource_FindLoaderPEP451Testsrd   ZFrozen_FindLoaderPEP302TestsZSource_FindLoaderPEP302Testsrg   ZFrozen_ReloadTestsZSource_ReloadTestsr   ZFrozen_InvalidateCacheTestsZSource_InvalidateCacheTestsZTestCaser   r   ZFrozen_StartupTestsZSource_StartupTestsr   mainr   r   r   r   <module>   sT    


RJ

 6!