B
    v9a¨a  ã               @   sÖ   d dl Z d dlZd dlZd dlmZ d dlZd dlZG dd„ deƒZdd„ Z	G dd„ dej
ƒZeejjƒZxd	D ]
Zee= qpW d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rÒe ¡  dS )é    N)Úsupportc               @   s   e Zd ZG dd„ dƒZdS )ÚMockTracebackc               @   s   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	   ú!/usr/lib/python3.7/test_result.pyÚ__init__   s    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   s   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   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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'd(„ ƒZe ejjd!kd"¡d)d*„ ƒZd+d,„ Zd-d.„ Zd/d0„ Zd1S )2Ú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_buffer)r   r   r	   r	   r
   Ú	test_init#   s    zTest_TestResult.test_initc             C   s"   t  ¡ }| ¡  |  |jd¡ d S )NT)r   r   Ústopr   r    )r   r   r	   r	   r
   Ú	test_stop1   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               @   s   e Zd Zdd„ ZdS )z+Test_TestResult.test_startTest.<locals>.Fooc             S   s   d S )Nr	   )r   r	   r	   r
   Útest_1<   s    z2Test_TestResult.test_startTest.<locals>.Foo.test_1N)r   r   r   r$   r	   r	   r	   r
   ÚFoo;   s   r%   r$   r   é   F)r   ÚTestCaser   Ú	startTestr   r   r   r   r   r   r   r    ÚstopTest)r   r%   Útestr   r	   r	   r
   Útest_startTest:   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               @   s   e Zd Zdd„ ZdS )z*Test_TestResult.test_stopTest.<locals>.Fooc             S   s   d S )Nr	   )r   r	   r	   r
   r$   Q   s    z1Test_TestResult.test_stopTest.<locals>.Foo.test_1N)r   r   r   r$   r	   r	   r	   r
   r%   P   s   r%   r$   r   r&   F)r   r'   r   r(   r   r   r   r   r   r   r   r    r)   )r   r%   r*   r   r	   r	   r
   Útest_stopTestO   s    

zTest_TestResult.test_stopTestc             C   s   t  ¡ }| ¡  | ¡  d S )N)r   r   ÚstartTestRunÚstopTestRun)r   r   r	   r	   r
   Útest_startTestRun_stopTestRunj   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               @   s   e Zd Zdd„ ZdS )z,Test_TestResult.test_addSuccess.<locals>.Fooc             S   s   d S )Nr	   )r   r	   r	   r
   r$   „   s    z3Test_TestResult.test_addSuccess.<locals>.Foo.test_1N)r   r   r   r$   r	   r	   r	   r
   r%   ƒ   s   r%   r$   r   r&   F)r   r'   r   r(   Ú
addSuccessr)   r   r   r   r   r   r   r   r    )r   r%   r*   r   r	   r	   r
   Útest_addSuccess‚   s    


zTest_TestResult.test_addSuccessc             C   sÞ   G dd„ dt jƒ}|dƒ}y| d¡ W n   t ¡ }Y nX t  ¡ }| |¡ | ||¡ | |¡ |  	| 
¡ ¡ |  t|jƒd¡ |  t|jƒd¡ |  |jd¡ |  |jd¡ |jd \}}|  ||¡ |  |t¡ d S )Nc               @   s   e Zd Zdd„ ZdS )z,Test_TestResult.test_addFailure.<locals>.Fooc             S   s   d S )Nr	   )r   r	   r	   r
   r$   «   s    z3Test_TestResult.test_addFailure.<locals>.Foo.test_1N)r   r   r   r$   r	   r	   r	   r
   r%   ª   s   r%   r$   Úfoor   r&   F)r   r'   ÚfailÚsysÚexc_infor   r(   Ú
addFailurer)   ÚassertFalser   r   r   r   r   r   r    ÚassertIsÚassertIsInstanceÚstr)r   r%   r*   Úexc_info_tupler   Ú	test_caseÚformatted_excr	   r	   r
   Útest_addFailure©   s$    

