o
    HXh1                     @   s  d Z ddlmZ ddlmZ ddlZddlZddlZddlZddl	Z	ddl
mZ ddlmZmZmZmZ ddlmZmZ ddlmZ ddlZddlZed	d
dgZedg dZedg dZG dd dejZG dd dejZdZdZe	 de	!ee	!ef Z"G dd dZ#G dd de#ejZ$G dd de#ejZ%G dd dejZ&G dd  d ejZ'G d!d" d"ejZ(G d#d$ d$ejZ)G d%d& d&ejZ*G d'd( d(ejZ+e,d)kre-  dS dS )*zTest cases for traceback module    )
namedtuple)StringION)support)Errorcaptured_outputcpython_only	ALWAYS_EQ)TESTFNunlink)assert_python_okcodeco_filenameco_nameframe)f_code	f_globalsf_localstb)tb_frame	tb_linenotb_nextc                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+S ),TracebackCasesc              
   C   sB   z|  W td |y  } zt ||W  Y d }~S d }~ww )Nzcall did not raise exception)	tracebackformat_exception_only
ValueError)selffuncexcvalue r   =/opt/python-3.10.19/usr/lib/python3.10/test/test_traceback.pyget_exception_format   s   z#TracebackCases.get_exception_formatc                 C      t ddd d S )Nzdef fact(x):
	return x!
?execcompiler   r   r   r    syntax_error_with_caret$      z&TracebackCases.syntax_error_with_caretc                 C   r"   )Nz1 +
r#   r$   r%   r'   r   r   r    syntax_error_with_caret_2'   r)   z(TracebackCases.syntax_error_with_caret_2c                 C   r"   )Nzf(x, y for y in range(30), z)r#   r$   r%   r'   r   r   r    syntax_error_with_caret_range*   r)   z,TracebackCases.syntax_error_with_caret_rangec                 C   r"   )Nz def spam():
  print(1)
 print(2)r#   r$   r%   r'   r   r   r    syntax_error_bad_indentation-   r)   z+TracebackCases.syntax_error_bad_indentationc                 C   r"   )Nu   Python = "Ṕýţĥòñ" +r#   r$   r%   r'   r   r   r    !syntax_error_with_caret_non_ascii0   r)   z0TracebackCases.syntax_error_with_caret_non_asciic                 C   r"   )Nz	 print(2)r#   r$   r%   r'   r   r   r    syntax_error_bad_indentation23   r)   z,TracebackCases.syntax_error_bad_indentation2c                 C   r"   )Nz
blech  (  r#   r$   r%   r'   r   r   r     tokenizer_error_with_caret_range6   r)   z/TracebackCases.tokenizer_error_with_caret_rangec                 C   s2  |  | jt}| t|d | |d  dk | d|d  | |d d|d d | |d 	dd |  | j
t}| d|d  | |d 	dd | |d dd |d d | |d 	dd |  | jt}| d|d  | |d 	dd | |d dd |d d | |d 	dd |  | jt}| d|d  | |d 	dd | |d d	|d d | |d 	dtd
 |  | jt}| d|d  | |d 	dd | |d d|d d | |d 	dd d S )N      z	return x!^   !
+yzy for y in range(30)()r!   r(   SyntaxErrorassertEquallen
assertTruestripassertInfindcountr*   r-   r+   r/   r   errr   r   r    
test_caret9   sH    $$  zTracebackCases.test_caretc                 C   s>   t dd}tt |}| t|d | |d  d d S )Nerror)zx.py   N
bad syntax   r1   rF   )r9   r   r   r:   r;   r=   )r   r   rB   r   r   r    test_nocaret^   s   
zTracebackCases.test_nocaretc                 C   s   |  | jt}| t|d | |d  d | d|d  | |d dd |d d |  | jt}| t|d | |d  d d S )Nr0   r1   zprint(2)r2   r3   )rG   )	r!   r,   IndentationErrorr:   r;   r=   r>   r?   r.   rA   r   r   r    test_bad_indentationd   s   $z#TracebackCases.test_bad_indentationc                 C   s&   t  }t|j|}| |dg d S )NzKeyboardInterrupt
)KeyboardInterruptr   r   	__class__r:   )r   eZlstr   r   r    test_base_exceptionr   s   z"TracebackCases.test_base_exceptionc                 C   sx   G dd dt }t|| }| t|d d|j }|jdv r%|j}n	d|j|jg}| |d d||f  d S )	Nc                   @      e Zd Zdd ZdS )z?TracebackCases.test_format_exception_only_bad__str__.<locals>.Xc                 S      dd  d S Nr1   r   r   r'   r   r   r    __str__z      zGTracebackCases.test_format_exception_only_bad__str__.<locals>.X.__str__N__name__
__module____qualname__rS   r   r   r   r    Xy       rY   r1   z<unprintable %s object>)__main__builtins.r   %s: %s
)		Exceptionr   r   r:   r;   rV   rW   rX   join)r   rY   rB   	str_valuestr_namer   r   r    %test_format_exception_only_bad__str__x   s   

z4TracebackCases.test_format_exception_only_bad__str__c                    s   dd l dd ljjddgjjd}| \}}t|d d   fdd}|dd	dd
 dD ]0}|dkr@d	}n	|dkrGd}nd}|d	|||d |d	|||d |d	|||d q7|dddd d S )Nr   -cz&import sys; print(sys.stdout.encoding)stdoutstderrasciic                    s  z@t td|d}|d| | W d    n1 sw   Y  jjtgjjd}| \}}|	 
 }W tt ntt w | d}|	 }	d|	}
