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                   @   sd   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Z
dZdd ZdZdd Zdd ZdS )ŚLoaderTestsz)Test load_module() for extension modules.c                 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 )Nś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__Ś__doc__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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 )%ŚMultiPhaseExtensionModuleTestszMTest loading extension modules with multi-phase initialization (PEP 489)
    c                 C   sF   d| _ | j d ”}tj | j ”| _| js,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 )z Test loading an extension moduler   r    r!   N)r   r$   r   r   rI   rJ   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 )z@Test basic functionality of stuff defined in an extension moduleZabcdNr   é	   é   é   Z23Z123i±  śsomething different)r   r$   r   r   r(   ŚtypesŚ
ModuleTypeŚExampler   Śdemor   rL   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 )z6Test that reload didn't re-set the module's attributesN)r   r$   r   r   rT   rG   Ś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 )zBAssert that the PyState_{Find,Add,Remove}Module C API doesn't workZPyState_FindModuler   NZPyState_AddModulerP   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 )z'Load the module from the test extension)r   r   r   r   r   r   r   r       s    z*MultiPhaseExtensionModuleTests.load_modulec                 C   s>   | j j}| j ||”}tj ||”}tj |”}| |” |S )z-Load a module from the test extension by name)	rI   rJ   r   r	   rG   r   Śspec_from_loaderŚmodule_from_specŚexec_module)r   r   rJ   r   rI   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 )z"Test loading a simulated submodulezpkg.rQ   N)rd   r   r(   rR   rS   r   r   rX   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 )z-Test loading module with a one-character nameŚxrQ   N)
rd   r(   rR   rS   r   r   rX   ZassertNotInr&   r'   r_   r   r   r   Śtest_load_short_name“   s
    
z3MultiPhaseExtensionModuleTests.test_load_short_namec                 C   s(   |   | j”}|   | j”}|  ||” dS )z,Test that 2 loads result in 2 module objectsN)rd   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 )zTest nonexistent moduler2   N©r   r   rd   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 )z9Test behavior with nonexistent module with non-ASCII nameu   foĆ³Nri   r4   r   r   r   Śtest_unloadable_nonasciiÉ   s    (z7MultiPhaseExtensionModuleTests.test_unloadable_nonasciic                 C   s:   | j d }|  |”}|  t|tt” |  |jd” dS )z4Test returning a non-module object from create worksZ
_nonmoduleé   N)r   rd   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 )z6Test creating a non-module object with methods definedZ_nonmodule_with_methodsrk   é
   rP   rN   N)r   rd   r   rl   rm   r   rn   Zbarro   r   r   r   Śtest_nonmodule_with_methodsŲ   s
    

z:MultiPhaseExtensionModuleTests.test_nonmodule_with_methodsc                 C   s4   | j d }|  |”}|  |tj” |  |j|” dS )z%Test that NULL slots aren't a problemZ_null_slotsN)r   rd   r(   rR   rS   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 )z5Test SystemError is raised for misbehaving extensions)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   N)r]   r   r   r^   rd   )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 )z4Test that modules with non-ASCII names can be loadedu   _zkouÅ”ka_naÄtenĆ­ZCzech)u   ļ¼æć¤ć³ćć¼ććć¹ćZJapanesezModule named in %sN)r   r]   rd   r   r   rA   )r   Zcasesr   Ślangr+   r   r   r   Śtest_nonascii’   s    ž
z,MultiPhaseExtensionModuleTests.test_nonascii)r   r?   r@   rA   r   rB   rC   rD   r.   rZ   r\   r`   r   rd   re   rg   rh   r6   rj   rq   rs   rt   ru   rw   r   r   r   r   rE   U   s*   		rE   Ś__main__)r#   r   r   Zimport_importlibr   Zos.pathr;   r&   rR   rm   Śimportlib.utilrG   Ztest.support.script_helperr   r   Z	test_bothZFrozen_LoaderTestsZSource_LoaderTestsrE   Z%Frozen_MultiPhaseExtensionModuleTestsZ%Source_MultiPhaseExtensionModuleTestsr   Śmainr   r   r   r   Ś<module>   s(   
Ež =ž