B
    v9a.                 @   s   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
 G dd dejZG dd dejZedkre  dS )	    N)_Outcome)LoggingResult#ResultWithNoStartTestRunStopTestRunc               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestCleanUpc          
      s   G dd dt j}|d}| |jg  g   fdd} fdd}|j|dd	d
ddd || | |j|dtdddf|di fg | |  |  d	di fddtdddfg d S )Nc               @   s   e Zd Zdd ZdS )z-TestCleanUp.testCleanUp.<locals>.TestableTestc             S   s   d S )N )selfr   r   !/usr/lib/python3.7/test_runner.pytestNothing   s    z9TestCleanUp.testCleanUp.<locals>.TestableTest.testNothingN)__name__
__module____qualname__r	   r   r   r   r   TestableTest   s   r   r	   c                 s     d| |f d S )N   )append)argskwargs)cleanupsr   r   cleanup1   s    z)TestCleanUp.testCleanUp.<locals>.cleanup1c                 s     d| |f d S )N   )r   )r   r   )r   r   r   cleanup2   s    z)TestCleanUp.testCleanUp.<locals>.cleanup2r   r      ZhelloZgoodbye)ZfourZfive)r   r   r   r   )unittestTestCaseassertEqualZ	_cleanups
addCleanupdict
assertTrue
doCleanups)r   r   testr   r   r   )r   r   testCleanUp   s    
zTestCleanUp.testCleanUpc                s   G dd dt j}|d}t  }|_td td fdd}fdd	}|| || | |  | |j t	|j
\\}\}}}\}\}	}
}| ||ft f | |	|
ftf d S )
Nc               @   s   e Zd Zdd ZdS )z7TestCleanUp.testCleanUpWithErrors.<locals>.TestableTestc             S   s   d S )Nr   )r   r   r   r   r	   ,   s    zCTestCleanUp.testCleanUpWithErrors.<locals>.TestableTest.testNothingN)r
   r   r   r	   r   r   r   r   r   +   s   r   r	   fooZbarc                  s    d S )Nr   r   )exc1r   r   r   4   s    z3TestCleanUp.testCleanUpWithErrors.<locals>.cleanup1c                  s    d S )Nr   r   )exc2r   r   r   7   s    z3TestCleanUp.testCleanUpWithErrors.<locals>.cleanup2)r   r   r   Z_outcome	Exceptionr   assertFalser   successreversederrorsr   )r   r   r   Zoutcomer   r   _ZType1Z	instance1ZType2Z	instance2r   )r!   r"   r   testCleanUpWithErrors*   s    

"z!TestCleanUp.testCleanUpWithErrorsc          	      s   d g G  fdddt j}|dfdd}fdd}| | fd	d
}t  }||_| ddddddg d g |d| | ddg d S )NFc                   s2   e Zd Z fddZfddZfddZdS )z2TestCleanUp.testCleanupInRun.<locals>.TestableTestc                s    d  rtdd S )NsetUpr    )r   r#   )r   )blowUporderingr   r   r*   J   s    
z8TestCleanUp.testCleanupInRun.<locals>.TestableTest.setUpc                s     d d S )Nr   )r   )r   )r,   r   r   r	   O   s    z>TestCleanUp.testCleanupInRun.<locals>.TestableTest.testNothingc                s     d d S )NtearDown)r   )r   )r,   r   r   r-   R   s    z;TestCleanUp.testCleanupInRun.<locals>.TestableTest.tearDownN)r
   r   r   r*   r	   r-   r   )r+   r,   r   r   r   I   s   r   r	   c                  s     d d S )Nr   )r   r   )r,   r   r   r   W   s    z.TestCleanUp.testCleanupInRun.<locals>.cleanup1c                  s     d d S )Nr   )r   r   )r,   r   r   r   Y   s    z.TestCleanUp.testCleanupInRun.<locals>.cleanup2c                s    |   d d S )Nr%   )r   r   )Z	some_test)r,   r   r   r   r   r%   ^   s    z-TestCleanUp.testCleanupInRun.<locals>.successr*   r   r-   r   r   r%   T)r   r   r   
