a ze1@sdZddlmZddlmZddlZddlZddlZddlZddl m Z ddl m Z m Z mZmZmZmZddlmZddlZddlZedd d gZed gd Zed gdZGdddejZGdddejZdZdZedeeeefZ GdddZ!Gddde!ejZ"Gddde!ejZ#GdddejZ$GdddejZ%Gd d!d!ejZ&Gd"d#d#ejZ'Gd$d%d%ejZ(Gd&d'd'ejZ)e*d(kre+dS))zTest cases for traceback module) namedtuple)StringION)support)TESTFNErrorcaptured_outputunlink cpython_only ALWAYS_EQ)assert_python_okcode co_filenameco_nameframe)f_code f_globalsf_localstb)tb_frame tb_linenotb_nextc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!S)"TracebackCasesc CsHz |Wn0|y:}zt||WYd}~Sd}~00tddS)Nzcall did not raise exception) tracebackformat_exception_only ValueError)selffuncexcvaluerG/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_traceback.pyget_exception_formats  "z#TracebackCases.get_exception_formatcCstddddS)Nzdef fact(x): return x! ?execcompilerrrr syntax_error_with_caret"sz&TracebackCases.syntax_error_with_caretcCstddddS)Nz1 + r"r#r$r&rrr syntax_error_with_caret_2%sz(TracebackCases.syntax_error_with_caret_2cCstddddS)Nz def spam(): print(1) print(2)r"r#r$r&rrr syntax_error_bad_indentation(sz+TracebackCases.syntax_error_bad_indentationcCstddddS)NuPython = "Ṕýţĥòñ" +r"r#r$r&rrr !syntax_error_with_caret_non_ascii+sz0TracebackCases.syntax_error_with_caret_non_asciicCstddddS)Nz print(2)r"r#r$r&rrr syntax_error_bad_indentation2.sz,TracebackCases.syntax_error_bad_indentation2cCs||jt}|t|d||ddk|d|d||dd|dd||j t}|d|d||d dd||ddd|dd||j t}|d|d||d dd||ddd|dddS) Nz return x!^! +) r!r' SyntaxError assertEquallen assertTruestripassertInfindr(countr*rerrrrr test_caret1s& $zTracebackCases.test_caretcCs>tdd}tt|}|t|d||dddS)Nerror)zx.pyN bad syntaxr-r@)r3rrr4r5r7)rrr<rrr test_nocaretEs  zTracebackCases.test_nocaretcCs||jt}|t|d||dd|d|d||ddd|dd||jt}|t|d||dddS)Nr,r-zprint(2)r.r/)rA) r!r)IndentationErrorr4r5r7r8r9r+r;rrr test_bad_indentationKs$z#TracebackCases.test_bad_indentationcCs&t}t|j|}||dgdS)NzKeyboardInterrupt )KeyboardInterruptrr __class__r4)reZlstrrr test_base_exceptionYsz"TracebackCases.test_base_exceptioncsPfddz Wnty0t}Yn0t|d|d|ddS)Ncs*z tdWnty$Yn0dS)Nhellorrfrr rMds  z?TracebackCases.test_traceback_context_recursionerror..frr-r/)RecursionErrorsysexc_inforformat_exceptionrrPrrLr %test_traceback_context_recursionerror_s    z4TracebackCases.test_traceback_context_recursionerrorcsPfddz Wnty0t}Yn0t|d|d|ddS)Nc sBd}z Wn(ty6}z|}WYd}~n d}~00t|dSN Exception)rHrrLrr rMus  z=TracebackCases.test_traceback_cause_recursionerror..frr-r/)rVrOrPrrQrRrrLr #test_traceback_cause_recursionerrorqs    z2TracebackCases.test_traceback_cause_recursionerrorcCsxGdddt}t||}|t|dd|j}|jdvrJ|j}nd|j|jg}||dd||fdS) Nc@seZdZddZdS)z?TracebackCases.test_format_exception_only_bad__str__..XcSs dddSNr-rrr&rrr __str__szGTracebackCases.test_format_exception_only_bad__str__..X.__str__N__name__ __module__ __qualname__rYrrrr Xsr^r-z)__main__builtins.r%s: %s ) rVrrr4r5r[r\r]join)rr^r< str_valuestr_namerrr %test_format_exception_only_bad__str__s  z4TracebackCases.test_format_exception_only_bad__str__csddlddljjddgjjd}|\}}t|ddfdd}|dd dd d D]`}|dkrd }n|d krd }nd}|d |||d|d |||d|d |||dqn|dddddS)Nr-cz&import sys; print(sys.stdout.encoding)stdoutstderrasciic szttd|d"}|d||Wdn1s80Yjjtgjjd}|\}}|  }Wt tn t t0| d}| } d| } d| }  d||d d |d ||d | d |d | |d | kd|d | dS)Nw)encodingz}{0}if 1: import traceback; raise RuntimeError('{1}') rhbackslashreplacezraise RuntimeError('{0}')zRuntimeError: {0}zline %sr-z)Invalid line number: {0!r} instead of {1}r/z.Invalid traceback line: {0!r} instead of {1!r}rAz-Invalid error message: {0!r} instead of {1!r})openrwriteformatPopen executablePIPESTDOUT communicatedecode splitlinesrencoder8r6endswith) Z firstlinesmessagecharsetlinenooutputprocessrirjZencoded_messageZ message_asciiZerr_lineerr_msgZoutput_encodingr subprocessrOrr do_tests@$     z1TracebackCases.test_encoded_file..do_testfoorA)rkz iso-8859-1utf-8GBKru丂儀uhé hoz# coding: {0} r,z#!shebang # coding: {0} z # coding: {0} zx=0 # coding: GBK r) rOrrrrsrtrurvstrrxrq)rrrirjrr|textrrr test_encoded_files6  #   z TracebackCases.test_encoded_filecCs6td}td|\}}}gd}|||dS)Na% import sys import traceback class PrintExceptionAtExit(object): def __init__(self): try: x = 1 / 0 except Exception: self.exc_info = sys.exc_info() # self.exc_info[1] (traceback) contains frames: # explicitly clear the reference to self in the current # frame to break a reference cycle self = None def __del__(self): traceback.print_exception(*self.exc_info) # Keep a reference in the module namespace to call the destructor # when the module is unloaded obj = PrintExceptionAtExit() rg)s"Traceback (most recent call last):s& File "", line 8, in __init__s#ZeroDivisionError: division by zero)textwrapdedentr r4rx)rr rcrirjexpectedrrr test_print_traceback_at_exits z+TracebackCases.test_print_traceback_at_exitcCs0t}tjttdd|d||ddS)NZ projectorfilezException: projector )rrprint_exceptionrVr4getvalue)rr~rrr test_print_exceptions  z#TracebackCases.test_print_exceptionN)r[r\r]r!r'r(r)r*r+r=rBrErIrSrWrfrrrrrrr rs  Drc@sreZdZddZedddZddZdd Zd d Zd d Z ddZ ddZ eddZ ddZ eddZdS)TracebackFormatTestscCs tddS)NZblah)KeyErrorr&rrr some_exceptionsz#TracebackFormatTests.some_exceptionNc Csddlm}z |Wntyt\}}}|durH||jddt |}t }|||| }t d} t |Wdn1s0Yt } tj || dt d} tWdn1s0Yt} t } tj| dYn 0td||||| | || | || | |}|t|d|d}|d d\}}||d ||d ||d dS) Nr)traceback_printz#Traceback (most recent call last): rrjrz&unable to create test traceback stringr Traceback Filez raise) _testcapirrrrOrPrrcr format_tbrrrprint_tb print_exc format_excrr4rxr5r6 startswith)rZ cleanup_funcrtype_rrZ traceback_fmtZfile_Z python_fmtZtbstderrZtbfileZ excstderrZexcfmtZexcfileZtb_linesZbannerlocationZ source_linerrr check_traceback_formatsD     ( & z+TracebackFormatTests.check_traceback_formatcCs |dSrTrr&rrr test_traceback_format.sz*TracebackFormatTests.test_traceback_formatcCsdd}||dS)NcSs|jdSrT)rclearrrrr cleanup_tb3szRTracebackFormatTests.test_traceback_format_with_cleared_frames..cleanup_tbr)rrrrr )test_traceback_format_with_cleared_frames1sz>TracebackFormatTests.test_traceback_format_with_cleared_framescCstd }ttdWdn1s.0Yt}tjtd|d|||ttd}||d |dS)Nrjr-rr) rr print_stackrO _getframerr4r format_stackrc)rZststderrZstfileZstfmtrrr test_stack_format7s .z&TracebackFormatTests.test_stack_formatc Cs~dd}td}|Wdn1s,0Y|jj}||dddt|dfddt|d fd gdS) NcSs tdSrT)rrrrrr prnEsz2TracebackFormatTests.test_print_stack..prnrjz) File "%s", line %d, in test_print_stackrAz prn()z File "%s", line %d, in prnr-z traceback.print_stack())r__code__co_firstlinenor4rrx__file__)rrrjr}rrr test_print_stackDs $z%TracebackFormatTests.test_print_stackcsd|_fddtd>}z Wnty>|Yn 0|dWdn1s^0Yjj}dtd|ddtd|d d td|d d td|d d }|}|}| |dd |dd | |d |d | |d |d t }| ttd|d t|d|d(fdd td@}z Wnty||Yn 0|dWdn1s0Yjj} dtd| ddtd| ddtd| ddtd| dd} dtd| dd} | | }|}| ||d)fdd td@} z Wntyn|Yn 0|dWdn1s0Yjj} dtd| ddtd| ddtd| ddtd| dd td| dd!}|| }| }| ||tdD}ztjWntyN|Yn 0|d"Wdn1sp0Ydtd| ddtd| ddtd| ddtd| dd} dtd| d#d$} | | }|}| ||tdH}ztjd Wnty0|Yn 0|d"Wdn1sR0Ydtd| ddtd| ddtd| dd%td| dd} dtd| d&d'} | | }|}| ||dS)*Ncs dSrTrrrLrr rMYszBTracebackFormatTests._check_recursive_traceback_display..frjzno recursion occurredz+Traceback (most recent call last): File "z", line rz8, in _check_recursive_traceback_display f() File "r-z, in f f() File "zn, in f f() \[Previous line repeated (\d+) more times\] RecursionError: maximum recursion depth exceeded rz\d+< cs|r|dStdSNr-rKr:)grr rs zBTracebackFormatTests._check_recursive_traceback_display..gzno value error was raisedz File "r/z%, in g return g(count-1) File "zM, in g return g(count-1) [Previous line repeated 7 more times] File "rAz', in g raise ValueError ValueError z0, in _check_recursive_traceback_display g() cs|r|dSdSrrr)rhrr rs zBTracebackFormatTests._check_recursive_traceback_display..hz8, in _check_recursive_traceback_display h() File "z%, in h return h(count-1) File "zM, in h return h(count-1) [Previous line repeated 7 more times] File "z, in h g() zno error raisedGzK, in _check_recursive_traceback_display g(traceback._RECURSIVE_CUTOFF) zL, in g return g(count-1) [Previous line repeated 1 more time] File "czO, in _check_recursive_traceback_display g(traceback._RECURSIVE_CUTOFF + 1) )r)r)ZmaxDiffrrNZfailrrrrxrr4Z assertRegexr8rOgetrecursionlimitintresearchgrouprangerr_RECURSIVE_CUTOFF)r render_excstderr_fZlineno_fZresult_fractualZ rec_limitZstderr_gZlineno_gZresult_gZtb_lineZstderr_hZlineno_hZresult_hr)rMrrr "_check_recursive_traceback_displayRs8     ( *   *       *       *      *   z7TracebackFormatTests._check_recursive_traceback_displaycCs|tjdSrT)rrrr&rrr test_recursive_traceback_pythonsz4TracebackFormatTests.test_recursive_traceback_pythoncs&ddlmfdd}||dS)Nrexception_printcst\}}}|dSrT)rOrP)exc_type exc_valueexc_tbrrr r szRTracebackFormatTests.test_recursive_traceback_cpython_internal..render_exc)rrr)rrrrr )test_recursive_traceback_cpython_internals  z>TracebackFormatTests.test_recursive_traceback_cpython_internalcCsJdd}|}|jj}||dddt|dfdt|dfgdS)NcSstSrT)rrrrrr fmtsz3TracebackFormatTests.test_format_stack..fmtrz> File "%s", line %d, in test_format_stack result = fmt() r/zA File "%s", line %d, in fmt return traceback.format_stack() r-)rrr4r)rrresultr}rrr test_format_stacks  z&TracebackFormatTests.test_format_stackc Csddlm}Gdddt}|d}|d}z ||Wn<|yrz|Wn |ylt\}}}Yn0Yn0td}||Wdn1s0Y|} | dt | | t | d | d | d | d | d dS)Nrrc@seZdZddZdS)zATracebackFormatTests.test_unhashable..UnhashableExceptioncSsdSNTrrotherrrr __eq__szHTracebackFormatTests.test_unhashable..UnhashableException.__eq__Nr[r\r]rrrrr UnhashableExceptionsrex1ex2rj rzUnhashableException: ex2rAzUnhashableException: ex1r) rrrVrOrPrrr7rxr4r5context_messager8) rrrrrrexc_valrrrrrr test_unhashables$     &z$TracebackFormatTests.test_unhashable)N)r[r\r]rr rrrrrrrrrrrrrr rs , 2  rzG The above exception was the direct cause of the following exception: zF During handling of the above exception, another exception occurred: z(%s|%s)c@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ e edddZddZddZddZddZdS)BaseExceptionReportingTestsc CsFt|tr|Sz |Wn(ty@}z|WYd}~Sd}~00dSrT) isinstancerV)rZexception_or_callablerHrrr get_exceptionDs   z)BaseExceptionReportingTests.get_exceptioncCs dddSrXrr&rrr zero_divLsz$BaseExceptionReportingTests.zero_divcCsJ|}||dd|d|d||dd|ddS)Nrz1/0 # In zero_divrrZeroDivisionError)rxr6rr8)rmsglinesrrr check_zero_divOsz*BaseExceptionReportingTests.check_zero_divc Csz ddWn(ty4}z|}WYd}~n d}~00||}|t|d||dd||dd|d|d||dd dS) Nr-rr,rrz 1/0 # Markerr/rAr)r get_reportrxr4r5r6rr8r_rHrrrr test_simpleUs z'BaseExceptionReportingTests.test_simplecsjfddfdd}t|}t|d|dt|dd|d dS) Nc s<z Wn*ty6}zt|WYd}~n d}~00dSrTrrr)rHr&rr inner_raisebs z;BaseExceptionReportingTests.test_cause..inner_raisecs dSrTrrrrr outer_raisegsz;BaseExceptionReportingTests.test_cause..outer_raiserAr-rinner_raise() # Markerr/ boundariessplitrr4r5 cause_messagerr8rrZblocksrrrr test_causeas  z&BaseExceptionReportingTests.test_causecsjfddfdd}t|}t|d|dt|dd|d dS) Ncs(z Wnty"tYn0dSrTrrr&rr rps  z=BaseExceptionReportingTests.test_context..inner_raisecs dSrTrrrrr rusz=BaseExceptionReportingTests.test_context..outer_raiserAr-rrr/)rrrr4r5rrr8rrrr test_contextos  z(BaseExceptionReportingTests.test_contextc Csz ztWntdYn0Wn(tyH}z|}WYd}~n d}~00||}|t|d||dd||dd|d|d||dd dS) Nr,rrr-rzZeroDivisionError from Noner/rAr) rVrrrxr4r5r6rr8rrrr test_context_suppression}sz4BaseExceptionReportingTests.test_context_suppressioncsjfddfdd}t|}t|d|dt|dd|d dS) Nc s\z Wn(ty4}z|}WYd}~n d}~00ztWntyVt|Yn0dSrT)rrZxyzzy NameErrorr)_erHr&rr rs  zGBaseExceptionReportingTests.test_cause_and_context..inner_raisecs dSrTrrrrr rszGBaseExceptionReportingTests.test_cause_and_context..outer_raiserAr-rrr/rrrrr test_cause_and_contexts z2BaseExceptionReportingTests.test_cause_and_contextcsfddfdd}t|}t|d|dtd|dd |dd |d |d dS) Nc spz@z Wn.ty<}z|}t|WYd}~n d}~00Wn*tyj}z||WYd}~n d}~00dSrTr)rHzr&rr rs  zEBaseExceptionReportingTests.test_cause_recursive..inner_raisecs dSrTrrrrr rszEBaseExceptionReportingTests.test_cause_recursive..outer_raiserAr-zraise KeyError from erz1/0rr/) rrrr4r5rr8Z assertNotInrrrrr test_cause_recursives z0BaseExceptionReportingTests.test_cause_recursivez5Pegen is arguably better here, so no need to fix thiscCsPdd}||}||dddd}||}||dddS)NcSstdddS)Nr)rrrrJ)r3rrrr rHszFBaseExceptionReportingTests.test_syntax_error_offset_at_eol..erz ^cSs tddS)Nz x = 5 | 4 |)r#rrrr rHsz ^)rrxr4rrHrrrr test_syntax_error_offset_at_eols z;BaseExceptionReportingTests.test_syntax_error_offset_at_eolcCstd}||}||dgd|_||}||ddgtd}d|_||}||dgd|_||}||ddgdS)Nr@zSyntaxError: bad syntaxdz File "", line 100z myfile.pyz#SyntaxError: bad syntax (myfile.py)z File "myfile.py", line 100)r3rrxr4r}filenamerrrr test_syntax_error_no_linenos*z7BaseExceptionReportingTests.test_syntax_error_no_linenocCsj|td}|d||td}|d||t}|d||td}|d|dS)NzException: None Nonez Exception r)rrVr8r;rrr test_message_nones    z-BaseExceptionReportingTests.test_message_nonec CstddD]}dD]}d|d|}dg}|dkrH|d|nR|d krz|d||d d|dn |d||d d |d |d |tddd|||f}d|}|||qq dS)Nr)rr/ ztext%dz File "file.py", line 1r-z %sz %s^z zSyntaxError: msgrrzfile.pyr1)rappendlstriprr3rcr4)roffsetaddrrr<exprrr !test_syntax_error_various_offsetss    z=BaseExceptionReportingTests.test_syntax_error_various_offsetscCsXGddd}||j}d}d|jjj|jjjg}d||f}|||dS)Nc@seZdZGdddZdS)zJBaseExceptionReportingTests.test_format_exception_only_qualname..Ac@seZdZGdddeZdS)zLBaseExceptionReportingTests.test_format_exception_only_qualname..A.Bc@seZdZddZdS)zNBaseExceptionReportingTests.test_format_exception_only_qualname..A.B.XcSsdS)NI am Xrr&rrr rYszVBaseExceptionReportingTests.test_format_exception_only_qualname..A.B.X.__str__NrZrrrr r^sr^N)r[r\r]rVr^rrrr BsrN)r[r\r]rrrrr Asrrrarb)rrr^rcr\r]r4)rrr<rdrerrrr #test_format_exception_only_qualnames  z?BaseExceptionReportingTests.test_format_exception_only_qualnameN)r[r\r]rrrrrrrrrunittestZskipIfrZuse_old_parserrrrrrrrrr rBs   rc@seZdZddZdS)PyExcReportingTestscCst||}dtt|||j}td$}tt|||jWdn1sV0Y|| ||S)Nrrj) rrcrrQtype __traceback__rrr4r)rrHssiorrr rs  2zPyExcReportingTests.get_reportN)r[r\r]rrrrr rsrc@seZdZeddZdS)CExcReportingTestscCsNddlm}||}td}||Wdn1s<0Y|S)Nrrrj)rrrrr)rrHrrrrr rs    &zCExcReportingTests.get_reportN)r[r\r]r rrrrr rsrc@sxeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZdS) LimitTestsze Tests for limit argument. It's enough to test extact_tb, extract_stack and format_exception cCs tddS)Nz Last raisedrUr&rrr last_raises1+szLimitTests.last_raises1cCs |dSrT)rr&rrr last_raises2.szLimitTests.last_raises2cCs |dSrT)rr&rrr last_raises31szLimitTests.last_raises3cCs |dSrT)rr&rrr last_raises44szLimitTests.last_raises4cCs |dSrT)r r&rrr last_raises57szLimitTests.last_raises5cCstSrT)rOrr&rrr last_returns_frame1:szLimitTests.last_returns_frame1cCs|SrT)r"r&rrr last_returns_frame2=szLimitTests.last_returns_frame2cCs|SrT)r#r&rrr last_returns_frame3@szLimitTests.last_returns_frame3cCs|SrT)r$r&rrr last_returns_frame4CszLimitTests.last_returns_frame4cCs|SrT)r%r&rrr last_returns_frame5FszLimitTests.last_returns_frame5cs|fdd}fdd}ttdd6|}t|d|dd |d d||d d |d dd |d d |dd||d d |dd t|dd|dd gt`|||d dt_||d d|dd |dd|dd |dddt_|gdt_|gWdn1sn0YdS)Ncstjfi|SrTr extract_stackkwargs)rrr extractKsz.LimitTests.test_extract_stack..extractcsX|d||d|||dd||ddt|t|dSr)r4r5)rrignorer&rr assertEqualExceptMs$z8LimitTests.test_extract_stack..assertEqualExcepttracebacklimitrr/limitrriir-rrArr)r&r swap_attrrOZ assertGreaterr5r4r.)rr+r-nolimr)rrr test_extract_stackIs*  &zLimitTests.test_extract_stackcszz |Wn ty,t\}}Yn0fdd}ttdd|}|t|d||dd|dd||dd|||d d|d d||d d|||d dgt`|||dt_|||dd||d d|dd ||d d|d dd t_||gdt_||gWdn1sl0YdS)Ncstjfi|SrT)r extract_tbr)rrr r+jsz+LimitTests.test_extract_tb..extractr.r/r r/r0rrrrArr r!rVrOrPrr2r4r5r.)rrrr+r3rrr test_extract_tbes.   zLimitTests.test_extract_tbcs~z |Wn ty,t\Yn0fdd}ttdd|}|t|d||dd|dd||dd|||d d|d d||d d|||d dgt`|||dt_|||dd||d d|dd ||d d|d dd t_||gdt_||gWdn1sp0YdS)Ncstjfi|ddS)Nr-r)rrQr)rrrrr r+sz1LimitTests.test_format_exception..extractr.r/r r/r0rrr6rrArrr7)rr+r3rr9r test_format_exceptions.  z LimitTests.test_format_exceptionN)r[r\r]__doc__rrrr r!r"r#r$r%r&r4r8r:rrrr r&src@seZdZddZddZdS)MiscTracebackCasescsfdd}fddddz |Wnt\}}}Yn0|jjjj}|t|jdt||t|jddS) Ncs dSrTrr)middlerr outersz,MiscTracebackCases.test_clear..outercs dSrTrr)innerrr r=sz-MiscTracebackCases.test_clear..middlecSsd}dddSrXr)irrr r?sz,MiscTracebackCases.test_clear..innerr-r) rOrPrrr4r5rr clear_frames)rr>rrrZ inner_framer)r?r=r test_clears     zMiscTracebackCases.test_clearcCs^dd}|}|jj}||ddt|dddft|ddd fg|t|d d dS) NcSstSrTr'rrrr r+sz6MiscTracebackCases.test_extract_stack..extractrr/r4zresult = extract()r-r+z return traceback.extract_stack()rr,)rrr4rr5)rr+rr}rrr r4sz%MiscTracebackCases.test_extract_stackN)r[r\r]rBr4rrrr r<sr<c@s,eZdZddZddZddZddZd S) TestFramecCsttdttddd}||d|t|d||tddd||t||t||||j | |t ||t dS)NrMr-dummy)rMr-rD%"""Test cases for traceback module""") linecache clearcache lazycacheglobalsr FrameSummaryr4tupleZ assertIsNonelocalsassertNotEqualobjectr rrMrrr test_basicss  zTestFrame.test_basicscCsHttjddddd}|d|jtdt|d|jdS)NrMr-rDF) lookup_linerE) rFrGrrJr4_linerHrIlinerOrrr test_lazy_linesszTestFrame.test_lazy_linescCs$tjddddd}|d|jdS)NrMr-rDrSrS)rrJr4rSrOrrr test_explicit_lineszTestFrame.test_explicit_linecCs&tjddddd}|t|ddS)NrMr-rDrSrUr,)rrJr4r5rOrrr test_lenszTestFrame.test_lenN)r[r\r]rPrTrVrWrrrr rCs rCc@sleZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZdS) TestStackcCsLdd}ttd}|}|t|t|d||dd|dS)NcSsttdSrT)listr walk_stackrrrr deepersz)TestStack.test_walk_stack..deeperr-)rYrrZr4r5)rr[s1s2rrr test_walk_stacks zTestStack.test_walk_stackcCsPz ddWn ty,t\}}}Yn0tt|}|t|ddSrX)rVrOrPrYrwalk_tbr4r5)rrrrrrr test_walk_tbs   zTestStack.test_walk_tbcCs$tjtd}||tjdSrT)r StackSummaryr+rZZassertIsInstancerrrrr r4szTestStack.test_extract_stackcCs*tjjtddd}|t|ddS)Nrr0)rrar+rZr4r5rbrrr test_extract_stack_limitsz"TestStack.test_extract_stack_limitcCsdttdttdd}t|dd}tjjt |dfgdd}t| |dj ddS)N/foo.pymethodr T lookup_linesr import sys) rFrG updatecacherI test_code test_framerrar+iterr4rSrcrMrrrr test_extract_stack_lookup_liness  z)TestStack.test_extract_stack_lookup_linescCsjttdd}t|dd}tjjt|dfgdd}|itj t dt ||dj ddS)Nrdrer Frfrrh) rFrGrjrkrrar+rlr4cacherirIrSrmrrr *test_extract_stackup_deferred_lookup_liness  z4TestStack.test_extract_stackup_deferred_lookup_linescCs$tjdg}|dg|dSNfoo.pyr-fredrSz* File "foo.py", line 1, in fred line rra from_listr4rqrbrrr test_from_lists zTestStack.test_from_listcCs8tjdg}d|d<tj|}|dg|dS)Nrs)rtr/rurSrz* File "foo.py", line 2, in fred line rv)rrr]rrr test_from_list_edited_stacks z%TestStack.test_from_list_edited_stackcCs$tjdg}|dg|dSrrrvrbrrr test_format_smoke&s zTestStack.test_format_smokecCs^tdttdd}t|tddi}tjjt|dfgdd}| |dj dd idS) Nrdre somethingr-r Tcapture_localsr1 rFrirIrjrkrrar+rlr4rLrmrrr test_locals.s  zTestStack.test_localscCsVtdttdd}t|tddi}tjt|dfg}| |dj ddS)Nrdrer{r-r rrrmrrr test_no_locals5s  zTestStack.test_no_localscCs8dd}|dd}|dt|jjdfg|dS)NcSs d}d}tjjtddddS)Nr-r/T)r}r1)rrar+rZ)kvabrrr some_inner=s  z0TestStack.test_format_locals..some_innerrAr,zw File "%s", line %d, in some_inner return traceback.StackSummary.extract( a = 1 b = 2 k = 3 v = 4 )r4rrrrq)rrrrrr test_format_locals<s zTestStack.test_format_localsN)r[r\r]r^r`r4rcrorqrxryrzrrrrrrr rXs  rXc@s|eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZdS)TestTracebackExceptionc Csz ddWn:tyFt}tj|}tjt|d}Yn0|d|j |d|j |d|j |||j ||d|j |t|dt|dS)Nr-rr/F)rVrOrPrTracebackExceptionrar+r_r4 __cause__ __context____suppress_context__stackrrrrPrexpected_stackrrr test_smokeNs    z!TestTracebackException.test_smokec Csdd}z |Wnbtyt}zJt}tjjt|ddddd|_tjj |dddd|_ WYd}~n d}~00|j}|j }| d|j | d|j | d|j| ||j| |d|j| t|dt|dS) NcSs dddSrXrrrrr r_sz7TestTracebackException.test_from_exception..foor/r-FT)r1rgr}r)rVrOrPrrar+r_rrfrom_exceptionrr4rrrrrr)rrrHrPrrrrr test_from_exception]s( z*TestTracebackException.test_from_exceptionc Cs z\z0ddWt}tj|}td}td|n&t}tj|}td}td|0Wn:tyt}tj|}tjt|d}Yn0tt|d}|||j |||j |d|j |||j ||d|j |t|dt|dS)Nr-rcauseuh ohr/TrOrPrrrVrar+r_r4rrrrrr)rexc_info_context exc_contextrrPrrZ exc_causerrr rss0       z!TestTracebackException.test_causec CszHz&ddWt}tj|}tdnt}tj|}td0Wn:tyt}tj|}tjt|d}Yn0|d|j |||j |d|j |||j ||d|j |t|dt|dS)Nr-rrr/Fr)rrrrPrrrrr rs*       z#TestTracebackException.test_contextcCs~z ddWnty&t}Yn0t|d}t|d}tj|}|t|d||t|d|dS)Nr-rr/)rVrOrP getrefcountrrr4)rrPZrefcnt1Zrefcnt2rrrr /test_no_refs_to_exception_and_traceback_objectss   zFTestTracebackException.test_no_refs_to_exception_and_traceback_objectscCsrz ddWn.ty:t}tj|}tj|}Yn0||||||||t||t dSrX) rVrOrPrrZ assertIsNotr4rMrNr )rrPrexc2rrr test_comparison_basics     z,TestTracebackException.test_comparison_basicc sddfdd}z |Wnty8t}Yn0tj|}tj|ddi}tj|ddi}||||||tj|dd i}|||tj|dd i}tj|d d d }|||tj|dd i} tj|d d d } || | dS) NcSs z tdWnYn0dS)Nz bad valuerKrrrr raise_excs zKTestTracebackException.test_comparison_params_variations..raise_exccsd\}}dS)N)r-r/r)xyrrr raise_with_localsszSTestTracebackException.test_comparison_params_variations..raise_with_localsr1rr/r}Tr)r1r}r)rVrOrPrrr4rM) rrrPrZexc1rZexc3Zexc4Zexc5Zexc6Zexc7rrr !test_comparison_params_variationss&        z8TestTracebackException.test_comparison_params_variationsc Cs|g}tdD]2}z ddWq |tjtYq 0q ||d|d|t|dt|ddS)Nr/r-r) rr rrrOrPr4rYrq)rZexcsrrrr /test_comparison_equivalent_exceptions_are_equals  zFTestTracebackException.test_comparison_equivalent_exceptions_are_equalc CsGdddt}|d}|d}z ||Wn6|y`z|Wn|yZt}Yn0Yn0tj|}t|}|d|d|d|ddS) Nc@seZdZddZdS)zCTestTracebackException.test_unhashable..UnhashableExceptioncSsdSrrrrrr rszJTestTracebackException.test_unhashable..UnhashableException.__eq__Nrrrrr rsrrrzUnhashableException: ex2 r/zUnhashableException: ex1 r )rVrOrPrrrYrqr8)rrrrrPr formattedrrr rs     z&TestTracebackException.test_unhashablecspfddz dWnDty\t}tj|ddi}tjjt|ddd}Yn0|||j dS)Ncs|r|dndddSrXr)nrecurserr rsz2TestTracebackException.test_limit..recurserr1rr/r0) rVrOrPrrrar+r_r4rrrrr test_limits    z!TestTracebackException.test_limitcCsxttd}tdd}t|dd}t|dd}tjt||dd}|tj it dt ||j dj ddS) Nrrdrer Frfrrh)rFrGrVrjrktest_tbrrr4rprirIrrSrrHrnrMrrrrr test_lookup_liness   z(TestTracebackException.test_lookup_linescCsptdttd}tdd}t|tddd}t|dd}tjt||dd }| |j d j d d ddS) Nrdrrer-string)r{rr Tr|rr~z'string' rFrirIrVrjrkrrrr4rrLrrrr rs  z"TestTracebackException.test_localscCsdtdttd}tdd}t|tddi}t|dd}tt||}| |j dj ddS)Nrdrrer{r-r rrrrrr rs  z%TestTracebackException.test_no_localscCs,tttdd}|t|dgdS)NZhavenzException: haven )rrrVr4rYrq)rrrrr test_traceback_header%sz,TestTracebackException.test_traceback_headerN)r[r\r]rrrrrrrrrrrrrrrrrr rLs  %    rc@seZdZddZdS)MiscTestcCsdt}dh}ttD]<}|ds||vr,qtt|}t|dddkr||q|tj|dS)N print_listrr\r)setdirrrgetattrrZassertCountEqual__all__)rrZ blacklistnameZ module_objectrrr test_all.s   zMiscTest.test_allN)r[r\r]rrrrr r,srr_),r; collectionsriorrFrOrrtestrZ test.supportrrrrr r Ztest.support.script_helperr rrrjrkrZTestCaserrrrr%escaperrrrrr<rCrXrrr[mainrrrr sN     g=Gx)%`a