d|	}d| |d	 d
|d	 | |d |
d|d |
 |d |kd|d | d S )Nw)encodingz}{0}if 1:
                        import traceback;
                        raise RuntimeError('{1}')
                        re   backslashreplacezraise RuntimeError('{0}')zRuntimeError: {0}zline %sr1   z)Invalid line number: {0!r} instead of {1}r3   z.Invalid traceback line: {0!r} instead of {1!r}rG   z-Invalid error message: {0!r} instead of {1!r})openr	   writeformatPopen
executablePIPESTDOUTcommunicatedecode
splitlinesr
   encoder>   r<   endswith)Z
firstlinesmessagecharsetlinenooutputprocessrf   rg   Zencoded_messageZmessage_asciiZerr_lineerr_msgZoutput_encodingr   
subprocesssysr   r    do_test   sB   


z1TracebackCases.test_encoded_file.<locals>.do_test foorG   )rh   z
iso-8859-1utf-8GBKr   u   丂儀u   hé hoz# coding: {0}
r0   z#!shebang
# coding: {0}
   z 	
# coding: {0}
zx=0
# coding: GBK
r   )
r   r   ro   rp   rq   rr   rs   strru   rn   )r   r|   rf   rg   r   ry   textr   r~   r    test_encoded_file   s6   
#


z TracebackCases.test_encoded_filec                 C   s6   t d}td|\}}}g d}| | | d S )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()
        rd   )s"   Traceback (most recent call last):s&     File "<string>", line 8, in __init__s#   ZeroDivisionError: division by zero)textwrapdedentr   r:   ru   )r   r   rcrf   rg   expectedr   r   r    test_print_traceback_at_exit   s   
z+TracebackCases.test_print_traceback_at_exitc                 C   s0   t  }tjttdd |d | | d d S N	projectorfileException: projector
r   r   print_exceptionr_   r:   getvaluer   r{   r   r   r    test_print_exception   s
   z#TracebackCases.test_print_exceptionc                 C   s,   t  }tjtd|d | | d d S r   r   r   r   r   r    test_print_exception_exc   s   z'TracebackCases.test_print_exception_excc                 C   s   t d}t|}| |dg | td t|j| W d    n1 s(w   Y  | td tj|j|jd W d    n1 sGw   Y  | td tj|d W d    d S 1 sdw   Y  d S )Nr   r   zBoth or neitherr   zpositional-only)r   )	r_   r   format_exceptionr:   ZassertRaisesRegexr   rM   __traceback__	TypeError)r   rN   r{   r   r   r    test_format_exception_exc   s   
"z(TracebackCases.test_format_exception_excc                 C   s    t td}| |dg d S )Nr   r   )r   r   r_   r:   r   r   r   r    test_format_exception_only_exc      z-TracebackCases.test_format_exception_only_excc                 C   s   d}t  }tjd |d | | | t  }tjd d d |d | | | t  }tjd |d | | | | td | | td |g | td d d |g | td |g | td d |g d S )NzNoneType: None
r   )	r   r   r   r:   r   	print_exc
format_excr   r   )r   ZNONE_EXC_STRINGexcfiler   r   r    test_exception_is_None  s*   z%TracebackCases.test_exception_is_Nonec                 C   sL   |  tttjd |  tttjd |  tttjd d S )NzL(exc, /, value=<implicit>, tb=<implicit>, limit=None, file=None, chain=True)zA(exc, /, value=<implicit>, tb=<implicit>, limit=None, chain=True)z(exc, /, value=<implicit>))r:   r   inspectZ	signaturer   r   r   r   r'   r   r   r    test_signatures  s   zTracebackCases.test_signaturesN)rV   rW   rX   r!   r(   r*   r+   r,   r-   r.   r/   rC   rH   rK   rO   rc   r   r   r   r   r   r   r   r   r   r   r   r    r      s,    %Dr   c                   @   sr   e Zd Zdd ZedddZdd Zdd	 Zd
d Zdd Z	dd Z
dd Zedd Zdd Zedd ZdS )TracebackFormatTestsc                 C      t d)NZblah)KeyErrorr'   r   r   r    some_exception,     z#TracebackFormatTests.some_exceptionNc                 C   s  ddl m} z	|   W td ty   t \}}}|d ur&||j ddt	| }t
 }||| | }td}	t| W d    n1 sPw   Y  t
 }
tj||
d td}t  W d    n1 srw   Y  t }t
 }tj|d Y nw | || | |	 |
  | | |  | ||  | }| t|d |d }|d	d  \}}| |d
 | |d | |d d S )Nr   )traceback_printz#Traceback (most recent call last):
r   rg   r   z&unable to create test traceback stringr   	Traceback  Filez	    raise)	_testcapir   r   r   r   exc_infor   r`   r   	format_tbr   r   r   print_tbr   r   r   r:   ru   r;   r<   
startswith)r   Zcleanup_funcr   type_r   r   Ztraceback_fmtZfile_Z
python_fmtZtbstderrZtbfileZ	excstderrZexcfmtr   Ztb_linesZbannerlocationZsource_liner   r   r    check_traceback_format/  sJ   





z+TracebackFormatTests.check_traceback_formatc                 C      |    d S Nr   r'   r   r   r    test_traceback_format\  rT   z*TracebackFormatTests.test_traceback_formatc                 C   s   dd }|  | d S )Nc                 S   s   | j   d S r   )r   clearr   r   r   r    
cleanup_tba     zRTracebackFormatTests.test_traceback_format_with_cleared_frames.<locals>.cleanup_tbr   )r   r   r   r   r    )test_traceback_format_with_cleared_frames_  s   z>TracebackFormatTests.test_traceback_format_with_cleared_framesc                 C   s   t d}ttd W d    n1 sw   Y  t }tjtd|d | | |  ttd}| | d	| d S )Nrg   r1   r   r   )
r   r   print_stackr   	_getframer   r:   r   format_stackr`   )r   ZststderrZstfileZstfmtr   r   r    test_stack_formate  s   
z&TracebackFormatTests.test_stack_formatc              	   C   s~   dd }t d}|  W d    n1 sw   Y  |jj}| |  dd  dt|d f ddt|d	 f d
g d S )Nc                   S   s   t   d S r   )r   r   r   r   r   r    prns  rT   z2TracebackFormatTests.test_print_stack.<locals>.prnrg   z)  File "%s", line %d, in test_print_stackrG   z	    prn()z  File "%s", line %d, in prnr1   z    traceback.print_stack())r   __code__co_firstlinenor:   r   ru   __file__)r   r   rg   rz   r   r   r    test_print_stackr  s   

