
    <e                    0   	 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	Z	d dl
mZ d dlmZmZmZmZmZmZmZ d dlmZmZ d dlmZmZ d dlZd dlZd dlZd dlmZ ed	k    re d
ndZ  edddg          Z!d e!_"         edg d          Z# edg d          Z$ G d dej%                  Z& e             G d dej%                              Z'e e             G d de'                                  Z( G d dej%                  Z)dZ*dZ+ e	j,        d e	j-        e*          d e	j-        e+          d           Z. G d! d"          Z/ G d# d$e/ej%                  Z0 G d% d&e/ej%                  Z1 G d' d(ej%                  Z2 G d) d*ej%                  Z3 G d+ d,ej%                  Z4 G d- d.ej%                  Z5 G d/ d0ej%                  Z6 G d1 d2ej%                  Z7 G d3 d4ej%                  Z8ed	k    r ej9                     dS dS )5    )
namedtuple)StringION)support)Errorcaptured_outputcpython_only	ALWAYS_EQrequires_debug_rangeshas_no_debug_rangesrequires_subprocess)TESTFNunlink)assert_python_okassert_python_failure)partial__main__. codeco_filenameco_namec                 "    t          dg          S )N)   r   r   r   )iter)_s    */usr/lib/python3.11/test/test_traceback.py<lambda>r      s    4#7#7     frame)f_code	f_globalsf_localstb)tb_frame	tb_linenotb_nexttb_lastic                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Z e            d             Zd Zd Zd Zd Zd Zd Zd ZdS )TracebackCasesc                     	  |             t          d          # |$ r}t          j        ||          cY d }~S d }~ww xY w)Nzcall did not raise exception)
ValueError	tracebackformat_exception_only)selffuncexcvalues       r   get_exception_formatz#TracebackCases.get_exception_format#   sf    	=DFFF ;<<<  	? 	? 	?23>>>>>>>>	?s   
 ?:??c                 (    t          ddd           d S )Nzdef fact(x):
	return x!
?execcompiler.   s    r   syntax_error_with_caretz&TracebackCases.syntax_error_with_caret+   s    -sF;;;;;r   c                 (    t          ddd           d S )Nz1 +
r4   r5   r6   r8   s    r   syntax_error_with_caret_2z(TracebackCases.syntax_error_with_caret_2.   s    f%%%%%r   c                 (    t          ddd           d S )Nzf(x, y for y in range(30), z)r4   r5   r6   r8   s    r   syntax_error_with_caret_rangez,TracebackCases.syntax_error_with_caret_range1   s    /f=====r   c                 (    t          ddd           d S )Nz def spam():
  print(1)
 print(2)r4   r5   r6   r8   s    r   syntax_error_bad_indentationz+TracebackCases.syntax_error_bad_indentation4   s    4c6BBBBBr   c                 (    t          ddd           d S )Nu   Python = "Ṕýţĥòñ" +r4   r5   r6   r8   s    r   !syntax_error_with_caret_non_asciiz0TracebackCases.syntax_error_with_caret_non_ascii7   s    =sFKKKKKr   c                 (    t          ddd           d S )Nz	 print(2)r4   r5   r6   r8   s    r   syntax_error_bad_indentation2z,TracebackCases.syntax_error_bad_indentation2:   s    S&)))))r   c                 (    t          ddd           d S )Nz
blech  (  r4   r5   r6   r8   s    r    tokenizer_error_with_caret_rangez/TracebackCases.tokenizer_error_with_caret_range=   s    c6*****r   c                 J	   |                      | 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z   |d                             d                     |                     |d         	                    d          d           |                      | j        t                    }|                     d|d                    |                     |d         	                    d          d           |                     |d                             d          dz   |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)()r2   r9   SyntaxErrorassertEquallen
assertTruestripassertInfindcountr;   rA   r=   rE   r.   errs     r   
test_caretzTracebackCases.test_caret@   s   ''(D(35 5S1%%%A+5666c3q6"""QS))3q6;;s+;+;<<<Qc**A...''(F(35 5c3q6"""Qd++Q///QS))A-s1v{{3/?/?@@@Qc**A...''(N(35 5c3q6"""Qd++Q///QS))A-s1v{{3/?/?@@@Qc**A...''(J(35 5c3q6"""Qd++Q///QS))3q6;;s+;+;<<<Qc**C0F,G,GHHH''(M(35 5c3q6"""Qd++Q///QS))3q6;;s+;+;<<<Qc**A.....r   c                     t          dd          }t          j        t           |          }|                     t	          |          d           |                     |d                                         d           d S )Nerror)zx.py   N
bad syntax   rH   r^   )rP   r,   r-   rQ   rR   rT   )r.   r0   rY   s      r   test_nocaretzTracebackCases.test_nocarete   sh    '#CDD-k3??S1%%%Q66666r   c                 h   	 t          t          d          5 }|                    d           d d d            n# 1 swxY w Y   t          ddt                    \  }}}|                                }|                     t          |          d           |                     |d         d           |                     d|d	                    |                     |d
         d           |                     |d         d           t          t                     d S # t          t                     w xY w)Nwz
x = 1 / 0
-Xno_debug_rangesrG   r   "   Traceback (most recent call last):s   line 1, in <module>rH   rJ          x = 1 / 0r_   #   ZeroDivisionError: division by zero)	openr   writer   
splitlinesrQ   rR   rU   r   )r.   fr   stderrliness        r   'test_no_caret_with_no_debug_ranges_flagz6TracebackCases.test_no_caret_with_no_debug_ranges_flagk   sR   	fc"" 'a&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 1'1 1LAq& %%''ESZZ+++U1X'LMMMMM0%(;;;U1X'7888U1X'MNNN6NNNNNF6NNNNs)   D 9D =D  =CD D1c                    t          j        d          }	 t          t          d          5 }|                    |           d d d            n# 1 swxY w Y   t          ddt                    \  }}}|                                }|                     t          |          d           |                     |d         d           | 	                    d|d	                    |                     |d
         d           |                     |d         d           t          t                     d S # t          t                     w xY w)Nz
            import traceback
            try:
                x = 1 / 0
            except:
                traceback.print_exc()
            rb   rc   rd   rG   r   re   s   line 4, in <module>rH   rJ   rf   r_   rg   )textwrapdedentrh   r   ri   r   rj   rQ   rR   rU   r   )r.   r   rk   r   rl   rm   s         r   8test_no_caret_with_no_debug_ranges_flag_python_tracebackzGTracebackCases.test_no_caret_with_no_debug_ranges_flag_python_traceback~   se       	fc"" a               ,'1 1LAq& %%''ESZZ+++U1X'LMMMMM0%(;;;U1X'7888U1X'MNNN6NNNNNF6NNNNs/   D/ AD/ AD/ ACD/ /Ec                 j   t          j        d          }	 t          t          d          5 }|                    |           d d d            n# 1 swxY w Y   t          t                    \  }}}|                     |d           t          t                     d S # t          t                     w xY w)Na>  
                import sys
                from weakref import ref

                sys.setrecursionlimit(15)

                def f():
                    ref(lambda: 0, [])
                    f()

                try:
                    f()
                except RecursionError:
                    pass
        rb   r   )rp   rq   rh   r   ri   r   rQ   r   )r.   r   rk   rcr   s        r   %test_recursion_error_during_tracebackz4TracebackCases.test_recursion_error_during_traceback   s        	fc"" a               (//HB1R###6NNNNNF6NNNNs.   B AB AB A1B B2c                    |                      | j        t                    }|                     t	          |          d           |                     |d                                         d           |                     d|d                    |                     |d                             d          dz   |d                             d                     |                      | j        t                    }|                     t	          |          d           |                     |d                                         d           d S )NrG   rH   zprint(2)rI   rJ   )r_   )	r2   r?   IndentationErrorrQ   rR   rT   rU   rV   rC   rX   s     r   test_bad_indentationz#TracebackCases.test_bad_indentation   s   ''(I(8: :S1%%%Q444c3q6"""QS))A-s1v{{3/?/?@@@ ''(J(8: :S1%%%Q44444r   c                     t                      }t          j        |j        |          }|                     |dg           d S )NzKeyboardInterrupt
)KeyboardInterruptr,   r-   	__class__rQ   )r.   elsts      r   test_base_exceptionz"TracebackCases.test_base_exception   sA    -ak1==4566666r   c                 X    G d dt                     }t          j        | |                      }|                     t	          |          d           d}|j        dv r|j        }n!d                    |j        |j        g          }|                     |d         |d|d	           d S )
Nc                       e Zd Zd ZdS )?TracebackCases.test_format_exception_only_bad__str__.<locals>.Xc                     ddz   d S NrH   r    r8   s    r   __str__zGTracebackCases.test_format_exception_only_bad__str__.<locals>.X.__str__       !r   N__name__
__module____qualname__r   r   r   r   Xr      #            r   r   rH   <exception str() failed>)r   builtinsr   r   : rL   )	Exceptionr,   r-   rQ   rR   r   r   joinr.   r   rY   	str_valuestr_names        r   %test_format_exception_only_bad__str__z4TracebackCases.test_format_exception_only_bad__str__   s    	 	 	 	 		 	 	 	 -a55S1%%%.	<333~HHxxq~ >??HQxxx!CDDDDDr   c                 0   	 dd l 	dd l                    	j        ddgj        j                  }|                                \  }}t          |d                                          d          	fd} |dddd	           d
D ]y}|dk    rd}n|dk    rd}nd} |d	                    |          ||d            |d	                    |          ||d            |d	                    |          ||d           z |dddd           d S )Nr   -cz&import sys; print(sys.stdout.encoding)stdoutrl   asciic                 
   	 t          t          d|          5 }|                    d                    | |                     d d d            n# 1 swxY w Y                       j        t          gj        j                  }|                                \  }}|	                              
                                }t          t                     n# t          t                     w xY w|                    d          }|	                              }	d                    |	          }
d                    |	          }                    d|z  |d	         d
                    |d	         |                                         |d                             |
          d                    |d         |
                     |d         }                    ||k    d                    ||                     d S )Nrb   )encodingz}{0}if 1:
                        import traceback;
                        raise RuntimeError('{1}')
                        r   backslashreplacezraise RuntimeError('{0}')zRuntimeError: {0}zline %srH   z)Invalid line number: {0!r} instead of {1}rJ   z.Invalid traceback line: {0!r} instead of {1!r}r_   z-Invalid error message: {0!r} instead of {1!r})rh   r   ri   formatPopen
executablePIPESTDOUTcommunicatedecoderj   r   encoderU   rS   endswith)
firstlinesmessagecharsetlinenooutputprocessr   rl   encoded_messagemessage_asciierr_lineerr_msgactual_err_msgoutput_encodingr.   
subprocesssyss                r   do_testz1TracebackCases.test_encoded_file.<locals>.do_test   sC   &#888 9FLL " #F:w779 9 99 9 9 9 9 9 9 9 9 9 9 9 9 9 9 %**CNF+C%?:3D + F F!(!4!4!6!677BBDDvv &nn_-?A AO ,22?CCM299-HHH)00??GMM9v-q	;BB1Iv' '( ( ( OOF1I..x88@GG1Ix) )* * * $AYNOONg5?FF"G- -. . . . .s/   C *AC AC AA/C C2r   foor_   )r   z
iso-8859-1utf-8GBKr   u   丂儀u   hé hoz# coding: {0}
rG   z#!shebang
# coding: {0}
   z 	
# coding: {0}
zx=0
# coding: GBK
r   )
r   r   r   r   r   r   r   strrj   r   )
r.   r   r   rl   r   r   textr   r   r   s
   `      @@@r   test_encoded_filez TracebackCases.test_encoded_file   s   
 	
 ""CND$L$N*4/*4*; # = = !,,..fg..99;;A>"	. "	. "	. "	. "	. "	. "	. "	.H 	E7A&&&> 	& 	&G'!!E!!%!G%,,W55'1& & &G077@@'1& & &G,33G<<'1& & & & 	&
GQ?????r   c                     t          j        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   )re   s&     File "<string>", line 8, in __init__rg   )rp   rq   r   rQ   rj   )r.   r   rt   r   rl   expecteds         r   test_print_traceback_at_exitz+TracebackCases.test_print_traceback_at_exit  sm         , .dD99FF< < < 	**,,h77777r   c                     t                      }t          j        t          t          d          d |           |                     |                                d           d S N	projectorfileException: projector
r   r,   print_exceptionr   rQ   getvaluer.   r   s     r   test_print_exceptionz#TracebackCases.test_print_exception5  s_    !y--t&	
 	
 	
 	
 	**,DEEEEEr   c                     t                      }t          j        t          d          |           |                     |                                d           d S r   r   r   s     r   test_print_exception_excz'TracebackCases.test_print_exception_exc<  sP    !)K"8"8vFFFF**,DEEEEEr   c                 L   t          d          }t          j        |          }|                     |dg           |                     t
          d          5  t          j        |j        |           d d d            n# 1 swxY w Y   |                     t
          d          5  t          j        |j        |j                   d d d            n# 1 swxY w Y   |                     t          d          5  t          j        |           d d d            d S # 1 swxY w Y   d S )Nr   r   zBoth or neitherr#   zpositional-only)r0   )	r   r,   format_exceptionrQ   assertRaisesRegexr+   r|   __traceback__	TypeError)r.   r}   r   s      r   test_format_exception_excz(TracebackCases.test_format_exception_excA  s   k""+A..":!;<<<##J0ABB 	7 	7&q{A666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7##J0ABB 	H 	H&q{qGGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H##I/@AA 	. 	.&1----	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s6   A==BB#!CCC6DD Dc                 v    t          j        t          d                    }|                     |dg           d S )Nr   r   )r,   r-   r   rQ   r   s     r   test_format_exception_only_excz-TracebackCases.test_format_exception_only_excL  s:    0;1G1GHH":!;<<<<<r   c                 t   d}t                      }t          j        d |           |                     |                                |           t                      }t          j        d d d |           |                     |                                |           t                      }t          j        d |           |                     |                                |           |                     t          j        d           |           |                     t          j        d           |g           |                     t          j        d d d           |g           |                     t          j        d           |g           |                     t          j        d d           |g           d S )NzNoneType: None
r   )	r   r,   r   rQ   r   	print_exc
format_excr   r-   )r.   NONE_EXC_STRINGexcfiles      r   test_exception_is_Nonez%TracebackCases.test_exception_is_NoneP  s   ,**!$W5555))++_===**!$dAAAA))++_===**Dw////))++_===-d33_EEE3D99O;LMMM&tT488?:K	M 	M 	M+D11O3D	F 	F 	F+D$77/9J	L 	L 	L 	L 	Lr   c                    |                      t          t          j        t          j                            d           |                      t          t          j        t          j                            d           |                      t          t          j        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>))rQ   r   inspect	signaturer,   r   r   r-   r8   s    r   test_signatureszTracebackCases.test_signaturesg  s    !)";<<==2	4 	4 	4
 	!)"<==>>	 	 	
 	!)"ABBCC(	* 	* 	* 	* 	*r   N)r   r   r   r2   r9   r;   r=   r?   rA   rC   rE   rZ   r`   rn   rr   ru   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r)   r)      s       = = =< < <& & &> > >C C CL L L* * *+ + +#/ #/ #/J7 7 7  &  0  25 5 57 7 7E E E C@ C@ C@J8 8 8>F F FF F F
	. 	. 	.= = =L L L.* * * * *r   r)   c                       e Zd Z	 d Zej        j        dz   Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS ) TracebackErrorLocationCaretTestsc                     	  |             |                      d           d S #  t          j                                                    d d         cY S xY w)NNo exception thrown.)failr,   r   rj   )r.   callables     r   get_exceptionz.TracebackErrorLocationCaretTests.get_exception|  s^    	<HJJJII,-----	<'))4466ss;;;;s	   # /ArJ   c           	          d }|j         j        }dt           d| j         dt           d|dz    d	}|                     |          }|                     ||                                           d S )Nc                       t          d          )NTzbasic caret testsr+   r   r   r   rk   z<TracebackErrorLocationCaretTests.test_basic_caret.<locals>.f  s    %&9:::r   +Traceback (most recent call last):
  File "", line *, in get_exception
    callable()
  File "rH   zm, in f
    if True: raise ValueError("basic caret tests")
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
__code__co_firstlineno__file__callable_liner   rQ   rj   )r.   rk   lineno_f
expected_fresult_liness        r   test_basic_caretz1TracebackErrorLocationCaretTests.test_basic_caret  s    	; 	; 	; :,CC C)-);C C  C C *2!C C C 	 ))!,,z'<'<'>'>?????r   c           	          d }|j         j        }dt           d| j         dt           d|dz    d	}|                     |          }|                     ||                                           d S )Nc                       t          d          )NTu   Ĥellö Wörldr   r   r   r   f_with_unicodezOTracebackErrorLocationCaretTests.test_line_with_unicode.<locals>.f_with_unicode  s    %&6777r   r   r   r   rH   uq   , in f_with_unicode
    if True: raise ValueError("Ĥellö Wörld")
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
r   )r.   r   r   r   r   s        r   test_line_with_unicodez7TracebackErrorLocationCaretTests.test_line_with_unicode  s    	8 	8 	8 "*9== =)-);= =  = = *2!= = = 	 )).99z'<'<'>'>?????r   c           	          d }|j         j        }dt           d| j         dt           d|dz    d	}|                     |          }|                     ||                                           d S )Nc                  *    dt           dt          fd} d S )Nareturnc                     dS )Nr   r   )r   s    r   r   z`TracebackErrorLocationCaretTests.test_caret_in_type_annotation.<locals>.f_with_type.<locals>.foo  s    qr   )THIS_DOES_NOT_EXISTint)r   s    r   f_with_typezSTracebackErrorLocationCaretTests.test_caret_in_type_annotation.<locals>.f_with_type  s/    *       r   r   r   r   rH   za, in f_with_type
    def foo(a: THIS_DOES_NOT_EXIST ) -> int:
               ^^^^^^^^^^^^^^^^^^^
