a
    	3j{$                     @   s   d dl mZ d dl mZ edZddlmZ ddlZddlZddl	Z	G dd dej
Zejeed	\ZZG d
d dej
Z
eje
ed	\ZZG dd dZejeed	\ZZedkre  dS )   )abc)utilzimportlib.machinery    )captured_stdoutNc                   @   sH   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdZ	dd Z
dS )ExecModuleTestsc              	   C   s   t | t }| jj|| jjd| jj|d}t|}||_	| jj
| | |j | t|d | |j	jd || fW  d    W  d    S 1 s0    Y  W d    n1 s0    Y  d S )Nfrozen)origin
is_package__spec__)r   uncacher   	machinery
ModuleSpecFrozenImporterr	   types
ModuleTyper
   exec_module
assertTrueinitializedhasattrassertEqualr   getvalue)selfnamestdoutspecmodule r   b/www/server/python_manager/versions/3.9.10/lib/python3.9/test/test_importlib/frozen/test_loader.pyr      s    

zExecModuleTests.exec_modulec                 C   s^   d}|  |\}}d|i}| D ]\}}| t||| q"| |d | t|d d S )N	__hello____name__Hello world!
r
   )r   itemsr   getattrr   r   )r   r   r   outputcheckattrvaluer   r   r   test_module   s    zExecModuleTests.test_modulec                 C   sb   d}|  |\}}d|i}| D ].\}}t||}| ||dj||||d q"| |d d S )N
__phello__r   z,for {name}.{attr}, {given!r} != {expected!r}r   r%   ZgivenZexpectedr    )r   r!   r"   r   formatr   r   r   r#   r$   r%   r&   
attr_valuer   r   r   test_package%   s    
zExecModuleTests.test_packagec                 C   s   d}t dj | |\}}d|i}| D ].\}}t||}| ||dj||||d q.| |d W d    n1 s~0    Y  d S )N__phello__.spamr(   r   z*for {name}.{attr}, {given} != {expected!r}r)   r    )r   r   r   r!   r"   r   r*   r+   r   r   r   test_lacking_parent1   s    
z#ExecModuleTests.test_lacking_parentc                 C   sd   d}|  |\}}t * tdt | jj|}W d    n1 sJ0    Y  | |d d S Nr   ignore<module '__hello__' (frozen)>)	r   warningscatch_warningssimplefilterDeprecationWarningr   r   module_reprr   )r   r   r   r#   repr_strr   r   r   test_module_repr>   s    
,z ExecModuleTests.test_module_reprc                 C   s&   d}|  |\}}| t|d d S Nr   r2   )r   r   repr)r   r   r   r#   r   r   r   test_module_repr_indirectG   s
    
z)ExecModuleTests.test_module_repr_indirectNc                 C   sH   |  t}| d W d    n1 s*0    Y  | |jjd d S NZ	_not_real)assertRaisesImportErrorr   r   	exceptionr   r   cmr   r   r   test_unloadableP   s    (zExecModuleTests.test_unloadable)r   
__module____qualname__r   r'   r-   r/   r9   r<   test_state_after_failurerC   r   r   r   r   r      s   		r   )r   c                   @   sH   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdZ	dd Z
dS )LoaderTestsc              
   C   s   t d t }t * tdt | jj	d}W d    n1 sL0    Y  dd| jjd}|
 D ]\}}| t||| qn| | d | t|d W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr   r1    r   __package__
__loader__r    __file__)r   r   r   r3   r4   r5   r6   r   r   load_moduler!   r   r"   r   assertFalser   )r   r   r   r$   r%   r&   r   r   r   r'   ^   s    
,zLoaderTests.test_modulec                 C   s   t d t }t * tdt | jj	d}W d    n1 sL0    Y  ddg | jjd}|
 D ]*\}}t||}| ||d|||f  qp| | d | t|d W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr(   r1   )r   rJ   __path__rK   zfor __phello__.%s, %r != %rr    rL   r   r   r   r3   r4   r5   r6   r   r   rM   r!   r"   r   r   rN   r   r   r   r   r$   r%   r&   r,   r   r   r   r-   l   s$    
,
zLoaderTests.test_packagec                 C   s   t dd t }t * tdt | jj	d}W d    n1 sN0    Y  dd| jjd}|
 D ]*\}}t||}| ||d|||f  qp| | d | t|d W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr(   r.   r1   rI   z for __phello__.spam.%s, %r != %rr    rL   rP   rQ   r   r   r   r/   ~   s(    
,
zLoaderTests.test_lacking_parentc              
   C   s   t d t |}t 8 tdt | jj	d}| jj	d}W d    n1 sZ0    Y  | 
|| | | d W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr   r1   zHello world!
Hello world!
)r   r   r   r3   r4   r5   r6   r   r   rM   ZassertIsr   r   )r   r   Zmodule1Zmodule2r   r   r   test_module_reuse   s    
,
zLoaderTests.test_module_reusec              
   C   s   t d t l t 8 tdt | jj	d}| jj
|}W d    n1 sZ0    Y  | |d W d    n1 s0    Y  W d    n1 s0    Y  d S r0   )r   r   r   r3   r4   r5   r6   r   r   rM   r7   r   )r   r   r8   r   r   r   r9      s    
,zLoaderTests.test_module_reprc              	   C   sr   t dD t  | jjd}W d    n1 s60    Y  W d    n1 sT0    Y  | t|d d S r:   )r   r   r   r   r   rM   r   r;   )r   r   r   r   r   r<      s
    J
z%LoaderTests.test_module_repr_indirectNc                 C   sL   |  t}| jjd W d    n1 s.0    Y  | |jjd d S r=   )r>   r?   r   r   rM   r   r@   r   rA   r   r   r   rC      s    ,zLoaderTests.test_unloadable)r   rD   rE   r'   r-   r/   rR   r9   r<   rF   rC   r   r   r   r   rG   \   s   
	rG   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )InspectLoaderTestsz7Tests for the InspectLoader methods for FrozenImporter.c                 C   sr   d}t  T}| jj|}t|}t||j | t	|d | 
| d W d    n1 sd0    Y  d S )Nr   r   r    )r   r   r   get_coder   r   exec__dict__r   r   r   r   )r   r   r   codemodr   r   r   test_get_code   s    
z InspectLoaderTests.test_get_codec                 C   s   | j jd}| | d S )Nr   )r   r   
get_sourceZassertIsNone)r   resultr   r   r   test_get_source   s    z"InspectLoaderTests.test_get_sourcec                 C   s4   d}|D ]&\}}| j j|}| t|| qd S )N))r   F)r(   T)r.   F)r   r   r	   r   bool)r   Ztest_forr   r	   r[   r   r   r   test_is_package   s    z"InspectLoaderTests.test_is_packagec              	   C   s^   dD ]T}t | jj|}| t}|d W d    n1 s>0    Y  | |jjd qd S )N)rT   rZ   r	   	importlib)r"   r   r   r>   r?   r   r@   r   )r   Z	meth_namemethodrB   r   r   r   test_failure   s
    &zInspectLoaderTests.test_failureN)r   rD   rE   __doc__rY   r\   r^   ra   r   r   r   r   rS      s
   
rS   __main__)rH   r   r   Zimport_importlibr   Ztest.supportr   r   Zunittestr3   rG   r   Z	test_bothZFrozen_ExecModuleTestsZSource_ExecModuleTestsZFrozen_LoaderTestsZSource_LoaderTestsrS   ZFrozen_ILTestsZSource_ILTestsr   mainr   r   r   r   <module>   s(   
MY%