z%TracebackFormatTests.test_print_stackc                    s  d | _  fdd td}z   W n ty   |  Y nw | d W d    n1 s/w   Y   jj}dt d|d  dt d|d	  d
t d|d	  d
t d|d	  d}| }|  }| 	|d d |d d  | 
|d |d  | |d |d  t }| ttd|d  t|d | d(fdd	td}z  W n ty   |  Y nw | d W d    n1 sw   Y  jj}	dt d|	d  dt d|	d  dt d|	d  dt d|	d  d}
dt d|	d  d}||
  }|  }| 	|| d(fdd	td }z  W n ty5   |  Y nw | d W d    n	1 sFw   Y  jj}dt d|d  dt d|d  dt d|d  dt d|d  d t d|d  d!}||
  }|  }| 	|| td"}ztj W n ty   |  Y nw | d" W d    n	1 sw   Y  dt d|	d  dt d|	d  dt d|	d  dt d|	d  d}
dt d|	d#  d$}||
  }|  }| 	|| td$}z	tjd	  W n ty   |  Y nw | d" W d    n	1 s'w   Y  dt d|	d  dt d|	d  dt d|	d  d%t d|	d  d}
dt d|	d&  d'}||
  }|  }| 	|| d S ))Nc                      
      d S r   r   r   fr   r    r        
zBTracebackFormatTests._check_recursive_traceback_display.<locals>.frg   zno recursion occurredz+Traceback (most recent call last):
  File "z", line r   z8, in _check_recursive_traceback_display
    f()
  File "r1   z, in f
    f()
  File "zn, in f
    f()
  \[Previous line repeated (\d+) more times\]
RecursionError: maximum recursion depth exceeded
r   z\d+<   
   c                    s   | r | d S t Nr1   r   r@   )gr   r    r     s   zBTracebackFormatTests._check_recursive_traceback_display.<locals>.gzno value error was raisedz  File "r3   z%, in g
    return g(count-1)
  File "zM, in g
    return g(count-1)
  [Previous line repeated 7 more times]
  File "rG   z', in g
    raise ValueError
ValueError
   z0, in _check_recursive_traceback_display
    g()
c                    s   | r| d S    d S r   r   r   )r   hr   r    r     s   
zBTracebackFormatTests._check_recursive_traceback_display.<locals>.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()
zno error raisedG   zK, in _check_recursive_traceback_display
    g(traceback._RECURSIVE_CUTOFF)
zL, in g
    return g(count-1)
  [Previous line repeated 1 more time]
  File "c   zO, in _check_recursive_traceback_display
    g(traceback._RECURSIVE_CUTOFF + 1)
)r   )ZmaxDiffr   RecursionErrorfailr   r   r   ru   r   r:   ZassertRegexr>   r   getrecursionlimitintresearchgroupranger   r   _RECURSIVE_CUTOFF)r   
render_excstderr_fZlineno_fZresult_fr   actualZ	rec_limitZstderr_gZlineno_gZresult_gZtb_lineZstderr_hZlineno_hZresult_hr   )r   r   r   r    "_check_recursive_traceback_display  sV  



*















z7TracebackFormatTests._check_recursive_traceback_displayc                 C   s   |  tj d S r   )r   r   r   r'   r   r   r    test_recursive_traceback_python1  r)   z4TracebackFormatTests.test_recursive_traceback_pythonc                    s&   ddl m   fdd}| | d S )Nr   exception_printc                     s   t  \} }} | d S r   )r   r   )exc_type	exc_valueexc_tbr   r   r    r   7  s   zRTracebackFormatTests.test_recursive_traceback_cpython_internal.<locals>.render_exc)r   r   r   )r   r   r   r   r    )test_recursive_traceback_cpython_internal4  s   z>TracebackFormatTests.test_recursive_traceback_cpython_internalc                 C   sJ   dd }| }|j j}| |dd  dt|d f dt|d f g d S )Nc                   S      t  S r   )r   r   r   r   r   r    fmt=  r   z3TracebackFormatTests.test_format_stack.<locals>.fmtr   z>  File "%s", line %d, in test_format_stack
    result = fmt()
r3   zA  File "%s", line %d, in fmt
    return traceback.format_stack()
r1   )r   r   r:   r   )r   r   resultrz   r   r   r    test_format_stack<  s   


z&TracebackFormatTests.test_format_stackc           
      C   s   ddl m} G dd dt}|d}|d}z|| |y5   z| |y2   t \}}}Y nw Y nw td}|| W d    n1 sIw   Y  |   }	| 	dt
|	 | 	t |	d	  | d
|	d  | d|	d  d S )Nr   r   c                   @   rP   )zATracebackFormatTests.test_unhashable.<locals>.UnhashableExceptionc                 S      dS NTr   r   otherr   r   r    __eq__M     zHTracebackFormatTests.test_unhashable.<locals>.UnhashableException.__eq__NrV   rW   rX   r   r   r   r   r    UnhashableExceptionL  rZ   r   ex1ex2rg      r   zUnhashableException: ex2rG   zUnhashableException: ex1r   )r   r   r_   r   r   r   r   r=   ru   r:   r;   context_messager>   )
r   r   r   r   r   r   exc_valr   r   r   r   r   r    test_unhashableH  s,   