r   )r.   r  r   r   r   s        r   test_caret_in_type_annotationz>TracebackErrorLocationCaretTests.test_caret_in_type_annotation  s    	 	 	 '633 3)-);3 3  3 3 *2!3 3 3 	 ))+66z'<'<'>'>?????r   c           	          d }|j         j        }dt           d| j         dt           d|dz    d	}|                     |          }|                     ||                                           d S )Nc                       t          d          )NTzerror over multiple linesr   r   r   r   f_with_multilinezZTracebackErrorLocationCaretTests.test_caret_multiline_expression.<locals>.f_with_multiline  s    %+  r   r   r   r   rH   zS, in f_with_multiline
    if True: raise ValueError(
             ^^^^^^^^^^^^^^^^^r   r.   r  r   r   r   s        r   test_caret_multiline_expressionz@TracebackErrorLocationCaretTests.test_caret_multiline_expression  s    	 	 	
 $,;-- -)-);- -  - - *2!- - - 	 ))*:;;z'<'<'>'>?????r   c           	         t          j        d          fd}|j        j        }dt           d| j         dt           d|dz    d	}|                     |          }|                     ||                                           d S )Nz
        def foo(*args, **kwargs):
            pass

        a, b, c = 1, 2, 3

        foo(a, z
                for z in
                    range(10), b, c)
        c                  &    t           dd          S )Nr4   r5   r6   )r   s   r   r  zgTracebackErrorLocationCaretTests.test_caret_multiline_expression_syntax_error.<locals>.f_with_multiline  s    4f---r   r   r   r   rJ   z, in f_with_multiline
    return compile(code, "?", "exec")
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "?", line 7
    foo(a, z
           ^)	rp   rq   r   r   r   r   r   rQ   rj   )r.   r  r   r   r   r   s        @r   ,test_caret_multiline_expression_syntax_errorzMTracebackErrorLocationCaretTests.test_caret_multiline_expression_syntax_error  s      	  	 		. 	. 	. 	. 	. $,; )-);     *2!   	 ))*:;;z'<'<'>'>?????r   c           	          d }|j         j        }dt           d| j         dt           d|dz    d	}|                     |          }|                     ||                                           d S )Nc                      dddz  z   S NrJ   rH   r   r   r   r   r   r  zaTracebackErrorLocationCaretTests.test_caret_multiline_expression_bin_op.<locals>.f_with_multiline  s    A r   r   r   r   rJ   z-, in f_with_multiline
    2 + 1 /
        ^^^r   r  s        r   &test_caret_multiline_expression_bin_opzGTracebackErrorLocationCaretTests.test_caret_multiline_expression_bin_op  s    	 	 	 $,; )-);     *2!   	 ))*:;;z'<'<'>'>?????r   c           	          d }|j         j        }dt           d| j         dt           d|dz    d	}|                     |          }|                     ||                                           d S )Nc                      d} d| dz  z   dz   S N   
   r      r   divisors    r   f_with_binary_operatorz`TracebackErrorLocationCaretTests.test_caret_for_binary_operators.<locals>.f_with_binary_operator  s    G!#b((r   r   r   r   rJ   zY, in f_with_binary_operator
    return 10 + divisor / 0 + 30
                ~~~~~~~~^~~
r   r.   r  r   expected_errorr   s        r   test_caret_for_binary_operatorsz@TracebackErrorLocationCaretTests.test_caret_for_binary_operators  s    	) 	) 	) *2A,, ,)-);, ,  , , *2!, , , 	 ))*@AA~'@'@'B'BCCCCCr   c           	          d }|j         j        }dt           d| j         dt           d|dz    d	}|                     |          }|                     ||                                           d S )Nc                      d} d| dz  z   dz   S r  r   )   áóís    r   r  zmTracebackErrorLocationCaretTests.test_caret_for_binary_operators_with_unicode.<locals>.f_with_binary_operator  s    F
?R''r   r   r   r   rJ   uT   , in f_with_binary_operator
    return 10 + áóí / 0 + 30
                ~~~~^~~
r   r  s        r   ,test_caret_for_binary_operators_with_unicodezMTracebackErrorLocationCaretTests.test_caret_for_binary_operators_with_unicode  s    	( 	( 	( *2A(( ()-);( (  ( ( *2!( ( ( 	 ))*@AA~'@'@'B'BCCCCCr   c           	          d }|j         j        }dt           d| j         dt           d|dz    d	}|                     |          }|                     ||                                           d S )Nc                      d} d| dz  z   dz   S r  r   r  s    r   r  ziTracebackErrorLocationCaretTests.test_caret_for_binary_operators_two_char.<locals>.f_with_binary_operator)  s    G1$r))r   r   r   r   rJ   z[, in f_with_binary_operator
    return 10 + divisor // 0 + 30
                ~~~~~~~~^^~~
r   r  s        r   (test_caret_for_binary_operators_two_charzITracebackErrorLocationCaretTests.test_caret_for_binary_operators_two_char(  s    	* 	* 	* *2A-- -)-);- -  - - *2!- - - 	 ))*@AA~'@'@'B'BCCCCCr   c           	          d }|j         j        }dt           d| j         dt           d|dz    d	}|                     |          }|                     ||                                           d S )Nc                  6    ddd ii} | d         d         d         S NxrN   zr   	some_dicts    r   f_with_subscriptzSTracebackErrorLocationCaretTests.test_caret_for_subscript.<locals>.f_with_subscript:  s$    sDk*IS>#&s++r   r   r   r   rJ   z^, in f_with_subscript
    return some_dict['x']['y']['z']
           ~~~~~~~~~~~~~~~~~~~^^^^^
r   r.   r+  r   r  r   s        r   test_caret_for_subscriptz9TracebackErrorLocationCaretTests.test_caret_for_subscript9  s    	, 	, 	, $,;44 4)-);4 4  4 4 *2!4 4 4 	 ))*:;;~'@'@'B'BCCCCCr   c           	          d }|j         j        }dt           d| j         dt           d|dz    d	}|                     |          }|                     ||                                           d S )Nc                  J    dddddiiii} | d         d         d         d         S )N   ó   á   íthetarH   betar   r)  s    r   r+  z[TracebackErrorLocationCaretTests.test_caret_for_subscript_unicode.<locals>.f_with_subscriptK  s3    tgq\&:;<IT?4(.v66r   r   r   r   rJ   uq   , in f_with_subscript
    return some_dict['ó']['á']['í']['beta']
           ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^
r   r,  s        r    test_caret_for_subscript_unicodezATracebackErrorLocationCaretTests.test_caret_for_subscript_unicodeJ  s    	7 	7 	7 $,;<< <)-);< <  < < *2!< < < 	 ))*:;;~'@'@'B'BCCCCCr   c           	         t          dt          d          }t          t          d          5 }|                    d           d d d            n# 1 swxY w Y   |                     t
          t                     t          t          |          }|                     |          }|j	        }dt           d| j         dt           d| d	}|                     ||                                           d S )	Nz1 / 0 / 1 / 2
r5   rb   z1 $ 0 / 1 / 2
r   r   r   z*, in <module>
    1 $ 0 / 1 / 2
    ^^^^^
)r7   r   rh   ri   
addCleanupr   r   r5   r   r   r   r   rQ   rj   )r.   bytecoder   r/   r   r   r  s          r   /test_traceback_specialization_with_syntax_errorzPTracebackErrorLocationCaretTests.test_traceback_specialization_with_syntax_error[  s=   ,ff==&# 	*$JJ()))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	'''tX&&))$//* )-);    (0   	 	~'@'@'B'BCCCCCs   AAAc                    d}t          |t          d          }t          t          d          5 }|                    |           d d d            n# 1 swxY w Y   |                     t
          t                     t          t          |          }|                     |          }|j	        }dt           d| j         dt           d| d| dd	t          d
          z  dz    d}|                     ||                                           d S )Na	  if True: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar5   rb   r   r   r   z, in <module>
    z
     z	if True: a   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^rL   )r7   r   rh   ri   r7  r   r   r5   r   r   r   r   rR   rQ   rj   )r.   sourcer8  r   r/   r   r   r  s           r   test_traceback_very_long_linez>TracebackErrorLocationCaretTests.test_traceback_very_long_lineq  sn   (66622&# 	$JJv	 	 	 	 	 	 	 	 	 	 	 	 	 	 	'''tX&&))$//*66 6)-);6 6 6 6 (06 6 	6 6
 s;''''16 6 6 	 	~'@'@'B'BCCCCCs   AAAc           	          d }|j         j        }dt           d| j         dt           d|dz    d	}|                     |          }|                     ||                                           d S )Nc                  :    ddd ii} | d         d         d          d S r&  r   r)  s    r   r+  zZTracebackErrorLocationCaretTests.test_secondary_caret_not_elided.<locals>.f_with_subscript  s*    sDk*IcN3$$$$r   r   r   r   rJ   zP, in f_with_subscript
    some_dict['x']['y']['z']
    ~~~~~~~~~~~~~~~~~~~^^^^^
r   r,  s        r   test_secondary_caret_not_elidedz@TracebackErrorLocationCaretTests.test_secondary_caret_not_elided  s    	% 	% 	% $,;-- -)-);- -  - - *2!- - - 	 ))*:;;~'@'@'B'BCCCCCr   c           	          d }dt            d| j         dt            d|j        j        dz    d	}|                     |          }|                     ||                                           d S )Nc                  Z    t          dt          d          t          d          g          )NTegrH   rJ   ExceptionGroupr+   r   r   r   r   r0   zHTracebackErrorLocationCaretTests.test_caret_exception_group.<locals>.exc  s#    )$A	!0MNNNr   C  + Exception Group Traceback (most recent call last):
  |   File "r   z2, in get_exception
  |     callable()
  |   File "rH   aB  , in exc
  |     if True: raise ExceptionGroup("eg", [ValueError(1), TypeError(2)])
  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  | ExceptionGroup: eg (2 sub-exceptions)
  +-+---------------- 1 ----------------
    | ValueError: 1
    +---------------- 2 ----------------
    | TypeError: 2
)r   r   r   r   r   rQ   rj   )r.   r0   r  r   s       r   test_caret_exception_groupz;TracebackErrorLocationCaretTests.test_caret_exception_group  s    
	O 	O 	O
%$
% 
%.2.@
% 
% %
% 
% /2l.IA.M
% 
% 
% 	 ))#..~'@'@'B'BCCCCCr   c                     |                      |          }|d         }|                     |                                |           d S )Nr   )r   rQ   lstrip)r.   r/   expected_specializationr   specialization_lines        r   assertSpecializedz2TracebackErrorLocationCaretTests.assertSpecialized  sJ    ))$//*2.,33557NOOOOOr   c                    |                      d d           |                      d d           |                      d d           |                      d d           |                      d d           |                      d	 d           |                      d
 d           |                      d d           |                      d d           |                      d d           |                      d d           |                      d d           |                      d d           |                      d d           |                      d d           d S )Nc                      ddz  S r   r   r   r   r   r   zQTracebackErrorLocationCaretTests.test_specialization_variations.<locals>.<lambda>  s
    qs r   z~^~c                      ddz  dz  S NrH   r   r_   r   r   r   r   r   zQTracebackErrorLocationCaretTests.test_specialization_variations.<locals>.<lambda>  s    qs1u r   c                      ddz  S r   r   r   r   r   r   zQTracebackErrorLocationCaretTests.test_specialization_variations.<locals>.<lambda>  
    q1u r   z~~^~~c                      ddz  dz  S rP  r   r   r   r   r   zQTracebackErrorLocationCaretTests.test_specialization_variations.<locals>.<lambda>  s    q1uqy r   c                      ddz  S r   r   r   r   r   r   zQTracebackErrorLocationCaretTests.test_specialization_variations.<locals>.<lambda>  
    q!t r   z~^~~c                      ddz  dz  S rP  r   r   r   r   r   zQTracebackErrorLocationCaretTests.test_specialization_variations.<locals>.<lambda>  s    q!tAv r   c                      ddz  S r   r   r   r   r   r   zQTracebackErrorLocationCaretTests.test_specialization_variations.<locals>.<lambda>  s
    qqy r   z	~~~~~^~~~c                      ddz  dz  S )NrH   r   r   r   r   r   r   r   zQTracebackErrorLocationCaretTests.test_specialization_variations.<locals>.<lambda>  s    qqyQ r   c                      ddz  S r   r   r   r   r   r   zQTracebackErrorLocationCaretTests.test_specialization_variations.<locals>.<lambda>  rU  r   z~~^~c                      ddz  S r   r   r   r   r   r   zQTracebackErrorLocationCaretTests.test_specialization_variations.<locals>.<lambda>  rU  r   z~^^~c                      ddz  dz  S NrH   r   rG   r   r   r   r   r   zQTracebackErrorLocationCaretTests.test_specialization_variations.<locals>.<lambda>  s    q!tQw r   c                      ddz  S r   r   r   r   r   r   zQTracebackErrorLocationCaretTests.test_specialization_variations.<locals>.<lambda>  s
    qAv r   z~~^^~~c                      ddz  dz  S r\  r   r   r   r   r   zQTracebackErrorLocationCaretTests.test_specialization_variations.<locals>.<lambda>  s    qAv{ r   c                      ddz  S r   r   r   r   r   r   zQTracebackErrorLocationCaretTests.test_specialization_variations.<locals>.<lambda>  rR  r   z~~^^~c                      ddz  S r   r   r   r   r   r   zQTracebackErrorLocationCaretTests.test_specialization_variations.<locals>.<lambda>  rR  r   z~^^~~)rL  r8   s    r   test_specialization_variationsz?TracebackErrorLocationCaretTests.test_specialization_variations  s   {{&+	- 	- 	-}}&+	- 	- 	-}}&-	/ 	/ 	/00&-	/ 	/ 	/||&,	. 	. 	.~~&,	. 	. 	.00&1	3 	3 	366&1	3 	3 	3||&,	. 	. 	.||&,	. 	. 	.&,	. 	. 	.~~&.	0 	0 	022&.	0 	0 	0}}&-	/ 	/ 	/}}&-	/ 	/ 	/ 	/ 	/r   c                 &  	 d d 		fd}|                      |          }|j        j        }j        j        }dt           d| j         dt           d|dz    dt           d|dz    d	}|                     ||                                           	fd
}|                      |          }|j        j        }dt           d| j         dt           d|dz    dt           d|dz    d	}|                     ||                                           d S )Nc                     t           N)r   r/   s    r   	dec_errorz]TracebackErrorLocationCaretTests.test_decorator_application_lineno_correct.<locals>.dec_error  s    Or   c                     | S rd  r   re  s    r   dec_finez\TracebackErrorLocationCaretTests.test_decorator_application_lineno_correct.<locals>.dec_fine  s    Kr   c                  .    d                         } d S )Nc                      d S rd  r   r   r   r   gzhTracebackErrorLocationCaretTests.test_decorator_application_lineno_correct.<locals>.applydecs.<locals>.g  s    Tr   r   )rk  rf  rh  s    r   	applydecsz]TracebackErrorLocationCaretTests.test_decorator_application_lineno_correct.<locals>.applydecs  s#    M X YMMr   r   r   r   rH   z5, in applydecs
    @dec_error
     ^^^^^^^^^
  File "z#, in dec_error
    raise TypeError
c                  B     G d d                                  } d S )Nc                       e Zd ZdS )nTracebackErrorLocationCaretTests.test_decorator_application_lineno_correct.<locals>.applydecs_class.<locals>.AN)r   r   r   r   r   r   Aro    s        Tr   rp  r   )rp  rf  rh  s    r   applydecs_classzcTracebackErrorLocationCaretTests.test_decorator_application_lineno_correct.<locals>.applydecs_class  s-    MMMMMM X YMMr   z;, in applydecs_class
    @dec_error
     ^^^^^^^^^
  File ")r   r   r   r   r   rQ   rj   )
r.   rl  r   lineno_applydescslineno_dec_errorr  rq  lineno_applydescs_classrf  rh  s
           @@r   )test_decorator_application_lineno_correctzJTracebackErrorLocationCaretTests.test_decorator_application_lineno_correct  s   	 	 		 	 		 	 	 	 	 	 )))44%.=$-<$$ $)-);$ $  $ $ *;Q)>$ $  $ $ *:A)=$ $ $ 	 	~'@'@'B'BCCC	 	 	 	 	 	 ))/::"1":"I$$ $)-);$ $  $ $ *A1)D$ $  $ $ *:A)=$ $ $ 	 	~'@'@'B'BCCCCCr   c                     d }|                      |          }ddt           d| j         dddt           d|j        j        dz    dd	d
g}|                     ||           d S )Nc                  .    d                                   d S rd  methodr   r   r   rk   zHTracebackErrorLocationCaretTests.test_multiline_method_call_a.<locals>.f  s#         r   "Traceback (most recent call last):  File "r   , in get_exception    callable()rJ   , in fz    .methodz     ^^^^^^r   r   r   r   r   rQ   r.   rk   actualr   s       r   test_multiline_method_call_az=TracebackErrorLocationCaretTests.test_multiline_method_call_a   s    	 	 	 ##A&&1QQQ4+=QQQPPP1:+Dq+HPPP
 	*****r   c                     d }|                      |          }ddt           d| j         dddt           d|j        j        dz    dd	g}|                     ||           d S )
Nc                  .    d                                   d S rd  rx  r   r   r   rk   zHTracebackErrorLocationCaretTests.test_multiline_method_call_b.<locals>.f  s#         r   rz  r{  r   r|  r}  rJ   r~  z
    methodr  r  s       r   test_multiline_method_call_bz=TracebackErrorLocationCaretTests.test_multiline_method_call_b  s    	 	 	 ##A&&1QQQ4+=QQQPPP1:+Dq+HPPP
 	*****r   c                     d }|                      |          }ddt           d| j         dddt           d|j        j        dz    dd	d
g}|                     ||           d S )Nc                  .    d                                   d S rd  rx  r   r   r   rk   zHTracebackErrorLocationCaretTests.test_multiline_method_call_c.<locals>.f   s#    &     r   rz  r{  r   r|  r}  rJ   r~  z    . methodz      ^^^^^^r  r  s       r   test_multiline_method_call_cz=TracebackErrorLocationCaretTests.test_multiline_method_call_c  s    	 	 	 ##A&&1QQQ4+=QQQPPP1:+Dq+HPPP
 	*****r   c                     d }|                      |          }ddt           d| j         dddt           d|j        j        dz    dd	g}|                     ||           d S )
Nc                      t            d S rd  widthr   r   r   rk   zeTracebackErrorLocationCaretTests.test_wide_characters_unicode_with_problematic_byte_offset.<locals>.f0  s    OOOr   rz  r{  r   r|  r}  rH   r~  u       ｗｉｄｔｈr  r  s       r   9test_wide_characters_unicode_with_problematic_byte_offsetzZTracebackErrorLocationCaretTests.test_wide_characters_unicode_with_problematic_byte_offset/  s    	 	 	 ##A&&1QQQ4+=QQQPPP1:+Dq+HPPP"
 	*****r   c                     d }|                      |          }ddt           d| j         dddt           d|j        j        dz    dd	g}|                     ||           d S )
Nc                  $    d} t          |           NrH   r   r  s    r   rk   zXTracebackErrorLocationCaretTests.test_byte_offset_with_wide_characters_middle.<locals>.f?  s    O_---r   rz  r{  r   r|  r}  rJ   r~  u%       raise ValueError(ｗｉｄｔｈ)r  r  s       r   ,test_byte_offset_with_wide_characters_middlezMTracebackErrorLocationCaretTests.test_byte_offset_with_wide_characters_middle>  s    	. 	. 	. ##A&&1QQQ4+=QQQPPP1:+Dq+HPPP4
 	*****r   c                     d }|                      |          }ddt           d| j         dddt           d|j        j        dz    dd	d
g}|                     ||           d S )Nc                  @    d} d}t          d | |                     d S r   )print)wwwths     r   rk   zFTracebackErrorLocationCaretTests.test_byte_offset_multiline.<locals>.fN  s;    IF!YY      r   rz  r{  r   r|  r}  rG   r~  u       print(1, ｗｗｗ(z             ^^^^r  r  s       r   test_byte_offset_multilinez;TracebackErrorLocationCaretTests.test_byte_offset_multilineM  s    	 	 	 ##A&&1QQQ4+=QQQPPP1:+Dq+HPPP& 
 	*****r   N)r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r   r#  r-  r5  r9  r=  r@  rG  rL  ra  ru  r  r  r  r  r  r  r   r   r   r   r   w  s       < < < "*9A=M@ @ @$@ @ @$@ @ @"@ @ @(!@ !@ !@F@ @ @*D D D"D D D"D D D"D D D"D D D"D D D,D D D,D D D$D D D0P P P
/ / /@(D (D (DT+ + + + + ++ + + + + ++ + ++ + + + +r   r   c                   4    e Zd Z	 d Zej        j        dz   ZdS )CPythonTracebackErrorCaretTestsc                 @   ddl m} 	  |             |                     d           d S # t          $ rj}t	          d          5 } ||           d d d            n# 1 swxY w Y   |                                                                d d         cY d }~S d }~ww xY w)Nr   exception_printr   rl   r   )	_testcapir  r   r   r   r   rj   )r.   r   r  r}   tbstderrs        r   r   z-CPythonTracebackErrorCaretTests.get_exceptiong  s   ------	9HJJJII,----- 	9 	9 	9 ** #h"""# # # # # # # # # # # # # # #$$&&1133CRC8888888	9s>   ) 
BBABA	B!A	"0BBBr_   N)r   r   r   r   r   r   r   r   r   r   r  r  a  s4        9 9 9 "*9A=MMMr   r  c                       e Zd Zd Zedd            Zd Zd Zd Zd Z	d Z
 e            d	             Ze e            d
                         Zd Zed             Zd Zed             Zd Zed             Zd ZdS )TracebackFormatTestsc                      t          d          )Nblah)KeyErrorr8   s    r   some_exceptionz#TracebackFormatTests.some_exceptionv  s    vr   Nc                    ddl m} 	 |                                  t          d          # t          $ rS t          j                    \  }}}| ||j                   dd                    t          j
        |                    z   }t                      } |||           |                                }t          d          5 }	t          j        |           d d d            n# 1 swxY w Y   t                      }
t          j        ||
           t          d          5 }t          j                     d d d            n# 1 swxY w Y   t          j                    }t                      }t          j        |           Y nw xY w|                     ||           |                     |	                                |
                                           |                     |                                |                                           |                     ||                                           |                                }|d         }|                     t'          |          d           |d	         |d
         }}|                     |                    d                     |                     |                    d                     |                     |                    d                     d S )Nr   )traceback_printz&unable to create test traceback stringz#Traceback (most recent call last):
r   rl   r   r   r   	Traceback  Filez	    raise)r  r  r  r   r  r   exc_infor&   r   r,   	format_tbr   r   r   print_tbr   r   rQ   rj   rR   rS   
startswith)r.   cleanup_funcr  type_r1   r#   traceback_fmtfile_
python_fmtr  tbfile	excstderrexcfmtr   tb_linesbannerlocationsource_lines                     r   check_traceback_formatz+TracebackFormatTests.check_traceback_formaty  sE   ------	B!!!, @AAA+  	. 	. 	."|~~E5"'RZ(((BGGI$7$;$;<<=MJJEOB&&&..**J ** 'h"2&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' 'ZZFr//// ** &i#%%%& & & & & & & & & & & & & & &)++FjjGW------'	.0 	
333**,,foo.?.?@@@++--w/?/?/A/ABBB!1!1!3!3444 ((**!X*** (hrl+))+66777++H55666..{;;<<<<<sX   + BF	C'F	'C+	+F	.C+	/6F	%E9F	E			F	E		9F	F	c                 .    |                                   d S rd  r  r8   s    r   test_traceback_formatz*TracebackFormatTests.test_traceback_format  s    ##%%%%%r   c                 6    d }|                      |           d S )Nc                 8    | j                                          d S rd  )r$   clearr   s    r   
cleanup_tbzRTracebackFormatTests.test_traceback_format_with_cleared_frames.<locals>.cleanup_tb  s    Kr   r  )r.   r  s     r   )test_traceback_format_with_cleared_framesz>TracebackFormatTests.test_traceback_format_with_cleared_frames  s+    	  	  	 ##J/////r   c                 B   t          d          5 }t          j        t          j        d                     d d d            n# 1 swxY w Y   t                      }t          j        t          j        d          |           |                     |                                |                                           t          j        t          j        d                    }|                     |                                d	                    |                     d S )Nrl   rH   r   r   )
r   r,   print_stackr   	_getframer   rQ   r   format_stackr   )r.   ststderrstfilestfmts       r   test_stack_formatz&TracebackFormatTests.test_stack_format  s     X&& 	4(!#-"2"2333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4cmA..V<<<<**,,foo.?.?@@@&s}Q'7'788**,,bggenn=====s   'AA
Ac           	      F   d }t          d          5 } |             d d d            n# 1 swxY w Y   |j        j        }|                     |                                                                dd          dt          |dz   fz  ddt          |dz   fz  d	g           d S )
Nc                  ,    t          j                     d S rd  )r,   r  r   r   r   prnz2TracebackFormatTests.test_print_stack.<locals>.prn  s    !#####r   rl   z)  File "%s", line %d, in test_print_stackr_   z	    prn()z  File "%s", line %d, in prnrH   z    traceback.print_stack())r   r   r   rQ   r   rj   r   )r.   r  rl   r   s       r   test_print_stackz%TracebackFormatTests.test_print_stack  s    	$ 	$ 	$X&& 	&CEEE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	,**5577<78VAX:NN*hq-AA)	?
 	 	 	 	 	s   *..c                     d | _         fdt          d          5 }	               |                     d           n# t          $ r  |             Y nw xY wd d d            n# 1 swxY w Y   j        j        }dt           d|dz    dt           d|dz    d	t           d|dz    d	t           d|dz    d
}|                                }|                                                                }| 	                    |d d         |d d                    | 
                    |d         |d                    |                     |d         |d                    t          j                    }|                     t          t          j        d|d                                                             t%          |dz
  |                     d%fd	t          d          5 }	               |                     d           n# t&          $ r  |             Y nw xY wd d d            n# 1 swxY w Y   j        j        }	dt           d|	dz    dt           d|	dz    dt           d|	dz    dt           d|	dz    d}
dt           d|	dz    d}||
z                                   }|                                                                }| 	                    ||           d%fd	t          d          5 }	               |                     d           n# t&          $ r  |             Y nw xY wd d d            n# 1 swxY w Y   j        j        }dt           d|dz    dt           d|dz    dt           d|dz    dt           d|dz    dt           d|dz    d}||
z                                   }|                                                                }| 	                    ||           t          d          5 }	  t(          j                   |                     d           n# t&          $ r  |             Y nw xY wd d d            n# 1 swxY w Y   dt           d|	dz    dt           d|	dz    dt           d|	dz    dt           d|	dz    d}
dt           d|	d z    d!}||
z                                   }|                                                                }| 	                    ||           t          d          5 }	  t(          j        dz              |                     d           n# t&          $ r  |             Y nw xY wd d d            n# 1 swxY w Y   dt           d|	dz    dt           d|	dz    dt           d|	dz    d"t           d|	dz    d}
dt           d|	d#z    d$}||
z                                   }|                                                                }| 	                    ||           d S )&Nc                                     d S rd  r   rk   s   r   rk   zBTracebackFormatTests._check_recursive_traceback_display.<locals>.f  s    ACCCCCr   rl   zno recursion occurredr   r   r   z8, in _check_recursive_traceback_display
    f()
  File "rH   z, in f
    f()
  File "zn, in f
    f()
  \[Previous line repeated (\d+) more times\]
RecursionError: maximum recursion depth exceeded
r  r   z\d+<   r  c                 2    | r | dz
            S t           r  r   )rW   rk  s    r   rk  zBTracebackFormatTests._check_recursive_traceback_display.<locals>.g  s#     "qqzz!r   zno value error was raisedr{  rJ   z;, in g
    return g(count-1)
           ^^^^^^^^^^
  File "zc, in g
    return g(count-1)
           ^^^^^^^^^^
  [Previous line repeated 7 more times]
  File "r_   z', in g
    raise ValueError
ValueError
   z0, in _check_recursive_traceback_display
    g()
c                 <    | r | dz
            S               d S r  r   )rW   rk  hs    r   r  zBTracebackFormatTests._check_recursive_traceback_display.<locals>.h%  s,     "qqzz!ACCCCCr   z8, in _check_recursive_traceback_display
    h()
  File "z;, in h
    return h(count-1)
           ^^^^^^^^^^
  File "zc, in h
    return h(count-1)
           ^^^^^^^^^^
  [Previous line repeated 7 more times]
  File "z, in h
    g()
zno error raisedM   zK, in _check_recursive_traceback_display
    g(traceback._RECURSIVE_CUTOFF)
zb, in g
    return g(count-1)
           ^^^^^^^^^^
  [Previous line repeated 1 more time]
  File "l   zO, in _check_recursive_traceback_display
    g(traceback._RECURSIVE_CUTOFF + 1)
)r  )maxDiffr   r   RecursionErrorr   r   r   rj   r   rQ   assertRegexrU   r   getrecursionlimitr  researchgroupranger+   r,   _RECURSIVE_CUTOFF)r.   
render_excstderr_fr   result_fr   r  	rec_limitstderr_glineno_gresult_gtb_linestderr_hlineno_hresult_hrk   rk  r  s                  @@@r   "_check_recursive_traceback_displayz7TracebackFormatTests._check_recursive_traceback_display  s	    	 	 	 	 	 X&& 	3(3 		12222 "   
	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 :,AA A)1!A A  A A *2!A A
  A A
 *2!A A  A A *2!A A A 	$ &&((""$$//11 	hssm444Xb\222hrlF2J/// )++	c")FF2J77==??@@%	RTV_B`B`aaa	 	 	 	 	 	
 X&& 	7(7 		56666    
	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 :,x  !      *2!     *2!     *2!   	  )1!   	
 h&2244""$$//11***	 	 	 	 	 	 	
 X&& 	7(7 		56666    
	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 :, )1!     *2!     *2!     *2!     *2!   	" x'3355""$$//11*** X&& 	-(-)-... 		+,,,,    
	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-x  !      *2!     *2!     *2!   	33 3)1"3 3 3 	
 h&2244""$$//11*** X&& 	-(-)-1222 		+,,,,    
	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-x  !      *2!     *2!     *2!   	 77 7)1#7 7 7 	
 h&2244""$$//11*****s  A'
AA'AA'AA''A+.A+$H,&
H0H,HH,HH,,H03H08M :
LM L1.M 0L11M  MMQP/Q/QQQQQQU$T>(U$>UU$UU$$U(+U(c                 D    |                      t          j                   d S rd  )r  r,   r   r8   s    r   test_recursive_traceback_pythonz4TracebackFormatTests.test_recursive_traceback_python  s    //	0CDDDDDr   c                 H    ddl m fd}|                     |           d S )Nr   r  c                  L    t          j                    \  } }} |           d S rd  r   r  )exc_type	exc_valueexc_tbr  s      r   r  zRTracebackFormatTests.test_recursive_traceback_cpython_internal.<locals>.render_exc  s+    *-,..'HiOI&&&&&r   )r  r  r  )r.   r  r  s     @r   )test_recursive_traceback_cpython_internalz>TracebackFormatTests.test_recursive_traceback_cpython_internal  sL     	.-----	' 	' 	' 	' 	' 	//
;;;;;r   c                     d } |            }|j         j        }|                     |dd          dt          |dz   fz  dt          |dz   fz  g           d S )Nc                  (    t          j                    S rd  )r,   r  r   r   r   fmtz3TracebackFormatTests.test_format_stack.<locals>.fmt  s    )+++r   r  z>  File "%s", line %d, in test_format_stack
    result = fmt()
rJ   zA  File "%s", line %d, in fmt
    return traceback.format_stack()
rH   )r   r   rQ   r   )r.   r  resultr   s       r   test_format_stackz&TracebackFormatTests.test_format_stack  s    	, 	, 	,,#&.q%9:47?6JK'
 	 	 	 	 	r   c                    ddl m}  G d dt                    } |d          } |d          }	 ||# |$ r( 	 |# |$ r t          j                    \  }}}Y nw xY wY nw xY wt          d          5 } ||           d d d            n# 1 swxY w Y   |                                                                                                }	| 	                    dt          |	                     | 	                    t                                          |	d	                    |                     d
|	d                    |                     d|	d                    d S )Nr   r  c                       e Zd Zd ZdS )ATracebackFormatTests.test_unhashable.<locals>.UnhashableExceptionc                     dS NTr   r.   others     r   __eq__zHTracebackFormatTests.test_unhashable.<locals>.UnhashableException.__eq__      tr   Nr   r   r   r  r   r   r   UnhashableExceptionr    #            r   r  ex1ex2rl      r   zUnhashableException: ex2r_   zUnhashableException: ex1r  )r  r  r   r   r  r   r   rT   rj   rQ   rR   context_messagerU   )
r.   r  r  r	  r
  r  exc_valr  r  r#   s
             r   test_unhashablez$TracebackFormatTests.test_unhashable  s   ------	 	 	 	 	) 	 	 	 "!%((!!%((	;3" 	; 	; 	;;	& ; ; ;,/LNN)'666;#)6		; X&& 	%(OG$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%   &&((3355SWW%%%..00"Q%8880"Q%8880"R&99999s<   4 A!<AA!AA! A!3BBBc                 j    t          d          }t          d          D ]}t          d|g          }|S )NrH   i  rC  )r   r  rE  )r.   r}   is      r   deep_egzTracebackFormatTests.deep_eg  s:    aLLt 	* 	*AtaS))AAr   c                    ddl m} d}|                                 }t          d          5 }t	          j        |          5   ||           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                                }|                     d|           |                     |	                    d          |           d S )Nr   r  K   rl   	max_depthrE  )
r  r  r  r   r   infinite_recursionr   rU   assertLessEqualrW   )r.   r  LIMITrC  r  r   s         r   (test_exception_group_deep_recursion_capiz=TracebackFormatTests.test_exception_group_deep_recursion_capi  sP   ------\\^^X&& 	$(+e<<< $ $###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ ""$$&///V\\*:;;UCCCCCs5   A1AA1A	A1!A	"A11A58A5c                    d}|                                  }t          d          5 }t          j        |          5  t	          j        t          |          ||j                   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                                }| 	                    d|           | 
                    |                    d          |           d S )Nr  rl   r  rE  )r  r   r   r  r,   r   typer   r   rU   r  rW   )r.   r  rC  r  r   s        r   -test_exception_group_deep_recursion_tracebackzBTracebackFormatTests.test_exception_group_deep_recursion_traceback  sm   \\^^X&& 	J(+e<<< J J)$r((B8HIIIJ J J J J J J J J J J J J J J	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J ""$$&///V\\*:;;UCCCCCs4   B)A1%B1A5	5B8A5	9BBBc                     ddl m} t          d          5 } |d           d d d            n# 1 swxY w Y   |                     |                                d           d S )Nr   r  rl   *   zFTypeError: print_exception(): Exception expected for value, int found
)r  r  r   rQ   r   )r.   r  rl   s      r   "test_print_exception_bad_type_capiz7TracebackFormatTests.test_print_exception_bad_type_capi  s    ------X&& 	 &OB	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 OO9	
 	
 	
 	
 	
s   .22c                     d}|                      t          |          5  t          j        d           d d d            d S # 1 swxY w Y   d S )Nz'Exception expected for value, int foundr  )r   r   r,   r   )r.   msgs     r   $test_print_exception_bad_type_pythonz9TracebackFormatTests.test_print_exception_bad_type_python  s    7##Is33 	* 	*%b)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   A  AArd  )r   r   r   r  r   r  r  r  r  r  r  r
   r  r  r  r  r  r  r  r  r"  r   r   r   r  r  t  s}          *= *= *= \*=X& & &0 0 0> > >  {+ {+ {+z E E E < <  \<
 
 
 : : \:4   	D 	D \	DD D D 
 
 \
* * * * *r   r  zG
The above exception was the direct cause of the following exception:

zF
During handling of the above exception, another exception occurred:

rO   |rw   c                       e Zd Zd Zej        j        dz   Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"dS ) BaseExceptionReportingTestsc                 |    t          |t                    r|S 	  |             d S # t          $ r}|cY d }~S d }~ww xY wrd  )
isinstanceBaseExceptionr   )r.   exception_or_callabler}   s      r   r   z)BaseExceptionReportingTests.get_exception  sc    +];; 	)((	!!##### 	 	 	HHHHHH	s   
% 
;6;;rG   c                     ddz   d S r   r   r8   s    r   zero_divz$BaseExceptionReportingTests.zero_div  s    	!r   c                    |                                 }t                      rK|                     |d                             d                     |                     d|d                    nJ|                     |d                             d                     |                     d|d                    |                     |d                             d          |d                    d S )Nr  z1/0 # In zero_divr  r  r   ZeroDivisionError)rj   r   rS   r  rU   )r.   r!  rm   s      r   check_zero_divz*BaseExceptionReportingTests.check_zero_div  s         	:OOE"I00::;;;MM-uRy9999OOE"I00::;;;MM-uRy999b	,,-@AA59MMMMMr   c                    	 ddz   n# t           $ r}|}Y d }~nd }~ww xY w|                     |                                          }t                      rR|                     t          |          d           |                     |d                             d                     nQ|                     t          |          d           |                     |d                             d                     |                     |d                             d                     |                     |d                             d                     |                     d	|d
                    d S )NrH   r   rG   r_   r.  r   r  r  z1/0 # MarkerrJ   )	r.  
get_reportrj   r   rQ   rR   rS   r  rU   r.   r   r}   rm   s       r   test_simplez'BaseExceptionReportingTests.test_simple  sW   	aCCC  	 	 	AAAAAA	""--//   	FSZZ+++OOE!H//0CDDEEEESZZ+++OOE!H//0CDDEEEa++K88999a++H55666neAh/////s    
c                 n     fdfd}t                                                    |                    }                     t	          |          d                                |d         t
                                          |d                                         d|d                    d S )Nc                  f    	                                   d S # t          $ r} t          | d } ~ ww xY wrd  r+  r.  r  )r}   r.   s    r   inner_raisez;BaseExceptionReportingTests.test_cause.<locals>.inner_raise  s@    &$ & & &A%&s    
0+0c                                     d S rd  r   r7  s   r   outer_raisez;BaseExceptionReportingTests.test_cause.<locals>.outer_raise"      KMMMMMr   r_   rH   r   inner_raise() # MarkerrJ   
boundariessplitr1  rQ   rR   cause_messager/  rU   r.   r:  blocksr7  s   `  @r   
test_causez&BaseExceptionReportingTests.test_cause  s    	& 	& 	& 	& 	&
	 	 	 	 	!!$//+">">??Va(((M222F1I&&&.q	:::::r   c                 n     fdfd}t                                                    |                    }                     t	          |          d                                |d         t
                                          |d                                         d|d                    d S )Nc                  \    	                                    d S # t          $ r t          w xY wrd  r6  r8   s   r   r7  z=BaseExceptionReportingTests.test_context.<locals>.inner_raise+  s9    $   s    +c                                     d S rd  r   r9  s   r   r:  z=BaseExceptionReportingTests.test_context.<locals>.outer_raise0  r;  r   r_   rH   r   r<  rJ   )r>  r?  r1  rQ   rR   r  r/  rU   rA  s   `  @r   test_contextz(BaseExceptionReportingTests.test_context*  s    	 	 	 	 	
	 	 	 	 	!!$//+">">??Va(((O444F1I&&&.q	:::::r   c                 D   	 	 t           #  t          d xY w# t          $ r}|}Y d }~nd }~ww xY w|                     |                                          }|                     t          |          d           |                     |d                             d                     |                     |d                             d                     |                     |d                             d                     |                     d|d	                    d S )
