a  ze*@sddlmZddlmZedZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z GdddejZejeed \ZZGd d d ejZejeed \ZZed kre dS) )abc)utilzimportlib.machineryN)assert_python_failurec@sdeZdZdZddZddZddZdd Zd d Zd d Z dZ dZ ddZ dZ ddZddZdS) LoaderTestsz)Test load_module() for extension modules.cCs|jtjjtjj|_dSN) machineryExtensionFileLoaderr EXTENSIONSname file_pathloaderselfr]/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_importlib/extension/test_loader.pysetUps zLoaderTests.setUpcCs |j|Sr)r load_module)rfullnamerrrrszLoaderTests.load_modulecCsN|j|jd|t|dWdn1s@0YdS)NZXXX)r r assertRaises ImportErrorrrrrtest_load_module_APIs   z LoaderTests.test_load_module_APIcCs(|jtjjtjj}||j|dSr)rr rr r r assertEqualr rotherrrr test_equality s zLoaderTests.test_equalitycCs,|jdtjjtjj}||j|dS)N_)rr rr r r assertNotEqualr rrrrtest_inequality%szLoaderTests.test_inequalitycCsttjjx|tjj}dtjjfdtjjfdfD]\}}|t|||q8|tjjt j | |j |j jWdn1s0YdS)N__name____file__ __package__)runcacher r rr rgetattrZassertInsysmodulesassertIsInstance __loader__rr rmoduleattrvaluerrr test_module*s   zLoaderTests.test_moduleNcCsZttjj8|tjj}|tjj}|||Wdn1sL0YdSr)rr$r r rassertIsrZmodule1Zmodule2rrrtest_module_reuse;szLoaderTests.test_module_reusecCsLd}|t}||Wdn1s.0Y||jj|dS)Nasdfjkl;)rrrr exceptionr rr cmrrrtest_unloadableDs (zLoaderTests.test_unloadablecCs\||jtjj|jjD]8}tj dddd|}|j d|}| |dqdS)NZsomepathZpkg__init__) Z assertFalser is_packagerr r rEXTENSION_SUFFIXESosr7joinr Z assertTrue)rsuffixr7r rrrtest_is_packageJs  zLoaderTests.test_is_package)r __module__ __qualname____doc__rrrrrr. test_packagetest_lacking_parentr1test_state_after_failurer6r>rrrrrs r)rc@seZdZdZddZdZdZdZddZddZ d d Z d d Z d dZ ddZ ddZddZddZddZddZddZddZdd Zd!d"Zd#d$ZdS)%MultiPhaseExtensionModuleTestszMTest loading extension modules with multi-phase initialization (PEP 489) cCs<d|_|jd}tj|j|_|j|j|jj|_ dS)NZ_testmultiphase) r r FileFinder importlibr find_specspecr originr )rfinderrrrrYs   z$MultiPhaseExtensionModuleTests.setUpNc Cst|j|}d|jfd|jjfdfD]\}}|t|||q.|t |j Wdn1sp0Y| |t j |j||j|jjWdn1s0YdS)z Test loading an extension modulerr r!N)rr$r rrIrJrr%rAttributeError__path__r/r&r'r(r)rr r*rrrr.js   $z*MultiPhaseExtensionModuleTests.test_modulec CsBt|j|}||tj|}|| dd|| d| t |j Wdn1sv0Yd|_ ||j d|| ddd||t||ddd| |j|Wdn1s0Y||jd ||jd Wdn1s40YdS) z@Test basic functionality of stuff defined in an extension moduleZabcdNr Z23Z123isomething different)rr$r rr(types ModuleTypeExamplerdemorrLrZfooZStrstrerrorZ int_const str_const)rr+exrrrtest_functionalityxs" $&z1MultiPhaseExtensionModuleTests.test_functionalitycCsVt|j6|}|j}t||||jWdn1sH0YdS)z6Test that reload didn't re-set the module's attributesN)rr$r rrTrGreloadr/)rr+Zex_classrrr test_reloads  z*MultiPhaseExtensionModuleTests.test_reloadc Cs|}|d"||ddWdn1s:0Y|dD|t|dWdn1sz0YWdn1s0Y|dD|t|dWdn1s0YWdn1s0YdS)zBAssert that the PyState_{Find,Add,Remove}Module C API doesn't workZPyState_FindModulerNZPyState_AddModulerPZPyState_RemoveModuler)rsubTestrZcall_state_registration_funcr SystemErrorrr+rrrtest_try_registrations 0  F  z4MultiPhaseExtensionModuleTests.test_try_registrationcCs|j|jS)z'Load the module from the test extension)r rr rrrrrsz*MultiPhaseExtensionModuleTests.load_modulecCs>|jj}|j||}tj||}tj|}|||S)z-Load a module from the test extension by name) rIrJrr rGrspec_from_loadermodule_from_spec exec_module)rrrJr rIr+rrrload_module_by_names   z2MultiPhaseExtensionModuleTests.load_module_by_namecCsD|d|j}||tj||jd|j||jddS)z"Test loading a simulated submodulezpkg.rQN)rdr r(rRrSrrrXr_rrrtest_load_submodulesz2MultiPhaseExtensionModuleTests.test_load_submodulecCsF|d}||tj||jd||jd|dtj dS)z-Test loading module with a one-character namexrQN) rdr(rRrSrrrXZ assertNotInr&r'r_rrrtest_load_short_names  z3MultiPhaseExtensionModuleTests.test_load_short_namecCs(||j}||j}|||dS)z,Test that 2 loads result in 2 module objectsN)rdr Z assertIsNotr0rrrtest_load_twices  z.MultiPhaseExtensionModuleTests.test_load_twicecCsLd}|t}||Wdn1s.0Y||jj|dS)zTest nonexistent moduler2Nrrrdrr3r r4rrrr6s (z.MultiPhaseExtensionModuleTests.test_unloadablecCsLd}|t}||Wdn1s.0Y||jj|dS)z9Test behavior with nonexistent module with non-ASCII nameufoóNrir4rrrtest_unloadable_nonasciis (z7MultiPhaseExtensionModuleTests.test_unloadable_nonasciicCs:|jd}||}|t|tt||jddS)z4Test returning a non-module object from create worksZ _nonmoduleN)r rdrtypeunittestrthreerr modrrrtest_nonmodules  z-MultiPhaseExtensionModuleTests.test_nonmodulecCsN|jd}||}|t|tt||jd||ddddS)z6Test creating a non-module object with methods definedZ_nonmodule_with_methodsrk rPrNN)r rdrrlrmrrnZbarrorrrtest_nonmodule_with_methodss   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+rrrtest_null_slotss  z.MultiPhaseExtensionModuleTests.test_null_slotsc CszdD]p}||R|jd|}|t||Wdn1sL0YWdq1sj0YqdS)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 rrrtest_bad_moduless   z/MultiPhaseExtensionModuleTests.test_bad_modulesc Csx|jddfdg}|D]\\}}||:||}||j|||jd|Wdq1sh0YqdS)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_nonasciis    z,MultiPhaseExtensionModuleTests.test_nonascii)rr?r@rArrBrCrDr.rZr\r`rrdrergrhr6rjrqrsrtrurwrrrrrEUs*   rE__main__)r#rrZimport_importlibrZos.pathr;r&rRrmimportlib.utilrGZtest.support.script_helperrrZ test_bothZFrozen_LoaderTestsZSource_LoaderTestsrEZ%Frozen_MultiPhaseExtensionModuleTestsZ%Source_MultiPhaseExtensionModuleTestsrmainrrrrs(    E =