z$TracebackFormatTests.test_unhashabler   )rV   rW   rX   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   *  s     , 2
r   zG
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                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS ) BaseExceptionReportingTestsc              
   C   sD   t |tr|S z|  W d S  ty! } z|W  Y d }~S d }~ww r   )
isinstancer_   )r   Zexception_or_callablerN   r   r   r    get_exceptionr  s   
z)BaseExceptionReportingTests.get_exceptionc                 C   rQ   rR   r   r'   r   r   r    zero_divz  rT   z$BaseExceptionReportingTests.zero_divc                 C   sJ   |  }| |d d | d|d  | |d d|d  d S )Nr   z1/0 # In zero_divr   r   ZeroDivisionError)ru   r<   r   r>   )r   msglinesr   r   r    check_zero_div}  s   z*BaseExceptionReportingTests.check_zero_divc              
   C   s   zdd  W n t y } z|}W Y d }~nd }~ww | | }| t|d | |d d | |d d | d|d  | |d d	 d S )
Nr1   r   r0   r   r   z1/0 # Markerr3   rG   r  )r  
get_reportru   r:   r;   r<   r   r>   r   _rN   r  r   r   r    test_simple  s   z'BaseExceptionReportingTests.test_simplec                    j   fdd  fdd}t |}t|d |d t |d  d|d	  d S )
Nc               
      s.   z    W d S  ty }  zt| d } ~ ww r   r  r  r   )rN   r'   r   r    inner_raise  s   z;BaseExceptionReportingTests.test_cause.<locals>.inner_raisec                      r   r   r   r   r  r   r    outer_raise  r   z;BaseExceptionReportingTests.test_cause.<locals>.outer_raiserG   r1   r   inner_raise() # Markerr3   
boundariessplitr  r:   r;   cause_messager  r>   r   r  Zblocksr   r  r   r    
test_cause     z&BaseExceptionReportingTests.test_causec                    r  )
Nc                      s"   z    W d S  ty   tw r   r  r   r'   r   r    r    s
   z=BaseExceptionReportingTests.test_context.<locals>.inner_raisec                      r   r   r   r   r  r   r    r    r   z=BaseExceptionReportingTests.test_context.<locals>.outer_raiserG   r1   r   r  r3   )r  r  r  r:   r;   r   r  r>   r  r   r  r    test_context  r  z(BaseExceptionReportingTests.test_contextc              
   C   s   z	zt    td  ty } z|}W Y d }~nd }~ww | | }| t|d | |d d | |d d | d|d  | |d d	 d S )
Nr0   r   r   r1   r   zZeroDivisionError from Noner3   rG   r  )	r_   r  r  ru   r:   r;   r<   r   r>   r	  r   r   r    test_context_suppression  s   z4BaseExceptionReportingTests.test_context_suppressionc                    r  )
Nc               
      sV   z    W n ty }  z| }W Y d } ~ nd } ~ ww zt W d S  ty*   t|w r   )r  r  Zxyzzy	NameErrorr   )_erN   r'   r   r    r    s   
zGBaseExceptionReportingTests.test_cause_and_context.<locals>.inner_raisec                      r   r   r   r   r  r   r    r    r   zGBaseExceptionReportingTests.test_cause_and_context.<locals>.outer_raiserG   r1   r   r  r3   r  r  r   r  r    test_cause_and_context  s   	z2BaseExceptionReportingTests.test_cause_and_contextc                    s   fdd  fdd}t |}t|d |d t d|d  d	|d  d
|d  |d  d S )Nc               
      sT   zz    W W d S  ty }  z| }t| d } ~ ww  ty) }  z|| d } ~ ww r   r  )rN   zr'   r   r    r    s   zEBaseExceptionReportingTests.test_cause_recursive.<locals>.inner_raisec                      r   r   r   r   r  r   r    r    r   zEBaseExceptionReportingTests.test_cause_recursive.<locals>.outer_raiserG   r1   zraise KeyError from er   z1/0r  r3   )	r  r  r  r:   r;   r  r>   ZassertNotInr  r  r   r  r    test_cause_recursive  s   	z0BaseExceptionReportingTests.test_cause_recursivec                 C   sP   dd }|  | }| |d d dd }|  | }| |d d d S )Nc                   S   s
   t dd)Nr   )r   r   r   Zhello)r9   r   r   r   r    rN     r   zFBaseExceptionReportingTests.test_syntax_error_offset_at_eol.<locals>.er   z	        ^c                   S   s   t d d S )Nzx = 5 | 4 |)r$   r   r   r   r    rN     rT   z               ^)r  ru   r:   r   rN   r  r   r   r    test_syntax_error_offset_at_eol  s   z;BaseExceptionReportingTests.test_syntax_error_offset_at_eolc                 C   s   t d}| | }| |dg d|_| | }| |ddg t d}d|_| | }| |dg d|_| | }| |ddg d S )NrF   zSyntaxError: bad syntaxd   z  File "<string>", line 100z	myfile.pyz#SyntaxError: bad syntax (myfile.py)z  File "myfile.py", line 100)r9   r  ru   r:   rz   filenamer!  r   r   r    test_syntax_error_no_lineno  s*   z7BaseExceptionReportingTests.test_syntax_error_no_linenoc                 C   sj   |  td }| d| |  td}| d| |  t }| d| |  td}| d| d S )NzException: None