NrG   r_   r.  r   r  rH   r  zZeroDivisionError from NonerJ   )	r   r.  r1  rj   rQ   rR   rS   r  rU   r2  s       r   test_context_suppressionz4BaseExceptionReportingTests.test_context_suppression8  s   	22'T1  	 	 	AAAAAA	""--//UQ'''a++,?@@AAAa++K88999a++H556663U1X>>>>>s   
 
 
-(-c                 n     fdfd}t                                                    |                    }                     t	          |          d                                |d         t
                                          |d                                         d|d                    d S )Nc                      	                                   n# t          $ r} | }Y d } ~ nd } ~ ww xY w	 t           d S # t          $ r	 t          |w xY wrd  )r+  r.  xyzzy	NameErrorr  )_er}   r.   s     r   r7  zGBaseExceptionReportingTests.test_cause_and_context.<locals>.inner_raiseJ  sv    $   & & & &A%&s    
.).; Ac                                     d S rd  r   r9  s   r   r:  zGBaseExceptionReportingTests.test_cause_and_context.<locals>.outer_raiseS  r;  r   r_   rH   r   r<  rJ   r=  rA  s   `  @r   test_cause_and_contextz2BaseExceptionReportingTests.test_cause_and_contextG  s    	& 	& 	& 	& 	&	 	 	 	 	!!$//+">">??Va(((M222F1I&&&.q	:::::r   c                      fdfd}t                                                    |                    }                     t	          |          d                                |d         t
                                          d|d                                         d|d                                         d|d	                                         |d	                    d S )
Nc                      	 	                                   d S # t          $ r} | }t          | d } ~ ww xY w# t          $ r} || d } ~ ww xY wrd  r6  )r}   r(  r.   s     r   r7  zEBaseExceptionReportingTests.test_cause_recursive.<locals>.inner_raise\  sr    *MMOOOOO( * * *A")*    Qs%    
3
.36 
A AAc                                     d S rd  r   r9  s   r   r:  zEBaseExceptionReportingTests.test_cause_recursive.<locals>.outer_raisee  r;  r   r_   rH   zraise KeyError from er   z1/0r<  rJ   )	r>  r?  r1  rQ   rR   r@  rU   assertNotInr/  rA  s   `  @r   test_cause_recursivez0BaseExceptionReportingTests.test_cause_recursive[  s    	 	 	 	 		 	 	 	 	!!$//+">">??Va(((M222-vay999q	*** 	.q	:::F1I&&&&&r   c                    d }|                      |                                          }|                     |d         d           d }|                      |                                          }|                     |d         d           d S )Nc                  "    t          dd          )Nr   )r   r   r   hello)rP   r   r   r   r}   zFBaseExceptionReportingTests.test_syntax_error_offset_at_eol.<locals>.et  s    b"5666r   r  z	        ^c                  $    t          d           d S )Nzx = 5 | 4 |)r5   r   r   r   r}   zFBaseExceptionReportingTests.test_syntax_error_offset_at_eol.<locals>.ex  s    r   z               ^)r1  rj   rQ   r.   r}   r!  s      r   test_syntax_error_offset_at_eolz;BaseExceptionReportingTests.test_syntax_error_offset_at_eolr  s    	7 	7 	7ooa  ++--R+...	  	  	 ooa  ++--R"455555r   c                 `   t          d          }|                     |                                          }|                     |dg           d|_        |                     |                                          }|                     |ddg           t          d          }d|_        |                     |                                          }|                     |dg           d|_        |                     |                                          }|                     |ddg           d S )Nr^   zSyntaxError: bad syntaxd   z  File "<string>", line 100z	myfile.pyz#SyntaxError: bad syntax (myfile.py)z  File "myfile.py", line 100)rP   r1  rj   rQ   r   filenamerZ  s      r   test_syntax_error_no_linenoz7BaseExceptionReportingTests.test_syntax_error_no_lineno}  sA    %%ooa  ++--&'	) 	) 	)ooa  ++--*,EF	H 	H 	H %% 
ooa  ++--23	5 	5 	5ooa  ++--+-FG	I 	I 	I 	I 	Ir   c                    |                      t          d                     }|                     d|           |                      t          d                    }|                     d|           |                      t                                }|                     d|           |                      t          d                    }|                     d|           d S )NzException: None
Nonez
Exception
r   )r1  r   rU   rX   s     r   test_message_nonez-BaseExceptionReportingTests.test_message_none  s    ooioo..)3///ooi//00)3///ooikk**mS)))ooimm,,mS)))))r   c                    t          dd          D ]Y}dD ]R}d|z  d|z  z   }dg}|dk     r+|                    d|                                z             n|d	k    rI|                    d|                                z             |                    d
d|dz
  z  z             nB|                    d|                                z             |                    d
