o
    g[                     @   s  	 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 ))    )
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)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   I/Users/admin/.pyenv/versions/3.10.0/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   s  |  | 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
 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   errr   r   r    
test_caret6   s:    $$ 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   r0   rD   )r7   r   r   r8   r9   r;   )r   r   r@   r   r   r    test_nocaretT   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 )Nr/   r0   zprint(2)r1   r2   )rE   )	r!   r,   IndentationErrorr8   r9   r;   r<   r=   r.   r?   r   r   r    test_bad_indentationZ   s   $z#TracebackCases.test_bad_indentationc                 C   s&   t  }t|j|}| |dg d S )NzKeyboardInterrupt
)KeyboardInterruptr   r   	__class__r8   )r   eZlstr   r   r    test_base_exceptionh   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 Nr0   r   r   r'   r   r   r    __str__p      zGTracebackCases.test_format_exception_only_bad__str__.<locals>.X.__str__N)__name__
__module____qualname__rQ   r   r   r   r    Xo       rV   r0   z<unprintable %s object>)__main__builtins.r   z%s: %s
)		Exceptionr   r   r8   r9   rS   rT   rU   join)r   rV   r@   Z	str_valueZstr_namer   r   r    %test_format_exception_only_bad__str__n   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}')
                        r_   backslashreplacezraise RuntimeError('{0}')zRuntimeError: {0}zline %sr0   z)Invalid line number: {0!r} instead of {1}r2   z.Invalid traceback line: {0!r} instead of {1!r}rE   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processr`   ra   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 foorE   )rb   z
iso-8859-1utf-8GBKr   u   丂儀u   hé hoz# coding: {0}
r/   z#!shebang
# coding: {0}
   z 	
# coding: {0}
zx=0
# coding: GBK
r~   )
rz   ry   ri   rj   rk   rl   rm   strro   rh   )r   rv   r`   ra   r{   rs   textr   rx   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()
        r^   )s"   Traceback (most recent call last):s&     File "<string>", line 8, in __init__s#   ZeroDivisionError: division by zero)textwrapdedentr   r8   ro   )r   r   rcr`   ra   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[   r8   getvaluer   ru   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_exceptionr8   ZassertRaisesRegexr   rK   __traceback__	TypeError)r   rL   ru   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[   r8   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   r8   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>))r8   r   inspectZ	signaturer   r   r   r   r'   r   r   r    test_signatures  s   zTracebackCases.test_signaturesN)rS   rT   rU   r!   r(   r*   r+   r,   r-   r.   rA   rF   rI   rM   r]   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|   ra   r   z&unable to create test traceback stringr   	Traceback  Filez	    raise)	_testcapir   r   r   rz   exc_infor   r\   r   	format_tbr   r   r   print_tbr   r   r   r8   ro   r9   r:   
startswith)r   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_formatR  rR   z*TracebackFormatTests.test_traceback_formatc                 C   s   dd }|  | d S )Nc                 S   s   | j   d S r   )r   clearr   r   r   r    
cleanup_tbW     zRTracebackFormatTests.test_traceback_format_with_cleared_frames.<locals>.cleanup_tbr   )r   r   r   r   r    )test_traceback_format_with_cleared_framesU  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 )Nra   r0   r   r|   )
r   r   print_stackrz   	_getframer   r8   r   format_stackr\   )r   ZststderrZstfileZstfmtr   r   r    test_stack_format[  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    prni  rR   z2TracebackFormatTests.test_print_stack.<locals>.prnra   z)  File "%s", line %d, in test_print_stackrE   z	    prn()z  File "%s", line %d, in prnr0   z    traceback.print_stack())r   __code__co_firstlinenor8   r   ro   __file__)r   r   ra   rt   r   r   r    test_print_stackh  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>.fra   zno recursion occurredz+Traceback (most recent call last):
  File "z", line r   z8, in _check_recursive_traceback_display
    f()
  File "r0   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 Nr0   r   r>   )gr   r    r     s   zBTracebackFormatTests._check_recursive_traceback_display.<locals>.gzno value error was raisedz  File "r2   z%, in g
    return g(count-1)
  File "zM, in g
    return g(count-1)
  [Previous line repeated 7 more times]
  File "rE   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   ro   r   r8   ZassertRegexr<   rz   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_displayv  sV  



*















z7TracebackFormatTests._check_recursive_traceback_displayc                 C   s   |  tj d S r   )r   r   r   r'   r   r   r    test_recursive_traceback_python'  r)   z4TracebackFormatTests.test_recursive_traceback_pythonc                    s&   ddl m   fdd}| | d S )Nr   exception_printc                     s   t  \} }} | d S r   )rz   r   )exc_type	exc_valueexc_tbr   r   r    r   -  s   zRTracebackFormatTests.test_recursive_traceback_cpython_internal.<locals>.render_exc)r   r   r   )r   r   r   r   r    )test_recursive_traceback_cpython_internal*  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    fmt3  r   z3TracebackFormatTests.test_format_stack.<locals>.fmtr   z>  File "%s", line %d, in test_format_stack
    result = fmt()
