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|}||_	t
|drTJ | 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initialized__spec__)r   uncacher   	machinery
ModuleSpecFrozenImporterr	   types
ModuleTyper   hasattrexec_module
assertTruer
   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   s^   | j jdd u sJ | t}| d W d    n1 s@0    Y  | |jjd d S NZ	_not_real)	r   r   find_module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_failurerD   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   rK   __path__rL   zfor __phello__.%s, %r != %rr    rM   r   r   r   r3   r4   r5   r6   r   r   rN   r!   r"   r   r   rO   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   rJ   z for __phello__.spam.%s, %r != %rr    rM   rQ   rR   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   rN   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   rN   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   rN   r   r;   )r   r   r   r   r   r<      s
    J
z%LoaderTests.test_module_repr_indirectNc                 C   sb   | j jdd u sJ | t}| j jd W d    n1 sD0    Y  | |jjd d S r=   )	r   r   r>   r?   r@   rN   r   rA   r   rB   r   r   r   rD      s    ,zLoaderTests.test_unloadable)r   rE   rF   r'   r-   r/   rS   r9   r<   rG   rD   r   r   r   r   rH   \   s   
	rH   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)rU   r[   r	   	importlib)r"   r   r   r?   r@   r   rA   r   )r   Z	meth_namemethodrC   r   r   r   test_failure   s
    &zInspectLoaderTests.test_failureN)r   rE   rF   __doc__rZ   r]   r_   rb   r   r   r   r   rT      s
   
rT   __main__)rI   r   r   Zimport_importlibr   Ztest.supportr   r   Zunittestr3   rH   r   Z	test_bothZFrozen_ExecModuleTestsZSource_ExecModuleTestsZFrozen_LoaderTestsZSource_LoaderTestsrT   ZFrozen_ILTestsZSource_ILTestsr   mainr   r   r   r   <module>   s(   
MY%