dz             |                    d           |                    d           |                     t	          ddd||z   |f                    }d                    |          }|                     ||           T[d S )Nr  )r   rJ   r;  ztext%dz  File "file.py", line 1rH   z    %sr   z    %s^z     zSyntaxError: msgr   r!  zfile.pyrL   )r  appendrI  r1  rP   r   rQ   )r.   offsetaddr   r   rY   exps          r   !test_syntax_error_various_offsetsz=BaseExceptionReportingTests.test_syntax_error_various_offsets  su   Bmm 	+ 	+F + +3wF!2267A::OOHt{{}}$<====q[[OOHt{{}}$<===OOIfQh$@AAAAOOHt{{}}$<===OOI$7888 2333###ook%)Qs
TX9Y&Z&Z[[ii))  c****+	+ 	+r   c                 2   t          d          }|                     |          }|                    d           |                     |                     |          |dz              |`|                    d           |                     |                     |          |dz              |`|                    d           |                     |                     |          |dz              |`|                     |                     |          |           d S )N{   zMy NotezMy Note
r   rL   z	Your Notez
Your Note
r+   r1  add_noterQ   	__notes__r.   r}   vanillas      r   test_exception_with_notez4BaseExceptionReportingTests.test_exception_with_note  s    sOO//!$$	

9++W{-BCCCK	

2++Wt^<<<K	

;++W}-DEEEK++W55555r   c                 ~   t          d          }|                     |          } G d d          } G d d          } |            |_        d}|                     |                     |          ||z               |            |_        d}|                     |                     |          ||z               |            dg|_        d	}|                     |                     |          ||z   d
z               |            dg|_        d}|                     |                     |          ||z   d
z              d S )Nrk  c                       e Zd Zd Zd ZdS )OBaseExceptionReportingTests.test_exception_with_invalid_notes.<locals>.BadThingc                     dS )Nbad strr   r8   s    r   r   zWBaseExceptionReportingTests.test_exception_with_invalid_notes.<locals>.BadThing.__str__  s     yr   c                     dS )Nbad reprr   r8   s    r   __repr__zXBaseExceptionReportingTests.test_exception_with_invalid_notes.<locals>.BadThing.__repr__  s    !zr   N)r   r   r   r   ry  r   r   r   BadThingrt    s2        ! ! !" " " " "r   rz  c                       e Zd Zd ZdS )RBaseExceptionReportingTests.test_exception_with_invalid_notes.<locals>.Unprintablec                      t          d          N	bad valuer   r8   s    r   ry  z[BaseExceptionReportingTests.test_exception_with_invalid_notes.<locals>.Unprintable.__repr__  s     ---r   N)r   r   r   ry  r   r   r   Unprintabler|    s#        . . . . .r   r  rx  z<__notes__ repr() failed>z
Final Noterv  z
Final Note
z<note str() failed>)r+   r1  rn  rQ   )r.   r}   rp  rz  r  
notes_reprr   bad_notes           r   !test_exception_with_invalid_notesz=BaseExceptionReportingTests.test_exception_with_invalid_notes  st   sOO//!$$	" 	" 	" 	" 	" 	" 	" 	"	. 	. 	. 	. 	. 	. 	. 	. hjj
++Wz-ABBB!kmm-++Ww->??? !

L1++Wx-?BR-RSSS $|4'++Ww->AQ-QRRRRRr   c                    t          d          }|                     |          }|                    d           |                    d           |                    d           |                     |                     |          |dz   dz   dz              |`|                    d           |`|                    d	           |                    d
           |                     |                     |          |dz   dz              d S )Nr  zNote 1zNote 2zNote 3zNote 1
zNote 2
zNote 3
zNote 4zNote 5zNote 6zNote 5
zNote 6
rl  ro  s      r   ,test_exception_with_note_with_multiple_noteszHBaseExceptionReportingTests.test_exception_with_note_with_multiple_notes  s   rNN//!$$	

8	

8	

8OOAj :-
:	< 	< 	< K	

8K	

8	

8OOAj :-	/ 	/ 	/ 	/ 	/r   c                 2    G d d          }|                      |j                                                  }d}d                    |j        j        j        |j        j        j        g          }|d|d}|                     |t          |z              d S )Nc                   (    e Zd Z G d d          ZdS )>BaseExceptionReportingTests.test_exception_qualname.<locals>.Ac                   *    e Zd Z G d de          ZdS )@BaseExceptionReportingTests.test_exception_qualname.<locals>.A.Bc                       e Zd Zd ZdS )BBaseExceptionReportingTests.test_exception_qualname.<locals>.A.B.Xc                     dS NI am Xr   r8   s    r   r   zJBaseExceptionReportingTests.test_exception_qualname.<locals>.A.B.X.__str__  s    'xr   Nr   r   r   r   r   r    s#        ( ( ( ( (r   r   N)r   r   r   r   r   r   r   r   Br    s>        ( ( ( ( (	 ( ( ( ( (r   r  N)r   r   r   r  r   r   r   rp  r     s<        ( ( ( ( ( ( ( ( ( (r   rp  r  r   r   rL   )r1  r  r   r   r   r   rQ   MODULE_PREFIX)r.   rp  rY   r   r   rh  s         r   test_exception_qualnamez3BaseExceptionReportingTests.test_exception_qualname  s    	( 	( 	( 	( 	( 	( 	( 	( ooaceegg&&	88QSU-qsu/ABCC$HHiii0mc122222r   c                 t    G d dt                     }dD ]}||_        |                     |          5  |                      |                      }d}|dv r|j        }n!d                    |j        |j        g          }|d|d	}|                     ||           d d d            n# 1 swxY w Y   d S )
Nc                       e Zd Zd ZdS )@BaseExceptionReportingTests.test_exception_modulename.<locals>.Xc                     dS r  r   r8   s    r   r   zHBaseExceptionReportingTests.test_exception_modulename.<locals>.X.__str__      xr   Nr   r   r   r   r   r    #                 r   r   )r   r   some_module)
modulenamer  )r   r   r   r   rL   )r   r   subTestr1  r   r   rQ   )r.   r   r  rY   r   r   rh  s          r   test_exception_modulenamez5BaseExceptionReportingTests.test_exception_modulename  s,   	  	  	  	  	 	 	  	  	  @ 
	+ 
	+J%AL44 + +ooaacc**$	!999 ~HH"xxq~(FGGH$,HHiii8  c***+ + + + + + + + + + + + + + +
	+ 
	+s   A+B,,B0	3B0	c                      G d dt                     }d|_        |                      |                      }d|j         d}|                     ||           d S )Nc                       e Zd Zd ZdS )LBaseExceptionReportingTests.test_exception_modulename_not_unicode.<locals>.Xc                     dS r  r   r8   s    r   r   zTBaseExceptionReportingTests.test_exception_modulename_not_unicode.<locals>.X.__str__  r  r   Nr   r   r   r   r   r    r  r   r   r  z
<unknown>.z	: I am X
)r   r   r1  r   rQ   )r.   r   rY   rh  s       r   %test_exception_modulename_not_unicodezABaseExceptionReportingTests.test_exception_modulename_not_unicode  sz    	  	  	  	  	 	 	  	  	  ooaacc""51>555c"""""r   c                      G d dt                     }|                      |                      }d}d                    |j        |j        g          }|                     t          |z   | d| d           d S )Nc                       e Zd Zd ZdS )@BaseExceptionReportingTests.test_exception_bad__str__.<locals>.Xc                     ddz   d S r   r   r8   s    r   r   zHBaseExceptionReportingTests.test_exception_bad__str__.<locals>.X.__str__*  r   r   Nr   r   r   r   r   r  )  r   r   r   r   r   r   rL   )r   r1  r   r   r   rQ   r  r   s        r   test_exception_bad__str__z5BaseExceptionReportingTests.test_exception_bad__str__(  s    	 	 	 	 		 	 	 	 ooaacc"".	88Q\1>:;;,.J.JY.J.J.JKKKKKr   c           	          d }dt            d| j         dt            d|j        j        dz    d	}|                     |          }|                     ||           d S )Nc                  Z    t          dt          d          t          d          g          )NrC  rH   rJ   rD  r   r   r   r0   zCBaseExceptionReportingTests.test_exception_group_basic.<locals>.exc5  s#     
1y||'DEEEr   rF  r   ?, in get_exception
  |     exception_or_callable()
  |   File "rH   a  , in exc
  |     raise ExceptionGroup("eg", [ValueError(1), TypeError(2)])
  | ExceptionGroup: eg (2 sub-exceptions)
  +-+---------------- 1 ----------------
    | ValueError: 1
    +---------------- 2 ----------------
    | TypeError: 2
    +------------------------------------
r   r   r   r   r1  rQ   r.   r0   r   reports       r   test_exception_group_basicz6BaseExceptionReportingTests.test_exception_group_basic4  s    	F 	F 	F
<$
< 
<.2.@
< 
< %
< 
< /2l.IA.M
< 
< 
< 	 %%*****r   c                     d }dt            d|j        j        dz    dt            d| j         dt            d|j        j        dz    d}|                     |          }|                     ||           d S )	Nc                      t           } 	  | dt          d          t          d          g          # t          $ r.} | dt          d          t          d          g          |d }~ww xY w)Neg1rH   rJ   eg2r_   rG   rE  r+   r   r   )EGr}   s     r   r0   zCBaseExceptionReportingTests.test_exception_group_cause.<locals>.excI  sx    BFbA	! =>>> F F FbA	! =>>AEFs   (1 
A))A$$A)rF  r   r_   a  , in exc
  |     raise EG("eg1", [ValueError(1), TypeError(2)])
  | ExceptionGroup: eg1 (2 sub-exceptions)
  +-+---------------- 1 ----------------
    | ValueError: 1
    +---------------- 2 ----------------
    | TypeError: 2
    +------------------------------------

The above exception was the direct cause of the following exception:

  + Exception Group Traceback (most recent call last):
  |   File "r  r   a  , in exc
  |     raise EG("eg2", [ValueError(3), TypeError(4)]) from e
  | ExceptionGroup: eg2 (2 sub-exceptions)
  +-+---------------- 1 ----------------
    | ValueError: 3
    +---------------- 2 ----------------
    | TypeError: 4
    +------------------------------------
r   r   r   r   r1  rQ   r  s       r   test_exception_group_causez6BaseExceptionReportingTests.test_exception_group_causeH  s    	F 	F 	FC#+C C58\5PST5TC C $,C C 6:5GC C $,C C 69\5PST5TC C C0 %%*****r   c                    d }dt            d|j        j        dz    dt            d|j        j        dz    dt            d| j         dt            d|j        j        d	z    d
}|                     |          }|                     ||           d S )Nc                      t           } 	 	  | dt          d          t          d          g          #   | dt          d          t          d          g          xY w#  t          d          xY w)Nr  rH   rJ   r  r_   rG   r   )rE  r+   r   ImportError)r  s    r   r0   zRBaseExceptionReportingTests.test_exception_group_context_with_context.<locals>.excl  sw    B%C"UZ]]IaLL$ABBBC"UZ]]IaLL$ABBB%!!nn$s   (2 *AA A0rF  r   rG   a  , in exc
  |     raise EG("eg1", [ValueError(1), TypeError(2)])
  | ExceptionGroup: eg1 (2 sub-exceptions)
  +-+---------------- 1 ----------------
    | ValueError: 1
    +---------------- 2 ----------------
    | TypeError: 2
    +------------------------------------

During handling of the above exception, another exception occurred:

  + Exception Group Traceback (most recent call last):
  |   File "r   a  , in exc
  |     raise EG("eg2", [ValueError(3), TypeError(4)])
  | ExceptionGroup: eg2 (2 sub-exceptions)
  +-+---------------- 1 ----------------
    | ValueError: 3
    +---------------- 2 ----------------
    | TypeError: 4
    +------------------------------------

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "z7, in get_exception
    exception_or_callable()
  File "   z1, in exc
    raise ImportError(5)
ImportError: 5
r  r  s       r   )test_exception_group_context_with_contextzEBaseExceptionReportingTests.test_exception_group_context_with_contextk  s    	% 	% 	%!$! !.1l.IA.M! ! %! ! /2l.IA.M! !2 !3! !2 +/*<3! !6 !7! !6 +.,*E*I7! ! ! 	@ %%*****r   c                    d }dt            d|j        j        dz    dt            d|j        j        dz    dt            d| j         dt            d|j        j        d	z    d
}|                     |          }|                     ||           d S )Nc                     t           } t          }t          }	 	  | d |d           |d          g          # t          $ r}|}Y d }~nd }~ww xY w | d |d          | |d          g          #   | d |d          g          xY w)	NnestedrJ   r_   rC  rH   rG   topr   r  )r  VETEr}   r0   s        r   r0   zDBaseExceptionReportingTests.test_exception_group_nested.<locals>.exc  s    BBB)"X1rr!uu~666    CCCCCCb1sBBqEE2333)bA(((s'    8 
AA	A2 	A$A2 2B
rF  r   	   a  , in exc
  |     raise EG("eg", [VE(1), exc, VE(4)])
  | ExceptionGroup: eg (3 sub-exceptions)
  +-+---------------- 1 ----------------
    | ValueError: 1
    +---------------- 2 ----------------
    | Exception Group Traceback (most recent call last):
    |   File "r   a  , in exc
    |     raise EG("nested", [TE(2), TE(3)])
    | ExceptionGroup: nested (2 sub-exceptions)
    +-+---------------- 1 ----------------
      | TypeError: 2
      +---------------- 2 ----------------
      | TypeError: 3
      +------------------------------------
    +---------------- 3 ----------------
    | ValueError: 4
    +------------------------------------

During handling of the above exception, another exception occurred:

  + Exception Group Traceback (most recent call last):
  |   File "r  r  z, in exc
  |     raise EG("top", [VE(5)])
  | ExceptionGroup: top (1 sub-exception)
  +-+---------------- 1 ----------------
    | ValueError: 5
    +------------------------------------
r  r  s       r   test_exception_group_nestedz7BaseExceptionReportingTests.test_exception_group_nested  s    	) 	) 	)C#+C C58\5PST5TC C &.C C 8;|7RUV7VC C. $,/C C. 6:5G/C C2 $,3C C2 69\5PSU5U3C C C@ %%*****r   c                     g }t          d          D ]$}|                    t          |                     %t          d|          }d}|                     |          }|                     ||           d S )N  rC  a>    | ExceptionGroup: eg (1000 sub-exceptions)
  +-+---------------- 1 ----------------
    | ValueError: 0
    +---------------- 2 ----------------
    | ValueError: 1
    +---------------- 3 ----------------
    | ValueError: 2
    +---------------- 4 ----------------
    | ValueError: 3
    +---------------- 5 ----------------
    | ValueError: 4
    +---------------- 6 ----------------
    | ValueError: 5
    +---------------- 7 ----------------
    | ValueError: 6
    +---------------- 8 ----------------
    | ValueError: 7
    +---------------- 9 ----------------
    | ValueError: 8
    +---------------- 10 ----------------
    | ValueError: 9
    +---------------- 11 ----------------
    | ValueError: 10
    +---------------- 12 ----------------
    | ValueError: 11
    +---------------- 13 ----------------
    | ValueError: 12
    +---------------- 14 ----------------
    | ValueError: 13
    +---------------- 15 ----------------
    | ValueError: 14
    +---------------- ... ----------------
    | and 985 more exceptions
    +------------------------------------
)r  re  r+   rE  r1  rQ   )r.   excsr  rC  r   r  s         r    test_exception_group_width_limitz<BaseExceptionReportingTests.test_exception_group_width_limit  s~    t 	' 	'AKK
1&&&&D$''!BF $$*****r   c           	         t          d          }t          d          D ]3}t          d| t          |          |t          |           g          }4d}|                     |          }|                     ||           d S )Nbad typer  rC  a    | ExceptionGroup: eg999 (3 sub-exceptions)
  +-+---------------- 1 ----------------
    | ValueError: 999
    +---------------- 2 ----------------
    | ExceptionGroup: eg998 (3 sub-exceptions)
    +-+---------------- 1 ----------------
      | ValueError: 998
      +---------------- 2 ----------------
      | ExceptionGroup: eg997 (3 sub-exceptions)
      +-+---------------- 1 ----------------
        | ValueError: 997
        +---------------- 2 ----------------
        | ExceptionGroup: eg996 (3 sub-exceptions)
        +-+---------------- 1 ----------------
          | ValueError: 996
          +---------------- 2 ----------------
          | ExceptionGroup: eg995 (3 sub-exceptions)
          +-+---------------- 1 ----------------
            | ValueError: 995
            +---------------- 2 ----------------
            | ExceptionGroup: eg994 (3 sub-exceptions)
            +-+---------------- 1 ----------------
              | ValueError: 994
              +---------------- 2 ----------------
              | ExceptionGroup: eg993 (3 sub-exceptions)
              +-+---------------- 1 ----------------
                | ValueError: 993
                +---------------- 2 ----------------
                | ExceptionGroup: eg992 (3 sub-exceptions)
                +-+---------------- 1 ----------------
                  | ValueError: 992
                  +---------------- 2 ----------------
                  | ExceptionGroup: eg991 (3 sub-exceptions)
                  +-+---------------- 1 ----------------
                    | ValueError: 991
                    +---------------- 2 ----------------
                    | ExceptionGroup: eg990 (3 sub-exceptions)
                    +-+---------------- 1 ----------------
                      | ValueError: 990
                      +---------------- 2 ----------------
                      | ... (max_group_depth is 10)
                      +---------------- 3 ----------------
                      | ValueError: -990
                      +------------------------------------
                    +---------------- 3 ----------------
                    | ValueError: -991
                    +------------------------------------
                  +---------------- 3 ----------------
                  | ValueError: -992
                  +------------------------------------
                +---------------- 3 ----------------
                | ValueError: -993
                +------------------------------------
              +---------------- 3 ----------------
              | ValueError: -994
              +------------------------------------
            +---------------- 3 ----------------
            | ValueError: -995
            +------------------------------------
          +---------------- 3 ----------------
          | ValueError: -996
          +------------------------------------
        +---------------- 3 ----------------
        | ValueError: -997
        +------------------------------------
      +---------------- 3 ----------------
      | ValueError: -998
      +------------------------------------
    +---------------- 3 ----------------
    | ValueError: -999
    +------------------------------------
)r   r  rE  r+   r1  rQ   )r.   r0   r  r   r  s        r    test_exception_group_depth_limitz<BaseExceptionReportingTests.test_exception_group_depth_limit  s    
##t 	6 	6A QAZ^^46 6CCFBP %%*****r   c                    d }dt            d| j         dt            d|j        j        dz    dt            d|j        j        dz    dt            d|j        j        dz    d	}|                     |          }|                     ||           d S )
Nc                  (   	 g } dD ]U}	 t          |          # t           $ r7}|                    d|            |                     |           Y d }~Nd }~ww xY wt          d|           # t          $ r}|                    d            d }~ww xY w)Nr  zterrible valuethe r  t>> Multi line note
>> Because I am such
>> an important exception.
>> empty lines work too

(that was an empty line)r+   rm  re  rE  r  r!  r}   s      r   r0   zHBaseExceptionReportingTests.test_exception_group_with_notes.<locals>.excI  s    : ' 'C'(oo-% ' ' '

<#<<000A' %Xt444!   

 7 9 9 9 s7   A, 
A-AA, AA, ,
B6BBrF  r   r  r  aQ  , in exc
  |     raise ExceptionGroup("nested", excs)
  | ExceptionGroup: nested (2 sub-exceptions)
  | >> Multi line note
  | >> Because I am such
  | >> an important exception.
  | >> empty lines work too
  | 
  | (that was an empty line)
  +-+---------------- 1 ----------------
    | Traceback (most recent call last):
    |   File "r   z, in exc
    |     raise ValueError(msg)
    | ValueError: bad value
    | the bad value
    +---------------- 2 ----------------
    | Traceback (most recent call last):
    |   File "z, in exc
    |     raise ValueError(msg)
    | ValueError: terrible value
    | the terrible value
    +------------------------------------
r  r  s       r   test_exception_group_with_notesz;BaseExceptionReportingTests.test_exception_group_with_notesH  s    	 	 	&C#+C C595GC C $,C C 69\5PST5TC C &.C C 8;|7RUV7VC C( &.)C C( 8;|7RUV7V)C C C4 %%*****r   c                    d }dt            d| j         dt            d|j        j        dz    dt            d|j        j        dz    dt            d|j        j        dz    d	}|                     |          }|                     ||           d S )
Nc                     	 g } dD ]m}	 t          |          # t           $ rO}|                    d|            |                    d|            |                     |           Y d }~fd }~ww xY wt          d|           # t          $ r0}|                    d           |                    d            d }~ww xY w)Nr  r  zGoodbye r  r  zGoodbye!r  r  s      r   r0   zQBaseExceptionReportingTests.test_exception_group_with_multiple_notes.<locals>.excz  s    : ' 'C'(oo-% ' ' '

<#<<000

#3c#3#3444A' %Xt444!   

 7 9 9 9 

:&&&s8   B 
A1AA,'B ,A11B 
B>+B99B>rF  r   r  r  a^  , in exc
  |     raise ExceptionGroup("nested", excs)
  | ExceptionGroup: nested (2 sub-exceptions)
  | >> Multi line note
  | >> Because I am such
  | >> an important exception.
  | >> empty lines work too
  | 
  | (that was an empty line)
  | Goodbye!
  +-+---------------- 1 ----------------
    | Traceback (most recent call last):
    |   File "r   z, in exc
    |     raise ValueError(msg)
    | ValueError: bad value
    | the bad value
    | Goodbye bad value
    +---------------- 2 ----------------
    | Traceback (most recent call last):
    |   File "z, in exc
    |     raise ValueError(msg)
    | ValueError: terrible value
    | the terrible value
    | Goodbye terrible value
    +------------------------------------
r  r  s       r   (test_exception_group_with_multiple_noteszDBaseExceptionReportingTests.test_exception_group_with_multiple_notesy  s    	 	 	*C#+C C595GC C $,C C 69\5PSU5UC C &.C C 8;|7RUV7VC C, &.-C C, 8;|7RUV7V-C C C: %%*****r   c                 n   d }d } |            }d}|j         j        }t          j        ||||          }t	                      }||_        dt           d| d}|                     |          }	d                    d |		                    d          D                       }	| 
                    |	|           d S )Nc                  (    t          j                    S rd  r   r  r   r   r   rk   zTBaseExceptionReportingTests.test_KeyboardInterrupt_at_first_line_of_frame.<locals>.f  s    =??"r   r   r   r   z', in f
    def f():

KeyboardInterrupt
rL   c                 6    g | ]}|                                 S r   )rstrip.0ls     r   
<listcomp>z]BaseExceptionReportingTests.test_KeyboardInterrupt_at_first_line_of_frame.<locals>.<listcomp>  s     CCC1AHHJJCCCr   )r   r   typesTracebackTyper{   r   r   r1  r   r?  rQ   )
r.   rk   r&   r   lastir   r#   r0   r   r  s
             r   -test_KeyboardInterrupt_at_first_line_of_framezIBaseExceptionReportingTests.test_KeyboardInterrupt_at_first_line_of_frame  s    	# 	# 	# * %??!!+'+ +17+ + + %%CCT0B0BCCCDD*****r   N)#r   r   r   r   r   r   r   r+  r/  r3  rC  rG  rI  rP  rU  r[  r_  rb  ri  rq  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r%  r%    s          "*9A=M  N N N0 0 0 ; ; ;; ; ;? ? ?; ; ;(' ' '.	6 	6 	6I I I2	* 	* 	*+ + +&6 6 6$!S !S !SF/ / /,3 3 3+ + +"	# 	# 	#L L L+ + +(!+ !+ !+F,+ ,+ ,+\/+ /+ /+b*+ *+ *+XP+ P+ P+d/+ /+ /+b4+ 4+ 4+l+ + + + +r   r%  c                       e Zd Zd ZdS )PyExcReportingTestsc                    |                      |          }d                    t          j        t	          |          ||j                            }t          d          5 }t          j        t	          |          ||j                   d d d            n# 1 swxY w Y   |                     |	                                |           |S )Nr   rl   )
r   r   r,   r   r  r   r   r   rQ   r   )r.   r}   ssios       r   r1  zPyExcReportingTests.get_report  s    q!!GG&tAww1?CCE EX&& 	C#%d1ggq!/BBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C+++s    )BBBN)r   r   r   r1  r   r   r   r  r    s#            r   r  c                   $    e Zd Zed             ZdS )CExcReportingTestsc                     ddl m} |                     |          }t          d          5 } ||           d d d            n# 1 swxY w Y   |                                S )Nr   r  rl   )r  r  r   r   r   )r.   r}   r  r  s       r   r1  zCExcReportingTests.get_report  s    ------q!!X&& 	!OA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	zz||s   AA
AN)r   r   r   r   r1  r   r   r   r  r    s/        
   \  r   r  c                   ^    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd ZdS )
LimitTestsc                      t          d          )NzLast raised)r   r8   s    r   last_raises1zLimitTests.last_raises1  s    &&&r   c                 .    |                                   d S rd  )r  r8   s    r   last_raises2zLimitTests.last_raises2      r   c                 .    |                                   d S rd  )r  r8   s    r   last_raises3zLimitTests.last_raises3  r  r   c                 .    |                                   d S rd  )r  r8   s    r   last_raises4zLimitTests.last_raises4  r  r   c                 .    |                                   d S rd  )r  r8   s    r   last_raises5zLimitTests.last_raises5  r  r   c                 (    t          j                    S rd  r  r8   s    r   last_returns_frame1zLimitTests.last_returns_frame1  s    }r   c                 *    |                                  S rd  )r  r8   s    r   last_returns_frame2zLimitTests.last_returns_frame2      '')))r   c                 *    |                                  S rd  )r  r8   s    r   last_returns_frame3zLimitTests.last_returns_frame3  r  r   c                 *    |                                  S rd  )r  r8   s    r   last_returns_frame4zLimitTests.last_returns_frame4  r  r   c                 *    |                                  S rd  )r  r8   s    r   last_returns_frame5zLimitTests.last_returns_frame5  r  r   c                 n                                      fd} fd}t          j        t          dd          5   |            }                     t          |          d                                 |d          |dd                      | |d	          |d
d          d                                 |d          |d d                     | |d
          |d d	         t          |          dz
  dz
                                   |d          g            t          ` | |            |d           dt          _                              |            |dd                                           |d          |dd                                           |d          |d d                    dt          _                              |            g            dt          _                              |            g            d d d            d S # 1 swxY w Y   d S )Nc                  (    t          j        fi | S rd  r,   extract_stack)kwargsr   s    r   extractz.LimitTests.test_extract_stack.<locals>.extract  s    *5;;F;;;r   c                                         | d |         |d |                                         | |dz   d          ||dz   d                                          t          |           t          |                     d S r  )rQ   rR   )r  r   ignorer.   s      r   assertEqualExceptz8LimitTests.test_extract_stack.<locals>.assertEqualExcept  s    VGVG_hww.?@@@VF1HII.0CDDDS[[#h--88888r   tracebacklimitr  r   rJ   limitr  r]  iirH   r   r_   r-  r   )r  r   	swap_attrr   assertGreaterrR   rQ   r  )r.   r  r
  nolimr   s   `   @r   test_extract_stackzLimitTests.test_extract_stack
  s   ((**	< 	< 	< 	< 	<	9 	9 	9 	9 	9
 s$4d;; 	, 	,GIIEs5zz1---WW1---uRSSz:::ggC000%,EEEWW2...bqb	:::ggD1115#;E

1QOOOWW1---r222"ggii555!"CWWYYbcc
333WW1---uRSSz:::WW2...bqb	:::!"CWWYY+++!#CWWYY+++#	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   G!H**H.1H.c                    	 |                                   n'# t          $ r t          j                    \  }}Y nw xY wfd}t	          j        t          dd          5   |            }|                     t          |          d           |                      |d          |d d                    |                      |d          |           |                      |d          |dd                     |                      |d	          |           |                      |d
          g            t          `|                      |            |           dt          _        |                      |            |d d                    |                      |d          |d d                    |                      |d          |dd                     d
