a ze'@sdZddlZddlmZddlmZmZmZddlZddl m Z m Z ddl mZeeddZeed dZGd d d e ZGd d d e Zedkre dS)z/ Test cases for pyclbr.py Nick Mathewson N)dedent) FunctionType MethodTypeBuiltinFunctionType)TestCasemain)utilcCsdSNr r r D/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_pyclbr.pyr cCsdSr r )cr r r r r c@sVeZdZddZddZddZddZdd d Zd dZddZ ddZ ddZ d S) PyclbrTestcCsJt|t|At|}|rFtd|||ftjd|d|dS)z0 succeed iff {l1} - {ignore} == {l2} - {ignore} zl1=%r l2=%r ignore=%rfilez %r missingN)setprintsysstderrZfailpop)selfl1l2ignoremissingr r r assertListEqszPyclbrTest.assertListEqcCs>||vr dSt||s td||t||d||fdS)z2 succeed iff hasattr(obj,attr) or attr in ignore. Nz???zexpected hasattr(%r, %r))hasattrrZ assertTrue)robjattrrr r r assertHasattr!s    zPyclbrTest.assertHasattrcCs4||vr dS||vr$td|tjd|||dS)z* succeed iff key in obj or key in ignore. Nz***r)rrrZassertIn)rrkeyrr r r assertHaskey)s zPyclbrTest.assertHaskeycCs ||vr||vr|||dS)z2 succeed iff a == b or a in ignore or b in ignore N) assertEqual)rabrr r r assertEqualsOrIgnored0sz PyclbrTest.assertEqualsOrIgnoredNr cCsLt|tdgB}|dur,t|tidg}t|}dd}|D]\}}||vrZqF||||t||}t|tj r| |t t f|j |krqF||j |jqF| |t|j |krqFdd|jD} dd|jD} z|| | |Wn td |tjd Yn0g} |jD]$} ||t|| | r&| | q&g} |jD]H} | dd d kr| d dd kr| d|| n | | qZz4|| | |||j |j||j|j|WqFtd |tjd YqF0qFdd}t|D]:}t||}t|tt fr |||r ||||q dS)z succeed iff pyclbr.readmodule_ex(modulename) corresponds to the actual module object, module. Any identifiers in ignore are ignored. If no module is provided, the appropriate module is loaded with __import__.objectNzcSsl|j}t|tr.t||tr(|j|ur.ismethodcSsg|] }|jqSr )r-.0baser r r cr z*PyclbrTest.checkModule..cSsg|]}t|d|qS)r0)getattrr3r r r r6dszclass=%srr(_cSs0t|tr|j|jkSt|tr,|j|juSdS)NF)r*type __module__r-r __globals__r))itemmoduler r r defined_ins     z*PyclbrTest.checkModule..defined_in) r __import__globalspyclbr readmodule_exitemsr r7r*FunctionZassertIsInstancerrr<r#r?r; __bases__superrrrrr)keysappendmethodsr&r-r0dirr")rZ moduleNamer?rdictr2r0valueZpy_itemZ real_basesZ pyclbr_basesZ actualMethodsmZ foundMethodsr@r>r r r checkModule5sf      $     zPyclbrTest.checkModulecCs*|d|jddd|jddddS)NrCdoctest)Z TestResultsZ _SpoofOutZ DocTestCaseZ _DocTestSuiterZdifflib)MatchrPrr r r test_easys zPyclbrTest.test_easycCs|jddgddS)Nztest.pyclbr_inputZomrRrTrUr r r test_decoratorsszPyclbrTest.test_decoratorscstdddidf\}}}}}td}||||||}|d|d}|dd} | d d } |d d } |d d|d} | dd} | dd}|dd}|dd}|| d}fddd|d|dS)Ntestztest.pya def f0: def f1(a,b,c): def f2(a=1, b=2, c=3): pass return f1(a,b,d) class c1: pass class C0: "Test class." def F1(): "Method." return 'return' class C1(): class C2: "Class nested within nested class." def F3(): return 1+1 f0f1r8f2c1C0F1C1 C2 F3)rZrac s|||D]}|j|q|D]}|j|q8|D]}||||}}t||j|j|j|j f}t||j|j|j|j f} || t|j urȈ|j |j ||j ||j qTdS)aReturn equality of tree pairs. Each parent,children pair define a tree. The parents are assumed equal. Comparing the children dictionaries as such does not work due to comparison by identity and double linkage. We separate comparing string and number attributes from comparing the children of input children. N) r#rIvaluesZassertIsparentr;r0rr?linenoClassrKZchildren) Zparent1Z children1Zparent2Z children2obr!Zo1Zo2t1t2compareZmbrr r rss     z'PyclbrTest.test_nested..compare)rCrZ _create_treerFZ_nest_functionZ _nest_classrn)rrOpftisourceactualrZr\r]r_rarcrergriZexpectedr rrr test_nesteds  zPyclbrTest.test_nestedcCsj|j}|ddd|ddd|ddd|dd d|d d d|d |d dd|d|ddS)Nrandom)RandomrRZcgi)logpickle)partial PickleBufferZaifc)Z _aifc_params sre_parse)dumpgroupsposZpdbpydoc)inputoutputz email.parserztest.test_pyclbrrT)rcmr r r test_otherss      zPyclbrTest.test_others)Nr ) r-r< __qualname__rr r"r&rPrVrWrzrr r r r rs [=rc@s,eZdZddZddZddZddZd S) ReadmoduleTestscCstj|_dSr )rC_modulescopyrUr r r setUpszReadmoduleTests.setUpcCs |jt_dSr )rrCrUr r r tearDownszReadmoduleTests.tearDowncCs|ttjddS)Nz asyncio.foo) assertRaises ImportErrorrCrDrUr r r test_dotted_name_not_a_packagesz.ReadmoduleTests.test_dotted_name_not_a_packagec Csfd}t|D|tt|Wdn1s:0YWdn1sX0YdS)NZ doesnotexist)test_importlib_utilZuncacherModuleNotFoundErrorrCrD)r module_namer r r test_module_has_no_specs  z'ReadmoduleTests.test_module_has_no_specN)r-r<rrrrrr r r r rsr__main__)__doc__rtextwraprtypesrrrrCZunittestrrZ unittest_mainZtest.test_importlibrrr; staticmethodZStaticMethodType classmethodr+rrr-r r r r s   U