o
    KXh                     @   s  d dl Z d dlZd dlZd dlmZmZmZ d dlZd dlZd dl	m
Z
 G dd deZdd Zdd	 Zd
d ZG dd dZG dd dejZeejjZdD ]Zee= qPdddZeed< edefeZG dd dejZG dd dejZedkre  dS dS )    N)warnings_helpercaptured_stdoutcaptured_stderr)strclassc                   @   s   e Zd ZG dd dZdS )MockTracebackc                   @      e Zd Zdd Zdd ZdS )z MockTraceback.TracebackExceptionc                 O   s   | dd| _d S )Ncapture_localsF)getr   )selfargskwargs r   C/opt/python-3.10.19/usr/lib/python3.10/unittest/test/test_result.py__init__      z)MockTraceback.TracebackException.__init__c                 C   s   dg}| j r|d |S )NzA tracebacklocals)r   appendr
   resultr   r   r   format   s   
z'MockTraceback.TracebackException.formatN)__name__
__module____qualname__r   r   r   r   r   r   TracebackException       r   N)r   r   r   r   r   r   r   r   r      s    r   c                   C   s   t tj_ d S N)	tracebackunittestr   r   r   r   r   restore_traceback      r   c                   C      t d td)Nzdo cleanup1zbad cleanup1)print	TypeErrorr   r   r   r   bad_cleanup1      r#   c                   C   r    )Nzdo cleanup2zbad cleanup2)r!   
ValueErrorr   r   r   r   bad_cleanup2   r$   r&   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
BufferedWriterc                 C   s   d| _ d| _d S N r   bufferr
   r   r   r   r   %   s   
zBufferedWriter.__init__c                 C   s   |  j |7  _ d S r   )r+   )r
   argr   r   r   write)   r   zBufferedWriter.writec                 C   s   |  j | j7  _ d| _d S r(   r*   r,   r   r   r   flush,   s   
zBufferedWriter.flushc                 C   s   | j S r   r   r,   r   r   r   getvalue0   s   zBufferedWriter.getvalueN)r   r   r   r   r.   r/   r1   r   r   r   r   r'   $   s
    r'   c                   @   s4  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zeejjd)kd*d+d, Zeejjd)kd*d-d. Zeejjd)kd*d/d0 Zeejjd)kd*d1d2 Zd3d4 Z d5d6 Z!d7d8 Z"d9S ):Test_TestResultc                 C   sr   t  }| |  | t|jd | t|jd | |jd | |j	d | 
|j | 
|j d S Nr   F)r   
TestResult
assertTruewasSuccessfulassertEquallenerrorsfailurestestsRun
shouldStopZassertIsNoneZ_stdout_bufferZ_stderr_bufferr   r   r   r   	test_init>   s   zTest_TestResult.test_initc                 C   s"   t  }|  | |jd d S NT)r   r4   stopr7   r<   r   r   r   r   	test_stopL   s   zTest_TestResult.test_stopc                 C   s   G dd dt j}|d}t  }|| | |  | t|jd | t|j	d | |j
d | |jd || d S )Nc                   @      e Zd Zdd ZdS )z+Test_TestResult.test_startTest.<locals>.Fooc                 S      d S r   r   r,   r   r   r   test_1W      z2Test_TestResult.test_startTest.<locals>.Foo.test_1Nr   r   r   rC   r   r   r   r   FooV       rF   rC   r      Fr   TestCaser4   	startTestr5   r6   r7   r8   r9   r:   r;   r<   stopTestr
   rF   testr   r   r   r   test_startTestU   s   
zTest_TestResult.test_startTestc                 C   s   G dd dt j}|d}t  }|| | |  | t|jd | t|j	d | |j
d | |jd || | |  | t|jd | t|j	d | |j
d | |jd d S )Nc                   @   rA   )z*Test_TestResult.test_stopTest.<locals>.Fooc                 S   rB   r   r   r,   r   r   r   rC   l   rD   z1Test_TestResult.test_stopTest.<locals>.Foo.test_1NrE   r   r   r   r   rF   k   rG   rF   rC   r   rH   FrI   rM   r   r   r   test_stopTestj   s   

zTest_TestResult.test_stopTestc                 C   s   t  }|  |  d S r   )r   r4   startTestRunstopTestRunr   r   r   r   test_startTestRun_stopTestRun   s   z-Test_TestResult.test_startTestRun_stopTestRunc                 C   s   G dd dt j}|d}t  }|| || || | |  | t	|j
d | t	|jd | |jd | |jd d S )Nc                   @   rA   )z,Test_TestResult.test_addSuccess.<locals>.Fooc                 S   rB   r   r   r,   r   r   r   rC      rD   z3Test_TestResult.test_addSuccess.<locals>.Foo.test_1NrE   r   r   r   r   rF      rG   rF   rC   r   rH   F)r   rJ   r4   rK   
addSuccessrL   r5   r6   r7   r8   r9   r:   r;   r<   rM   r   r   r   test_addSuccess   s   


zTest_TestResult.test_addSuccessc                 C   s   G dd dt j}|d}z|d W n   t }Y t  }|| ||| || | 	|
  | t|jd | t|jd | |jd | |jd |jd \}}| || | |t d S )Nc                   @   rA   )z,Test_TestResult.test_addFailure.<locals>.Fooc                 S   rB   r   r   r,   r   r   r   rC      rD   z3Test_TestResult.test_addFailure.<locals>.Foo.test_1NrE   r   r   r   r   rF      rG   rF   rC   foor   rH   F)r   rJ   failsysexc_infor4   rK   