t          _        |                      |            g            dt          _        |                      |            g            d d d            d S # 1 swxY w Y   d S )Nc                  (    t          j        fi | S rd  )r,   
extract_tb)r  r#   s    r   r  z+LimitTests.test_extract_tb.<locals>.extract+  s    '55f555r   r  r  r   rJ   r  r  r  r   r_   r-  r   	r  r   r   r  r   r  rQ   rR   r  )r.   r  r  r  r  r#   s        @r   test_extract_tbzLimitTests.test_extract_tb&  s   	5 	5 	5 	5&)lnn#Hi	5	6 	6 	6 	6 	6 s$4d;; 	, 	,GIIESZZ---WW1---uRaRy999WW2...666WW2...bcc
;;;WW3///777WW1---r222"WWYY...!"CWWYYbqb	222WW1---uRaRy999WW2...bcc
;;;!"CWWYY+++!#CWWYY+++#	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s    !<<GII	I	c                    	 |                                   n'# t          $ r t          j                    \  Y nw xY wfd}t	          j        t          dd          5   |            }|                     t          |          d           |                      |d          |d d                    |                      |d          |           |                      |d          |dd                     |                      |d	          |           |                      |d
          g            t          `|                      |            |           dt          _        |                      |            |d d                    |                      |d          |d d                    |                      |d          |dd                     d
t          _        |                      |            g            dt          _        |                      |            g            d d d            d S # 1 swxY w Y   d S )Nc                  <    t          j        fi | dd         S )NrH   r   )r,   r   )r  r  r  r#   s    r   r  z1LimitTests.test_format_exception.<locals>.extractH  s,    -h	2PPPPQRSUQUVVr   r  r  r   rJ   r  r  r  r  r   r_   r-  r   r  )r.   r  r  r  r  r#   s      @@@r   test_format_exceptionz LimitTests.test_format_exceptionA  s   	5 	5 	5 	5&)lnn#Hi	5	W 	W 	W 	W 	W 	W 	W s$4d;; 	, 	,GIIESZZ---WW1---uRaRy999WW2...666WW2...bcc
;;;WW3///777WW1---r222"WWYY...!"CWWYYbqb	222WW1---uRaRy999WW2...bcc
;;;!"CWWYY+++!#CWWYY+++#	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s    !>>#GI		IIN)r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r  r    s        N' ' '          * * ** * ** * ** * *, , ,8, , ,6, , , , ,r   r  c                       e Zd Zd Zd ZdS )MiscTracebackCasesc                 l   fd}fdd 	  |             n#  t          j                    \  }}}Y nxY w|j        j        j        j        }|                     t          |j                  d           t          j        |           |                     t          |j                  d           d S )Nc                                     d S rd  r   )middles   r   outerz,MiscTracebackCases.test_clear.<locals>.outere  s    FHHHHHr   c                                     d S rd  r   )inners   r   r  z-MiscTracebackCases.test_clear.<locals>.middleg  s    EGGGGGr   c                      d} ddz   d S r   r   )r  s    r   r"  z,MiscTracebackCases.test_clear.<locals>.inneri  s    AaCCCCr   rH   r   )	r   r  r&   r$   rQ   rR   r"   r,   clear_frames)r.   r   r  r1   r#   inner_framer"  r  s         @@r   
test_clearzMiscTracebackCases.test_cleard  s    	 	 	 	 		 	 	 	 		 	 		.EGGGG	."|~~E5""" j(09[122A666 	r""" 	[122A66666s   
 7c                     d } |            }|j         j        }|                     |dd          t          |dz   ddft          |dz   ddfg           |                     t	          |d	                   d
           d S )Nc                  (    t          j                    S rd  r  r   r   r   r  z6MiscTracebackCases.test_extract_stack.<locals>.extract}  s    *,,,r   r  rJ   r  zresult = extract()rH   r  z return traceback.extract_stack()r   rG   )r   r   rQ   r   rR   )r.   r  r  r   s       r   r  z%MiscTracebackCases.test_extract_stack|  s    	- 	- 	-!0vax!57KLvax,NO' 	 	 	 	VAY+++++r   N)r   r   r   r&  r  r   r   r   r  r  _  s2        
7 7 70	, 	, 	, 	, 	,r   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )	TestFramec                    t          j                     t          j        dt                                 t	          j        ddd          }|                     |d           |                     t          |          d           |                     |t	          j        ddd                     |                     |t          |                     |                     t          |          |           |                     |j	                   | 
                    |t                                 |                     |t                     d S )Nrk   rH   dummy)rk   rH   r,  %"""Test cases for traceback module""")	linecache
clearcache	lazycacheglobalsr,   FrameSummaryrQ   tupleassertIsNonelocalsassertNotEqualobjectr	   r.   rk   s     r   test_basicszTestFrame.test_basics  s-   C+++"3733F	H 	H 	HqF	H 	H 	HI237CCDDDE!HH%%% 	q1%%%!(###Avxx(((I&&&&&r   c                 
   t          j                     t          j        dddd          }|                     d |j                   t          j        dt                                 |                     d|j                   d S )Nrk   rH   r,  F)lookup_liner-  )	r.  r/  r,   r2  rQ   _liner0  r1  liner8  s     r   test_lazy_lineszTestFrame.test_lazy_lines  s    "37FFFqw'''C+++3F	 	 	 	 	r   c                 h    t          j        dd d          }|                     |j        d            d S )Nrk   r,  r,   r2  rQ   r=  r8  s     r   test_no_linezTestFrame.test_no_line  s4    "3g66&&&&&r   c                 l    t          j        dddd          }|                     d|j                   d S )Nrk   rH   r,  r=  r=  r@  r8  s     r   test_explicit_linezTestFrame.test_explicit_line  s9    "37@@@(((((r   c                 |    t          j        dddd          }|                     t          |          d           d S )Nrk   rH   r,  r=  rC  rG   )r,   r2  rQ   rR   r8  s     r   test_lenzTestFrame.test_len  s=    "37@@@Q#####r   N)r   r   r   r9  r>  rA  rD  rF  r   r   r   r*  r*    s_        ' ' '"  ' ' ') ) )$ $ $ $ $r   r*  c                   b    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd ZdS )	TestStackc                    d }t          t          j        d                     } |            }|                     t	          |          t	          |          z
  d           |                     |dd          |           d S )Nc                  D    t          t          j        d                     S rd  )listr,   
walk_stackr   r   r   deeperz)TestStack.test_walk_stack.<locals>.deeper  s    	,T22333r   rH   )rK  r,   rL  rQ   rR   )r.   rM  s1s2s       r   test_walk_stackzTestStack.test_walk_stack  s    	4 	4 	4)&t,,--VXXR3r77*A...ABB$$$$$r   c                     	 ddz   n'# t           $ r t          j                    \  }}}Y nw xY wt          t	          j        |                    }|                     t          |          d           d S r   )r   r   r  rK  r,   walk_tbrQ   rR   )r.   r   r#   r  s       r   test_walk_tbzTestStack.test_walk_tb  s|    	&aCCC 	& 	& 	&|~~HAq"""	&"2&&''Q#####s    !,,c                     t           j                            t          j        d                     }|                     |t           j                   d S rd  )r,   StackSummaryr  rL  assertIsInstancer.   r  s     r   r  zTestStack.test_extract_stack  sB    "**9+?+E+EFFa!788888r   c                     t           j                            t          j        d           d          }|                     t          |          d           d S )Nr   r  )r,   rU  r  rL  rQ   rR   rW  s     r   test_extract_stack_limitz"TestStack.test_extract_stack_limit  sJ    "**9+?+E+EQ*OOQ#####r   c                 z   t          j                     t          j        dt                                 t	          dd          }t          |d d           }t          j                            t          |dfg          d          }t          j                     | 
                    |d         j        d           d S )N/foo.pyry  r   Tlookup_linesr   
import sys)r.  r/  updatecacher1  	test_code
test_framer,   rU  r  r   rQ   r=  r.   crk   r  s       r   test_extract_stack_lookup_linesz)TestStack.test_extract_stack_lookup_lines  s    i333i**q$%%"**4!Q>>*MM1L11111r   c                    t          j                     t          dd          }t          |d d           }t          j                            t          |dfg          d          }|                     i t           j	                   t          j
        dt                                 |                     |d         j        d           d S )Nr[  ry  r   Fr\  r   r^  )r.  r/  r`  ra  r,   rU  r  r   rQ   cacher_  r1  r=  rb  s       r   *test_extract_stackup_deferred_lookup_linesz4TestStack.test_extract_stackup_deferred_lookup_lines  s    i**q$%%"**4!Q>>*NNY_---i3331L11111r   c                     t           j                            dg          }|                     dg|                                           d S Nfoo.pyrH   fredr=  z*  File "foo.py", line 1, in fred
    line
