a 4êdg?ã@s¶ddlZddlZddlZddlZddlZddlmZddlmZdd„Z dd„Z dd „Z d d „Z d d „Z dd„Zdd„ZGdd„dejƒZejGdd„dejƒƒZedkr²e ¡dS)éN)Úsupport)Ú script_helpercCs tdƒdS)NÚh1©Úprint©rrú,/usr/local/lib/python3.9/test/test_atexit.pyr srcCs tdƒdS)NÚh2rrrrrr sr cCs tdƒdS)NÚh3rrrrrr sr cOstd||ƒdS)NÚh4r)ÚargsÚkwargsrrrr sr cCst‚dS©N)Ú TypeErrorrrrrÚraise1srcCst‚dSr)Ú SystemErrorrrrrÚraise2srcCst‚dSr)Ú SystemExitrrrrÚexitsrc@s|eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„ZdS)Ú GeneralTestcCs4tj|_tj|_t ¡|_|jt_t_t  ¡dSr) ÚsysÚstdoutÚ save_stdoutÚstderrÚ save_stderrÚioÚStringIOÚstreamÚatexitÚ_clear©ÚselfrrrÚsetUp"s  zGeneralTest.setUpcCs|jt_|jt_t ¡dSr)rrrrrrrr rrrÚtearDown)szGeneralTest.tearDowncCsBt t¡t t¡tjtdddt ¡| |j ¡d¡dS)NéÚabc)Úkwz"h4 (4,) {'kw': 'abc'} h4 () {} h1 )rÚregisterrr Ú_run_exitfuncsÚ assertEqualrÚgetvaluer rrrÚ test_args.s   ÿzGeneralTest.test_argscCs4t dd„dddd„dDƒdd¡| ttj¡dS)NcSsdS)NérrrrrÚ9óz*GeneralTest.test_badargs..rcss|] }|VqdSrr)Ú.0ÚxrrrÚ 9r.z+GeneralTest.test_badargs..)r,é)rr'Ú assertRaisesrr(r rrrÚ test_badargs8s"zGeneralTest.test_badargscCs<t t¡t t¡t t¡t ¡| |j ¡d¡dS)Nz h3 h2 h1 ) rr'rr r r(r)rr*r rrrÚ test_order<s    zGeneralTest.test_ordercCs&t t¡t t¡| ttj¡dSr)rr'rrr3rr(r rrrÚ test_raiseEs  zGeneralTest.test_raisecCs2t dd„¡| ttj¡| d|j ¡¡dS)NcSsddS©Nr,rrrrrrr-Or.z5GeneralTest.test_raise_unnormalized..ÚZeroDivisionError)rr'r3r8r(ÚassertInrr*r rrrÚtest_raise_unnormalizedLsz#GeneralTest.test_raise_unnormalizedcCs.t t¡| ttj¡| |j ¡d¡dS)NÚ) rr'rr3rr(r)rr*r rrrÚ test_exitTs zGeneralTest.test_exitcCsˆdd„}dd„}dd„}t |¡t |¡t |¡| ttj¡|j ¡}| | d¡d¡|  d |¡|  d |¡|  d |¡dS) NcSs dddSr7rrrrrÚf]sz,GeneralTest.test_print_tracebacks..fcSs dddSr7rrrrrÚg_sz,GeneralTest.test_print_tracebacks..gcSs dddSr7rrrrrÚhasz,GeneralTest.test_print_tracebacks..hr8éz# onez# twoz# three) rr'r3r8r(rr*r)Úcountr9)r!r=r>r?rrrrÚtest_print_tracebacks[s      z!GeneralTest.test_print_tracebackscsFdg‰‡fdd„}tdƒD]}t |¡qt ¡| ˆdd¡dS)Nrcsˆdd7<dS©Nrr,rr©ÚarrÚincpsz$GeneralTest.test_stress..incé€)Úrangerr'r(r))r!rFÚirrDrÚ test_stressns    zGeneralTest.test_stresscs@dg‰‡fdd„}t |¡t ¡t ¡| ˆdd¡dS)Nrcsˆdd7<dSrCrrrDrrrF{sz#GeneralTest.test_clear..inc)rr'rr(r))r!rFrrDrÚ test_clearys   zGeneralTest.test_clearcsfdg‰‡fdd„}‡fdd„}tdƒD]}t |¡q&t |¡t |¡t ¡| ˆdd¡dS)Nrcsˆdd7<dSrCrrrDrrrF†sz(GeneralTest.test_unregister..inccsˆdd8<dSrCrrrDrrÚdecˆsz(GeneralTest.test_unregister..decr$éÿÿÿÿ)rHrr'Ú unregisterr(r))r!rFrLrIrrDrÚtest_unregister„s      zGeneralTest.test_unregistercCsNg}t |jd¡t ¡| |dg¡t |j¡t ¡| |dg¡dS)Né)rr'Úappendr(r)rN)r!ÚlrrrÚtest_bound_methods“s zGeneralTest.test_bound_methodscCs:d}t d|¡}| |j ¡ ¡ddg¡| |j¡dS)Nz­if 1: import atexit def f(msg): print(msg) atexit.register(f, "one") atexit.register(f, "two") z-cZtwoZone)rZassert_python_okr)ÚoutÚdecodeÚ splitlinesZ assertFalseÚerr)r!ÚcodeÚresrrrÚ test_shutdowns zGeneralTest.test_shutdownN)Ú__name__Ú __module__Ú __qualname__r"r#r+r4r5r6r:r<rBrJrKrOrSrZrrrrr s     rc@s$eZdZdd„Zdd„Zdd„ZdS)ÚSubinterpreterTestcCs6t ¡}d}t |¡}| |d¡| t ¡|¡dS)NzŒif 1: import atexit def f(): pass atexit.register(f) del atexit r©rÚ _ncallbacksrÚrun_in_subinterpr)©r!ÚnrXÚretrrrÚtest_callbacks_leak°s   z&SubinterpreterTest.test_callbacks_leakcCs6t ¡}d}t |¡}| |d¡| t ¡|¡dS)Nzšif 1: import atexit def f(): pass atexit.register(f) atexit.__atexit = atexit rr_rbrrrÚtest_callbacks_leak_refcycleÀs   z/SubinterpreterTest.test_callbacks_leak_refcyclecCsTd}t ¡\}}d |¡}t |¡}t |¡| t |t|ƒ¡|¡t |¡dS)NsThe test has passed!z¸if 1: import os import atexit def callback(): os.write({:d}, b"The test has passed!") atexit.register(callback) ) ÚosÚpipeÚformatrraÚcloser)ÚreadÚlen)r!ZexpectedÚrÚwrXrdrrrÚ(test_callback_on_subinterpreter_teardownÏs ú  z;SubinterpreterTest.test_callback_on_subinterpreter_teardownN)r[r\r]rerfrorrrrr^­sr^Ú__main__)rZunittestrrrgÚtestrZ test.supportrrr r r rrrZTestCaserZ cpython_onlyr^r[ÚmainrrrrÚs&  4