addFailurerL   assertFalser6   r7   r8   r9   r:   r;   r<   assertIsassertIsInstancestrr
   rF   rN   exc_info_tupler   	test_caseformatted_excr   r   r   test_addFailure   s$   


zTest_TestResult.test_addFailurec                       G dd dt j}|dfdd}| }tj| }t  }| || | |jd d   fdd	|D }| 	t
|d | d
|d  d S )Nc                   @   rA   )zDTest_TestResult.test_addFailure_filter_traceback_frames.<locals>.Fooc                 S   rB   r   r   r,   r   r   r   rC      rD   zKTest_TestResult.test_addFailure_filter_traceback_frames.<locals>.Foo.test_1NrE   r   r   r   r   rF      rG   rF   rC   c                      s$   z  d W d S    t  Y S )NrV   )rW   rX   rY   r   rN   r   r   get_exc_info   s   zMTest_TestResult.test_addFailure_filter_traceback_frames.<locals>.get_exc_infor   rH   c                       g | ]}| vr|qS r   r   .0lrb   r   r   
<listcomp>       zKTest_TestResult.test_addFailure_filter_traceback_frames.<locals>.<listcomp> raise self.failureException(msg)r   rJ   r   format_exceptionr4   rK   rZ   rL   r:   r7   r8   assertInr
   rF   rf   r`   Zfull_excr   Zdroppedr   rb   rN   r   'test_addFailure_filter_traceback_frames   s   


z7Test_TestResult.test_addFailure_filter_traceback_framesc                    rd   )Nc                   @   rA   )zLTest_TestResult.test_addFailure_filter_traceback_frames_context.<locals>.Fooc                 S   rB   r   r   r,   r   r   r   rC      rD   zSTest_TestResult.test_addFailure_filter_traceback_frames_context.<locals>.Foo.test_1NrE   r   r   r   r   rF      rG   rF   rC   c                      s6   zz	  d W W d S    td   t  Y S )NrV   *   )rW   r%   rX   rY   r   re   r   r   rf      s   zUTest_TestResult.test_addFailure_filter_traceback_frames_context.<locals>.get_exc_infor   rH   c                    rg   r   r   rh   rk   r   r   rl     rm   zSTest_TestResult.test_addFailure_filter_traceback_frames_context.<locals>.<listcomp>rn   ro   rr   r   rs   r   /test_addFailure_filter_traceback_frames_context   s   	


z?Test_TestResult.test_addFailure_filter_traceback_frames_contextc                 C   st   G dd dt j}dd }| }|d}t  }|| ||| || |jd d }| |dd d S )	Nc                   @   rA   )z`Test_TestResult.test_addFailure_filter_traceback_frames_chained_exception_self_loop.<locals>.Fooc                 S   rB   r   r   r,   r   r   r   rC     rD   zgTest_TestResult.test_addFailure_filter_traceback_frames_chained_exception_self_loop.<locals>.Foo.test_1NrE   r   r   r   r   rF     rG   rF   c                  S   s,   zt d} | | _| | _|    t  Y S )NZLoop	Exception	__cause____context__rX   rY   )Zloopr   r   r   rf     s   ziTest_TestResult.test_addFailure_filter_traceback_frames_chained_exception_self_loop.<locals>.get_exc_inforC   r   rH   zException: Loop
	r   rJ   r4   rK   rZ   rL   r:   r7   countr
   rF   rf   r`   rN   r   rb   r   r   r   Ctest_addFailure_filter_traceback_frames_chained_exception_self_loop  s   	

zSTest_TestResult.test_addFailure_filter_traceback_frames_chained_exception_self_loopc                 C   s   G dd dt j}dd }| }|d}t  }|| ||| || |jd d }| |dd | |d	d | |d
d d S )Nc                   @   rA   )z\Test_TestResult.test_addFailure_filter_traceback_frames_chained_exception_cycle.<locals>.Fooc                 S   rB   r   r   r,   r   r   r   rC   1  rD   zcTest_TestResult.test_addFailure_filter_traceback_frames_chained_exception_cycle.<locals>.Foo.test_1NrE   r   r   r   r   rF   0  rG   rF   c                  S   sd   z(t dt dt d} }}||f|| f| |fg}|D ]
\}}||_||_q|   t  Y S )NABCrw   )r   r   r   ZedgesZex1Zex2r   r   r   rf   4  s   zeTest_TestResult.test_addFailure_filter_traceback_frames_chained_exception_cycle.<locals>.get_exc_inforC   r   rH   zException: A
zException: B
zException: C
r{   r}   r   r   r   ?test_addFailure_filter_traceback_frames_chained_exception_cycle/  s   

zOTest_TestResult.test_addFailure_filter_traceback_frames_chained_exception_cyclec                 C   s   G dd dt j}|d}zt    t }Y t  }|| ||| || | 	|
  | t|jd | t|jd | |jd | |jd |jd \}}| || | |t d S )Nc                   @   rA   )z*Test_TestResult.test_addError.<locals>.Fooc                 S   rB   r   r   r,   r   r   r   rC   e  rD   z1Test_TestResult.test_addError.<locals>.Foo.test_1NrE   r   r   r   r   rF   d  rG   rF   rC   rH   r   F)r   rJ   r"   rX   rY   r4   rK   addErrorrL   r[   r6   r7   r8   r9   r:   r;   r<   r\   r]   r^   r_   r   r   r   test_addErrorc  s$   


zTest_TestResult.test_addErrorc                 C   s   G dd dt j}|d}t  }d|_tt j_| t |	  |
| |  | t|jd |jd \}}| d| d S )Nc                   @   rA   )z1Test_TestResult.test_addError_locals.<locals>.Fooc                 S   s   dd  d S )NrH   r   r   r,   r   r   r   rC     r   z8Test_TestResult.test_addError_locals.<locals>.Foo.test_1NrE   r   r   r   r   rF     rG   rF   rC   TrH   r   zA tracebacklocals)r   rJ   r4   	tb_localsr   r   r   
addCleanupr   rQ   runrR   r7   r8   r9   )r
   rF   rN   r   ra   rb   r   r   r   test_addError_locals~  s   

z$Test_TestResult.test_addError_localsc                    s   G  fdddt j}d |dt     |    | t jd | t j	d |  j
d |  jd  jd \}}| | | d|  j	d \}}| | | d| d S )	Nc                       s   e Zd Z fddZdS )z,Test_TestResult.test_addSubTest.<locals>.Fooc              	      sx   | j dd, | jzdd  W n ty   t }Y nw  | | d W d    d S 1 s5w   Y  d S )NrH   rV   r   some recognizable failure)subTest_subtestZeroDivisionErrorrX   rY   Z
addSubTestrW   )r
   r`   r   ZsubtestrN   r   r   rC     s   "z3Test_TestResult.test_addSubTest.<locals>.Foo.test_1NrE   r   r   r   r   rF         rF   rC   rH   Fr   r   r   )r   rJ   r4   r   r[   r6   r7   r8   r9   r:   r;   r<   r\   rq   )r
   rF   ra   rb   r   r   r   test_addSubTest  s    
