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                   @   sH   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S )ImportModuleTestszTest importlib.import_module.c              	   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____doc__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@   rA   rB   r+   r.   
ValueErrorrC   rD   rE   rF   r   rG   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 rK   )r   r>   r?   r@   rA   AttributeErrorrB   r+   r.   rL   rC   rD   rE   rF   r   rG   rM   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   FakeMetaFinderrC   rD   rE   rF   ImportWarningr   r   rG   )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=   rQ   )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)rC   rD   rE   rF   assertIsNoner   rG   r0   r   r   r   test_nothing   s   
"zFindLoaderTests.test_nothing)
r   r8   r9   rR   rJ   rN   rP   rT   rV   rX   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"   rU   targetr   r   r   	find_spec   s   z.FindLoaderPEP451Tests.FakeMetaFinder.find_spec)NN)r   r8   r9   staticmethodr`   r   r   r   r   rR          rR   Nr   r8   r9   rR   r   r   r   r   rZ          rZ   c                   @   rY   )FindLoaderPEP302Testsc                   @   r[   )z$FindLoaderPEP302Tests.FakeMetaFinderNc                 C   s   | |fS Nr   )r"   rU   r   r   r   find_module   s   z0FindLoaderPEP302Tests.FakeMetaFinder.find_modulerf   )r   r8   r9   ra   rg   r   r   r   r   rR      rb   rR   Nrc   r   r   r   r   re      rd   re   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	      )rB   typespamr+   )rB   r   r   r   r   r6      s   z.ReloadTests.test_module_replaced.<locals>.coder	   )r5   r
   rp   )
r   r   r   r   r   rn   rB   r+   r   rr   )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   rm   r?   rA   r   rn   assertIsrB   r+   r   rU   )r   r?   rH   rs   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 rv   )r   rm   r?   rA   r   invalidate_cachesrn   assertIsNotrw   rB   r+   )r   r?   rs   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 )
Nrr   z.py )r   __package____file__
__cached__r:   rA   __spec____builtins____init__.py)r   r}   r~   r   __path__r:   )r   temp_cwdr   r>   r   DirsOnSysPathr   ry   osrU   joinr   cache_from_sourceZcreate_empty_filer   varscopypopr   r"   rH   dirnamemkdirrenamern   rw   ZmaxDiff)r   r"   cwdrU   cachedexpectedr   nsrH   spec	init_pathrs   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 )Nrr   z	__init.py)r   r}   r:   r~   wzutf-8)encodingzeggs = NonerA   r   r   r   r   )r   r}   r~   r   r   r:   Zeggs)r   r   r   r>   r   r   r   ry   r   rU   r   r   r   r   openwriter   r   r   r   r   r"   ZassertIsNotNonerH   setr   r.   rO   r   rn   rw   )r   r"   r   Zbad_pathr   r   Z	init_filer   r   rH   rU   r   r   rs   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 )Nrr   hamT)r   )r   temp_moduleZ	submoduler   r   rn   rw   )r   r"   subnameZpkg_dirfullname_r   rs   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 )Nrr   )r   r>   r?   r@   rB   r+   r   r   rW   r   r.   ModuleNotFoundErrorrn   rM   r   r   r   test_module_missing_specp  s   "z$ReloadTests.test_module_missing_specN)r   r8   r9   ro   ru   rx   r{   r   r   r   r   r   r   r   r   rh      s    3:
rh   )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 rf   r   )r   argsr   r   r   rg     s   zSInvalidateCacheTests.test_method_called.<locals>.InvalidatingNullFinder.find_modulec                 S   r   )NTr   r0   r   r   r   ry     r   zYInvalidateCacheTests.test_method_called.<locals>.InvalidatingNullFinder.invalidate_cachesN)r   r8   r9   r   rg   ry   r   r   r   r   InvalidatingNullFinder  s    r   Zgobledeegookr   c                         t j S rf   )rB   path_importer_cache__delitem__r   keyr   r   <lambda>      z9InvalidateCacheTests.test_method_called.<locals>.<lambda>c                      r   rf   )rB   r   remover   )meta_insr   r   r     r   )	rB   r   insert
addCleanupr   r   ry   
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 rf   )rB   r   r   r   r   r   r   r     s    z:InvalidateCacheTests.test_method_lacking.<locals>.<lambda>)rB   r   r   r   ry   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assertNotEqualrA   	__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"   rA   z!{!r} lacks a __loader__ attribute)rB   r+   items
isinstancer?   r@   rl   r   hasattrr   r]   BuiltinImporterr`   rz   rA   r   rM   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   )rB   r+   r   r   r?   r@   rl   r   r   r]   r   r`   rz   r   r   rM   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   rB   testr   Ztest.supportr   r   r?   ZunittestrC   r   Z	test_bothZFrozen_ImportModuleTestsZSource_ImportModuleTestsr;   rZ   ZFrozen_FindLoaderPEP451TestsZSource_FindLoaderPEP451Testsre   ZFrozen_FindLoaderPEP302TestsZSource_FindLoaderPEP302Testsrh   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!