zTest_TestResult.test_addFailurec             C   sÚ   G dd„ dt jƒ}|dƒ}y
tƒ ‚W n   t ¡ }Y nX t  ¡ }| |¡ | ||¡ | |¡ |  	| 
¡ ¡ |  t|jƒd¡ |  t|jƒd¡ |  |jd¡ |  |jd¡ |jd \}}|  ||¡ |  |t¡ d S )Nc               @   s   e Zd Zdd„ ZdS )z*Test_TestResult.test_addError.<locals>.Fooc             S   s   d S )Nr	   )r   r	   r	   r
   r$   Û   s    z1Test_TestResult.test_addError.<locals>.Foo.test_1N)r   r   r   r$   r	   r	   r	   r
   r%   Ú   s   r%   r$   r&   r   F)r   r'   Ú	TypeErrorr4   r5   r   r(   ÚaddErrorr)   r7   r   r   r   r   r   r   r    r8   r9   r:   )r   r%   r*   r;   r   r<   r=   r	   r	   r
   Útest_addErrorÙ   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               @   s   e Zd Zdd„ ZdS )z1Test_TestResult.test_addError_locals.<locals>.Fooc             S   s   dd  d S )Nr&   r   r	   )r   r	   r	   r
   r$   ö   s    z8Test_TestResult.test_addError_locals.<locals>.Foo.test_1N)r   r   r   r$   r	   r	   r	   r
   r%   õ   s   r%   r$   Tr&   r   zA tracebacklocals)r   r'   r   Ú	tb_localsr   r   r   Ú
addCleanupr   r-   Úrunr.   r   r   r   )r   r%   r*   r   r<   r=   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          	      sd   | j ddN | j‰ydd  W n tk
r<   t ¡ }Y nX ˆ  ˆˆ|¡ |  d¡ W d Q R X d S )Nr&   )r2   r   zsome recognizable failure)ÚsubTestÚ_subtestÚZeroDivisionErrorr4   r5   Z
addSubTestr3   )r   r;   )r   Úsubtestr*   r	   r
   r$   	  s    z3Test_TestResult.test_addSubTest.<locals>.Foo.test_1N)r   r   r   r$   r	   )r   rI   r*   r	   r
   r%     s   r%   r$   r&   Fr   rH   zsome recognizable failure)r   r'   r   rD   r7   r   r   r   r   r   r   r    r8   ZassertIn)r   r%   r<   r=   r	   )r   rI   r*   r
   Útest_addSubTest  s     
zTest_TestResult.test_addSubTestc             C   s,   t  d dd¡}|  | | ¡dt d ¡ d S )NTr&   z$testGetDescriptionWithoutDocstring (z.Test_TestResult))r   ÚTextTestResultr   ÚgetDescriptionr   )r   r   r	   r	   r
   Ú"testGetDescriptionWithoutDocstring)  s
    z2Test_TestResult.testGetDescriptionWithoutDocstringc          	   C   sˆ   | j ddd0 t d dd¡}|  | | j¡dt d ¡ W d Q R X |   d¡0 t d dd¡}|  | | j¡dt d ¡ W d Q R X d S )	Nr&   é   )r2   ÚbarTz+testGetSubTestDescriptionWithoutDocstring (z .Test_TestResult) (foo=1, bar=2)zsome messagez .Test_TestResult) [some message])rF   r   rK   r   rL   rG   r   )r   r   r	   r	   r
   Ú)testGetSubTestDescriptionWithoutDocstring0  s    

z9Test_TestResult.testGetSubTestDescriptionWithoutDocstringc          	   C   sB   |   ¡ 0 t d dd¡}|  | | j¡dt d ¡ W d Q R X d S )NTr&   z4testGetSubTestDescriptionWithoutDocstringAndParams (z.Test_TestResult) (<subtest>))rF   r   rK   r   rL   rG   r   )r   r   r	   r	   r
   Ú2testGetSubTestDescriptionWithoutDocstringAndParams>  s
    

zBTest_TestResult.testGetSubTestDescriptionWithoutDocstringAndParamsc          
   C   s\   d}t  d dd¡}xDdd g gD ]6}|  |¡" |  | | j¡|t|f ¡ W d Q R X qW d S )NzAtestGetSubTestDescriptionForFalsyValues (%s.Test_TestResult) [%s]Tr&   r   )r   rK   rF   r   rL   rG   r   )r   Zexpectedr   Úargr	   r	   r
   Ú'testGetSubTestDescriptionForFalsyValuesF  s    