zTest_TestResult.test_addSubTestc                 C   s,   t d dd}| || dt d  d S )NTrH   z$testGetDescriptionWithoutDocstring (z.Test_TestResult)r   TextTestResultr7   getDescriptionr   r   r   r   r   "testGetDescriptionWithoutDocstring  s   z2Test_TestResult.testGetDescriptionWithoutDocstringc                 C   s   | j ddd td dd}| || jdt d  W d    n1 s'w   Y  |  d td dd}| || jdt d  W d    d S 1 sRw   Y  d S )	NrH      rV   barTz+testGetSubTestDescriptionWithoutDocstring (z .Test_TestResult) (foo=1, bar=2)zsome messagez .Test_TestResult) [some message]r   r   r   r7   r   r   r   r   r   r   r   )testGetSubTestDescriptionWithoutDocstring  s$   

"z9Test_TestResult.testGetSubTestDescriptionWithoutDocstringc                 C   sX   |    td dd}| || jdt d  W d    d S 1 s%w   Y  d S )NTrH   z4testGetSubTestDescriptionWithoutDocstringAndParams (z.Test_TestResult) (<subtest>)r   r   r   r   r   2testGetSubTestDescriptionWithoutDocstringAndParams  s   

"zBTest_TestResult.testGetSubTestDescriptionWithoutDocstringAndParamsc              	   C   sl   d}t d dd}dd g fD ]%}| | | || j|t|f  W d    n1 s.w   Y  qd S )NzAtestGetSubTestDescriptionForFalsyValues (%s.Test_TestResult) [%s]TrH   r   r   r   r   r7   r   r   r   )r
   Zexpectedr   r-   r   r   r   'testGetSubTestDescriptionForFalsyValues  s   