TestResultZ
addSuccessrunr   )r   r   r   r   r%   resultr   )r+   r,   r   r   r   testCleanupInRunE   s(    




zTestCleanUp.testCleanupInRunc                sb   g G  fdddt j}|dfdd fdd  | dd	d
ddg d S )Nc                   s2   e Zd Z fddZfddZfddZdS )zCTestCleanUp.testTestCaseDebugExecutesCleanups.<locals>.TestableTestc                s    d |   d S )Nr*   )r   r   )r   )r   r,   r   r   r*   t   s    
zITestCleanUp.testTestCaseDebugExecutesCleanups.<locals>.TestableTest.setUpc                s     d d S )Nr   )r   )r   )r,   r   r   r	   x   s    zOTestCleanUp.testTestCaseDebugExecutesCleanups.<locals>.TestableTest.testNothingc                s     d d S )Nr-   )r   )r   )r,   r   r   r-   {   s    zLTestCleanUp.testTestCaseDebugExecutesCleanups.<locals>.TestableTest.tearDownN)r
   r   r   r*   r	   r-   r   )r   r,   r   r   r   s   s   r   r	   c                  s    d   d S )Nr   )r   r   r   )r   r,   r   r   r   r      s    
z?TestCleanUp.testTestCaseDebugExecutesCleanups.<locals>.cleanup1c                  s     d d S )Nr   )r   r   )r,   r   r   r      s    z?TestCleanUp.testTestCaseDebugExecutesCleanups.<locals>.cleanup2r*   r   r-   r   r   )r   r   debugr   )r   r   r   )r   r   r,   r   r   !testTestCaseDebugExecutesCleanupsp   s    z-TestCleanUp.testTestCaseDebugExecutesCleanupsN)r
   r   r   r   r)   r1   r3   r   r   r   r   r      s   +r   c               @   s|   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )Test_TextTestRunnerc             C   s    t jd| _| jrt jd= d S )NPYTHONWARNINGS)osenvirongetpythonwarnings)r   r   r   r   r*      s    zTest_TextTestRunner.setUpc             C   s   | j r| j tjd< d S )Nr5   )r9   r6   r7   )r   r   r   r   r-      s    zTest_TextTestRunner.tearDownc             C   sh   t  }| |j | |j | |jd | |jd  | |j	 | |j
t j | |j d S )Nr   )r   TextTestRunnerr$   failfastbufferr   	verbositywarningsr   descriptionsresultclassTextTestResult	tb_locals)r   runnerr   r   r   	test_init   s    zTest_TextTestRunner.test_initc                s:   G  fdddt j G dd dt j }|d d d d S )Nc                   s   e Zd Z fddZ  ZS )z>Test_TextTestRunner.test_multiple_inheritance.<locals>.AResultc                s   t  | ||| d S )N)super__init__)r   streamr?   r=   )AResult	__class__r   r   rF      s    zGTest_TextTestRunner.test_multiple_inheritance.<locals>.AResult.__init__)r
   r   r   rF   __classcell__r   )rH   )rI   r   rH      s   rH   c               @   s   e Zd ZdS )zBTest_TextTestRunner.test_multiple_inheritance.<locals>.ATextResultN)r
   r   r   r   r   r   r   ATextResult   s   rK   r   )r   r.   rA   )r   rK   r   )rH   r   test_multiple_inheritance   s    z-Test_TextTestRunner.test_multiple_inheritancec                sf   G dd dt j}t   t jt ddd} fdd|_||d |  j	 |  j
 d S )Nc               @   s   e Zd Zdd ZdS )z7Test_TextTestRunner.testBufferAndFailfast.<locals>.Testc             S   s   d S )Nr   )r   r   r   r   testFoo   s    z?Test_TextTestRunner.testBufferAndFailfast.<locals>.Test.testFooN)r
   r   r   rM   r   r   r   r   Test   s   rN   T)rG   r;   r<   c                  s    S )Nr   r   )r0   r   r   <lambda>       z;Test_TextTestRunner.testBufferAndFailfast.<locals>.<lambda>rM   )r   r   r.   r:   ioStringIO_makeResultr/   r   r;   r<   )r   rN   rC   r   )r0   r   testBufferAndFailfast   s    z)Test_TextTestRunner.testBufferAndFailfastc             C   s2   t jt dd}|t  }| d|j d S )NT)rG   rB   )r   r:   rQ   rR   r/   	TestSuiter   rB   )r   rC   r0   r   r   r   test_locals   s    zTest_TextTestRunner.test_localsc                s   G dd dt j}t jj  fdd}| t  t jt d}fdd|_	d_
