a
    	¼3j*  ć                   @   sŗ   d dl mZ d dl mZ e d”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 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edkr¶e	 ”  dS )é   )Śabc)Śutilzimportlib.machineryé    N)Śassert_python_failurec                   @   s`   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Z
dd ZdZdd Zdd ZdS )ŚLoaderTestsc                 C   s   | j  tjjtjj”| _d S ©N)Ś	machineryŚExtensionFileLoaderr   Ś
EXTENSIONSŚnameŚ	file_pathŚloader©Śself© r   śe/www/server/python_manager/versions/3.9.10/lib/python3.9/test/test_importlib/extension/test_loader.pyŚsetUp   s    ’zLoaderTests.setUpc                 C   s   | j  |”S r   )r   Śload_module)r   Śfullnamer   r   r   r      s    zLoaderTests.load_modulec                 C   sN   | j  ”  | j  d ” |  t” |  d” W d    n1 s@0    Y  d S )NZXXX)r   r   ŚassertRaisesŚImportErrorr   r   r   r   Śtest_load_module_API   s    
z LoaderTests.test_load_module_APIc                 C   s(   | j  tjjtjj”}|  | j|” d S r   )r   r	   r   r
   r   r   ŚassertEqualr   ©r   Śotherr   r   r   Śtest_equality    s    ’zLoaderTests.test_equalityc                 C   s,   | j  dtjj tjj”}|  | j|” d S )NŚ_)r   r	   r   r
   r   r   ŚassertNotEqualr   r   r   r   r   Śtest_inequality%   s    ’zLoaderTests.test_inequalityc                 C   s   t  t jj”x |  t jj”}dt jjfdt jjfdfD ]\}}|  t|||” q8|  t jjt	j
” |  |j| jj” W d    n1 s0    Y  d S ©NŚ__name__Ś__file__)Ś__package__Ś )r   Śuncacher
   r   r   r   r   ŚgetattrZassertInŚsysŚmodulesŚassertIsInstanceŚ
__loader__r   r	   ©r   ŚmoduleŚattrŚvaluer   r   r   Śtest_module*   s    

ž’zLoaderTests.test_moduleNc                 C   sZ   t  t jj”8 |  t jj”}|  t jj”}|  ||” W d    n1 sL0    Y  d S r   )r   r$   r
   r   r   ŚassertIs©r   Zmodule1Zmodule2r   r   r   Śtest_module_reuse;   s    zLoaderTests.test_module_reusec                 C   sL   d}|   t”}|  |” W d    n1 s.0    Y  |  |jj|” d S ©Nzasdfjkl;)r   r   r   r   Ś	exceptionr   ©r   r   Ścmr   r   r   Śtest_unloadableD   s    (zLoaderTests.test_unloadablec                 C   s\   |   | j tjj”” | jjD ]8}tj	 
dddd| ”}| j d|”}|  | d”” qd S )NZsomeŚpathZpkgŚ__init__)ZassertFalser   Ś
is_packager   r
   r   r   ŚEXTENSION_SUFFIXESŚosr7   Śjoinr	   Z
assertTrue)r   Śsuffixr7   r   r   r   r   Śtest_is_packageJ   s
    zLoaderTests.test_is_package)r    Ś
__module__Ś__qualname__r   r   r   r   r   r.   Śtest_packageŚtest_lacking_parentr1   Śtest_state_after_failurer6   r>   r   r   r   r   r      s   r   )r   c                   @   s    e Zd Zdd Zd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d Zdd Zdd Zdd Zd d! Zd"d# ZdS )$ŚMultiPhaseExtensionModuleTestsc                 C   s<   d| _ | j d ”}tj | j ”| _| j | j | jj”| _	d S )NZ_testmultiphase)
r   r   Ś
FileFinderŚ	importlibr   Ś	find_specŚspecr	   Śoriginr   )r   Śfinderr   r   r   r   Y   s    
’z$MultiPhaseExtensionModuleTests.setUpNc              	   C   sĀ   t  | j”¢ |  ” }d| jfd| jjfdfD ]\}}|  t|||” q.|  t	” |j
 W d    n1 sp0    Y  |  |tj| j ” |  |j| jj” W d    n1 s“0    Y  d S r   )r   r$   r   r   rH   rI   r   r%   r   ŚAttributeErrorŚ__path__r/   r&   r'   r(   r)   r   r	   r*   r   r   r   r.   j   s    
ž$’z*MultiPhaseExtensionModuleTests.test_modulec              	   C   sB  t  | j” |  ” }|  |tj” | ” }|  | 	d”d” |  | 	” d ” |  
t” |j W d    n1 sv0    Y  d|_|  |jd” |  | dd”d” |  | ” t” |  | d”d d” |  
|j” | ” W d    n1 sų0    Y  |  |jd” |  |jd	” W d    n1 s40    Y  d S )
NZabcdr   é	   é   é   Z23Z123i±  śsomething different)r   r$   r   r   r(   ŚtypesŚ
ModuleTypeŚExampler   Śdemor   rK   r   ZfooZStrŚstrŚerrorZ	int_constŚ	str_const)r   r+   Śexr   r   r   Śtest_functionalityx   s"    $&z1MultiPhaseExtensionModuleTests.test_functionalityc                 C   sV   t  | j”6 |  ” }|j}t |” |  ||j” W d    n1 sH0    Y  d S r   )r   r$   r   r   rS   rF   Śreloadr/   )r   r+   Zex_classr   r   r   Śtest_reload   s
    
z*MultiPhaseExtensionModuleTests.test_reloadc              	   C   s  |   ” }|  d”" |  | d”d ” W d    n1 s:0    Y  |  d”D |  t” | d” W d    n1 sz0    Y  W d    n1 s0    Y  |  d”D |  t” | d” W d    n1 sŲ0    Y  W d    n1 sö0    Y  d S )NZPyState_FindModuler   ZPyState_AddModulerO   ZPyState_RemoveModuler   )r   ŚsubTestr   Zcall_state_registration_funcr   ŚSystemError©r   r+   r   r   r   Śtest_try_registration   s    0Fz4MultiPhaseExtensionModuleTests.test_try_registrationc                 C   s   | j  | j”S r   )r   r   r   r   r   r   r   r       s    z*MultiPhaseExtensionModuleTests.load_modulec                 C   s>   | j j}| j ||”}tj ||”}tj |”}| |” |S r   )	rH   rI   r   r	   rF   r   Śspec_from_loaderŚmodule_from_specŚexec_module)r   r   rI   r   rH   r+   r   r   r   Śload_module_by_name¤   s    
z2MultiPhaseExtensionModuleTests.load_module_by_namec                 C   sD   |   d| j ”}|  |tj” |  |jd| j ” |  |jd” d S )Nzpkg.rP   )rc   r   r(   rQ   rR   r   r    rW   r^   r   r   r   Śtest_load_submodule­   s    z2MultiPhaseExtensionModuleTests.test_load_submodulec                 C   sF   |   d”}|  |tj” |  |jd” |  |jd” |  dtj	” d S )NŚxrP   )
rc   r(   rQ   rR   r   r    rW   ZassertNotInr&   r'   r^   r   r   r   Śtest_load_short_name“   s
    
z3MultiPhaseExtensionModuleTests.test_load_short_namec                 C   s(   |   | j”}|   | j”}|  ||” d S r   )rc   r   ZassertIsNotr0   r   r   r   Śtest_load_twice¼   s    z.MultiPhaseExtensionModuleTests.test_load_twicec                 C   sL   d}|   t”}|  |” W d    n1 s.0    Y  |  |jj|” d S r2   ©r   r   rc   r   r3   r   r4   r   r   r   r6   Ā   s    (z.MultiPhaseExtensionModuleTests.test_unloadablec                 C   sL   d}|   t”}|  |” W d    n1 s.0    Y  |  |jj|” d S )Nu   foĆ³rh   r4   r   r   r   Śtest_unloadable_nonasciiÉ   s    (z7MultiPhaseExtensionModuleTests.test_unloadable_nonasciic                 C   s:   | j d }|  |”}|  t|tt” |  |jd” d S )NZ
_nonmoduleé   )r   rc   r   ŚtypeŚunittestr   Śthree©r   r   Śmodr   r   r   Śtest_nonmoduleŠ   s    

z-MultiPhaseExtensionModuleTests.test_nonmodulec                 C   sN   | j d }|  |”}|  t|tt” |  |jd” |  | dd”d” d S )NZ_nonmodule_with_methodsrj   é
   rO   rM   )r   rc   r   rk   rl   r   rm   Zbarrn   r   r   r   Śtest_nonmodule_with_methodsŲ   s
    

z:MultiPhaseExtensionModuleTests.test_nonmodule_with_methodsc                 C   s4   | j d }|  |”}|  |tj” |  |j|” d S )NZ_null_slots)r   rc   r(   rQ   rR   r   r    )r   r   r+   r   r   r   Śtest_null_slotsą   s    

z.MultiPhaseExtensionModuleTests.test_null_slotsc              
   C   sz   dD ]p}|   |”R | jd | }|  t” |  |” W d    n1 sL0    Y  W d    q1 sj0    Y  qd S )N)Zbad_slot_largeZbad_slot_negativeZcreate_int_with_stateZnegative_sizeZexport_nullZexport_uninitializedZexport_raiseZexport_unreported_exceptionZcreate_nullZcreate_raiseZcreate_unreported_exceptionZnonmodule_with_exec_slotsZexec_errZ
exec_raiseZexec_unreported_exceptionr   )r\   r   r   r]   rc   )r   Z	name_baser   r   r   r   Śtest_bad_modulesē   s
    z/MultiPhaseExtensionModuleTests.test_bad_modulesc              	   C   sx   | j d dfdg}|D ]\\}}|  |”: |  |”}|  |j|” |  |jd| ” W d    q1 sh0    Y  qd S )Nu   _zkouÅ”ka_naÄtenĆ­ZCzech)u   ļ¼æć¤ć³ćć¼ććć¹ćZJapanesezModule named in %s)r   r\   rc   r   r    Ś__doc__)r   Zcasesr   Ślangr+   r   r   r   Śtest_nonascii’   s    ž
z,MultiPhaseExtensionModuleTests.test_nonascii)r    r?   r@   r   rA   rB   rC   r.   rY   r[   r_   r   rc   rd   rf   rg   r6   ri   rp   rr   rs   rt   rw   r   r   r   r   rD   U   s(   		rD   Ś__main__)r#   r   r   Zimport_importlibr   Zos.pathr;   r&   rQ   rl   Śimportlib.utilrF   Ztest.support.script_helperr   r   Z	test_bothZFrozen_LoaderTestsZSource_LoaderTestsrD   Z%Frozen_MultiPhaseExtensionModuleTestsZ%Source_MultiPhaseExtensionModuleTestsr    Śmainr   r   r   r   Ś<module>   s(   
Ež =ž