Nonez
Exception
r   )r  r_   r>   rA   r   r   r    test_message_none	  s   z-BaseExceptionReportingTests.test_message_nonec                 C   s@   G dd dt }d|_| | }d|j d}| || d S )Nc                   @   rP   )zLBaseExceptionReportingTests.test_exception_modulename_not_unicode.<locals>.Xc                 S   r   NI am Xr   r'   r   r   r    rS     r   zTBaseExceptionReportingTests.test_exception_modulename_not_unicode.<locals>.X.__str__NrU   r   r   r   r    rY     rZ   rY   *   z
<unknown>.z	: I am X
)r_   rW   r  rX   r:   )r   rY   rB   expr   r   r    %test_exception_modulename_not_unicode  s
   zABaseExceptionReportingTests.test_exception_modulename_not_unicodec              
   C   s   t ddD ]l}dD ]g}d| d|  }dg}|dk r$|d|   n)|d	kr=|d|   |d
d|d    n|d|   |d
d  |d |d | tddd|| |f}d|}| || q	qd S )Nr   )r   r3    ztext%dz  File "file.py", line 1r1   z    %s   z    %s^z     zSyntaxError: msgr   r  zfile.pyr5   )r   appendlstripr  r9   r`   r:   )r   offsetaddr   r   rB   r+  r   r   r    !test_syntax_error_various_offsets  s$   


z=BaseExceptionReportingTests.test_syntax_error_various_offsetsc                 C   sX   G dd d}|  |j }d}d|jjj|jjjg}d||f }| || d S )Nc                   @   s   e Zd ZG dd dZdS )zJBaseExceptionReportingTests.test_format_exception_only_qualname.<locals>.Ac                   @   s   e Zd ZG dd deZdS )zLBaseExceptionReportingTests.test_format_exception_only_qualname.<locals>.A.Bc                   @   rP   )zNBaseExceptionReportingTests.test_format_exception_only_qualname.<locals>.A.B.Xc                 S   r   r(  r   r'   r   r   r    rS   6  r   zVBaseExceptionReportingTests.test_format_exception_only_qualname.<locals>.A.B.X.__str__NrU   r   r   r   r    rY   5  s    rY   N)rV   rW   rX   r_   rY   r   r   r   r    B4  s    r5  N)rV   rW   rX   r5  r   r   r   r    A3  s    r6  r)  r]   r^   )r  r5  rY   r`   rW   rX   r:   )r   r6  rB   ra   rb   r+  r   r   r    #test_format_exception_only_qualname2  s   z?BaseExceptionReportingTests.test_format_exception_only_qualnameN)rV   rW   rX   r  r  r  r  r  r  r  r  r   r"  r%  r'  r,  r4  r7  r   r   r   r    r   p  s     r   c                   @   rP   )PyExcReportingTestsc                 C   st   |  |}dtt|||j}td}tt|||j W d    n1 s+w   Y  | |	 | |S )Nr   rg   )
r  r`   r   r   typer   r   r   r:   r   )r   rN   ssior   r   r    r  F  s   

zPyExcReportingTests.get_reportN)rV   rW   rX   r  r   r   r   r    r8  @  s    r8  c                   @   s   e Zd Zedd ZdS )CExcReportingTestsc                 C   sT   ddl m} | |}td}|| W d    | S 1 s!w   Y  | S )Nr   r   rg   )r   r   r  r   r   )r   rN   r   r:  r   r   r    r  U  s   



zCExcReportingTests.get_reportN)rV   rW   rX   r   r  r   r   r   r    r<  P  s    r<  c                   @   sx   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )
LimitTestsze Tests for limit argument.
        It's enough to test extact_tb, extract_stack and format_exception c                 C   r   )NzLast raised)r_   r'   r   r   r    last_raises1c  r   zLimitTests.last_raises1c                 C   r   r   )r>  r'   r   r   r    last_raises2f  rT   zLimitTests.last_raises2c                 C   r   r   )r?  r'   r   r   r    last_raises3i  rT   zLimitTests.last_raises3c                 C   r   r   )r@  r'   r   r   r    last_raises4l  rT   zLimitTests.last_raises4c                 C   r   r   )rA  r'   r   r   r    last_raises5o  rT   zLimitTests.last_raises5c                 C   r   r   )r   r   r'   r   r   r    last_returns_frame1r  r   zLimitTests.last_returns_frame1c                 C      |   S r   )rC  r'   r   r   r    last_returns_frame2u  r   zLimitTests.last_returns_frame2c                 C   rD  r   )rE  r'   r   r   r    last_returns_frame3x  r   zLimitTests.last_returns_frame3c                 C   rD  r   )rF  r'   r   r   r    last_returns_frame4{  r   zLimitTests.last_returns_frame4c                 C   rD  r   )rG  r'   r   r   r    last_returns_frame5~  r   zLimitTests.last_returns_frame5c                    sz      fdd}fdd}ttdd | }t|d |dd	|d
d   ||dd	|dd  d |d
d	|d d  ||dd	|d d t|d d  |dd	g  t`|| |d dt_| |d
d   |dd	|dd   |dd	|d d  dt_| g  dt_| g  W d    d S 1 sw   Y  d S )Nc                        t j fi | S r   r   extract_stackkwargs)r   r   r    extract     z.LimitTests.test_extract_stack.<locals>.extractc                    sX     | d | |d |    | |d d  ||d d     t| t| d S r   )r:   r;   )r   r   ignorer'   r   r    assertEqualExcept  s   $z8LimitTests.test_extract_stack.<locals>.assertEqualExcepttracebacklimit  r   r3   limitr   r#  iir1   r   rG   r  r   )rH  r   	swap_attrr   assertGreaterr;   r:   rR  )r   rN  rQ  nolimr   )r   r   r    test_extract_stack  s,   &"zLimitTests.test_extract_stackc                    sx  z|    W n ty   t \}} Y nw  fdd}ttdd | }| t|d | |dd|d d  | |dd| | |d	d|d	d   | |d
d| | |ddg  t`| | | dt_| | |d d  | |dd|d d  | |dd|dd   dt_| | g  dt_| | g  W d    d S 1 sw   Y  d S )Nc                     rI  r   )r   
extract_tbrL  r   r   r    rN    rO  z+LimitTests.test_extract_tb.<locals>.extractrR  rS  r/  r3   rT  r   r   r   rG   r  r   	rB  r_   r   r   r   rV  r:   r;   rR  )r   r   r   rN  rX  r   r   r    test_extract_tb  s2   "zLimitTests.test_extract_tbc                    s|  z|    W n ty   t \ Y nw  fdd}ttdd | }| t|d | |dd|d d  | |dd| | |d	d|d	d   | |d
d| | |ddg  t`| | | dt_| | |d d  | |dd|d d  | |dd|dd   dt_| | g  dt_| | g  W d    d S 1 sw   Y  d S )Nc                     s   t j fi | dd S )Nr1   r   )r   r   rL  r   r   r   r   r    rN    s   z1LimitTests.test_format_exception.<locals>.extractrR  rS  r/  r3   rT  r   r   r[  r   rG   r  r   r\  )r   rN  rX  r   r^  r    test_format_exception  s2   "z LimitTests.test_format_exceptionN)rV   rW   rX   __doc__r>  r?  r@  rA  rB  rC  rE  rF  rG  rH  rY  r]  r_  r   r   r   r    r=  ^  s    r=  c                   @   s   e Zd Zdd Zdd ZdS )MiscTracebackCasesc                    s   fdd} fdddd  z|  W n   t  \}}}Y |jjjj}| t|jd t| | t|jd d S )	Nc                      r   r   r   r   )middler   r    outer  r   z,MiscTracebackCases.test_clear.<locals>.outerc                      r   r   r   r   )innerr   r    rb    r   z-MiscTracebackCases.test_clear.<locals>.middlec                  S   s   d} dd  d S rR   r   )ir   r   r    rd    s   z,MiscTracebackCases.test_clear.<locals>.innerr1   r   )	r   r   r   r   r:   r;   r   r   clear_frames)r   rc  r   r   r   Zinner_framer   )rd  rb  r    
test_clear  s   

