a 7źdg€*ć@sŗddlmZddlmZe d”ZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z Gdd„dejƒZejeed \ZZGd d „d ejƒZejeed \ZZed kr¶e  ”dS) é)Śabc)Śutilzimportlib.machineryéN)Śassert_python_failurec@sdeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dZ dZ dd„Z dZ dd„Zdd„ZdS)Ś LoaderTestsz)Test load_module() for extension modules.cCs|j tjjtjj”|_dS©N)Ś machineryŚExtensionFileLoaderrŚ EXTENSIONSŚnameŚ file_pathŚloader©Śself©rśE/usr/local/lib/python3.9/test/test_importlib/extension/test_loader.pyŚsetUps ’zLoaderTests.setUpcCs |j |”Sr)r Ś load_module)rŚfullnamerrrrszLoaderTests.load_modulecCsN|j ”|j d”| t”| d”Wdƒn1s@0YdS)NZXXX)r rŚ assertRaisesŚ ImportErrorrrrrŚtest_load_module_APIs   z LoaderTests.test_load_module_APIcCs(|j tjjtjj”}| |j|”dSr)rr rr r r Ś assertEqualr ©rŚotherrrrŚ test_equality s ’zLoaderTests.test_equalitycCs,|j dtjjtjj”}| |j|”dS)NŚ_)rr rr r r ŚassertNotEqualr rrrrŚtest_inequality%s’zLoaderTests.test_inequalitycCsšt tjj”x| tjj”}dtjjfdtjjfdfD]\}}| t||ƒ|”q8| tjjt j ”|  |j |j j”Wdƒn1sŒ0YdS)NŚ__name__Ś__file__©Ś __package__Ś)rŚuncacher r rr rŚgetattrZassertInŚsysŚmodulesŚassertIsInstanceŚ __loader__rr ©rŚmoduleŚattrŚvaluerrrŚ test_module*s  ž ’zLoaderTests.test_moduleNcCsZt tjj”8| tjj”}| tjj”}| ||”Wdƒn1sL0YdSr)rr$r r rŚassertIs©rZmodule1Zmodule2rrrŚtest_module_reuse;szLoaderTests.test_module_reusecCsLd}| t”}| |”Wdƒn1s.0Y| |jj|”dS)Nśasdfjkl;)rrrrŚ exceptionr ©rr ŚcmrrrŚtest_unloadableDs (zLoaderTests.test_unloadablecCs\| |j tjj””|jjD]8}tj   dddd|”}|j  d|”}|  | d””qdS)NZsomeŚpathZpkgŚ__init__) Z assertFalser Ś is_packagerr r rŚEXTENSION_SUFFIXESŚosr7Śjoinr Z assertTrue)rŚsuffixr7r rrrŚtest_is_packageJs  zLoaderTests.test_is_package)rŚ __module__Ś __qualname__Ś__doc__rrrrrr.Ś test_packageŚtest_lacking_parentr1Śtest_state_after_failurer6r>rrrrrs r)rc@s¤eZdZdZdd„ZdZdZdZdd„Zdd„Z d d „Z d d „Z d d„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„ZdS)%ŚMultiPhaseExtensionModuleTestszMTest loading extension modules with multi-phase initialization (PEP 489) cCsFd|_|j d”}tj |j”|_|js,J‚|j |j|jj”|_ dS)NZ_testmultiphase) r rŚ FileFinderŚ importlibrŚ find_specŚspecr Śoriginr )rŚfinderrrrrYs   ’z$MultiPhaseExtensionModuleTests.setUpNc CsĀt |j”¢| ”}d|jfd|jjfdfD]\}}| t||ƒ|”q.| t ”|j Wdƒn1sp0Y|  |t j |j”| |j|jj”Wdƒn1s“0YdS)z Test loading an extension modulerr r!N)rr$r rrIrJrr%rŚAttributeErrorŚ__path__r/r&r'r(r)rr r*rrrr.js ž  $’z*MultiPhaseExtensionModuleTests.test_modulec CsBt |j”| ”}| |tj”| ”}| |  d”d”| |  ”d”|  t ”|j Wdƒn1sv0Yd|_ | |j d”| |  dd”d”| | ”t”| | d”dd”|  |j”| ”‚Wdƒn1sų0Y| |jd ”| |jd ”Wdƒn1s40YdS) z@Test basic functionality of stuff defined in an extension moduleZabcdNré ééZ23Z123i±śsomething different)rr$r rr(ŚtypesŚ ModuleTypeŚExamplerŚdemorrLrZfooZStrŚstrŚerrorZ int_constŚ str_const)rr+ŚexrrrŚtest_functionalityxs" $&z1MultiPhaseExtensionModuleTests.test_functionalitycCsVt |j”6| ”}|j}t |”| ||j”Wdƒn1sH0YdS)z6Test that reload didn't re-set the module's attributesN)rr$r rrTrGŚreloadr/)rr+Zex_classrrrŚ test_reloadŒs  z*MultiPhaseExtensionModuleTests.test_reloadc Cs| ”}| d”"| | d”d”Wdƒn1s:0Y| d”D| t”| d”Wdƒn1sz0YWdƒn1s˜0Y| d”D| t”| d”Wdƒn1sŲ0YWdƒn1sö0YdS)zBAssert that the PyState_{Find,Add,Remove}Module C API doesn't workZPyState_FindModulerNZPyState_AddModulerPZPyState_RemoveModuler)rŚsubTestrZcall_state_registration_funcrŚ SystemError©rr+rrrŚtest_try_registration”s 0  F  z4MultiPhaseExtensionModuleTests.test_try_registrationcCs|j |j”S)z'Load the module from the test extension)r rr rrrrr sz*MultiPhaseExtensionModuleTests.load_modulecCs>|jj}|j ||”}tj ||”}tj |”}| |”|S)z-Load a module from the test extension by name) rIrJrr rGrŚspec_from_loaderŚmodule_from_specŚ exec_module)rrrJr rIr+rrrŚload_module_by_name¤s   z2MultiPhaseExtensionModuleTests.load_module_by_namecCsD| d|j”}| |tj”| |jd|j”| |jd”dS)z"Test loading a simulated submodulezpkg.rQN)rdr r(rRrSrrrXr_rrrŚtest_load_submodule­sz2MultiPhaseExtensionModuleTests.test_load_submodulecCsF| d”}| |tj”| |jd”| |jd”| dtj ”dS)z-Test loading module with a one-character nameŚxrQN) rdr(rRrSrrrXZ assertNotInr&r'r_rrrŚtest_load_short_name“s  z3MultiPhaseExtensionModuleTests.test_load_short_namecCs(| |j”}| |j”}| ||”dS)z,Test that 2 loads result in 2 module objectsN)rdr Z assertIsNotr0rrrŚtest_load_twice¼s  z.MultiPhaseExtensionModuleTests.test_load_twicecCsLd}| t”}| |”Wdƒn1s.0Y| |jj|”dS)zTest nonexistent moduler2N©rrrdrr3r r4rrrr6Ās (z.MultiPhaseExtensionModuleTests.test_unloadablecCsLd}| t”}| |”Wdƒn1s.0Y| |jj|”dS)z9Test behavior with nonexistent module with non-ASCII nameufoóNrir4rrrŚtest_unloadable_nonasciiÉs (z7MultiPhaseExtensionModuleTests.test_unloadable_nonasciicCs:|jd}| |”}| t|ƒttƒ”| |jd”dS)z4Test returning a non-module object from create worksZ _nonmoduleéN)r rdrŚtypeŚunittestrŚthree©rr ŚmodrrrŚtest_nonmoduleŠs  z-MultiPhaseExtensionModuleTests.test_nonmodulecCsN|jd}| |”}| t|ƒttƒ”| |jd”| | dd”d”dS)z6Test creating a non-module object with methods definedZ_nonmodule_with_methodsrké rPrNN)r rdrrlrmrrnZbarrorrrŚtest_nonmodule_with_methodsŲs   z:MultiPhaseExtensionModuleTests.test_nonmodule_with_methodscCs4|jd}| |”}| |tj”| |j|”dS)z%Test that NULL slots aren't a problemZ _null_slotsN)r rdr(rRrSrr)rr r+rrrŚtest_null_slotsąs  z.MultiPhaseExtensionModuleTests.test_null_slotsc CszdD]p}| |”R|jd|}| t”| |”Wdƒn1sL0YWdƒq1sj0YqdS)z5Test SystemError is raised for misbehaving extensions)Zbad_slot_largeZbad_slot_negativeZcreate_int_with_stateZ negative_sizeZ export_nullZexport_uninitializedZ export_raiseZexport_unreported_exceptionZ create_nullZ create_raiseZcreate_unreported_exceptionZnonmodule_with_exec_slotsZexec_errZ exec_raiseZexec_unreported_exceptionrN)r]r rr^rd)rZ name_baser rrrŚtest_bad_modulesēs   z/MultiPhaseExtensionModuleTests.test_bad_modulesc Csx|jddfdg}|D]\\}}| |”:| |”}| |j|”| |jd|”Wdƒq1sh0YqdS)z4Test that modules with non-ASCII names can be loadedu_zkouÅ”ka_načtenĆ­ZCzech)uļ¼æć‚¤ćƒ³ćƒćƒ¼ćƒˆćƒ†ć‚¹ćƒˆZJapanesezModule named in %sN)r r]rdrrrA)rZcasesr Ślangr+rrrŚ test_nonascii’s ž   z,MultiPhaseExtensionModuleTests.test_nonascii)rr?r@rArrBrCrDr.rZr\r`rrdrergrhr6rjrqrsrtrurwrrrrrEUs*   rEŚ__main__)r#rrZimport_importlibrZos.pathr;r&rRrmŚimportlib.utilrGZtest.support.script_helperrrZ test_bothZFrozen_LoaderTestsZSource_LoaderTestsrEZ%Frozen_MultiPhaseExtensionModuleTestsZ%Source_MultiPhaseExtensionModuleTestsrŚmainrrrrŚs(    E ž= ž