fd	d
}|t j_|t   j
d d S )Nc               @   s   e Zd Zdd ZdS )z;Test_TextTestRunner.testRunnerRegistersResult.<locals>.Testc             S   s   d S )Nr   )r   r   r   r   rM      s    zCTest_TextTestRunner.testRunnerRegistersResult.<locals>.Test.testFooN)r
   r   r   rM   r   r   r   r   rN      s   rN   c                  s    t j_d S )N)r   rC   registerResultr   )originalRegisterResultr   r   cleanup   s    z>Test_TextTestRunner.testRunnerRegistersResult.<locals>.cleanup)rG   c                  s    S )Nr   r   )r0   r   r   rO      rP   z?Test_TextTestRunner.testRunnerRegistersResult.<locals>.<lambda>r   c                s    j d7  _ |   d S )Nr   )wasRegisteredr   )Z
thisResult)r0   r   r   r   fakeRegisterResult   s    zITest_TextTestRunner.testRunnerRegistersResult.<locals>.fakeRegisterResultr   )r   r   rC   rW   r   r.   r:   rQ   rR   rS   rZ   r/   rU   r   )r   rN   rY   rC   r[   r   )rX   r0   r   r   testRunnerRegistersResult   s    
z-Test_TextTestRunner.testRunnerRegistersResultc                s@   G dd dt  G  fdddtj }|t  d S )Nc               @   s   e Zd ZdZdd ZdS )zbTest_TextTestRunner.test_works_with_result_without_startTestRun_stopTestRun.<locals>.OldTextResult c             S   s   d S )Nr   )r   r   r   r   printErrors   s    znTest_TextTestRunner.test_works_with_result_without_startTestRun_stopTestRun.<locals>.OldTextResult.printErrorsN)r
   r   r   
separator2r^   r   r   r   r   OldTextResult   s   r`   c                   s*   e Zd Z fddZfddZ  ZS )z[Test_TextTestRunner.test_works_with_result_without_startTestRun_stopTestRun.<locals>.Runnerc                s   t  | t  d S )N)rE   rF   rQ   rR   )r   )RunnerrI   r   r   rF      s    zdTest_TextTestRunner.test_works_with_result_without_startTestRun_stopTestRun.<locals>.Runner.__init__c                s     S )Nr   )r   )r`   r   r   rS      s    zgTest_TextTestRunner.test_works_with_result_without_startTestRun_stopTestRun.<locals>.Runner._makeResult)r
   r   r   rF   rS   rJ   r   )r`   ra   )rI   r   ra      s   ra   )r   r   r:   r/   rU   )r   rC   r   )r`   ra   r   7test_works_with_result_without_startTestRun_stopTestRun   s    zKTest_TextTestRunner.test_works_with_result_without_startTestRun_stopTestRunc                sZ   G dd dt G  fdddtj g } |}|t  ddg}| || d S )Nc               @   s   e Zd ZdZdd ZdS )zSTest_TextTestRunner.test_startTestRun_stopTestRun_called.<locals>.LoggingTextResultr]   c             S   s   d S )Nr   )r   r   r   r   r^      s    z_Test_TextTestRunner.test_startTestRun_stopTestRun_called.<locals>.LoggingTextResult.printErrorsN)r
   r   r   r_   r^   r   r   r   r   LoggingTextResult   s   rc   c                   s*   e Zd Z fddZfddZ  ZS )zOTest_TextTestRunner.test_startTestRun_stopTestRun_called.<locals>.LoggingRunnerc                s   t  | t  || _d S )N)rE   rF   rQ   rR   _events)r   events)LoggingRunnerrI   r   r   rF      s    zXTest_TextTestRunner.test_startTestRun_stopTestRun_called.<locals>.LoggingRunner.__init__c                s
    | j S )N)rd   )r   )rc   r   r   rS      s    z[Test_TextTestRunner.test_startTestRun_stopTestRun_called.<locals>.LoggingRunner._makeResult)r
   r   r   rF   rS   rJ   r   )rf   rc   )rI   r   rf      s   rf   ZstartTestRunZstopTestRun)r   r   r:   r/   rU   r   )r   re   rC   Zexpectedr   )rf   rc   r   $test_startTestRun_stopTestRun_called   s    z8Test_TextTestRunner.test_startTestRun_stopTestRun_calledc             C   s^   t d}t|}xDtdtjd D ]0}t||}t|}| 	|j
 |  q&W d S )Nr    r   r   )rQ   rR   r   r:   rangepickleZHIGHEST_PROTOCOLdumpsloadsr   rG   getvalue)r   rG   rC   Zprotocolsobjr   r   r   test_pickle_unpickle   s    