zMiscTracebackCases.test_clearc                 C   s^   dd }| }|j j}| |dd  t|d ddft|d dd	fg | t|d
 d d S )Nc                   S   r   r   rJ  r   r   r   r    rN    r   z6MiscTracebackCases.test_extract_stack.<locals>.extractr   r3   rY  zresult = extract()r1   rN  z return traceback.extract_stack()r   r0   )r   r   r:   r   r;   )r   rN  r   rz   r   r   r    rY    s   z%MiscTracebackCases.test_extract_stackN)rV   rW   rX   rg  rY  r   r   r   r    ra    s    ra  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )	TestFramec                 C   s   t   t dt  tddd}| |d | t|d | |tddd | |t| | t|| | |j	 | 
|t  | |t d S )Nr   r1   dummy)r   r1   ri  %"""Test cases for traceback module""")	linecache
clearcache	lazycacheglobalsr   FrameSummaryr:   tupleZassertIsNonelocalsassertNotEqualobjectr   r   r   r   r   r    test_basics  s   
zTestFrame.test_basicsc                 C   sH   t   tjddddd}| d |j t dt  | d|j d S )Nr   r1   ri  F)lookup_linerj  )	rk  rl  r   ro  r:   _linerm  rn  linert  r   r   r    test_lazy_lines  s   zTestFrame.test_lazy_linesc                 C   s    t dd d}| |jd  d S )Nr   ri  r   ro  r:   rx  rt  r   r   r    test_no_line  r   zTestFrame.test_no_linec                 C   s$   t jddddd}| d|j d S )Nr   r1   ri  rx  rx  rz  rt  r   r   r    test_explicit_line     zTestFrame.test_explicit_linec                 C   s&   t jddddd}| t|d d S )Nr   r1   ri  rx  r|  r0   )r   ro  r:   r;   rt  r   r   r    test_len#  s   zTestFrame.test_lenN)rV   rW   rX   ru  ry  r{  r}  r  r   r   r   r    rh    s    	rh  c                   @   sl   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )	TestStackc                 C   sL   dd }t td }| }| t|t| d | |dd  | d S )Nc                   S   s   t td S r   )listr   
walk_stackr   r   r   r    deeper+  r   z)TestStack.test_walk_stack.<locals>.deeperr1   )r  r   r  r:   r;   )r   r  s1s2r   r   r    test_walk_stack*  s
   zTestStack.test_walk_stackc                 C   sP   zdd  W n t y   t \}}}Y nw tt|}| t|d d S rR   )r_   r   r   r  r   walk_tbr:   r;   )r   r
  r   r:  r   r   r    test_walk_tb2  s   zTestStack.test_walk_tbc                 C   s$   t jt d }| |t j d S r   )r   StackSummaryrN  r  ZassertIsInstancer   r:  r   r   r    rY  :  r~  zTestStack.test_extract_stackc                 C   s*   t jjt d dd}| t|d d S )Nr   rT  )r   r  rN  r  r:   r;   r  r   r   r    test_extract_stack_limit>  s   z"TestStack.test_extract_stack_limitc                 C   sd   t   t dt  tdd}t|d d }tjjt	|dfgdd}t   | 