z7Test_TestResult.testGetSubTestDescriptionForFalsyValuesc          
   C   s`   | j ddJ | j ddd0 t d dd¡}|  | | j¡dt d ¡ W d Q R X W d Q R X d S )	Nr&   )r2   rN   é   )ÚbazrO   Tz1testGetNestedSubTestDescriptionWithoutDocstring (z'.Test_TestResult) (baz=2, bar=3, foo=1))rF   r   rK   r   rL   rG   r   )r   r   r	   r	   r
   Ú/testGetNestedSubTestDescriptionWithoutDocstringP  s    
z?Test_TestResult.testGetNestedSubTestDescriptionWithoutDocstringc          
   C   sb   | j dddJ | j ddd0 t d dd¡}|  | | j¡dt d	 ¡ W d Q R X W d Q R X d S )
Nr&   rN   )r2   rO   rT   é   )rU   rO   Tz;testGetDuplicatedNestedSubTestDescriptionWithoutDocstring (z'.Test_TestResult) (baz=3, bar=4, foo=1))rF   r   rK   r   rL   rG   r   )r   r   r	   r	   r
   Ú9testGetDuplicatedNestedSubTestDescriptionWithoutDocstringY  s    
zITest_TestResult.testGetDuplicatedNestedSubTestDescriptionWithoutDocstringrN   z)Docstrings are omitted with -O2 and abovec             C   s,   t  ddd¡}|  | | ¡dt d ¡ dS )z5Tests getDescription() for a method with a docstring.NTr&   z(testGetDescriptionWithOneLineDocstring (zG.Test_TestResult)
Tests getDescription() for a method with a docstring.)r   rK   r   rL   r   )r   r   r	   r	   r
   Ú&testGetDescriptionWithOneLineDocstringb  s    z6Test_TestResult.testGetDescriptionWithOneLineDocstringc          	   C   sH   t  ddd¡}| jddd" |  | | j¡dt d ¡ W dQ R X dS )z5Tests getDescription() for a method with a docstring.NTr&   rN   )r2   rO   z/testGetSubTestDescriptionWithOneLineDocstring (zV.Test_TestResult) (foo=1, bar=2)
Tests getDescription() for a method with a docstring.)r   rK   rF   r   rL   rG   r   )r   r   r	   r	   r
   Ú-testGetSubTestDescriptionWithOneLineDocstringm  s
    
z=Test_TestResult.testGetSubTestDescriptionWithOneLineDocstringc             C   s,   t  ddd¡}|  | | ¡dt d ¡ dS )zoTests getDescription() for a method with a longer docstring.
        The second line of the docstring.
        NTr&   z*testGetDescriptionWithMultiLineDocstring (zN.Test_TestResult)
Tests getDescription() for a method with a longer docstring.)r   rK   r   rL   r   )r   r   r	   r	   r
   Ú(testGetDescriptionWithMultiLineDocstringy  s    z8Test_TestResult.testGetDescriptionWithMultiLineDocstringc          	   C   sH   t  ddd¡}| jddd" |  | | j¡dt d ¡ W dQ R X dS )zoTests getDescription() for a method with a longer docstring.
        The second line of the docstring.
        NTr&   rN   )r2   rO   z1testGetSubTestDescriptionWithMultiLineDocstring (z].Test_TestResult) (foo=1, bar=2)
Tests getDescription() for a method with a longer docstring.)r   rK   rF   r   rL   rG   r   )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—  s   r`   TZ
__unittest)r_   r   r   r7   Z_is_relevant_tb_levelr^   r]   r   )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   s   dS )NÚ r	   )Ú_r	   r	   r
   Ú<lambda>¢  ó    z.Test_TestResult.testFailFast.<locals>.<lambda>Tc              W   s   dS )Nrb   r	   )rc   r	   r	   r
   rd   ¨  re   c              W   s   dS )Nrb   r	   )rc   r	   r	   r
   rd   ®  re   )	r   r   Z_exc_info_to_stringÚfailfastr@   r   r    r6   ÚaddUnexpectedSuccess)r   r   r	   r	   r
   ÚtestFailFast   s    