z(Test_TextTestRunner.test_pickle_unpicklec             C   sZ   dd }t  }t  }t  }tj||||d}| |j| |j||f}| | | d S )Nc              W   s   | S )Nr   )r   r   r   r   MockResultClass	  s    z=Test_TextTestRunner.test_resultclass.<locals>.MockResultClass)r@   )objectr   r:   r   r@   rG   rS   )r   rp   ZSTREAMZDESCRIPTIONSZ	VERBOSITYrC   Zexpectedresultr   r   r   test_resultclass  s    
z$Test_TextTestRunner.test_resultclassc          
   C   s  dd }t tjtjtjtd}d}d}tjtj	ddgf|}| ||\}}W d Q R X | 
d| | t|d	 xd
D ]}| ||d q~W x$||dgD ]}| ||d qW tj	ddgtj	dddgtj	ddgf}	xR|	D ]J}
tj|
f|}| ||\}}W d Q R X | 
d| | t|d qW tjtj	ddgf|}| ||\}}W d Q R X | 
d| | t|d x dD ]}| ||d qW x$||gD ]}| ||d qW d S )Nc             S   s   dd |   D S )Nc             S   s   g | ]}|  qS r   )
splitlines).0br   r   r   
<listcomp>  s    zPTest_TextTestRunner.test_warnings.<locals>.get_parse_out_err.<locals>.<listcomp>)Zcommunicate)pr   r   r   get_parse_out_err  s    z<Test_TextTestRunner.test_warnings.<locals>.get_parse_out_err)stdoutstderrcwds   Please use assertEqual instead.s   Please use assertTrue instead.z-Ez_test_warnings.pys   OK   )s   dws   iws   uwr   s   rwr   ignorez-Waz-Wir   always   )s   dws   iws   uws   rw)r   
subprocessPIPEr6   pathdirname__file__Popensys
executableZassertInr   lencount)r   rx   ZoptsZae_msgZat_msgrw   outerrmsgZ	args_listr   r   r   r   test_warnings  sB    




z!Test_TextTestRunner.test_warningsc             C   s@   t j}t }|t _zt }| |jj|k W d |t _X d S )N)r   rz   rQ   rR   r   r:   r   rG   )r   Z
old_stderrfrC   r   r   r   %testStdErrLookedUpAtInstantiationTimeN  s    z9Test_TextTestRunner.testStdErrLookedUpAtInstantiationTimec             C   s(   t  }t|}| |jj|k d S )N)rQ   rR   r   r:   r   rG   )r   r   rC   r   r   r   testSpecifiedStreamUsedY  s    
z+Test_TextTestRunner.testSpecifiedStreamUsedN)r
   r   r   r*   r-   rD   rL   rT   rV   r\   rb   rg   ro   rr   r   r   r   r   r   r   r   r4      s   
9r4   __main__)rQ   r6   r   ri   r   r   Zunittest.caser   Zunittest.test.supportr   r   r   r   r4   r
   mainr   r   r   r   <module>   s   | W