z7Test_TestResult.testGetSubTestDescriptionForFalsyValuesc              	   C   s   | j dd= | j ddd td dd}| || jdt d  W d    n1 s.w   Y  W d    d S W d    d S 1 sFw   Y  d S )	NrH   r   r      Zbazr   Tz1testGetNestedSubTestDescriptionWithoutDocstring (z'.Test_TestResult) (baz=2, bar=3, foo=1)r   r   r   r   r   /testGetNestedSubTestDescriptionWithoutDocstring  s   
"z?Test_TestResult.testGetNestedSubTestDescriptionWithoutDocstringc              	   C   s   | j ddd= | j ddd td dd}| || jdt d	  W d    n1 s/w   Y  W d    d S W d    d S 1 sGw   Y  d S )
NrH   r   r   r      r   Tz;testGetDuplicatedNestedSubTestDescriptionWithoutDocstring (z'.Test_TestResult) (baz=3, bar=4, foo=1)r   r   r   r   r   9testGetDuplicatedNestedSubTestDescriptionWithoutDocstring  s   
"zITest_TestResult.testGetDuplicatedNestedSubTestDescriptionWithoutDocstringr   z)Docstrings are omitted with -O2 and abovec                 C   ,   t ddd}| || dt d  dS )5Tests getDescription() for a method with a docstring.NTrH   z(testGetDescriptionWithOneLineDocstring (zG.Test_TestResult)
Tests getDescription() for a method with a docstring.r   r   r   r   r   &testGetDescriptionWithOneLineDocstring  s   z6Test_TestResult.testGetDescriptionWithOneLineDocstringc                 C   ^   t ddd}| jddd | || jdt d  W d   dS 1 s(w   Y  dS )r   NTrH   r   r   z/testGetSubTestDescriptionWithOneLineDocstring (zV.Test_TestResult) (foo=1, bar=2)
Tests getDescription() for a method with a docstring.r   r   r   r   r   -testGetSubTestDescriptionWithOneLineDocstring  s   
"z=Test_TestResult.testGetSubTestDescriptionWithOneLineDocstringc                 C   r   )oTests getDescription() for a method with a longer docstring.
        The second line of the docstring.
        NTrH   z*testGetDescriptionWithMultiLineDocstring (zN.Test_TestResult)
Tests getDescription() for a method with a longer docstring.r   r   r   r   r   (testGetDescriptionWithMultiLineDocstring  s   z8Test_TestResult.testGetDescriptionWithMultiLineDocstringc                 C   r   )r   NTrH   r   r   z1testGetSubTestDescriptionWithMultiLineDocstring (z].Test_TestResult) (foo=1, bar=2)
Tests getDescription() for a method with a longer docstring.r   r   r   r   r   /testGetSubTestDescriptionWithMultiLineDocstring  s   
"z?Test_TestResult.testGetSubTestDescriptionWithMultiLineDocstringc                 C   sH   G dd dt }t }| || d|jjd< | || d S )Nc                   @   s   e Zd ZG dd deZdS )z5Test_TestResult.testStackFrameTrimming.<locals>.Framec                   @   s   e Zd Zi ZdS )z>Test_TestResult.testStackFrameTrimming.<locals>.Frame.tb_frameN)r   r   r   	f_globalsr   r   r   r   tb_frame"  s    r   N)r   r   r   objectr   r   r   r   r   Frame!  r   r   TZ
__unittest)r   r   r4   r[   Z_is_relevant_tb_levelr   r   r5   )r
   r   r   r   r   r   testStackFrameTrimming   s
   z&Test_TestResult.testStackFrameTrimmingc                 C   s   t  }dd |_d|_|d d  | |j t  }dd |_d|_|d d  | |j t  }dd |_d|_|d  | |j d S )Nc                  W      dS r(   r   _r   r   r   <lambda>,      z.Test_TestResult.testFailFast.<locals>.<lambda>Tc                  W   r   r(   r   r   r   r   r   r   2  r   c                  W   r   r(   r   r   r   r   r   r   8  r   )	r   r4   Z_exc_info_to_stringfailfastr   r5   r<   rZ   addUnexpectedSuccessr   r   r   r   testFailFast*  s   



zTest_TestResult.testFailFastc                    sJ   t  }tj|dd} fdd}||}|   | d d S )NT)streamr   c                    s     | j d S r   )r5   r   r0   r,   r   r   rN   @  s   z5Test_TestResult.testFailFastSetByRunner.<locals>.testz

OK
)r'   r   TextTestRunnerr   r/   r5   r1   endswith)r
   r   runnerrN   r   r   r,   r   testFailFastSetByRunner=  s   
z'Test_TestResult.testFailFastSetByRunnerN)#r   r   r   r=   r@   rO   rP   rS   rU   rc   rt   rv   r~   r   r   r   r   r   r   r   r   r   r   r   ZskipIfrX   flagsoptimizer   r   r   r   r   r   r   r   r   r   r   r2   4   sP    
	'4"
		
	




r2   )ZaddSkipZaddExpectedFailurer   r   c                 C   s(   g | _ g | _d| _d| _d| _d| _d S r3   )r:   r9   r;   r<   r+   r   )r
   r   Zdescriptions	verbosityr   r   r   r   L  s   
r   	OldResultc                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )Test_OldTestResultc                 C   sV   t dtf t }|| | t|j| W d    d S 1 s$w   Y  d S )NzTestResult has no add.+ method,)r   Zcheck_warningsRuntimeWarningr   r   r7   r8   r:   )r
   rN   r:   r   r   r   r   assertOldResultWarningY  s   