zTest_TestResult.testFailFastc                s,   t jt ¡ dd}‡ fdd„}| |¡}d S )NT)Ústreamrf   c                s   ˆ   | j¡ d S )N)r   rf   )r   )r   r	   r
   r*   µ  s    z5Test_TestResult.testFailFastSetByRunner.<locals>.test)r   ÚTextTestRunnerÚioÚStringIOrD   )r   Úrunnerr*   r   r	   )r   r
   ÚtestFailFastSetByRunner³  s    z'Test_TestResult.testFailFastSetByRunnerN)r   r   r   r!   r#   r+   r,   r/   r1   r>   rA   rE   rJ   rM   rP   rQ   rS   rV   rX   r   ZskipIfr4   ÚflagsÚoptimizerY   rZ   r[   r\   ra   rh   rn   r	   r	   r	   r
   r      s6   
	'0"
		

r   )ZaddSkipZaddExpectedFailurerg   r   c             C   s(   g | _ g | _d| _d| _d| _d| _d S )Nr   F)r   r   r   r    ÚbufferrB   )r   ri   ZdescriptionsÚ	verbosityr	   r	   r
   r   ¿  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   s@   t  dtf¡( tƒ }| |¡ |  t|jƒ|¡ W d Q R X d S )NzTestResult has no add.+ method,)r   Zcheck_warningsÚRuntimeWarningrs   rD   r   r   r   )r   r*   r   r   r	   r	   r
   ÚassertOldResultWarningÌ  s
    

z)Test_OldTestResult.assertOldResultWarningc             C   sB   G dd„ dt jƒ}x*dD ]"\}}||ƒ}|  |t| ƒ¡ qW 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   s   |   d¡ d S )NZfoobar)ÚskipTest)r   r	   r	   r
   ÚtestSkipÕ  s    z;Test_OldTestResult.testOldTestResult.<locals>.Test.testSkipc             S   s   t ‚d S )N)r?   )r   r	   r	   r
   ÚtestExpectedFail×  s    zCTest_OldTestResult.testOldTestResult.<locals>.Test.testExpectedFailc             S   s   d S )Nr	   )r   r	   r	   r
   ÚtestUnexpectedSuccessÚ  s    zHTest_OldTestResult.testOldTestResult.<locals>.Test.testUnexpectedSuccessN)r   r   r   rx   r   ZexpectedFailurery   rz   r	   r	   r	   r
   ÚTestÔ  s   r{   ))rx   T)ry   T)rz   F)r   r'   rv   Úint)r   r{   Z	test_nameZshould_passr*   r	   r	   r
   ÚtestOldTestResultÓ  s    
z$Test_OldTestResult.testOldTestResultc             C   s&   G dd„ dt jƒ}|  |dƒd¡ d S )Nc               @   s   e Zd Zdd„ Zdd„ ZdS )z7Test_OldTestResult.testOldTestTesultSetup.<locals>.Testc             S   s   |   d¡ d S )Nz	no reason)rw   )r   r	   r	   r
   ÚsetUpæ  s    z=Test_OldTestResult.testOldTestTesultSetup.<locals>.Test.setUpc             S   s   d S )Nr	   )r   r	   r	   r
   ÚtestFooè  s    z?Test_OldTestResult.testOldTestTesultSetup.<locals>.Test.testFooN)r   r   r   r~   r   r	   r	   r	   r
   r{   å  s   r{   r   r   )r   r'   rv   )r   r{   r	   r	   r
   ÚtestOldTestTesultSetupä  s    z)Test_OldTestResult.testOldTestTesultSetupc             C   s0   t  d¡G dd„ dt jƒƒ}|  |dƒd¡ d S )Nz	no reasonc               @   s   e Zd Zdd„ ZdS )z7Test_OldTestResult.testOldTestResultClass.<locals>.Testc             S   s   d S )Nr	   )r   r	   r	   r
   r   ï  s    z?Test_OldTestResult.testOldTestResultClass.<locals>.Test.testFooN)r   r   r   r   r	   r	   r	   r
   r{   í  s   r{   r   r   )r   Úskipr'   rv   )r   r{   r	   r	   r
   ÚtestOldTestResultClassì  s    
z)Test_OldTestResult.testOldTestResultClassc             C   s6   G dd„ dt jƒ}t jtt ¡ d}| |dƒ¡ d S )Nc               @   s   e Zd Zdd„ ZdS )z8Test_OldTestResult.testOldResultWithRunner.<locals>.Testc             S   s   d S )Nr	   )r   r	   r	   r
   r   õ  s    z@Test_OldTestResult.testOldResultWithRunner.<locals>.Test.testFooN)r   r   r   r   r	   r	   r	   r
   r{   ô  s   r{   )Zresultclassri   r   )r   r'   rj   rs   rk   rl   rD   )r   r{   rm   r	   r	   r
   ÚtestOldResultWithRunneró  s    z*Test_OldTestResult.testOldResultWithRunnerN)r   r   r   rv   r}   r€   r‚   rƒ   r	   r	   r	   r
   rt   Ê  s
   rt   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S )ÚTestOutputBufferingc             C   s   t j| _t j| _d S )N)r4   ÚstdoutÚ	_real_outÚstderrÚ	_real_err)r   r	   r	   r
   r~      s    zTestOutputBuffering.setUpc             C   s   | j t_| jt_d S )N)r†   r4   r…   rˆ   r‡   )r   r	   r	   r
   ÚtearDown  s    zTestOutputBuffering.tearDownc             C   sf   | j }| j}t ¡ }|  |j¡ |  |tj¡ |  |tj	¡ | 