r,   rU  	from_listrQ   r   rW  s     r   test_from_listzTestStack.test_from_list  sO    ",,.K-LMM;<HHJJ	 	 	 	 	r   c                     t           j                            dg          }d|d<   t           j                            |          }|                     dg|                                           d S )Nrj  )rk  rJ   rl  r=  r   z*  File "foo.py", line 2, in fred
    line
rm  )r.   r  rO  s      r   test_from_list_edited_stackz%TestStack.test_from_list_edited_stack  sn    ",,.K-LMM,!#--a00;<IIKK	 	 	 	 	r   c                     t           j                            dg          }|                     dg|                                           d S ri  rm  rW  s     r   test_format_smokezTestStack.test_format_smoke  sQ     ",,.K-LMM;<HHJJ	 	 	 	 	r   c                 N   t          j        dt                                 t          dd          }t	          |t                      ddi          }t
          j                            t          |dfg          d          }| 	                    |d         j
        dd	i           d S )
Nr[  ry  	somethingrH   r   Tcapture_localsr   1r.  r_  r1  r`  ra  r,   rU  r  r   rQ   r5  rb  s       r   test_localszTestStack.test_locals  s    i333i**q'))k1%566"**4!Q>>$*OO1{C&899999r   c                 F   t          j        dt                                 t          dd          }t	          |t                      ddi          }t
          j                            t          |dfg                    }| 	                    |d         j
        d            d S )Nr[  ry  ru  rH   r   r   ry  rb  s       r   test_no_localszTestStack.test_no_locals  s    i333i**q'))k1%566"**4!Q>>::1d+++++r   c                     d } |dd          }|                      dt          |j        j        dz   fz  g|                                           d S )Nc                 r    d}d}t           j                            t          j        d           dd          S )NrH   rJ   T)rw  r  )r,   rU  r  rL  )kvr   bs       r   
some_innerz0TestStack.test_format_locals.<locals>.some_inner	  sA    AA)11$T**4q 2 J J Jr   r_   rG   zw  File "%s", line %d, in some_inner
    return traceback.StackSummary.extract(
    a = 1
    b = 2
    k = 3
    v = 4
)rQ   r   r   r   r   )r.   r  r  s      r   test_format_localszTestStack.test_format_locals	  s{    	J 	J 	J
 Jq!
 '
(;(JQ(NOP  xxzz	 	 	 	 	r   c                      G d dt           j                  fd} |            }|                     |                                t           d|j        j        dz    g           d S )Nc                       e Zd Zd ZdS )>TestStack.test_custom_format_frame.<locals>.CustomStackSummaryc                 $    |j          d|j         S )N:)r^  r   )r.   frame_summarys     r   format_frame_summaryzSTestStack.test_custom_format_frame.<locals>.CustomStackSummary.format_frame_summary	  s    '0II=3GIIIr   N)r   r   r   r  r   r   r   CustomStackSummaryr  	  s(        J J J J Jr   r  c                  V                          t          j        d           d          S )NrH   r  )r  r,   rL  )r  s   r   r  z6TestStack.test_custom_format_frame.<locals>.some_inner	  s0    %--$T**! . 5 5 5r   r  rH   )r,   rU  rQ   r   r   r   r   )r.   r  r  r  s      @r   test_custom_format_framez"TestStack.test_custom_format_frame	  s    	J 	J 	J 	J 	J!7 	J 	J 	J	5 	5 	5 	5 	5 JLLHHJJCC:.=ACCD	F 	F 	F 	F 	Fr   c                    d fd} |            } G d dt           j                  }|                    t          j        |d                                                             }|                     t          |          d           j        j        dz   }|                     |d         dt           d	| d
           d S )Nc                      ddz   d S r   r   r   r   r   rk   z)TestStack.test_dropping_frames.<locals>.f 	      aCCCCr   c                  R    	                d S #  t          j                    cY S xY wrd  r  r  s   r   rk  z)TestStack.test_dropping_frames.<locals>.g#	  s2    &&|~~%%%s   
 &c                        e Zd Z fdZ xZS ).TestStack.test_dropping_frames.<locals>.Skip_Gc                 `    |j         dk    rd S t                                          |          S )Nrk  )namesuperr  )r.   r  r|   s     r   r  zCTestStack.test_dropping_frames.<locals>.Skip_G.format_frame_summary,	  s.     %,,4ww33MBBBr   )r   r   r   r  __classcell__r|   s   @r   Skip_Gr  +	  sA        C C C C C C C C Cr   r  rJ   rH   r   r{  r   z, in f
    1/0
)
r,   rU  r  rR  r   rQ   rR   r   r   r   )r.   rk  r  r  stacklnork   s         @r   test_dropping_frameszTestStack.test_dropping_frames	  s   	 	 		& 	& 	& 	& 	& 133	C 	C 	C 	C 	CY+ 	C 	C 	C hqk**, ,,2FHH 	 	UQ'''j'!+!H?x?????	
 	
 	
 	
 	
r   N)r   r   r   rP  rS  r  rY  rd  rg  ro  rq  rs  rz  r|  r  r  r  r   r   r   rH  rH    s        % % %$ $ $9 9 9$ $ $2 2 22 2 2      : : :, , ,   F F F
 
 
 
 
r   rH  c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Z e            d             ZdS )TestTracebackExceptionc                 j   	 ddz   nh# t           $ r[ t          j                    }t          j        | }t          j                            t          j        |d                             }Y nw xY w|                     d |j	                   |                     d |j
                   |                     d|j                   |                     ||j                   |                     |d         |j                   |                     t          |d                   t          |                     d S )NrH   r   rJ   Fr   r   r  r,   TracebackExceptionrU  r  rR  rQ   	__cause____context____suppress_context__r  r  r   )r.   r  r0   expected_stacks       r   
test_smokez!TestTracebackException.test_smoke>	  s    	0aCCC 	0 	0 	0|~~H.9C&3;;!(1+..0 0NNN	0
 	s}---s/// 8999333!cl333Xa[))3s8844444s    A"A-,A-c                    d }	  |             n# t           $ r}t          j                    }t          j                            t          j        |d                   ddd          | _        t          j        	                    |ddd          | _
        Y d }~nd }~ww xY w| j        }| j
        }|                     d |j                   |                     d |j                   |                     d|j                   |                     ||j                   |                     |d         |j                   |                     t#          |d                   t#          |                     d S )Nc                      ddz   d S r   r   r   r   r   r   z7TestTracebackException.test_from_exception.<locals>.fooO	  r  r   rJ   rH   FT)r  r]  rw  r   )r   r   r  r,   rU  r  rR  r  r  from_exceptionr0   rQ   r  r  r  r  r  r   )r.   r   r}   r  r  r0   s         r   test_from_exceptionz*TestTracebackException.test_from_exceptionM	  s   	 	 		ECEEEE 	E 	E 	E|~~H"+"8"@"@!(1+..ae# #A #% #%D !3BBt C E EDHHHHHH	E ,hs}---s/// 8999333!cl333Xa[))3s8844444s   
 
BA;BBc                    	 	 ddz   t          j                    }t          j        | }t	          d          }t	          d          |# t          j                    }t          j        | }t	          d          }t	          d          |xY w# t          $ r[ t          j                    }t          j        | }t          j                            t          j        |d                             }Y nw xY wt          j        t          |d           }|                     ||j	                   |                     ||j
                   |                     d|j                   |                     ||j                   |                     |d         |j                   |                     t          |d                   t          |                     d S )NrH   r   causeuh ohrJ   Tr   r  r,   r  r   rU  r  rR  rQ   r  r  r  r  r  r   )r.   exc_info_contextexc_contextr  r  r0   r  	exc_causes           r   rC  z!TestTracebackException.test_causec	  s   	04!#&<>> ':<LM!'**((e3 $'<>> ':<LM!'**((e3333 	0 	0 	0|~~H.9C&3;;!(1+..0 0NNN	0
 0E4HH	CM222co666s7888333!cl333Xa[))3s8844444s%   A A B AB		B A"C10C1c                 2   	 	 ddz   t          j                    }t          j        | }t	          d          # t          j                    }t          j        | }t	          d          xY w# t          $ r[ t          j                    }t          j        | }t          j                            t          j        |d                             }Y nw xY w|                     d |j	                   |                     ||j
                   |                     d|j                   |                     ||j                   |                     |d         |j                   |                     t          |d                   t          |                     d S )NrH   r   r  rJ   Fr  r.   r  r  r  r0   r  s         r   rG  z#TestTracebackException.test_contexty	  s   	0)!#&<>> ':<LM((( $'<>> ':<LM(((((( 	0 	0 	0|~~H.9C&3;;!(1+..0 0NNN	0
 	s}---co666 8999333!cl333Xa[))3s8844444s!   8 0A, 1A))A, ,A"CCc                    fd	               |                      d           n## t          $ r t          j                    }Y nw xY wt	          j        | }t          |                                          }|                     t          |          t          j
                               |                     t          d |D                       t          j
                    dz             |                     d|d                    d S )Nc                  8    	 ddz   d S #                 Y d S xY wr   r   r  s   r   rk   z9TestTracebackException.test_long_context_chain.<locals>.f	  s/    !s   
 zException not raisedc                     g | ]}d |v |	S )zZeroDivisionError:r   r  s     r   r  zBTestTracebackException.test_long_context_chain.<locals>.<listcomp>	  s#    ===q#71#<#<#<#<#<r   g      ?z0RecursionError: maximum recursion depth exceededr   )r   r  r   r  r,   r  rK  r   r  rR   r  rU   )r.   r  teresrk   s       @r   test_long_context_chainz.TestTracebackException.test_long_context_chain	  s.   	 	 	 	 		.ACCC II,----  	& 	& 	&|~~HHH	&
 )84299;; 	3s88S%:%<%<=====C===>>!##c)	+ 	+ 	+ 	>B	I 	I 	I 	I 	Is   
( AAc                 *   	 	 ddz   t          d          }t          d          |# t          d          }t          d          |xY w# t           $ r^ t          j                    }t          j        |ddi}t          j                            t          j        |d                             }Y nw xY wt          j        t           |d           }|                     ||j	                   |                     d |j
                   |                     d|j                   |                     ||j                   |                     |d         |j                   |                     t          |d                   t          |                     d S )NrH   r   r  r  compactTrJ   r  )r.   r  r  r0   r  r  s         r   test_compact_with_causez.TestTracebackException.test_compact_with_cause	  s   
	04!!'**((e3 "'**((e3333 	0 	0 	0|~~H.G$GGC&3;;!(1+..0 0NNN	0
 0E4HH	CM222s///s7888333!cl333Xa[))3s8844444s!   ' A
  AA
 
A%B21B2c                 8   	 	 ddz   t          j                    }t          j        | }t	          d          # t          j                    }t          j        | }t	          d          xY w# t          $ r^ t          j                    }t          j        |ddi}t          j                            t          j        |d                             }Y nw xY w|                     d |j	                   |                     ||j
                   |                     d|j                   |                     ||j                   |                     |d         |j                   |                     t          |d                   t          |                     d S )NrH   r   r  r  TrJ   Fr  r  s         r   test_compact_no_causez,TestTracebackException.test_compact_no_cause	  s   	0)!#&<>> ':<LM((( $'<>> ':<LM(((((( 	0 	0 	0|~~H.G$GGC&3;;!(1+..0 0NNN	0
 	s}---co666 8999333!cl333Xa[))3s8844444s!   8 0A, 1A))A, ,A%CCc                    	 ddz   n## t           $ r t          j                    }Y nw xY wt          j        |d                   }t          j        |d                   }t	          j        | }|                     t          j        |d                   |           |                     t          j        |d                   |           d S )NrH   r   rJ   )r   r   r  getrefcountr,   r  rQ   )r.   r  refcnt1refcnt2r0   s        r   /test_no_refs_to_exception_and_traceback_objectszFTestTracebackException.test_no_refs_to_exception_and_traceback_objects	  s    	&aCCC 	& 	& 	&|~~HHH	& /(1+../(1+..*H5!55w???!55w?????s    ((c                 d   	 ddz   n?# t           $ r2 t          j                    }t          j        | }t          j        | }Y nw xY w|                     ||           |                     ||           |                     |t                                 |                     |t                     d S r   )
r   r   r  r,   r  assertIsNotrQ   r6  r7  r	   )r.   r  r0   exc2s       r   test_comparison_basicz,TestTracebackException.test_comparison_basic	  s    	;aCCC 	; 	; 	;|~~H.9C/:DDD	; 	d###d###C***i(((((s    9AAc                 `   d fd}	  |             n## t           $ r t          j                    }Y nw xY 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                  .    	 t          d          #   xY wr~  r   r   r   r   	raise_exczKTestTracebackException.test_comparison_params_variations.<locals>.raise_exc	  s!     ---s    c                  &    d\  } }              d S )N)rH   rJ   r   )r'  rN   r  s     r   raise_with_localszSTestTracebackException.test_comparison_params_variations.<locals>.raise_with_locals	  s    DAqIKKKKKr   r  r  rJ   rw  Tr   )r  rw  r  )r   r   r  r,   r  rQ   r6  )r.   r  r  r0   exc1r  exc3exc4exc5exc6exc7r  s              @r   !test_comparison_params_variationsz8TestTracebackException.test_comparison_params_variations	  s   	 	 		 	 	 	 		& 	& 	& 	&|~~HHH	& *H5+X@R@@+X?Q??d###C&&& +XKdKKC&&& +X@R@@+XRPTUUUt$$$ +X@R@@+XRPTUUUD$'''''s   
 66c                    g }t          d          D ]A}	 ddz   	#  |                    t          j        t	          j                                Y ?xY w|                     |d         |d                    |                     t          |d                                                   t          |d                                                              d S r  )	r  re  r,   r  r   r  rQ   rK  r   )r.   r  r   s      r   /test_comparison_equivalent_exceptions_are_equalzFTestTracebackException.test_comparison_equivalent_exceptions_are_equal
  s    q 	K 	KAK!KI8#,..IJJJJJa$q'***d1gnn..//d1gnn6F6F1G1GHHHHHs	   4Ac                     G d dt                     } |d          } |d          }	 ||# |$ r$ 	 |# |$ r t          j                    }Y nw xY wY nw xY wt          j        | }t          |                                          }|                     d|d                    |                     d|d                    d S )	Nc                       e Zd Zd ZdS )CTestTracebackException.test_unhashable.<locals>.UnhashableExceptionc                     dS r  r   r  s     r   r  zJTestTracebackException.test_unhashable.<locals>.UnhashableException.__eq__
  r  r   Nr  r   r   r   r  r  
  r  r   r  r	  r
  zUnhashableException: ex2
