U aM@sddlZddlZddlZddlZddlZddlmZmZddlmZGddde Z ddZ dd Z Gd d d ej ZGd d d ej ZedkredS)N)ABCMetaabstractmethod)greenletc@s eZdZdS) SomeErrorN__name__ __module__ __qualname__r r ]C:\Users\vtejo\AppData\Local\Temp\pip-unpacked-wheel-96vz34c0\greenlet\tests\test_greenlet.pyr srcCs<ztjWn |tdYnXtdSNr)r getcurrentparentswitchappendsysexc_infor)seenr r r fmains rcCs"dd}t||d}||dS)NcSs|dSNr )excr r r crasherszsend_exception..crasherrrr)grrg1r r r send_exceptions rc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Z d=S)> GreenletTestscs^gfdd}t|}d|d|d|ttddS)Ncs&dtjddS)Nrrr rrr lstr r f%s z$GreenletTests.test_simple..fr)rrr assertEquallistrange)selfr#rr r!r test_simple"s    zGreenletTests.test_simplecCs*tdd}||||jtdS)Nr)rassertIsNotNoneZassertIsrr r*rr r r test_parent_equals_None1s  z%GreenletTests.test_parent_equals_NonecCs$tdd}||||jdS)N)run)rr,Z assertIsNoner/r-r r r test_run_equals_None6s  z"GreenletTests.test_run_equals_Nonecsgfdd}t|}t|}||td||td||td||jd||td||jddS)Ncs*dtjddgdSNr)rrr rrextendr r!r r r#>s z*GreenletTests.test_two_children..frr$r%T)rrr'lendead)r*r#rhr r!r test_two_children;s zGreenletTests.test_two_childrencsTgfddfdd}t|}||td|t|ddS)NcsdtjdSr1r r r!r r r#Rs z4GreenletTests.test_two_recursive_children..fcs(dt}|ddSr1)rrrrr#r"r r rVs z4GreenletTests.test_two_recursive_children..grr$)rrr'r4r getrefcountr-r r9r test_two_recursive_childrenOs z)GreenletTests.test_two_recursive_childrencsdgfddfddtdD}|D] }|q,|D] }|q>tt|dS)NcsddS)NT)r+rr )r*successr r r#csz%GreenletTests.test_threads..fcsg|]}tjdqS)target) threadingThread).0ir#r r fsz.GreenletTests.test_threads.. )r)startjoinr'r4)r*Zthsthr )r#r*r<r test_threads`s  zGreenletTests.test_threadscCspg}tt}tt}||||||_||g|t|j||tg|||tgdSr)rrrrr' assertRaisesrr*rrg2r r r test_exceptionms   zGreenletTests.test_exceptioncCs8g}tt}|||tt|t||tgdSr)rrrrJKeyErrorrr')r*rrr r r test_send_exceptionzs  z!GreenletTests.test_send_exceptioncCspg}tt}tt}||||||g~t||tjg~t||tjtjgdSr)rrrr'gccollect GreenletExitrKr r r test_deallocs   zGreenletTests.test_dealloccsggttfdd}tj|d}||g|tddd=t|g |t j g | dS)NcsPtt}||~ttdSr)rrrrrPrQreleaseacquire)rlocklock2rZsomerefr r r#s  z2GreenletTests.test_dealloc_other_thread..fr=r) r?LockrUr@rFr'r4rPrQrTrrRrG)r*r#tr rVr test_dealloc_other_threads(    z'GreenletTests.test_dealloc_other_threadcsffdd}t|}|}||jk||}||d|jddS)Ncs,td}|jdtj|dS)Nrmeaning of life)r _getframer'f_backrr rrrCr*r r f1s z$GreenletTests.test_frame..f1r\)rr assertTrueZgr_frameZ assertFalser')r*r`rframeZfrom_gr r_r test_frames    zGreenletTests.test_framecCsHdd}tj|dd}tj|dd}||||dS)Ncstfdd}|dS)Ncs tSr)timesleepr xr r z?GreenletTests.test_thread_bug..runner..r)rgrr rfr runnersz-GreenletTests.test_thread_bug..runner)g?)r>args)g333333?)r?r@rFrG)r*rjt1t2r r r test_thread_bugszGreenletTests.test_thread_bugcs.fdd}t|jddd}|ddS)Ncs|d|ddS)Nr%r$*)r'abr_r r r/s  z-GreenletTests.test_switch_kwargs..runr%r$rpro)rrr')r*r/rgr r_r test_switch_kwargss z GreenletTests.test_switch_kwargscCsRdd}t|}|ddi|d|dddif||d|dS)NcSs2tjj|dtjjddd||dfS)Nrfr$rrr rrrfr r r r/sz7GreenletTests.test_switch_kwargs_to_parent..runrgr)r$)r rr'r)r*r/rr r r test_switch_kwargs_to_parents z*GreenletTests.test_switch_kwargs_to_parentcsid}ttfdd}tj|d}|zdWn"tjk rvt d}YnX| |d | dS)Ncs$tddd<dS)NcSsdSrr r r r r rhrizJGreenletTests.test_switch_to_another_thread..run..rrsetwaitr Z created_eventdataZ done_eventr r r/sz8GreenletTests.test_switch_to_another_thread..runr=rrzgreenlet.error was not raised!) r?Eventr@rFrzrrerrorrrr,ryrG)r*r~r/threadr r{r test_switch_to_another_threads  z+GreenletTests.test_switch_to_another_threadcs*fdd}fddt|dS)NcsBz tdWn0t}t|tYnXdS)NZfun) ValueErrorrrrrr')rr6r*r r r#s   z'GreenletTests.test_exc_state..fcstddS)N)NNN)r'rrr r_r r r6sz'GreenletTests.test_exc_state..hr)r*r#r rr test_exc_states zGreenletTests.test_exc_statecCsdd}dd}dd}t|}||ji|||jd||jddi|j|_||jddi|t|||t||ddS) NcSsdt_dSNro)rr testr r r r r#sz+GreenletTests.test_instance_dict..fcSs|`dSr__dict__r8r r r deldictsz1GreenletTests.test_instance_dict..deldictcSs ||_dSrrrvaluer r r setdictsz1GreenletTests.test_instance_dict..setdictror)rr'rrrrJ TypeError)r*r#rrrr r r test_instance_dictsz GreenletTests.test_instance_dictcsittfdd}dd}dd}tj|d}|t|}||t||d | dS) Ncs$tddd<dS)NcSsdSrr r r r r rhrizCGreenletTests.test_threaded_reparent..run..rrxr r{r r r/sz1GreenletTests.test_threaded_reparent..runcSstjdSrrtr r r r blanksz3GreenletTests.test_threaded_reparent..blankcSs ||_dSrrrr r r setparentsz7GreenletTests.test_threaded_reparent..setparentr=r) r?r}r@rFrzrrrJrryrG)r*r/rrrrr r{r test_threaded_reparents z$GreenletTests.test_threaded_reparentcCs0ddl}|t|jt|t|jtdSr )copyrJrrdeepcopy)r*rr r r test_deepcopy+szGreenletTests.test_deepcopycsntddtgfdd}t|d}|~||d|djdS)NcSsdSrr r r r r rh1riz.csNz Wn<tjk rHtjtYnXdSr)rrrRrr rr Zhubmainresultr r worker4s  z:GreenletTests.test_parent_restored_on_kill..workerrrr)rr rrar'r)r*rrr rr test_parent_restored_on_kill0s   z*GreenletTests.test_parent_restored_on_killcCs(t}tdd|d}|t|jdS)NcSsdSrr r r r r rhHriz:GreenletTests.test_parent_return_failure..r)rrJAttributeErrorr)r*rrLr r r test_parent_return_failureDsz(GreenletTests.test_parent_return_failurecCs2Gdddt}|dd}|t|jtdS)Nc@seZdZddZdS)z?GreenletTests.test_throw_exception_not_lost..mygreenletcSs$z tWn YnXt||Sr) Exceptionr__getattribute__r*namer r r rNs  zPGreenletTests.test_throw_exception_not_lost..mygreenlet.__getattribute__Nrrr rr r r r mygreenletMsrcSsdSrr r r r r rhTriz=GreenletTests.test_throw_exception_not_lost..)rrJrthrow)r*rrr r r test_throw_exception_not_lostLs z+GreenletTests.test_throw_exception_not_lostcsRgddfdd}tj|d}|||tjdjtdS)NcSstjdSrrtr r r r rYsz5GreenletTests.test_throw_doesnt_crash..workercst}||dSr)rrrr8rrr r creator[sz6GreenletTests.test_throw_doesnt_crash..creatorr=r) r?r@rFrGrJrr~rr)r*rrZr rr test_throw_doesnt_crashWs z%GreenletTests.test_throw_doesnt_crashcCs,Gdddt}|}||dddS)Nc@s$eZdZddZddZddZdS)z8GreenletTests.test_recursive_startup..convolutedcSst|d|_dSr )r__init__countr_r r r rfs zAGreenletTests.test_recursive_startup..convoluted.__init__cSs.|dkr"|jdkr"d|_|dt||S)Nr/rr+)rrrrrr r r ris zIGreenletTests.test_recursive_startup..convoluted.__getattribute__cSs|j|qdSr)rrr*rr r r r/nsz.convoluted.runN)rrr rrr/r r r r convolutedesrrorrv)r*rrr r r test_recursive_startupds z$GreenletTests.test_recursive_startupcs`gfdd}tj|d}||Gfdddt}|dd}|tj|jdS)Ncs"tdd}||dS)NcSsdSrr r r r r rhwrizKGreenletTests.test_unexpected_reparenting..worker..)rrrr8Zanotherr r rvs  z9GreenletTests.test_unexpected_reparenting..workerr=cseZdZfddZdS)z=GreenletTests.test_unexpected_reparenting..convolutedcs|dkrd|_t||S)Nr/r)rrrrrr r r~s zNGreenletTests.test_unexpected_reparenting..convoluted.__getattribute__Nrr rr r r}srcSsdSrr r r r r rhriz;GreenletTests.test_unexpected_reparenting..)r?r@rFrGrrJr~r)r*rrZrrr rr test_unexpected_reparentingts   z)GreenletTests.test_unexpected_reparentingcsttGfdddt}dd}fdd}t}t|g|d_dtj|d}|  | t|| dS) NcseZdZfddZdS)z.finalizedcsdSrrTrUr_lock1rXr r __del__szDGreenletTests.test_threaded_updatecurrent..finalized.__del__Nrrr rr rr r finalizedsrcSstjdSrrtr r r r deallocatorsz>GreenletTests.test_threaded_updatecurrent..deallocatorcs:td=tdSr rUrr rTr rrrXr r fthreadsz:GreenletTests.test_threaded_updatecurrent..fthreadrr=) r?rYrUobjectrr Zbombrr@rFrTr'rG)r*rrrrrZr rr test_threaded_updatecurrents"     z)GreenletTests.test_threaded_updatecurrentcsbgfddddtgdtd}|||ddS)Nc sJtj}d=tj_ztj|W5tXdSr )rr rrr)r initiatorrrr r rs  z?GreenletTests.test_dealloc_switch_args_not_lost..workercSsdSrr r r r r rszBGreenletTests.test_dealloc_switch_args_not_lost..initiatorrro)rrrar'rr rr !test_dealloc_switch_args_not_losts    z/GreenletTests.test_dealloc_switch_args_not_lostcshtjddkrddntGdddt}|tddfd d }t|}||dS) Nrr$cSs|||dSrr )funcrqkr r r _applysz1GreenletTests.test_tuple_subclass.._applyc@seZdZddZdS)z2GreenletTests.test_tuple_subclass..mytuplecSstt|Sr)rr rtuple__len__r_r r r rs z:GreenletTests.test_tuple_subclass..mytuple.__len__N)rrr rr r r r mytuplesrro)rqcstjjdSrrtr rrkkwargsr r switchapplysz6GreenletTests.test_tuple_subclass..switchapply)r version_infoapplyrdictrr'r)r*rrrr rr test_tuple_subclasss  z!GreenletTests.test_tuple_subclasscCsPtdtfdtddi}Gddd|}Gddd|}||t|dS) NAbstractSubclassr/cSsdSrr r_r r r rhriz8GreenletTests.test_abstract_subclasses..c@s eZdZdS)z;GreenletTests.test_abstract_subclasses..BadSubclassNrr r r r BadSubclasssrc@seZdZddZdS)z.GoodSubclasscSsdSrr r_r r r r/sz@GreenletTests.test_abstract_subclasses..GoodSubclass.runN)rrr r/r r r r GoodSubclasssr)rrrrJr)r*rrrr r r test_abstract_subclassessz&GreenletTests.test_abstract_subclassescsNts dStddkr$dSfdd}tdD]}|r:qJq:dS)Nr2c sttdgfdd}tj|d}|GfdddtGfdddt}g}td }t}|}|D]:}d}d r| dSt}d rq| |qt d r| dS |j||D]} |j|qd S) NFcstdSrrr rr r another_threadszXGreenletTests.test_implicit_parent_with_threads..attempt..another_threadr=cseZdZfddZdS)zUGreenletTests.test_implicit_parent_with_threads..attempt..gc_callbackcsdd<dS)NTrrr_rrXrecycledr r rsz]GreenletTests.test_implicit_parent_with_threads..attempt..gc_callback.__del__Nrr rr r gc_callbacksrcseZdZfddZdS)zQGreenletTests.test_implicit_parent_with_threads..attempt..garbagecs||_|_dSr)cyclecallbackr_rr r r szZGreenletTests.test_implicit_parent_with_threads..attempt..garbage.__init__N)rrr rr rr r garbagesrr$rT)r?rYrUr@rFrr)rr rGrrPrQr'r) rrZrlrgcurrentr_lastNr*)rrrXrr attempts>   z@GreenletTests.test_implicit_parent_with_threads..attemptr&)rP isenabledZ get_thresholdr))r*rrr rr !test_implicit_parent_with_threadss - z/GreenletTests.test_implicit_parent_with_threadsN)!rrr r+r.r0r7r;rIrMrOrSr[rcrnrsrwrrrrrrrrrrrrrrrrr r r r r!s<  "    /rc@sDeZdZddZddZddZddZd d Zd d Zd dZ dS)TestReprcCs|||||fdSr)raendswith)r*gotsuffixr r r assertEndsWith*szTestRepr.assertEndsWithcCstt}||ddS)N current active started main>)reprrr rr*rr r r test_main_while_running-s z TestRepr.test_main_while_runningcs4tfdd}t|}|}||ddS)NcstSr)rr rr r r/3sz-TestRepr.test_main_in_background..run suspended active started main>)rr rr)r*r/rrr rr test_main_in_background1s  z TestRepr.test_main_in_backgroundcCstt}||ddS)Nz pending>)rrrrr r r test_initial:s zTestRepr.test_initialcsxtGfdddtj}|}||d||jd||jdt |j }|j j rht ||ddS)Ncs$eZdZdZZdZfddZdS)z/TestRepr.test_main_from_other_thread..TNcs$t|_t|_t|j|_dSr)r original_mainrr main_glet thread_mainr_rr r r/Ds  z3TestRepr.test_main_from_other_thread..T.run)rrr rrrr/r rr r TAsrrErr) rr r?r@rFrGrrrrrr5AssertionError)r*rrZrr rr test_main_from_other_thread>s   z$TestRepr.test_main_from_other_threadcCsXtdd}||t|d|dt||dt||dt|dS)NcSsdSrr r r r r rhWriz$TestRepr.test_dead..z dead>Z suspendedstartedactive)rrrrZ assertNotInr-r r r test_deadVs  zTestRepr.test_deadcCsXtdd}tdd}t}|||fD](}|d|ft|d|ftq*dS)NcSsdSrr r r r r rhbriz>TestRepr.test_formatting_produces_native_str..cSsdSrr r r r r rhcriz%sz%r)rr ZassertIsInstancestr)r*Zg_deadZ g_not_startedZg_currr r r #test_formatting_produces_native_str^s  z,TestRepr.test_formatting_produces_native_strN) rrr rrrrrrrr r r r r(s r__main__)rPrrdr?ZunittestabcrrrrrrrZTestCaserrrrr r r r s"    J