r2   zA  File "%s", line %d, in fmt
    return traceback.format_stack()
r0   )r   r   r8   r   )r   r   resultrt   r   r   r    test_format_stack2  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                   @   rN   )zATracebackFormatTests.test_unhashable.<locals>.UnhashableExceptionc                 S      dS NTr   r   otherr   r   r    __eq__C     zHTracebackFormatTests.test_unhashable.<locals>.UnhashableException.__eq__NrS   rT   rU   r   r   r   r   r    UnhashableExceptionB  rW   r   ex1ex2ra      r   zUnhashableException: ex2rE   zUnhashableException: ex1r   )r   r   r[   rz   r   r   r   r;   ro   r8   r9   context_messager<   )
r   r   r   r   r   r   exc_valr   r   r   r   r   r    test_unhashable>  s,   

z$TracebackFormatTests.test_unhashabler   )rS   rT   rU   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                   @   st   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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_callablerL   r   r   r    get_exceptionh  s   
z)BaseExceptionReportingTests.get_exceptionc                 C   rO   rP   r   r'   r   r   r    zero_divp  rR   z$BaseExceptionReportingTests.zero_divc                 C   sJ   |  }| |d d | d|d  | |d d|d  d S )Nr   z1/0 # In zero_divr   r   ZeroDivisionError)ro   r:   r   r<   )r   msglinesr   r   r    check_zero_divs  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 )
Nr0   r   r/   r   r   z1/0 # Markerr2   rE   r   )r   
get_reportro   r8   r9   r:   r   r<   r   _rL   r  r   r   r    test_simpley  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   )rL   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_raiserE   r0   r   inner_raise() # Markerr2   
boundariessplitr  r8   r9   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_raiserE   r0   r   r  r2   )r  r  r  r8   r9   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 )
Nr/   r   r   r0   r   zZeroDivisionError from Noner2   rE   r   )	r[   r   r  ro   r8   r9   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   )_erL   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_raiserE   r0   r   r  r2   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  )rL   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_raiserE   r0   zraise KeyError from er   z1/0r  r2   )	r  r  r  r8   r9   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)r7   r   r   r   r    rL     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    rL     rR   z               ^)r  ro   r8   r   rL   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 )NrD   zSyntaxError: bad syntaxd   z  File "<string>", line 100z	myfile.pyz#SyntaxError: bad syntax (myfile.py)z  File "myfile.py", line 100)r7   r  ro   r8   rt   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<   r?   r   r   r    test_message_none  s   z-BaseExceptionReportingTests.test_message_nonec              
   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   r2    ztext%dz  File "file.py", line 1r0   z    %s   z    %s^z     zSyntaxError: msgr|   r   zfile.pyr4   )r   appendlstripr  r7   r\   r8   )r   offsetaddr   r   r@   expr   r   r    !test_syntax_error_various_offsets
  s$   


z=BaseExceptionReportingTests.test_syntax_error_various_offsetsN)rS   rT   rU   r   r   r  r  r  r  r  r  r  r  r   r"  r+  r   r   r   r    r   f  s    r   c                   @   rN   )PyExcReportingTestsc                 C   st   |  |}dtt|||j}td}tt|||j W d    n1 s+w   Y  | |	 | |S )Nr|   ra   )
r   r\   r   r   typer   r   r   r8   r   )r   rL   ssior   r   r    r  $  s   

zPyExcReportingTests.get_reportN)rS   rT   rU   r  r   r   r   r    r,    s    r,  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   ra   )r   r   r   r   r   )r   rL   r   r.  r   r   r    r  3  s   