"z)Test_OldTestResult.assertOldResultWarningc                 C   s>   G dd dt j}dD ]\}}||}| |t|  qd S )Nc                   @   s0   e Zd Zdd Zejdd Zejdd ZdS )z2Test_OldTestResult.testOldTestResult.<locals>.Testc                 S      |  d d S )NZfoobarZskipTestr,   r   r   r   testSkipb     z;Test_OldTestResult.testOldTestResult.<locals>.Test.testSkipc                 S   s   t r   )r"   r,   r   r   r   testExpectedFaild     zCTest_OldTestResult.testOldTestResult.<locals>.Test.testExpectedFailc                 S   rB   r   r   r,   r   r   r   testUnexpectedSuccessg  r   zHTest_OldTestResult.testOldTestResult.<locals>.Test.testUnexpectedSuccessN)r   r   r   r   r   ZexpectedFailurer   r   r   r   r   r   Testa  s    
r   ))r   T)r   T)r   F)r   rJ   r   int)r
   r   Z	test_nameZshould_passrN   r   r   r   testOldTestResult`  s
   
z$Test_OldTestResult.testOldTestResultc                 C   s&   G dd dt j}| |dd d S )Nc                   @   r   )z7Test_OldTestResult.testOldTestTesultSetup.<locals>.Testc                 S   r   )N	no reasonr   r,   r   r   r   setUps  r   z=Test_OldTestResult.testOldTestTesultSetup.<locals>.Test.setUpc                 S   rB   r   r   r,   r   r   r   testFoou  rD   z?Test_OldTestResult.testOldTestTesultSetup.<locals>.Test.testFooN)r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   )r   rJ   r   r
   r   r   r   r   testOldTestTesultSetupq  s   z)Test_OldTestResult.testOldTestTesultSetupc                 C   s0   t dG dd dt j}| |dd d S )Nr   c                   @   rA   )z7Test_OldTestResult.testOldTestResultClass.<locals>.Testc                 S   rB   r   r   r,   r   r   r   r   |  rD   z?Test_OldTestResult.testOldTestResultClass.<locals>.Test.testFooNr   r   r   r   r   r   r   r   r   z  s    r   r   r   )r   skiprJ   r   r   r   r   r   testOldTestResultClassy  s   z)Test_OldTestResult.testOldTestResultClassc                 C   s6   G dd dt j}t jtt d}||d d S )Nc                   @   rA   )z8Test_OldTestResult.testOldResultWithRunner.<locals>.Testc                 S   rB   r   r   r,   r   r   r   r     rD   z@Test_OldTestResult.testOldResultWithRunner.<locals>.Test.testFooNr   r   r   r   r   r     rG   r   )Zresultclassr   r   )r   rJ   r   r   ioStringIOr   )r
   r   r   r   r   r   testOldResultWithRunner  s
   z*Test_OldTestResult.testOldResultWithRunnerN)r   r   r   r   r   r   r   r   r   r   r   r   r   W  s    r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+S ),TestOutputBufferingc                 C   s   t j| _t j| _d S r   )rX   stdout	_real_outstderr	_real_errr,   r   r   r   r        zTestOutputBuffering.setUpc                 C   s   | j t_| jt_d S r   )r   rX   r   r   r   r,   r   r   r   tearDown  r   zTestOutputBuffering.tearDownc                 C   sf   | j }| j}t }| |j | |tj | |tj	 |
|  | |tj | |tj	 d S r   )r   r   r   r4   r[   r+   r\   rX   r   r   rK   )r
   real_outreal_errr   r   r   r   testBufferOutputOff  s   
z'TestOutputBuffering.testBufferOutputOffc                 C   s  | j }| j}t }| |j d|_| |tj | |tj	 |
|  | |tj | |tj	 | tjtj | tj	tj | tjtj	 tj}tj	}t |_t |_td tdtj	d | | d | | d | |j d | |j d ||  ||  | tj|j | tj	|j | |j d | |j d | | d | | d d S )NTrV   r   filezfoo
zbar
r)   )r   r   r   r4   r[   r+   r\   rX   r   r   rK   ZassertIsNotr]   r   r   _original_stdout_original_stderrr!   r7   r1   rT   rL   )r
   r   r   r   Z
out_streamZ
err_streamr   r   r   #testBufferOutputStartTestAddSuccess  s>   




z7TestOutputBuffering.testBufferOutputStartTestAddSuccessc                 C   s   t  }d|_||  |S r>   )r   r4   r+   rK   r   r   r   r   getStartedResult  s   
z$TestOutputBuffering.getStartedResultc                 C   s  t tj_| t dD ]}\}}}|  }tj}tj	}t
 |_t
 |_tdtjd |r4tdtj	d t||}|| d ||  t||}| t|d |d \}	}
td}d	}|rdtd
}d||f }| |	|  | |j | | |j | | |
| qd S )N)r9   r   Tr:   rZ   Fr   r   rV   r   r   NNNrH   r   z9
                Stdout:
                foo
            r)   z9
                Stderr:
                bar
            zA traceback%s%s)r   r   r   r   r   r   r   rX   r   r   r   r   r   r   r!   getattrrL   r7   r8   textwrapdedentr\   r1   ZassertMultiLineEqual)r
   Zmessage_attrZadd_attrZinclude_errorr   Zbuffered_outZbuffered_errZaddFunctionZresult_listrN   messageZexpectedOutMessageZexpectedErrMessageZexpectedFullMessager   r   r   !testBufferOutputAddErrorOrFailure  s6   








z5TestOutputBuffering.testBufferOutputAddErrorOrFailurec           	      C      t  }t }W d    n1 sw   Y  d|_G dd dtj}t|dg}|| d}| | | | t|j	d dt
| d}|j	d	 \}}| t|| | d
| | || d S )NTc                   @   r   )z0TestOutputBuffering.testBufferSetUp.<locals>.Fooc                 S      t d dd  d S Nset uprH   r   r!   r,   r   r   r   r     r   z6TestOutputBuffering.testBufferSetUp.<locals>.Foo.setUpc                 S   rB   r   r   r,   r   r   r   test_foo  rD   z9TestOutputBuffering.testBufferSetUp.<locals>.Foo.test_fooNr   r   r   r   r   r   r   r   r   rF         rF   r   z
Stdout:
set up
rH   
test_foo ()r   #ZeroDivisionError: division by zeror   r   r4   r+   rJ   	TestSuiter7   r1   r8   r9   r   r^   rq   	r
   r   r   rF   suiteexpected_outdescriptionra   rb   r   r   r   testBufferSetUp	     
z#TestOutputBuffering.testBufferSetUpc           	      C   r   )NTc                   @   r   )z3TestOutputBuffering.testBufferTearDown.<locals>.Fooc                 S   r   Nz	tear downrH   r   r   r,   r   r   r   r   %  r   z<TestOutputBuffering.testBufferTearDown.<locals>.Foo.tearDownc                 S   rB   r   r   r,   r   r   r   r   (  rD   z<TestOutputBuffering.testBufferTearDown.<locals>.Foo.test_fooN)r   r   r   r   r   r   r   r   r   rF   $  r   rF   r   z
Stdout:
tear down
rH   r   r   r   r   r   r   r   r   r   testBufferTearDown  r  z&TestOutputBuffering.testBufferTearDownc           	      C   s  t  }t }W d    n1 sw   Y  d|_G dd dtj}t|dg}|| d}| | | | t|j	d dt
| d}|j	d	 \}}| t|| | d
| | d| | || |j	d \}}| t|| | d| | d| | || d S )NTc                   @   r   )z5TestOutputBuffering.testBufferDoCleanups.<locals>.Fooc                 S       t d | t | t d S Nr   r!   r   r#   r&   r,   r   r   r   r   ;     
z;TestOutputBuffering.testBufferDoCleanups.<locals>.Foo.setUpc                 S   rB   r   r   r,   r   r   r   r   ?  rD   z>TestOutputBuffering.testBufferDoCleanups.<locals>.Foo.test_fooNr   r   r   r   r   rF   :  s    rF   r   (
Stdout:
set up
do cleanup2
do cleanup1
r   r   r   r   ValueError: bad cleanup2r"   rH   TypeError: bad cleanup1r%   r   r   r4   r+   rJ   r   r7   r1   r8   r9   r   r^   rq   assertNotInr   r   r   r   testBufferDoCleanups5  s*   
z(TestOutputBuffering.testBufferDoCleanupsc           	      C     t  }t }W d    n1 sw   Y  d|_G dd dtj}t|dg}|| d}| | | | t|j	d dt
| d}|j	d	 \}}| t|| | d
| | d| | d| | || |j	d \}}| t|| | d| | d| | d| | || |j	d \}}| t|| | d| | d| | d| | || d S )NTc                   @   r   )z;TestOutputBuffering.testBufferSetUp_DoCleanups.<locals>.Fooc                 S   (   t d | t | t dd  d S r   r  r,   r   r   r   r   X  s   

zATestOutputBuffering.testBufferSetUp_DoCleanups.<locals>.Foo.setUpc                 S   rB   r   r   r,   r   r   r   r   ]  rD   zDTestOutputBuffering.testBufferSetUp_DoCleanups.<locals>.Foo.test_fooNr   r   r   r   r   rF   W  s    rF   r   r	  r   r   r   r   r   r%   r"   rH   r
  r   r   r  r  r   r   r   r   testBufferSetUp_DoCleanupsR  s:   
z.TestOutputBuffering.testBufferSetUp_DoCleanupsc           	      C   r  )NTc                   @   s$   e Zd Zdd Zdd Zdd ZdS )z>TestOutputBuffering.testBufferTearDown_DoCleanups.<locals>.Fooc                 S   r  r  r  r,   r   r   r   r   ~  r  zDTestOutputBuffering.testBufferTearDown_DoCleanups.<locals>.Foo.setUpc                 S   r   r  r   r,   r   r   r   r     r   zGTestOutputBuffering.testBufferTearDown_DoCleanups.<locals>.Foo.tearDownc                 S   rB   r   r   r,   r   r   r   r     rD   zGTestOutputBuffering.testBufferTearDown_DoCleanups.<locals>.Foo.test_fooN)r   r   r   r   r   r   r   r   r   r   rF   }  s    rF   r   z2
Stdout:
set up
tear down
do cleanup2
do cleanup1
r   r   r   r   r   r%   r"   rH   r
  r   r   r  r  r   r   r   r   testBufferTearDown_DoCleanupsx  s:   

z1TestOutputBuffering.testBufferTearDown_DoCleanupsc           	      C      t  }t }W d    n1 sw   Y  d|_G dd dtj}t|dg}|| d}| | | | t|j	d dt
| d}|j	d	 \}}| |j| | d
| | || d S )NTc                   @       e Zd Zedd Zdd ZdS )z5TestOutputBuffering.testBufferSetupClass.<locals>.Fooc                 S   r   Nset up classrH   r   r   clsr   r   r   
setUpClass     z@TestOutputBuffering.testBufferSetupClass.<locals>.Foo.setUpClassc                 S   rB   r   r   r,   r   r   r   r     rD   z>TestOutputBuffering.testBufferSetupClass.<locals>.Foo.test_fooNr   r   r   classmethodr  r   r   r   r   r   rF         
rF   r   
Stdout:
set up class
rH   setUpClass (r   r   r   r   r   r4   r+   rJ   r   r7   r1   r8   r9   r   r   rq   r   r   r   r   testBufferSetupClass     
z(TestOutputBuffering.testBufferSetupClassc           	      C   r  )NTc                   @   r  )z8TestOutputBuffering.testBufferTearDownClass.<locals>.Fooc                 S   r   Ntear down classrH   r   r   r  r   r   r   tearDownClass  r  zFTestOutputBuffering.testBufferTearDownClass.<locals>.Foo.tearDownClassc                 S   rB   r   r   r,   r   r   r   r     rD   zATestOutputBuffering.testBufferTearDownClass.<locals>.Foo.test_fooN)r   r   r   r  r%  r   r   r   r   r   rF     r  rF   r   
Stdout:
tear down class
rH   tearDownClass (r   r   r   r   r   r   r   r   testBufferTearDownClass  r"  z+TestOutputBuffering.testBufferTearDownClassc           	      C   s  t  }t }W d    n1 sw   Y  d|_G dd dtj}t|dg}|| d}| | | | t|j	d dt
| d}|j	d	 \}}| |j| | d
| | d| | || |j	d \}}| |j| | d| | d| | || d S )NTc                   @   ,   e Zd Zedd Zedd Zdd ZdS )z:TestOutputBuffering.testBufferDoClassCleanups.<locals>.Fooc                 S   r  Nr  r!   ZaddClassCleanupr#   r&   r  r   r   r   r       
zETestOutputBuffering.testBufferDoClassCleanups.<locals>.Foo.setUpClassc                 S   s   t d d S )Nr$  r   r  r   r   r   r%    s   zHTestOutputBuffering.testBufferDoClassCleanups.<locals>.Foo.tearDownClassc                 S   rB   r   r   r,   r   r   r   r     rD   zCTestOutputBuffering.testBufferDoClassCleanups.<locals>.Foo.test_fooNr   r   r   r  r  r%  r   r   r   r   r   rF     s    

rF   r   1
Stdout:
tear down class
do cleanup2
do cleanup1
r   r'  r   r   r
  r"   rH   r  r%   r   r   r4   r+   rJ   r   r7   r1   r8   r9   r   r   rq   r  r   r   r   r   testBufferDoClassCleanups  s*   
z-TestOutputBuffering.testBufferDoClassCleanupsc           	      C   |  t  }t }W d    n1 sw   Y  d|_G dd dtj}t|dg}|| d}| | | | t|j	d dt
| d}|j	d	 \}}| |j| | d
| | d| | d| | d| |j	d \}}| |j| | d| | d| | d| | || |j	d \}}| |j| | d| | d| | d| | || d S )NTc                   @   r  )zETestOutputBuffering.testBufferSetupClass_DoClassCleanups.<locals>.Fooc                 S   r  r  r+  r  r   r   r   r       

zPTestOutputBuffering.testBufferSetupClass_DoClassCleanups.<locals>.Foo.setUpClassc                 S   rB   r   r   r,   r   r   r   r     rD   zNTestOutputBuffering.testBufferSetupClass_DoClassCleanups.<locals>.Foo.test_fooNr  r   r   r   r   rF     s    
rF   r   z.
Stdout:
set up class
do cleanup2
do cleanup1
r   r  r   r   r   r%   r"   r  rH   r
  r   r   r  r/  r   r   r   r   $testBufferSetupClass_DoClassCleanups  s:   
	z8TestOutputBuffering.testBufferSetupClass_DoClassCleanupsc           	      C   r1  )NTc                   @   r)  )zHTestOutputBuffering.testBufferTearDownClass_DoClassCleanups.<locals>.Fooc                 S   r  r*  r+  r  r   r   r   r    r,  zSTestOutputBuffering.testBufferTearDownClass_DoClassCleanups.<locals>.Foo.setUpClassc                 S   r   r#  r   r  r   r   r   r%  !  r  zVTestOutputBuffering.testBufferTearDownClass_DoClassCleanups.<locals>.Foo.tearDownClassc                 S   rB   r   r   r,   r   r   r   r   %  rD   zQTestOutputBuffering.testBufferTearDownClass_DoClassCleanups.<locals>.Foo.test_fooNr-  r   r   r   r   rF     s    

rF   r   r.  r   r'  r   r   r   r%   r"   r&  rH   r
  r   r   r  r/  r   r   r   r   'testBufferTearDownClass_DoClassCleanups  s:   
z;TestOutputBuffering.testBufferTearDownClass_DoClassCleanupsc           
      C      t  }t }W d    n1 sw   Y  d|_G dd dtj}G dd dt}d|_|tjd< | 	tjj
d t|dg}|| d}| | | | t|jd d	}|jd
 \}}	| |j| | d|	 | ||	 d S )NTc                   @   rA   )z6TestOutputBuffering.testBufferSetUpModule.<locals>.Fooc                 S   rB   r   r   r,   r   r   r   r   F  rD   z?TestOutputBuffering.testBufferSetUpModule.<locals>.Foo.test_fooNr   r   r   r   r   r   r   r   rF   E  rG   rF   c                   @      e Zd Zedd ZdS )z9TestOutputBuffering.testBufferSetUpModule.<locals>.Modulec                   S   r   Nset up modulerH   r   r   r   r   r   r   setUpModuleI  r  zETestOutputBuffering.testBufferSetUpModule.<locals>.Module.setUpModuleNr   r   r   staticmethodr:  r   r   r   r   ModuleH      r=  r   
Stdout:
set up module
rH   setUpModule (Module)r   r   r   r   r4   r+   rJ   r   r   rX   modulesr   popr   r7   r1   r8   r9   r   rq   
r
   r   r   rF   r=  r   r   r   ra   rb   r   r   r   testBufferSetUpModule@  &   

z)TestOutputBuffering.testBufferSetUpModulec           
      C   r5  )NTc                   @   rA   )z9TestOutputBuffering.testBufferTearDownModule.<locals>.Fooc                 S   rB   r   r   r,   r   r   r   r   b  rD   zBTestOutputBuffering.testBufferTearDownModule.<locals>.Foo.test_fooNr6  r   r   r   r   rF   a  rG   rF   c                   @   r7  )z<TestOutputBuffering.testBufferTearDownModule.<locals>.Modulec                   S   r   Nztear down modulerH   r   r   r   r   r   r   tearDownModulee  r  zKTestOutputBuffering.testBufferTearDownModule.<locals>.Module.tearDownModuleN)r   r   r   r<  rH  r   r   r   r   r=  d  r>  r=  r   
Stdout:
tear down module
rH   tearDownModule (Module)r   r   rA  rD  r   r   r   testBufferTearDownModule\  rF  z,TestOutputBuffering.testBufferTearDownModulec           
      C   s   t  }t }W d    n1 sw   Y  d|_G dd dtj}G dd dt}d|_|tjd< | 	tjj
d t|dg}|| d}| | | | t|jd d	}|jd
 \}}	| |j| | d|	 | d|	 | ||	 d S )NTc                   @   rA   )z;TestOutputBuffering.testBufferDoModuleCleanups.<locals>.Fooc                 S   rB   r   r   r,   r   r   r   r   ~  rD   zDTestOutputBuffering.testBufferDoModuleCleanups.<locals>.Foo.test_fooNr6  r   r   r   r   rF   }  rG   rF   c                   @   r7  )z>TestOutputBuffering.testBufferDoModuleCleanups.<locals>.Modulec                   S       t d tt tt d S Nr9  r!   r   ZaddModuleCleanupr#   r&   r   r   r   r   r:    r,  zJTestOutputBuffering.testBufferDoModuleCleanups.<locals>.Module.setUpModuleNr;  r   r   r   r   r=    r>  r=  r   z!
Stdout:
do cleanup2
do cleanup1
rH   rJ  r   r
  r"   r   r   r4   r+   rJ   r   r   rX   rB  r   rC  r   r7   r1   r8   r9   r   rq   r  rD  r   r   r   testBufferDoModuleCleanupsx  s(   

z.TestOutputBuffering.testBufferDoModuleCleanupsc           
      C   s`  t  }t }W d    n1 sw   Y  d|_G dd dtj}G dd dt}d|_|tjd< | 	tjj