| ¡ |  |tj¡ |  |tj	¡ d S )N)r†   rˆ   r   r   r7   rq   r8   r4   r…   r‡   r(   )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 )NTr2   rO   )Úfilezfoo
zbar
rb   )r†   rˆ   r   r   r7   rq   r8   r4   r…   r‡   r(   ZassertIsNotr9   rk   rl   Ú_original_stdoutÚ_original_stderrÚprintr   Úgetvaluer0   r)   )r   rŠ   r‹   r   Z
out_streamZ
err_streamr	   r	   r
   Ú#testBufferOutputStartTestAddSuccess  s>    




z7TestOutputBuffering.testBufferOutputStartTestAddSuccessc             C   s   t  ¡ }d|_| | ¡ |S )NT)r   r   rq   r(   )r   r   r	   r	   r
   ÚgetStartedResultG  s    
z$TestOutputBuffering.getStartedResultc             C   s  t tj_|  t¡ xdD ]ú\}}}|  ¡ }tj}tj	}t
 ¡ |_t
 ¡ |_tdtjd |rltdtj	d t||ƒ}|| dƒ | | ¡ t||ƒ}|  t|ƒd¡ |d \}	}
t d¡}d	}|rÌt d
¡}d||f }|  |	| ¡ |  |j ¡ |¡ |  |j ¡ |¡ |  |
|¡ qW d S )N))r   r@   T)r   r6   F)r   r@   T)r   r6   Fr2   )r   rO   )NNNr&   r   z9
                Stdout:
                foo
            rb   z9
                Stderr:
                bar
            zA traceback%s%s)r   r   r   r   rC   r   r“   r4   r…   r‡   rk   rl   rŽ   r   r   Úgetattrr)   r   r   ÚtextwrapÚdedentr8   r‘   ZassertMultiLineEqual)r   Zmessage_attrZadd_attrZinclude_errorr   Zbuffered_outZbuffered_errZaddFunctionZresult_listr*   ÚmessageZexpectedOutMessageZexpectedErrMessageZexpectedFullMessager	   r	   r
   Ú!testBufferOutputAddErrorOrFailureM  s8    






z5TestOutputBuffering.testBufferOutputAddErrorOrFailurec             C   sN   t  ¡ }d|_G dd„ dt jƒ}t  |dƒg¡}||ƒ |  t|jƒd¡ d S )NTc               @   s    e Zd Zedd„ ƒZdd„ ZdS )z5TestOutputBuffering.testBufferSetupClass.<locals>.Fooc             S   s   dd  d S )Nr&   r   r	   )Úclsr	   r	   r
   Ú