|d jd d S )N/foo.pymethodr/  Tlookup_linesr   
import sys)rk  rl  updatecachern  	test_code
test_framer   r  rN  iterr:   rx  r   cr   r:  r   r   r    test_extract_stack_lookup_linesB  s   
z)TestStack.test_extract_stack_lookup_linesc                 C   sj   t   tdd}t|d d }tjjt|dfgdd}| i t j	 t 
dt  | |d jd d S )Nr  r  r/  Fr  r   r  )rk  rl  r  r  r   r  rN  r  r:   cacher  rn  rx  r  r   r   r    *test_extract_stackup_deferred_lookup_linesK  s   
z4TestStack.test_extract_stackup_deferred_lookup_linesc                 C   $   t jdg}| dg|  d S Nfoo.pyr1   fredrx  z*  File "foo.py", line 1, in fred
    line
r   r  	from_listr:   rn   r  r   r   r    test_from_listT  s
   zTestStack.test_from_listc                 C   s8   t jdg}d|d< t j|}| dg|  d S )Nr  )r  r3   r  rx  r   z*  File "foo.py", line 2, in fred
    line
r  )r   r:  r  r   r   r    test_from_list_edited_stackZ  s   z%TestStack.test_from_list_edited_stackc                 C   r  r  r  r  r   r   r    test_format_smokeb  s
   zTestStack.test_format_smokec                 C   s^   t dt  tdd}t|t ddi}tjjt|dfgdd}| 	|d j
dd	i d S )
Nr  r  	somethingr1   r/  Tcapture_localsr   1rk  r  rn  r  r  r   r  rN  r  r:   rq  r  r   r   r    test_localsj  s
   
zTestStack.test_localsc                 C   sV   t dt  tdd}t|t ddi}tjt|dfg}| 	|d j
d  d S )Nr  r  r  r1   r/  r   r  r  r   r   r    test_no_localsq  s
   
zTestStack.test_no_localsc                 C   s8   dd }|dd}|  dt|jjd f g|  d S )Nc                 S   s    d}d}t jjt d dddS )Nr1   r3   T)r  rU  )r   r  rN  r  )kvabr   r   r    
some_innery  s
   z0TestStack.test_format_locals.<locals>.some_innerrG   r0   zw  File "%s", line %d, in some_inner
    return traceback.StackSummary.extract(
    a = 1
    b = 2
    k = 3
    v = 4
)r:   r   r   r   rn   )r   r  r:  r   r   r    test_format_localsx  s   
zTestStack.test_format_localsN)rV   rW   rX   r  r  rY  r  r  r  r  r  r  r  r  r  r   r   r   r    r  (  s    		r  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#S )$TestTracebackExceptionc              	   C   s   zdd  W n t y#   t }tj| }tjt|d }Y nw | d |j	 | d |j
 | d|j | ||j | |d |j | t|d t| d S )Nr1   r   r3   Fr_   r   r   r   TracebackExceptionr  rN  r  r:   	__cause____context____suppress_context__stackr   r   r   r   r   expected_stackr   r   r    
test_smoke  s   
z!TestTracebackException.test_smokec              
   C   s   dd }z|  W n1 t y: } z%t }tjjt|d dddd| _tjj	|dddd| _
W Y d }~nd }~ww | j}| j
}| d |j | d |j | d|j | ||j | |d |j | t|d t| d S )	Nc                   S   rQ   rR   r   r   r   r   r    r     rT   z7TestTracebackException.test_from_exception.<locals>.foor3   r1   FT)rU  r  r  r   )r_   r   r   r   r  rN  r  r  r  from_exceptionr   r:   r  r  r  r  r   r   )r   r   rN   r   r  r   r   r   r    test_from_exception  s,   
z*TestTracebackException.test_from_exceptionc              	   C   s  z*zdd  W t  }tj| }td}td|t  }tj| }td}td| tyG   t  }tj| }tjt|d }Y nw tt|d }| ||j	 | ||j
 | d|j | ||j | |d |j | t|d t| d S )Nr1   r   causeuh ohr3   Tr   r   r   r  r_   r  rN  r  r:   r  r  r  r  r   r   )r   exc_info_contextexc_contextr  r   r   r  	exc_causer   r   r    r    s2   





z!TestTracebackException.test_causec              	   C   s   z zdd  W t  }tj| }tdt  }tj| }td ty=   t  }tj| }tjt|d }Y nw | d |j	 | ||j
 | d|j | ||j | |d |j | t|d t| d S )Nr1   r   r  r3   Fr  r   r  r  r   r   r  r   r   r    r    s,   



z#TestTracebackException.test_contextc                    s    fdd z   W n t y   t }Y nw | d tj| }t| }| t	|t
  | t	dd |D t
 d  | d|d  d S )	Nc                      s"   zdd  W d S       Y d S rR   r   r   r   r   r    r     s   z9TestTracebackException.test_long_context_chain.<locals>.fzException not raisedc                 S   s   g | ]}d |v r|qS )zZeroDivisionError:r   ).0lr   r   r    
<listcomp>  s    zBTestTracebackException.test_long_context_chain.<locals>.<listcomp>g      ?z0RecursionError: maximum recursion depth exceededr   )r   r   r   r   r   r  r  rn   rW  r;   r   r>   )r   r   teresr   r   r    test_long_context_chain  s"   



z.TestTracebackException.test_long_context_chainc              	   C   s   zzdd  W t d}t d|t d}t d| t y8   t }tj|ddi}tjt|d }Y nw tt |d }| ||j	 | d |j
 | d|j | ||j | |d |j | t|d t| d S )Nr1   r   r  r  compactTr3   r  )r   r  r   r   r  r  r   r   r    test_compact_with_cause  s*   