rJ   zUnhashableException: ex1
r   )r   r   r  r,   r  rK  r   rU   )r.   r  r	  r
  r  r0   	formatteds          r   r  z&TestTracebackException.test_unhashable
  s   	 	 	 	 	) 	 	 	 "!%((!!%((	*3" 	* 	* 	**	& * * *<>>*		*
 *H5&&	2IaLAAA2IaLAAAAAs*   . A6AAAAAc                 <   fd	  d           nm# t           $ r` t          j                    }t          j        |ddi}t          j                            t          j        |d                   d          }Y nw xY w|                     ||j	                   d S )Nc                 6    | r | dz
             d S ddz   d S r   r   )nrecurses    r   r  z2TestTracebackException.test_limit.<locals>.recurse)
  s-     !!r   r  r  r   rJ   r  )
r   r   r  r,   r  rU  r  rR  rQ   r  )r.   r  r0   r  r  s       @r   
test_limitz!TestTracebackException.test_limit(
  s    	 	 	 	 	
	9GBKKKK 	9 	9 	9|~~H.BBBC&3;;!(1+..a < 9 9NNN	9
 	33333s    A'A>=A>c                    t          j                     t          d          }t          dd          }t	          |d d           }t          |dd d          }t          j        t          ||d          }|                     t           j	        i            t          j
        dt                                 |                     |j        d         j        d           d S )	Nr  r[  ry  r   r   Fr\  r^  )r.  r/  r   r`  ra  test_tbr,   r  rQ   rf  r_  r1  r  r=  r.   r}   rc  rk   r#   r0   s         r   test_lookup_linesz(TestTracebackException.test_lookup_lines7
  s    gi**q$%%Q4##*9a%PPP"---i3331*L99999r   c                 v   t          j        dt                                 t          d          }t	          dd          }t          |t                      ddd          }t          |dd d          }t          j        t          ||d	
          }| 	                    |j
        d         j        ddd           d S )Nr[  r  ry  rH   string)ru  r  r   r   Trv  rx  z'string'r.  r_  r1  r   r`  ra  r  r,   r  rQ   r  r5  r  s         r   rz  z"TestTracebackException.test_localsB
  s    i333gi**q'))1x%H%HIIQ4##*q"T3 3 3IaLsZ!H!H	J 	J 	J 	J 	Jr   c                 j   t          j        dt                                 t          d          }t	          dd          }t          |t                      ddi          }t          |dd d          }t          j        t          ||          }| 	                    |j
        d         j        d            d S )Nr[  r  ry  ru  rH   r   r   r  r  s         r   r|  z%TestTracebackException.test_no_localsM
  s    i333gi**q'))k1%566Q4##*9a<<1,d33333r   c                     t          j        t          t          d          d           }|                     t	          |                                          dg           d S )NhavenzException: haven
)r,   r  r   rQ   rK  r   )r.   r0   s     r   test_traceback_headerz,TestTracebackException.test_traceback_headerV
  sP     *9i6H6H$OOcjjll++.B-CDDDDDr   c                    d }t          j         |            ddi}t                      }|                    |           |                     |                                                    d          dd          g d           d S )Nc                  \    d} 	 | dz   d S # t           $ r t          j                    cY S w xY w)N   r   )r   r   r  )r'  s    r   rk   z,TestTracebackException.test_print.<locals>.f^
  sF    A&! & & &|~~%%%&s    ++rw  Tr   rL   rd  )z    x/0z    ~^~z
    x = 12z#ZeroDivisionError: division by zeror   )r,   r  r   r  rQ   r   r?  )r.   rk   r0   r   s       r   