d t|dg}|| d}| | | | t|jd d	}|jd
 \}}	| |j| | d|	 | d|	 | d|	 | d|	 |jd \}}	| ||	 | |j| | d|	 | d|	 | d|	 | ||	 d S )NTc                   @   rA   )zGTestOutputBuffering.testBufferSetUpModule_DoModuleCleanups.<locals>.Fooc                 S   rB   r   r   r,   r   r   r   r     rD   zPTestOutputBuffering.testBufferSetUpModule_DoModuleCleanups.<locals>.Foo.test_fooNr6  r   r   r   r   rF     rG   rF   c                   @   r7  )zJTestOutputBuffering.testBufferSetUpModule_DoModuleCleanups.<locals>.Modulec                   S   s(   t d tt tt dd  d S r8  rN  r   r   r   r   r:    r2  zVTestOutputBuffering.testBufferSetUpModule_DoModuleCleanups.<locals>.Module.setUpModuleNr;  r   r   r   r   r=    r>  r=  r   z/
Stdout:
set up module
do cleanup2
do cleanup1
r   r@  r   r   r%   r"   r?  rH   r
  r   rO  rD  r   r   r   &testBufferSetUpModule_DoModuleCleanups  s8   

z:TestOutputBuffering.testBufferSetUpModule_DoModuleCleanupsc           
      C   sT  t  }t }W d    n1 sw   Y  d|_G dd dtj}G dd dt}d|_|tjd< | 	tjj