z.TestTracebackException.test_compact_with_causec              	   C   s   z zdd  W t  }tj| }tdt  }tj| }td ty@   t  }tj|ddi}tjt|d }Y nw | d |j	 | ||j
 | d|j | ||j | |d |j | t|d t| d S )Nr1   r   r  r  Tr3   Fr  r  r   r   r    test_compact_no_cause  s,   


z,TestTracebackException.test_compact_no_causec                 C   s~   zdd  W n t y   t }Y nw t|d }t|d }tj| }| t|d | | t|d | d S )Nr1   r   r3   )r_   r   r   getrefcountr   r  r:   )r   r   Zrefcnt1Zrefcnt2r   r   r   r    /test_no_refs_to_exception_and_traceback_objects  s   
zFTestTracebackException.test_no_refs_to_exception_and_traceback_objectsc                 C   sr   zdd  W n t y   t }tj| }tj| }Y nw | || | || | |t  | |t	 d S rR   )
r_   r   r   r   r  ZassertIsNotr:   rr  rs  r   )r   r   r   exc2r   r   r    test_comparison_basic&  s   
z,TestTracebackException.test_comparison_basicc                    s   dd   fdd}z|  W n t y   t }Y nw tj| }tj|ddi}tj|ddi}| || | || tj|dd	i}| || tj|dd
i}tj|d
d	d}| || tj|ddi}	tj|dd	d}
| |	|
 d S )Nc                   S   s   zt d    )Nz	bad valuer   r   r   r   r    	raise_exc3  s   zKTestTracebackException.test_comparison_params_variations.<locals>.raise_excc                     s   d\} }   d S )N)r1   r3   r   )xr7   r  r   r    raise_with_locals9  s   
zSTestTracebackException.test_comparison_params_variations.<locals>.raise_with_localsrU  r   r3   r  Tr   )rU  r  r   )r_   r   r   r   r  r:   rr  )r   r  r   r   Zexc1r  Zexc3Zexc4Zexc5Zexc6Zexc7r   r  r    !test_comparison_params_variations2  s(   

z8TestTracebackException.test_comparison_params_variationsc              	   C   sx   g }t dD ]}zdd  W q   |tjt   Y q| |d |d  | t|d  t|d   d S )Nr3   r1   r   )	r   r0  r   r  r   r   r:   r  rn   )r   Zexcsr
  r   r   r    /test_comparison_equivalent_exceptions_are_equalW  s   (zFTestTracebackException.test_comparison_equivalent_exceptions_are_equalc                 C   s   G dd dt }|d}|d}z|| |y,   z| |y)   t }Y nw Y nw tj| }t| }| d|d  | d|d  d S )	Nc                   @   rP   )zCTestTracebackException.test_unhashable.<locals>.UnhashableExceptionc                 S   r   r   r   r   r   r   r    r   c  r   zJTestTracebackException.test_unhashable.<locals>.UnhashableException.__eq__Nr   r   r   r   r    r   b  rZ   r   r   r   zUnhashableException: ex2
r3   zUnhashableException: ex1
r/  )r_   r   r   r   r  r  rn   r>   )r   r   r   r   r   r   	formattedr   r   r    r   a  s"   
z&TestTracebackException.test_unhashablec                    sp    fdd z d W n" t y.   t }tj|ddi}tjjt|d dd}Y nw | ||j	 d S )Nc                    s    | r
 | d  d S dd  d S rR   r   )nrecurser   r    r  u  s   z2TestTracebackException.test_limit.<locals>.recurser   rU  r   r3   rT  )
r_   r   r   r   r  r  rN  r  r:   r  r  r   r  r    
test_limitt  s   
z!TestTracebackException.test_limitc                 C   sx   t   td}tdd}t|d d }t|dd }tjt||dd}| t j	i  t 
dt  | |jd jd d S )	Nr  r  r  r/  Fr  r   r  )rk  rl  r_   r  r  test_tbr   r  r:   r  r  rn  r  rx  r   rN   r  r   r   r   r   r   r    test_lookup_lines  s   
z(TestTracebackException.test_lookup_linesc                 C   sp   t dt  td}tdd}t|t ddd}t|dd }tjt||dd	}| 	|j
d
 jddd d S )Nr  r  r  r1   string)r  r   r/  Tr  r   r  z'string'rk  r  rn  r_   r  r  r  r   r  r:   r  rq  r  r   r   r    r    s   
z"TestTracebackException.test_localsc                 C   sd   t dt  td}tdd}t|t ddi}t|dd }tt||}| 	|j
d jd  d S )Nr  r  r  r  r1   r/  r   r  r  r   r   r    r    s   
z%TestTracebackException.test_no_localsc                 C   s,   t ttdd }| t| dg d S )NZhavenzException: haven
)r   r  r_   r:   r  rn   )r   r   r   r   r    test_traceback_header  s   z,TestTracebackException.test_traceback_headerN)rV   rW   rX   r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r   r   r   r    r    s$    %
	r  c                   @   rP   )MiscTestc                 C   sd   t  }dh}ttD ]}|ds||v rq
tt|}t|dd dkr(|| q
| tj| d S )N
print_listr
  rW   r   )setdirr   r   getattrr3  ZassertCountEqual__all__)r   r   ZdenylistnameZmodule_objectr   r   r    test_all  s   

zMiscTest.test_allN)rV   rW   rX   r  r   r   r   r    r    s    r  r[   ).r`  collectionsr   ior   rk  r   r   Zunittestr   testr   Ztest.supportr   r   r   r   Ztest.support.os_helperr	   r
   Ztest.support.script_helperr   r   r   r  r  r  ZTestCaser   r   r  r   r&   escaper  r   r8  r<  r=  ra  rh  r  r  r  rV   mainr   r   r   r    <module>   sZ        = Qx))`  #