test_printz!TestTracebackException.test_print\
  s    	& 	& 	& *AACCEEE		v	OO##D))"##.  	 	 	 	 	r   N)r   r   r   r  r  rC  rG  r  r  r  r  r  r  r  r  r  r  rz  r|  r  r
   r  r   r   r   r  r  <	  sK       5 5 55 5 5,5 5 5,5 5 5(I I I25 5 5(5 5 5(
@ 
@ 
@
) 
) 
)#( #( #(JI I IB B B&4 4 4	: 	: 	:	J 	J 	J4 4 4E E E     r   r  c                   H     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
 xZS )	&TestTracebackException_ExceptionGroupsc                 z    t                                                       |                                 | _        d S rd  )r  setUp_get_exception_groupeg_info)r.   r|   s    r   r  z,TestTracebackException_ExceptionGroups.setUpq
  s+    0022r   c                    d }d }|j         j        | _        |j         j        | _        	 	 	  |             n# t          $ r}|}Y d }~nd }~ww xY w	  |d           n# t          $ r}|}Y d }~nd }~ww xY wt          d||g          # t
          $ r}|}Y d }~nd }~ww xY w	  |d           n# t          $ r}|}Y d }~nd }~ww xY wt          d||g          # t
          $ r t          j                    cY S w xY w)Nc                      ddz   d S r   r   r   r   r   rk   zFTestTracebackException_ExceptionGroups._get_exception_group.<locals>.fv
  r  r   c                      t          |           rd  r   )r  s    r   rk  zFTestTracebackException_ExceptionGroups._get_exception_group.<locals>.gy
  s    Q--r   r  r     r  )	r   r   lno_flno_gr   rE  r   r  r   )r.   rk   rk  r}   r  r  r  r  s           r   r  z;TestTracebackException_ExceptionGroups._get_exception_groupu
  s   	 	 		  	  	  Z.
Z.
	"ACCCC    DDDDDDAbEEEE    DDDDDD$UT4L999!   "    t555 	" 	" 	"<>>!!!	"s   
7 B 
AAB AB A B 
A3'A.)B .A33B 
BBC BC "B. -C .
C8B?:C ?CC C98C9c                     | j         }t          j        | }t          j                            |d                   }|                     ||           |                     ||           d S r  )r  r,   r  r  r  rQ   )r.   r  teg1teg2s       r   !test_exception_group_constructionzHTestTracebackException_ExceptionGroups.test_exception_group_construction
  sb    ,+W5+::71:FFt$$$t$$$$$r   c                     t          j        | j         }d                    |                                                              d          }d                    d          }|                     ||           d S )Nr   rL   z'ExceptionGroup: eg2 (2 sub-exceptions)
)r,   r  r  r   r-   r?  rQ   )r.   tegr  r   s       r   *test_exception_group_format_exception_onlyzQTestTracebackException_ExceptionGroups.test_exception_group_format_exception_only
  sk    *DL9GGC557788>>tDD	=CCDIIH-----r   c                 d   t          j        | j         }d                    |                                                              d          }| j        }| j        }g ddt           d|dz    ddd	d
ddt           d|dz    ddddddt           d|dz    dddt           d|dz    dddddddt           d|dz    dddt           d|dz    dddd d!d"dt           d|d#z    dd$dt           d|dz    dd%d&d' }| 	                    ||           d S )(Nr   rL   z6  + Exception Group Traceback (most recent call last):z  |   File "r   r]   z, in _get_exception_groupz1  |     raise ExceptionGroup("eg2", [exc3, exc4])z*  | ExceptionGroup: eg2 (2 sub-exceptions)(  +-+---------------- 1 ----------------z8    | Exception Group Traceback (most recent call last):z    |   File "   z3    |     raise ExceptionGroup("eg1", [exc1, exc2])z,    | ExceptionGroup: eg1 (2 sub-exceptions)*    +-+---------------- 1 ----------------z*      | Traceback (most recent call last):z      |   File "r  z      |     f()rH   r~  z      |     1/0z      |     ~^~z+      | ZeroDivisionError: division by zero*      +---------------- 2 ----------------   z      |     g(42)z, in gz      |     raise ValueError(v)z      | ValueError: 42+      +------------------------------------(    +---------------- 2 ----------------z(    | Traceback (most recent call last):r  z    |     g(24)z    |     raise ValueError(v)z    | ValueError: 24)    +------------------------------------)
r,   r  r  r   r   r?  r  r  r   rQ   )r.   r   r  r  r  r   s         r   test_exception_group_formatzBTestTracebackException_ExceptionGroups.test_exception_group_format
  s   *DL9GGCJJLL))//55	

"M"X8XXU2XXXX" I" B	"
 @" P" [XZZuRxZZZ" K" D" B" B" \x[[q[[[" '" IxHHqHHH" '"  '!"" C#"$ B%"& B'"( ]x\\r\\\)"* )+", IxHHqHHH-". 7/"0 .1"2 C3"4 @5"6 @7"8 [XZZuRxZZZ9": ';"< GXFFuQwFFF="> 5?"@ ,A"B AC"D E"H 	H-----r   c                 >   g }g }t          d          D ]$}|                    t          |                     %t          d          D ]$}|                    t          |                     %t          } |d |d|           |d|          g          }t
          j                            |d          }d                    |	                                          
                    d	          }d
dddddddddddddddddd g}|                     ||           d S )Nr_   r  rC  r  r  rJ   )max_group_widthr   rL   z)  | ExceptionGroup: eg (2 sub-exceptions)r  z,    | ExceptionGroup: eg1 (3 sub-exceptions)r  z      | ValueError: 0r        | ValueError: 1z,      +---------------- ... ----------------z      | and 1 more exceptionr  r	  z-    | ExceptionGroup: eg2 (10 sub-exceptions)z      | TypeError: 0z      | TypeError: 1z      | and 8 more exceptions)r  re  r+   r   rE  r,   r  r  r   r   r?  rQ   )	r.   excs1excs2r  r  rC  r   r  r   s	            r   test_max_group_widthz;TestTracebackException_ExceptionGroups.test_max_group_width
  sE   q 	( 	(ALLA''''r 	' 	'ALL1&&&&Rrr%''E5)9)9:;;*99"a9PPGGCJJLL))//55	 A?CA,A,C3B?DA+A+C4B), 	H-----r   c                    t          d          }t          d          D ]0}t          dt          |           |t          |          g          }1t          j                            |d          }d                    |                                          	                    d          }dd	d
dddddddddddd g}| 
                    ||           d S )Nr  r_   r0   rJ   )max_group_depthr   rL   z*  | ExceptionGroup: exc (3 sub-exceptions)r  z    | ValueError: -2r	  z,    | ExceptionGroup: exc (3 sub-exceptions)r  z      | ValueError: -1r  z"      | ... (max_group_depth is 2)z*      +---------------- 3 ----------------r  r  z(    +---------------- 3 ----------------z    | ValueError: 2r
  )r   r  rE  r+   r,   r  r  r   r   r?  rQ   )r.   r0   r  r   r  r   s         r   test_max_group_depthz;TestTracebackException_ExceptionGroups.test_max_group_depth
  s    
##q 	N 	NA QBjmm(LMMCC*99#q9QQGGCJJLL))//55	 B?+?CA-A9A,B?*@!$ 	H-----r   c                 v   	 | j         d         # t          $ r t          j                    }Y nw xY wt	          d          D ]$}	 |d         #  t          j                    }Y "xY wt          j        | }t          j        | }t          j        |ddi}t          j        |ddi}|                     ||           |                     ||           |                     ||           | 	                    ||           | 	                    |t                                 |                     |t                     d S )NrH   r   r  i,  r_   )r  rE  r   r  r  r,   r  r  rQ   r6  r7  r	   )r.   r  r   r0   r  r  nes          r   test_comparisonz6TestTracebackException_ExceptionGroups.test_comparison  sK   	&,q/! 	& 	& 	&|~~HHH	&q 	* 	*A*qk!*<>>*H5+X6+XASAA)8=1==d###d###d###C$$$C***i(((((s    //AA#)r   r   r   r  r  r  r  r  r  r  r  r  r  s   @r   r  r  p
  s        3 3 3 3 3* * *@% % %. . .+. +. +.Z$. $. $.L. . .8) ) ) ) ) ) )r   r  c                       e Zd Zd ZdS )MiscTestc                 H   t                      }dh}t          t                    D ][}|                    d          s||v rt	          t          |          }t	          |dd           dk    r|                    |           \|                     t          j        |           d S )N
print_listr   r   r,   )setdirr,   r  getattrrg  assertCountEqual__all__)r.   r   denylistr  module_objects        r   test_allzMiscTest.test_all*  s    55 >	NN 	# 	#Ds## tx'7'7#It44M}lD99[HHT"""i/:::::r   N)r   r   r   r#  r   r   r   r  r  (  s#        	; 	; 	; 	; 	;r   r  ):collectionsr   ior   r.  r   r  r   unittestr  testr   test.supportr   r   r   r	   r
   r   r   test.support.os_helperr   r   test.support.script_helperr   r   osrp   r,   	functoolsr   r   r  r`  co_positionsra  r  TestCaser)   r   r  r  r@  r  r7   escaper>  r%  r  r  r  r  r*  rH  r  r  r  mainr   r   r   <module>r1     s   % " " " " " "           



    				      / / / / / / / / / / / / / / / / / / 2 1 1 1 1 1 1 1 N N N N N N N N 				           "*j"8"88bJvy9::	77	 Z!D!D!DEE

*TKKK
L
LU* U* U* U* U*X& U* U* U*p
 f+ f+ f+ f+ f+x'8 f+ f+ f+R > > > > >&F > >  >"q* q* q* q* q*8, q* q* q*j& 
&  RZZ=))))929_+E+E+E+EFH H
S+ S+ S+ S+ S+ S+ S+ S+l    5x7H        4h6G   u, u, u, u, u," u, u, u,p&, &, &, &, &,* &, &, &,R&$ &$ &$ &$ &$! &$ &$ &$RH
 H
 H
 H
 H
! H
 H
 H
Vq q q q qX. q q qh	u) u) u) u) u)X-> u) u) u)p; ; ; ; ;x  ; ; ; zHMOOOOO r   