d t|dg}|| d}| | | | t|jd d	}|jd
 \}}	| |j| | d|	 | d|	 | d|	 | d|	 |jd \}}	| |j| | d|	 | d|	 | d|	 | ||	 d S )NTc                   @   rA   )zJTestOutputBuffering.testBufferTearDownModule_DoModuleCleanups.<locals>.Fooc                 S   rB   r   r   r,   r   r   r   r     rD   zSTestOutputBuffering.testBufferTearDownModule_DoModuleCleanups.<locals>.Foo.test_fooNr6  r   r   r   r   rF     rG   rF   c                   @   s$   e Zd Zedd Zedd ZdS )zMTestOutputBuffering.testBufferTearDownModule_DoModuleCleanups.<locals>.Modulec                   S   rL  rM  rN  r   r   r   r   r:    r,  zYTestOutputBuffering.testBufferTearDownModule_DoModuleCleanups.<locals>.Module.setUpModulec                   S   r   rG  r   r   r   r   r   rH    r  z\TestOutputBuffering.testBufferTearDownModule_DoModuleCleanups.<locals>.Module.tearDownModuleN)r   r   r   r<  r:  rH  r   r   r   r   r=    s
    
r=  r   z2
Stdout:
tear down module
do cleanup2
do cleanup1
r   rJ  r   r   r%   r"   rI  rH   r
  r   rO  rD  r   r   r   )testBufferTearDownModule_DoModuleCleanups  s6   

z=TestOutputBuffering.testBufferTearDownModule_DoModuleCleanupsN)r   r   r   r   r   r   r   r   r   r  r  r  r  r  r!  r(  r0  r3  r4  rE  rK  rP  rQ  rR  r   r   r   r   r     s,    0/&(!'*'r   __main__r   )r   rX   r   Ztest.supportr   r   r   r   r   Zunittest.utilr   r   r   r   r#   r&   r'   rJ   r2   dictr4   __dict__Z	classDictmr   typer   r   r   r   mainr   r   r   r   <module>   s@    
    
4    `