zCExcReportingTests.get_reportN)rS   rT   rU   r   r  r   r   r   r    r0  .  s    r0  c                   @   sv   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S )
LimitTestsc                 C   r   )NzLast raised)r[   r'   r   r   r    last_raises1A  r   zLimitTests.last_raises1c                 C   r   r   )r2  r'   r   r   r    last_raises2D  rR   zLimitTests.last_raises2c                 C   r   r   )r3  r'   r   r   r    last_raises3G  rR   zLimitTests.last_raises3c                 C   r   r   )r4  r'   r   r   r    last_raises4J  rR   zLimitTests.last_raises4c                 C   r   r   )r5  r'   r   r   r    last_raises5M  rR   zLimitTests.last_raises5c                 C   r   r   )rz   r   r'   r   r   r    last_returns_frame1P  r   zLimitTests.last_returns_frame1c                 C      |   S r   )r7  r'   r   r   r    last_returns_frame2S  r   zLimitTests.last_returns_frame2c                 C   r8  r   )r9  r'   r   r   r    last_returns_frame3V  r   zLimitTests.last_returns_frame3c                 C   r8  r   )r:  r'   r   r   r    last_returns_frame4Y  r   zLimitTests.last_returns_frame4c                 C   r8  r   )r;  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    extracta     z.LimitTests.test_extract_stack.<locals>.extractc                    sX     | d | |d |    | |d d  ||d d     t| t| d S r   )r8   r9   )r   r   ignorer'   r   r    assertEqualExceptc  s   $z8LimitTests.test_extract_stack.<locals>.assertEqualExcepttracebacklimit  r   r2   limitr   r  iir0   r   rE   r   r   )r<  r   	swap_attrrz   assertGreaterr9   r8   rF  )r   rB  rE  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                     r=  r   )r   
extract_tbr@  r   r   r    rB    rC  z+LimitTests.test_extract_tb.<locals>.extractrF  rG  r%  r2   rH  r   r   r   rE   r   r   	r6  r[   rz   r   r   rJ  r8   r9   rF  )r   r   r   rB  rL  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 )Nr0   r   )r   r   r@  r   r   r   r   r    rB    s   z1LimitTests.test_format_exception.<locals>.extractrF  rG  r%  r2   rH  r   r   rO  r   rE   r   r   rP  )r   rB  rL  r   rR  r    test_format_exception  s2   "z LimitTests.test_format_exceptionN)rS   rT   rU   r2  r3  r4  r5  r6  r7  r9  r:  r;  r<  rM  rQ  rS  r   r   r   r    r1  <  s    r1  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    rU    r   z-MiscTracebackCases.test_clear.<locals>.middlec                  S   s   d} dd  d S rP   r   )ir   r   r    rW    s   z,MiscTracebackCases.test_clear.<locals>.innerr0   r   )	rz   r   r   r   r8   r9   r   r   clear_frames)r   rV  r   r   r   Zinner_framer   )rW  rU  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   r>  r   r   r   r    rB    r   z6MiscTracebackCases.test_extract_stack.<locals>.extractr   r2   rM  zresult = extract()r0   rB  z return traceback.extract_stack()r   r/   )r   r   r8   r   r9   )r   rB  r   rt   r   r   r    rM    s   z%MiscTracebackCases.test_extract_stackN)rS   rT   rU   rZ  rM  r   r   r   r    rT    s    rT  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   r0   dummy)r   r0   r\  %"""Test cases for traceback module""")	linecache
clearcache	lazycacheglobalsr   FrameSummaryr8   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   r0   r\  F)lookup_liner]  )	r^  r_  r   rb  r8   _liner`  ra  linerg  r   r   r    test_lazy_lines  s   zTestFrame.test_lazy_linesc                 C   s    t dd d}| |jd  d S )Nr   r\  r   rb  r8   rk  rg  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   r0   r\  rk  rk  rm  rg  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   r0   r\  rk  ro  r/   )r   rb  r8   r9   rg  r   r   r    test_len  s   zTestFrame.test_lenN)rS   rT   rU   rh  rl  rn  rp  rr  r   r   r   r    r[    s    	r[  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>.deeperr0   )rt  r   ru  r8   r9   )r   rv  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 rP   )r[   rz   r   rt  r   walk_tbr8   r9   )r   r  r   r.  r   r   r    test_walk_tb  s   zTestStack.test_walk_tbc                 C   s$   t jt d }| |t j d S r   )r   StackSummaryrB  ru  ZassertIsInstancer   r.  r   r   r    rM    rq  zTestStack.test_extract_stackc                 C   s*   t jjt d dd}| t|d d S )Nr   rH  )r   r|  rB  ru  r8   r9   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)r^  r_  updatecachera  	test_code
test_framer   r|  rB  iterr8   rk  r   cr   r.  r   r   r    test_extract_stack_lookup_lines   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  )r^  r_  r  r  r   r|  rB  r  r8   cacher  ra  rk  r  r   r   r    *test_extract_stackup_deferred_lookup_lines)  s   
z4TestStack.test_extract_stackup_deferred_lookup_linesc                 C   $   t jdg}| dg|  d S Nfoo.pyr0   fredrk  z*  File "foo.py", line 1, in fred
    line
r   r|  	from_listr8   rh   r}  r   r   r    test_from_list2  s
   zTestStack.test_from_listc                 C   s8   t jdg}d|d< t j|}| dg|  d S )Nr  )r  r2   r  rk  r   z*  File "foo.py", line 2, in fred
    line
r  )r   r.  rx  r   r   r    test_from_list_edited_stack8  s   z%TestStack.test_from_list_edited_stackc                 C   r  r  r  r}  r   r   r    test_format_smoke@  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  	somethingr0   r%  Tcapture_localsr   1r^  r  ra  r  r  r   r|  rB  r  r8   rd  r  r   r   r    test_localsH  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  r0   r%  r   r  r  r   r   r    test_no_localsO  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 )Nr0   r2   T)r  rI  )r   r|  rB  ru  )kvabr   r   r    
some_innerW  s
   z0TestStack.test_format_locals.<locals>.some_innerrE   r/   zw  File "%s", line %d, in some_inner
    return traceback.StackSummary.extract(
    a = 1
    b = 2
    k = 3
    v = 4
)r8   r   r   r   rh   )r   r  r.  r   r   r    test_format_localsV  s   
zTestStack.test_format_localsN)rS   rT   rU   ry  r{  rM  r~  r  r  r  r  r  r  r  r  r   r   r   r    rs    s    		rs  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 )Nr0   r   r2   Fr[   rz   r   r   TracebackExceptionr|  rB  rz  r8   	__cause____context____suppress_context__stackr   r   r   r   r   expected_stackr   r   r    
test_smokeh  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   rO   rP   r   r   r   r   r    r}   y  rR   z7TestTracebackException.test_from_exception.<locals>.foor2   r0   FT)rI  r  r  r   )r[   rz   r   r   r|  rB  rz  r  r  from_exceptionr   r8   r  r  r  r  r   r   )r   r}   rL   r   r  r   r   r   r    test_from_exceptionw  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 )Nr0   r   causeuh ohr2   Trz   r   r   r  r[   r|  rB  rz  r8   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 )Nr0   r   r  r2   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 rP   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   rz   r   r   r   r  rt  rh   rK  r9   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 )Nr0   r   r  r  compactTr2   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 )Nr0   r   r  r  Tr2   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 )Nr0   r   r2   )r[   rz   r   getrefcountr   r  r8   )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 rP   )
r[   rz   r   r   r  ZassertIsNotr8   re  rf  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_exc  s   zKTestTracebackException.test_comparison_params_variations.<locals>.raise_excc                     s   d\} }   d S )N)r0   r2   r   )xr6   r  r   r    raise_with_locals  s   
zSTestTracebackException.test_comparison_params_variations.<locals>.raise_with_localsrI  r   r2   r  Tr   )rI  r  r   )r[   rz   r   r   r  r8   re  )r   r  r   r   Zexc1r  Zexc3Zexc4Zexc5Zexc6Zexc7r   r  r    !test_comparison_params_variations  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 )Nr2   r0   r   )	r   r&  r   r  rz   r   r8   rt  rh   )r   Zexcsr  r   r   r    /test_comparison_equivalent_exceptions_are_equal5  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                   @   rN   )zCTestTracebackException.test_unhashable.<locals>.UnhashableExceptionc                 S   r   r   r   r   r   r   r    r   A  r   zJTestTracebackException.test_unhashable.<locals>.UnhashableException.__eq__Nr   r   r   r   r    r   @  rW   r   r   r   zUnhashableException: ex2
r2   zUnhashableException: ex1
r%  )r[   rz   r   r   r  rt  rh   r<   )r   r   r   r   r   r   	formattedr   r   r    r   ?  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 rP   r   )nrecurser   r    r  S  s   z2TestTracebackException.test_limit.<locals>.recurser   rI  r   r2   rH  )
r[   rz   r   r   r  r|  rB  rz  r8   r  r  r   r  r    
test_limitR  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  )r^  r_  r[   r  r  test_tbr   r  r8   r  r  ra  r  rk  r   rL   r  r   r   r   r   r   r    test_lookup_linesa  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  r0   string)r  r   r%  Tr  r   r  z'string'r^  r  ra  r[   r  r  r  r   r  r8   r  rd  r  r   r   r    r  l  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  r0   r%  r   r  r  r   r   r    r  w  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[   r8   rt  rh   )r   r   r   r   r    test_traceback_header  s   z,TestTracebackException.test_traceback_headerN)rS   rT   rU   r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r   r   r   r    r  f  s$    %
	r  c                   @   rN   )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  rT   r   )setdirr   r   getattrr)  ZassertCountEqual__all__)r   r   ZdenylistnameZmodule_objectr   r   r    test_all  s   

zMiscTest.test_allN)rS   rT   rU   r  r   r   r   r    r    s    r  rX   )-collectionsr   ior   r^  rz   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   r,  r0  r1  rT  r[  rs  r  r  rS   mainr   r   r   r    <module>   sZ      
  = 9x))`  #