setUpClass  s    z@TestOutputBuffering.testBufferSetupClass.<locals>.Foo.setUpClassc             S   s   d S )Nr	   )r   r	   r	   r
   Útest_foo„  s    z>TestOutputBuffering.testBufferSetupClass.<locals>.Foo.test_fooN)r   r   r   Úclassmethodrš   r›   r	   r	   r	   r
   r%   €  s   r%   r›   r&   )r   r   rq   r'   Ú	TestSuiter   r   r   )r   r   r%   Úsuiter	   r	   r
   ÚtestBufferSetupClass|  s    z(TestOutputBuffering.testBufferSetupClassc             C   sN   t  ¡ }d|_G dd„ dt jƒ}t  |dƒg¡}||ƒ |  t|jƒd¡ d S )NTc               @   s    e Zd Zedd„ ƒZdd„ ZdS )z8TestOutputBuffering.testBufferTearDownClass.<locals>.Fooc             S   s   dd  d S )Nr&   r   r	   )r™   r	   r	   r
   ÚtearDownClass  s    zFTestOutputBuffering.testBufferTearDownClass.<locals>.Foo.tearDownClassc             S   s   d S )Nr	   )r   r	   r	   r
   r›   ’  s    zATestOutputBuffering.testBufferTearDownClass.<locals>.Foo.test_fooN)r   r   r   rœ   r    r›   r	   r	   r	   r
   r%   Ž  s   r%   r›   r&   )r   r   rq   r'   r   r   r   r   )r   r   r%   rž   r	   r	   r
   ÚtestBufferTearDownClassŠ  s    z+TestOutputBuffering.testBufferTearDownClassc             C   s~   t  ¡ }d|_G dd„ dt jƒ}G dd„ dtƒ}d|_|tjd< |  tjj	d¡ t  
|dƒg¡}||ƒ |  t|jƒd¡ d S )NTc               @   s   e Zd Zdd„ ZdS )z6TestOutputBuffering.testBufferSetUpModule.<locals>.Fooc             S   s   d S )Nr	   )r   r	   r	   r
   r›     s    z?TestOutputBuffering.testBufferSetUpModule.<locals>.Foo.test_fooN)r   r   r   r›   r	   r	   r	   r
   r%   œ  s   r%   c               @   s   e Zd Zedd„ ƒZdS )z9TestOutputBuffering.testBufferSetUpModule.<locals>.Modulec               S   s   dd  d S )Nr&   r   r	   r	   r	   r	   r
   ÚsetUpModule   s    zETestOutputBuffering.testBufferSetUpModule.<locals>.Module.setUpModuleN)r   r   r   Ústaticmethodr¢   r	   r	   r	   r
   ÚModuleŸ  s   r¤   r›   r&   )r   r   rq   r'   r_   r   r4   ÚmodulesrC   Úpopr   r   r   r   )r   r   r%   r¤   rž   r	   r	   r
   ÚtestBufferSetUpModule˜  s    
z)TestOutputBuffering.testBufferSetUpModulec             C   s~   t  ¡ }d|_G dd„ dt jƒ}G dd„ dtƒ}d|_|tjd< |  tjj	d¡ t  
|dƒg¡}||ƒ |  t|jƒd¡ d S )NTc               @   s   e Zd Zdd„ ZdS )z9TestOutputBuffering.testBufferTearDownModule.<locals>.Fooc             S   s   d S )Nr	   )r   r	   r	   r
   r›   °  s    zBTestOutputBuffering.testBufferTearDownModule.<locals>.Foo.test_fooN)r   r   r   r›   r	   r	   r	   r
   r%   ¯  s   r%   c               @   s   e Zd Zedd„ ƒZdS )z<TestOutputBuffering.testBufferTearDownModule.<locals>.Modulec               S   s   dd  d S )Nr&   r   r	   r	   r	   r	   r
   ÚtearDownModule³  s    zKTestOutputBuffering.testBufferTearDownModule.<locals>.Module.tearDownModuleN)r   r   r   r£   r¨   r	   r	   r	   r
   r¤   ²  s   r¤   r›   r&   )r   r   rq   r'   r_   r   r4   r¥   rC   r¦   r   r   r   r   )r   r   r%   r¤   rž   r	   r	   r
   ÚtestBufferTearDownModule«  s    
z,TestOutputBuffering.testBufferTearDownModuleN)r   r   r   r~   r‰   rŒ   r’   r“   r˜   rŸ   r¡   r§   r©   r	   r	   r	   r
   r„   þ  s   0/r„   Ú__main__)NNN)rk   r4   r•   r*   r   r   r   r_   r   r   r'   r   Údictr   Ú__dict__Z	classDictÚmr   Útypers   rt   r„   r   Úmainr	   r	   r	   r
   Ú<module>   s,   
   $


4 B