a
    ze­                     @   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
 dd Zdd Zdd	 ZdddZG dd dejZG dd dejZG dd dejZG dd dejZedkre  dS )    N)_Outcome)LoggingResult#ResultWithNoStartTestRunStopTestRunc                  G   s   t  S N)unittest
TestResult)_ r	   //usr/lib/python3.9/unittest/test/test_runner.pyresultFactory   s    r   c                   C   s   t jtt dS )N)resultclassstream)r   TextTestRunnerr   ioStringIOr	   r	   r	   r
   	getRunner   s    r   c                  G   sf   t  }| D ]}t j|}|| qt }t  }|| |t   |t   ||S r   )r   	TestSuitedefaultTestLoaderloadTestsFromTestCaseZaddTestsr   ZaddTestrun)ZcasessuitecaseZtestsrunnerZ	realSuiter	   r	   r
   runTests   s    
r   Fc                 C   s&   |s|  d n|  d tdd S )Ncleanup_goodcleanup_exc
CleanUpExcappend	Exception)orderingblowUpr	   r	   r
   cleanup(   s    
r"   c                   @   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 r   r	   selfr	   r	   r
   testNothing3   s    z9TestCleanUp.testCleanUp.<locals>.TestableTest.testNothingN__name__
__module____qualname__r&   r	   r	   r	   r
   TestableTest2   s   r+   r&   c                     s     d| |f d S N   r   argskwargscleanupsr	   r
   cleanup1;   s    z)TestCleanUp.testCleanUp.<locals>.cleanup1c                     s     d| |f d S )N   r.   r/   r2   r	   r
   cleanup2>   s    z)TestCleanUp.testCleanUp.<locals>.cleanup2r-   r5      hellogoodbyeZfourZfiver-   r5   r7   r	   )r   TestCaseassertEqual	_cleanups
addCleanupdict
assertTrue
doCleanups)r%   r+   testr4   r6   r	   r2   r
   testCleanUp1   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 r   r	   r$   r	   r	   r
   r&   M   s    zCTestCleanUp.testCleanUpWithErrors.<locals>.TestableTest.testNothingNr'   r	   r	   r	   r
   r+   L   s   r+   r&   fooZbarc                      s    d S r   r	   r	   )r   r	   r
   r4   U   s    z3TestCleanUp.testCleanUpWithErrors.<locals>.cleanup1c                      s    d S r   r	   r	   )exc2r	   r
   r6   X   s    z3TestCleanUp.testCleanUpWithErrors.<locals>.cleanup2)r   r<   r   Z_outcomer   r?   assertFalserB   successreversederrorsr=   )r%   r+   rC   outcomer4   r6   r   ZType1Z	instance1ZType2Z	instance2r	   )r   rF   r
   testCleanUpWithErrorsK   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  }||_| g d 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setUprE   r   r$   r!   r    r	   r
   rM   k   s    
z8TestCleanUp.testCleanupInRun.<locals>.TestableTest.setUpc                    s     d d S NrC   r.   r$   r    r	   r
   r&   p   s    z>TestCleanUp.testCleanupInRun.<locals>.TestableTest.testNothingc                    s     d d S NtearDownr.   r$   rP   r	   r
   rR   s   s    z;TestCleanUp.testCleanupInRun.<locals>.TestableTest.tearDownNr(   r)   r*   rM   r&   rR   r	   rN   r	   r
   r+   j   s   r+   r&   c                      s     d d S Nr4   r.   r	   rP   r	   r
   r4   x   s    z.TestCleanUp.testCleanupInRun.<locals>.cleanup1c                      s     d d S Nr6   r.   r	   rP   r	   r
   r6   z   s    z.TestCleanUp.testCleanupInRun.<locals>.cleanup2c                    s    |   d d S )NrH   )r=   r   )Z	some_test)r    r%   rC   r	   r
   rH      s    z-TestCleanUp.testCleanupInRun.<locals>.success)rM   rC   rR   r6   r4   rH   TrM   r4   )r   r<   r?   r   Z
addSuccessr   r=   )r%   r+   r4   r6   rH   resultr	   )r!   r    r%   rC   r
   testCleanupInRunf   s&    




zTestCleanUp.testCleanupInRunc                    s\   g G  fdddt j}|dfdd fdd  | g d 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 NrM   r   r?   r$   r4   r    r	   r
   rM      s    
zITestCleanUp.testTestCaseDebugExecutesCleanups.<locals>.TestableTest.setUpc                    s     d d S rO   r.   r$   rP   r	   r
   r&      s    zOTestCleanUp.testTestCaseDebugExecutesCleanups.<locals>.TestableTest.testNothingc                    s     d d S rQ   r.   r$   rP   r	   r
   rR      s    zLTestCleanUp.testTestCaseDebugExecutesCleanups.<locals>.TestableTest.tearDownNrS   r	   rZ   r	   r
   r+      s   r+   r&   c                      s    d   d S rT   rY   r	   )r6   r    rC   r	   r
   r4      s    
z?TestCleanUp.testTestCaseDebugExecutesCleanups.<locals>.cleanup1c                      s     d d S rU   r.   r	   rP   r	   r
   r6      s    z?TestCleanUp.testTestCaseDebugExecutesCleanups.<locals>.cleanup2)rM   rC   rR   r4   r6   )r   r<   debugr=   r%   r+   r	   )r4   r6   r    rC   r
   !testTestCaseDebugExecutesCleanups   s    z-TestCleanUp.testTestCaseDebugExecutesCleanupsN)r(   r)   r*   rD   rL   rW   r]   r	   r	   r	   r
   r#   0   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S )TestClassCleanupc              
      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;TestClassCleanup.test_addClassCleanUp.<locals>.TestableTestc                 S   s   d S r   r	   r$   r	   r	   r
   r&      s    zGTestClassCleanup.test_addClassCleanUp.<locals>.TestableTest.testNothingNr'   r	   r	   r	   r
   r+      s   r+   r&   c                     s     d| |f d S Nr7   r.   r/   Zclass_cleanupsr	   r
   class_cleanup1   s    z=TestClassCleanup.test_addClassCleanUp.<locals>.class_cleanup1c                     s     d| |f d S N   r.   r/   r`   r	   r
   class_cleanup2   s    z=TestClassCleanup.test_addClassCleanUp.<locals>.class_cleanup2r-   r5   r7   r8   r9   r:   r;   r	   rc   )r   r<   r=   _class_cleanupsaddClassCleanupr@   doClassCleanups)r%   r+   rC   ra   rd   r	   r`   r
   test_addClassCleanUp   s*    


z%TestClassCleanup.test_addClassCleanUpc                    s\   g d G  fdddt j}t| | ddg g d t| | g d d S )NTc                       s:   e Zd Ze fddZfddZefddZdS )z=TestClassCleanup.test_run_class_cleanUp.<locals>.TestableTestc                    s$    d | t  r t d S N
setUpClassr   rf   r"   r   clsrN   r	   r
   rj      s    
zHTestClassCleanup.test_run_class_cleanUp.<locals>.TestableTest.setUpClassc                    s     d d S rO   r.   r$   rP   r	   r
   r&      s    zITestClassCleanup.test_run_class_cleanUp.<locals>.TestableTest.testNothingc                    s     d d S NtearDownClassr.   rl   rP   r	   r
   ro      s    zKTestClassCleanup.test_run_class_cleanUp.<locals>.TestableTest.tearDownClassNr(   r)   r*   classmethodrj   r&   ro   r	   rN   r	   r
   r+      s
   r+   rj   r   Frj   rC   ro   r   r   r<   r   r=   r\   r	   rN   r
   test_run_class_cleanUp   s    z'TestClassCleanup.test_run_class_cleanUpc                    s\   g d G  fdddt j}t| | ddg g d t| | g d d S )NTc                       s:   e Zd Ze fddZfddZeedd ZdS )zSTestClassCleanup.test_run_class_cleanUp_without_tearDownClass.<locals>.TestableTestc                    s$    d | t  r t d S ri   rk   rl   rN   r	   r
   rj      s    
z^TestClassCleanup.test_run_class_cleanUp_without_tearDownClass.<locals>.TestableTest.setUpClassc                    s     d d S rO   r.   r$   rP   r	   r
   r&      s    z_TestClassCleanup.test_run_class_cleanUp_without_tearDownClass.<locals>.TestableTest.testNothingc                 S   s   t d S r   )AttributeErrorrl   r	   r	   r
   ro      s    zaTestClassCleanup.test_run_class_cleanUp_without_tearDownClass.<locals>.TestableTest.tearDownClassN)r(   r)   r*   rq   rj   r&   propertyro   r	   rN   r	   r
   r+      s   r+   rj   r   F)rj   rC   r   rs   r\   r	   rN   r
   ,test_run_class_cleanUp_without_tearDownClass   s    z=TestClassCleanup.test_run_class_cleanUp_without_tearDownClassc                    s   g d G  fdddt j}t j|}|  | g d g d t j|}| t}|  W d    n1 s0    Y  | t|j	d | g d d S )NFc                       s:   e Zd Ze fddZfddZefddZdS )zGTestClassCleanup.test_debug_executes_classCleanUp.<locals>.TestableTestc                    s    d | jt d d S Nrj   r!   r   rf   r"   rl   rN   r	   r
   rj     s    
zRTestClassCleanup.test_debug_executes_classCleanUp.<locals>.TestableTest.setUpClassc                    s     d d S rO   r.   r$   rP   r	   r
   r&     s    zSTestClassCleanup.test_debug_executes_classCleanUp.<locals>.TestableTest.testNothingc                    s     d d S rn   r.   rl   rP   r	   r
   ro     s    zUTestClassCleanup.test_debug_executes_classCleanUp.<locals>.TestableTest.tearDownClassNrp   r	   rN   r	   r
   r+      s
   r+   rr   Tr   )rj   rC   ro   r   )
r   r<   r   r   r[   r=   assertRaisesr   str	exceptionr%   r+   r   cmr	   rN   r
    test_debug_executes_classCleanUp   s"    &z1TestClassCleanup.test_debug_executes_classCleanUpc                    s  g d G  fdddt j}t j|}| t}|  W d    n1 sT0    Y  | t|j	d | ddg | 
|j |j  g d t j|}| t}|  W d    n1 s0    Y  | t|j	d | ddg | 
|j |j  d S )NFc                       s6   e Zd Ze fddZfddZedd ZdS )z_TestClassCleanup.test_debug_executes_classCleanUp_when_teardown_exception.<locals>.TestableTestc                    s    d | jt d d S rx   rz   rl   rN   r	   r
   rj     s    
zjTestClassCleanup.test_debug_executes_classCleanUp_when_teardown_exception.<locals>.TestableTest.setUpClassc                    s     d d S rO   r.   r$   rP   r	   r
   r&   "  s    zkTestClassCleanup.test_debug_executes_classCleanUp_when_teardown_exception.<locals>.TestableTest.testNothingc                 S   s   t dd S )NTearDownClassExcr   rl   r	   r	   r
   ro   $  s    zmTestClassCleanup.test_debug_executes_classCleanUp_when_teardown_exception.<locals>.TestableTest.tearDownClassNrp   r	   rN   r	   r
   r+     s
   r+   r   rj   rC   T)r   r<   r   r   r{   r   r[   r=   r|   r}   rA   re   clearr~   r	   rN   r
   8test_debug_executes_classCleanUp_when_teardown_exception  s&    &
&zITestClassCleanup.test_debug_executes_classCleanUp_when_teardown_exceptionc                 C   sx   G dd dt j}dd }dd }|| || | t$}|  | |d W d    n1 sj0    Y  d S )Nc                   @   s   e Zd Zdd ZdS )zWTestClassCleanup.test_doClassCleanups_with_errors_addClassCleanUp.<locals>.TestableTestc                 S   s   d S r   r	   r$   r	   r	   r
   r&   <  s    zcTestClassCleanup.test_doClassCleanups_with_errors_addClassCleanUp.<locals>.TestableTest.testNothingNr'   r	   r	   r	   r
   r+   ;  s   r+   c                   S   s   t dd S rT   r   r	   r	   r	   r
   r4   ?  s    zSTestClassCleanup.test_doClassCleanups_with_errors_addClassCleanUp.<locals>.cleanup1c                   S   s   t dd S rU   r   r	   r	   r	   r
   r6   B  s    zSTestClassCleanup.test_doClassCleanups_with_errors_addClassCleanUp.<locals>.cleanup2r4   )r   r<   rf   r{   r   rg   r=   )r%   r+   r4   r6   er	   r	   r
   0test_doClassCleanups_with_errors_addClassCleanUp:  s    

zATestClassCleanup.test_doClassCleanups_with_errors_addClassCleanUpc                    sT   g  G  fdddt j}t|}| |jd d  d d |  g d d S )Nc                       s@   e Zd Ze fddZ fddZdd Ze fddZd	S )
zBTestClassCleanup.test_with_errors_addCleanUp.<locals>.TestableTestc                    s     d | t  d S ri   rz   rl   rP   r	   r
   rj   N  s    
zMTestClassCleanup.test_with_errors_addCleanUp.<locals>.TestableTest.setUpClassc                    s     d | jt dd d S NrM   Try   r   r?   r"   r$   rP   r	   r
   rM   R  s    
zHTestClassCleanup.test_with_errors_addCleanUp.<locals>.TestableTest.setUpc                 S   s   d S r   r	   r$   r	   r	   r
   r&   U  s    zNTestClassCleanup.test_with_errors_addCleanUp.<locals>.TestableTest.testNothingc                    s     d d S rn   r.   rl   rP   r	   r
   ro   W  s    zPTestClassCleanup.test_with_errors_addCleanUp.<locals>.TestableTest.tearDownClassNr(   r)   r*   rq   rj   rM   r&   ro   r	   rP   r	   r
   r+   M  s   r+   r   r-   Exception: CleanUpExc)rj   rM   r   ro   r   r   r<   r   r=   rJ   
splitlinesr%   r+   rV   r	   rP   r
   test_with_errors_addCleanUpK  s    z,TestClassCleanup.test_with_errors_addCleanUpc                    sT   g  G  fdddt j}t|}| |jd d  d d |  g d d S )Nc                       sD   e Zd Ze fddZ fddZ fddZe fddZd	S )
zKTestClassCleanup.test_run_with_errors_addClassCleanUp.<locals>.TestableTestc                    s     d | jt dd d S Nrj   Try   rz   rl   rP   r	   r
   rj   e  s    
zVTestClassCleanup.test_run_with_errors_addClassCleanUp.<locals>.TestableTest.setUpClassc                    s     d | t  d S rX   r   r$   rP   r	   r
   rM   i  s    
zQTestClassCleanup.test_run_with_errors_addClassCleanUp.<locals>.TestableTest.setUpc                    s     d d S rO   r.   r$   rP   r	   r
   r&   l  s    zWTestClassCleanup.test_run_with_errors_addClassCleanUp.<locals>.TestableTest.testNothingc                    s     d d S rn   r.   rl   rP   r	   r
   ro   n  s    zYTestClassCleanup.test_run_with_errors_addClassCleanUp.<locals>.TestableTest.tearDownClassNr   r	   rP   r	   r
   r+   d  s   r+   r   r-   r   r   )rj   rM   rC   r   ro   r   r   r   r	   rP   r
   $test_run_with_errors_addClassCleanUpb  s    z5TestClassCleanup.test_run_with_errors_addClassCleanUpc                    s   g d dG  fdddt j}t|}| |jd d  d d | g d g d	 dt|}| |jd d  d d
 | |jd d  d d | ddg g d d	t|}| |jd d  d d | |jd d  d d | g d d S )NFc                       sH   e Zd Ze fddZfddZfddZefddZd	S )
zUTestClassCleanup.test_with_errors_in_addClassCleanup_and_setUps.<locals>.TestableTestc                    s*    d | jtdd  r&tdd S )Nrj   Try   ClassExcrk   rl   class_blow_upr    r	   r
   rj     s    
z`TestClassCleanup.test_with_errors_in_addClassCleanup_and_setUps.<locals>.TestableTest.setUpClassc                    s    d  rtdd S NrM   Z	MethodExcr   r$   method_blow_upr    r	   r
   rM     s    
z[TestClassCleanup.test_with_errors_in_addClassCleanup_and_setUps.<locals>.TestableTest.setUpc                    s     d d S rO   r.   r$   rP   r	   r
   r&     s    zaTestClassCleanup.test_with_errors_in_addClassCleanup_and_setUps.<locals>.TestableTest.testNothingc                    s     d d S rn   r.   rl   rP   r	   r
   ro     s    zcTestClassCleanup.test_with_errors_in_addClassCleanup_and_setUps.<locals>.TestableTest.tearDownClassNr   r	   r   r   r    r	   r
   r+   ~  s   r+   r   r-   r   r   )rj   rM   rC   ro   r   TException: ClassExcrj   r   Exception: MethodExc)rj   rM   ro   r   r   r   r	   r   r
   .test_with_errors_in_addClassCleanup_and_setUpsy  sJ    z?TestClassCleanup.test_with_errors_in_addClassCleanup_and_setUpsc                    sT   g  G  fdddt j}t|}| |jd d  d d |  g d d S )Nc                       s8   e Zd Ze fddZ fddZe fddZdS )zHTestClassCleanup.test_with_errors_in_tearDownClass.<locals>.TestableTestc                    s     d | t  d S ri   rz   rl   rP   r	   r
   rj     s    
zSTestClassCleanup.test_with_errors_in_tearDownClass.<locals>.TestableTest.setUpClassc                    s     d d S rO   r.   r$   rP   r	   r
   r&     s    zTTestClassCleanup.test_with_errors_in_tearDownClass.<locals>.TestableTest.testNothingc                    s     d tdd S )Nro   ZTearDownExcr   rl   rP   r	   r
   ro     s    
zVTestClassCleanup.test_with_errors_in_tearDownClass.<locals>.TestableTest.tearDownClassNrp   r	   rP   r	   r
   r+     s
   r+   r   r-   r   zException: TearDownExcrr   r   r   r	   rP   r
   !test_with_errors_in_tearDownClass  s    z2TestClassCleanup.test_with_errors_in_tearDownClassN)r(   r)   r*   rh   rt   rw   r   r   r   r   r   r   r   r	   r	   r	   r
   r^      s   !4r^   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S ) TestModuleCleanUpc              
      s   g fdd fddG  fdddt }| tjj dtdd	d
fdi fg tj  | ddi fddtdd	d
fg | tjjg  d S )Nc                     s     d| |f d S r_   r.   r/   module_cleanupsr	   r
   module_cleanup1  s    zHTestModuleCleanUp.test_add_and_do_ModuleCleanup.<locals>.module_cleanup1c                     s     d| |f d S rb   r.   r/   r   r	   r
   module_cleanup2  s    zHTestModuleCleanUp.test_add_and_do_ModuleCleanup.<locals>.module_cleanup2c                       s,   e Zd Zej dddddd e dS )z?TestModuleCleanUp.test_add_and_do_ModuleCleanup.<locals>.Moduler-   r5   r7   r8   r9   r:   Nr(   r)   r*   r   addModuleCleanupr	   )r   r   r	   r
   Module  s   r   r;   r8   r9   r:   r	   rc   r7   )objectr=   r   r   _module_cleanupsr@   doModuleCleanupsr%   r   r	   )r   r   r   r
   test_add_and_do_ModuleCleanup  s     



z/TestModuleCleanUp.test_add_and_do_ModuleCleanupc              	      s   g fdddd  G  fdddt }| tjjdtdd	d
f di fg | t}tj  W d    n1 s0    Y  | t	|j
d | tjjg  d S )Nc                     s     d| |f d S r_   r.   r/   r   r	   r
   module_cleanup_good  s    zcTestModuleCleanUp.test_doModuleCleanup_with_errors_in_addModuleCleanup.<locals>.module_cleanup_goodc                  _   s   t dd S Nr   r   r/   r	   r	   r
   module_cleanup_bad  s    zbTestModuleCleanUp.test_doModuleCleanup_with_errors_in_addModuleCleanup.<locals>.module_cleanup_badc                       s,   e Zd Zejdddddd e  dS )zVTestModuleCleanUp.test_doModuleCleanup_with_errors_in_addModuleCleanup.<locals>.Moduler-   r5   r7   r8   r9   r:   Nr   r	   )r   r   r	   r
   r     s   r   r;   r8   r9   r:   r	   r   )r   r=   r   r   r   r@   r{   r   r   r|   r}   )r%   r   r   r	   )r   r   r   r
   4test_doModuleCleanup_with_errors_in_addModuleCleanup  s    

(zFTestModuleCleanUp.test_doModuleCleanup_with_errors_in_addModuleCleanupc                    sJ   g fdd G  fdddt }tj  dddifg d S )Nc                     s     | |f d S r   r.   r/   r2   r	   r
   r"     s    zCTestModuleCleanUp.test_addModuleCleanup_arg_errors.<locals>.cleanupc                       s   e Zd Zej dddd e ej dd W d   n1 sH0    Y  e e  W d   n1 sz0    Y  dS )zBTestModuleCleanUp.test_addModuleCleanup_arg_errors.<locals>.Moduler-   r5   r8   )functionr   argN)r(   r)   r*   r   r   r{   	TypeErrorr	   r"   r%   r	   r
   r     s
   ,r   r-   r5   r   r8   )r   r   r   r   r=   r   r	   r"   r3   r%   r
    test_addModuleCleanup_arg_errors  s    
z2TestModuleCleanUp.test_addModuleCleanup_arg_errorsc                    s   d g G  fdddt }G fdddtj}d|_|tjd< t|}| ddg | |jd d	 	 d
 d g d t| | g d | tj
jg  d S )NTc                       s.   e Zd Ze fddZefddZdS )z9TestModuleCleanUp.test_run_module_cleanUp.<locals>.Modulec                      s&    d tt  r"tdd S )NsetUpModulezsetUpModule Excr   r   r   r"   r   r	   rN   r	   r
   r     s    
zETestModuleCleanUp.test_run_module_cleanUp.<locals>.Module.setUpModulec                      s     d d S NtearDownModuler.   r	   rP   r	   r
   r   
  s    zHTestModuleCleanUp.test_run_module_cleanUp.<locals>.Module.tearDownModuleNr(   r)   r*   staticmethodr   r   r	   rN   r	   r
   r     s   r   c                       s8   e Zd Ze fddZ fddZe fddZdS )z?TestModuleCleanUp.test_run_module_cleanUp.<locals>.TestableTestc                    s     d d S ri   r.   rl   rP   r	   r
   rj     s    zJTestModuleCleanUp.test_run_module_cleanUp.<locals>.TestableTest.setUpClassc                    s     d d S rO   r.   r$   rP   r	   r
   r&     s    zKTestModuleCleanUp.test_run_module_cleanUp.<locals>.TestableTest.testNothingc                    s     d d S rn   r.   rl   rP   r	   r
   ro     s    zMTestModuleCleanUp.test_run_module_cleanUp.<locals>.TestableTest.tearDownClassNrp   r	   rP   r	   r
   r+     s
   r+   r   r   r   r-   r   zException: setUpModule ExcFr   rj   rC   ro   r   r   r   r   r<   r)   sysmodulesr   r=   rJ   r   r   r   r%   r   r+   rV   r	   rN   r
   test_run_module_cleanUp   s$    

z)TestModuleCleanUp.test_run_module_cleanUpc                    s   d dg G  fdddt }G fdddt }G fdddtj}G fd	d
d
tj}d|_|tjd< d|_|tjd< t|| | g d g d dt|| | g d g d dt|| | g d | tjj	g  d S )NTFc                       s.   e Zd Ze fddZefddZdS )zCTestModuleCleanUp.test_run_multiple_module_cleanUp.<locals>.Module1c                      s$    d tt  r t d S Nr   r   r	   rN   r	   r
   r   ,  s    
zOTestModuleCleanUp.test_run_multiple_module_cleanUp.<locals>.Module1.setUpModulec                      s     d d S r   r.   r	   rP   r	   r
   r   2  s    zRTestModuleCleanUp.test_run_multiple_module_cleanUp.<locals>.Module1.tearDownModuleNr   r	   rN   r	   r
   Module1+  s   r   c                       s.   e Zd Ze fddZefddZdS )zCTestModuleCleanUp.test_run_multiple_module_cleanUp.<locals>.Module2c                      s$    d tt  r t d S )NsetUpModule2r   r	   blowUp2r    r	   r
   r   7  s    
zOTestModuleCleanUp.test_run_multiple_module_cleanUp.<locals>.Module2.setUpModulec                      s     d d S )NtearDownModule2r.   r	   rP   r	   r
   r   =  s    zRTestModuleCleanUp.test_run_multiple_module_cleanUp.<locals>.Module2.tearDownModuleNr   r	   r   r	   r
   Module26  s   r   c                       s8   e Zd Ze fddZ fddZe fddZdS )zHTestModuleCleanUp.test_run_multiple_module_cleanUp.<locals>.TestableTestc                    s     d d S ri   r.   rl   rP   r	   r
   rj   B  s    zSTestModuleCleanUp.test_run_multiple_module_cleanUp.<locals>.TestableTest.setUpClassc                    s     d d S rO   r.   r$   rP   r	   r
   r&   E  s    zTTestModuleCleanUp.test_run_multiple_module_cleanUp.<locals>.TestableTest.testNothingc                    s     d d S rn   r.   rl   rP   r	   r
   ro   G  s    zVTestModuleCleanUp.test_run_multiple_module_cleanUp.<locals>.TestableTest.tearDownClassNrp   r	   rP   r	   r
   r+   A  s
   r+   c                       s8   e Zd Ze fddZ fddZe fddZdS )zITestModuleCleanUp.test_run_multiple_module_cleanUp.<locals>.TestableTest2c                    s     d d S )NsetUpClass2r.   rl   rP   r	   r
   rj   L  s    zTTestModuleCleanUp.test_run_multiple_module_cleanUp.<locals>.TestableTest2.setUpClassc                    s     d d S Ntest2r.   r$   rP   r	   r
   r&   O  s    zUTestModuleCleanUp.test_run_multiple_module_cleanUp.<locals>.TestableTest2.testNothingc                    s     d d S )NtearDownClass2r.   rl   rP   r	   r
   ro   Q  s    zWTestModuleCleanUp.test_run_multiple_module_cleanUp.<locals>.TestableTest2.tearDownClassNrp   r	   rP   r	   r
   TestableTest2K  s
   r   )r   r   r   r   r   r   r   r   )r   rj   rC   ro   r   r   r   r   )r   rj   rC   ro   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   r    r
    test_run_multiple_module_cleanUp'  s4    






z2TestModuleCleanUp.test_run_multiple_module_cleanUpc                    sj   g  G  fdddt }G  fdddtj}d|_|tjd< t| |  g d | tjj	g  d S )Nc                       s   e Zd Ze fddZdS )zJTestModuleCleanUp.test_run_module_cleanUp_without_teardown.<locals>.Modulec                      s     d tt  d S r   r   r   r   r"   r	   rP   r	   r
   r   u  s    
zVTestModuleCleanUp.test_run_module_cleanUp_without_teardown.<locals>.Module.setUpModuleN)r(   r)   r*   r   r   r	   rP   r	   r
   r   t  s   r   c                       s8   e Zd Ze fddZ fddZe fddZdS )zPTestModuleCleanUp.test_run_module_cleanUp_without_teardown.<locals>.TestableTestc                    s     d d S ri   r.   rl   rP   r	   r
   rj   {  s    z[TestModuleCleanUp.test_run_module_cleanUp_without_teardown.<locals>.TestableTest.setUpClassc                    s     d d S rO   r.   r$   rP   r	   r
   r&   ~  s    z\TestModuleCleanUp.test_run_module_cleanUp_without_teardown.<locals>.TestableTest.testNothingc                    s     d d S rn   r.   rl   rP   r	   r
   ro     s    z^TestModuleCleanUp.test_run_module_cleanUp_without_teardown.<locals>.TestableTest.tearDownClassNrp   r	   rP   r	   r
   r+   z  s
   r+   r   rj   rC   ro   r   r   )r%   r   r+   r	   rP   r
   (test_run_module_cleanUp_without_teardownr  s    

z:TestModuleCleanUp.test_run_module_cleanUp_without_teardownc                    s   g  G  fdddt }G  fdddtj}d|_|tjd< t|}| |jd d 	 d d |  g d	 | tj
jg  d S )
Nc                       s(   e Zd Ze fddZedd ZdS )zQTestModuleCleanUp.test_run_module_cleanUp_when_teardown_exception.<locals>.Modulec                      s     d tt  d S r   r   r	   rP   r	   r
   r     s    
z]TestModuleCleanUp.test_run_module_cleanUp_when_teardown_exception.<locals>.Module.setUpModulec                   S   s   t dd S r   r   r	   r	   r	   r
   r     s    z`TestModuleCleanUp.test_run_module_cleanUp_when_teardown_exception.<locals>.Module.tearDownModuleNr   r	   rP   r	   r
   r     s   r   c                       s8   e Zd Ze fddZ fddZe fddZdS )zWTestModuleCleanUp.test_run_module_cleanUp_when_teardown_exception.<locals>.TestableTestc                    s     d d S ri   r.   rl   rP   r	   r
   rj     s    zbTestModuleCleanUp.test_run_module_cleanUp_when_teardown_exception.<locals>.TestableTest.setUpClassc                    s     d d S rO   r.   r$   rP   r	   r
   r&     s    zcTestModuleCleanUp.test_run_module_cleanUp_when_teardown_exception.<locals>.TestableTest.testNothingc                    s     d d S rn   r.   rl   rP   r	   r
   ro     s    zeTestModuleCleanUp.test_run_module_cleanUp_when_teardown_exception.<locals>.TestableTest.tearDownClassNrp   r	   rP   r	   r
   r+     s
   r+   r   r-   r   r   r   r   r   r	   rP   r
   /test_run_module_cleanUp_when_teardown_exception  s    	

zATestModuleCleanUp.test_run_module_cleanUp_when_teardown_exceptionc                    s   g d G  fdddt }G fdddtj}d|_|tjd< tj|}|  | 	g d | 	tj
jg  g d tj|}| t}|  W d    n1 s0    Y  | 	t|jd | 	g d	 | 	tj
jg  d S )
NFc                       s.   e Zd Ze fddZefddZdS )zDTestModuleCleanUp.test_debug_module_executes_cleanUp.<locals>.Modulec                      s    d tjt d d S Nr   ry   r   r	   rN   r	   r
   r     s    
zPTestModuleCleanUp.test_debug_module_executes_cleanUp.<locals>.Module.setUpModulec                      s     d d S r   r.   r	   rP   r	   r
   r     s    zSTestModuleCleanUp.test_debug_module_executes_cleanUp.<locals>.Module.tearDownModuleNr   r	   rN   r	   r
   r     s   r   c                       s8   e Zd Ze fddZ fddZe fddZdS )zJTestModuleCleanUp.test_debug_module_executes_cleanUp.<locals>.TestableTestc                    s     d d S ri   r.   rl   rP   r	   r
   rj     s    zUTestModuleCleanUp.test_debug_module_executes_cleanUp.<locals>.TestableTest.setUpClassc                    s     d d S rO   r.   r$   rP   r	   r
   r&     s    zVTestModuleCleanUp.test_debug_module_executes_cleanUp.<locals>.TestableTest.testNothingc                    s     d d S rn   r.   rl   rP   r	   r
   ro     s    zXTestModuleCleanUp.test_debug_module_executes_cleanUp.<locals>.TestableTest.tearDownClassNrp   r	   rP   r	   r
   r+     s
   r+   r   Tr   )r   rj   rC   ro   r   r   )r   r   r<   r)   r   r   r   r   r[   r=   r   r   r{   r   r|   r}   r%   r   r+   r   r   r	   rN   r
   "test_debug_module_executes_cleanUp  s(    	

&z4TestModuleCleanUp.test_debug_module_executes_cleanUpc                    sD  g d G  fdddt }G fdddtj}d|_|tjd< tj|}| t	}|
  W d    n1 sx0    Y  | t|jd | g d | tjj tjj  g d tj|}| t	}|
  W d    n1 s0    Y  | t|jd | g d | tjj tjj  d S )	NFc                       s*   e Zd Ze fddZedd ZdS )zSTestModuleCleanUp.test_debug_module_cleanUp_when_teardown_exception.<locals>.Modulec                      s    d tjt d d S r   r   r	   rN   r	   r
   r     s    
z_TestModuleCleanUp.test_debug_module_cleanUp_when_teardown_exception.<locals>.Module.setUpModulec                   S   s   t dd S )NTearDownModuleExcr   r	   r	   r	   r
   r     s    zbTestModuleCleanUp.test_debug_module_cleanUp_when_teardown_exception.<locals>.Module.tearDownModuleNr   r	   rN   r	   r
   r     s   r   c                       s8   e Zd Ze fddZ fddZe fddZdS )zYTestModuleCleanUp.test_debug_module_cleanUp_when_teardown_exception.<locals>.TestableTestc                    s     d d S ri   r.   rl   rP   r	   r
   rj     s    zdTestModuleCleanUp.test_debug_module_cleanUp_when_teardown_exception.<locals>.TestableTest.setUpClassc                    s     d d S rO   r.   r$   rP   r	   r
   r&     s    zeTestModuleCleanUp.test_debug_module_cleanUp_when_teardown_exception.<locals>.TestableTest.testNothingc                    s     d d S rn   r.   rl   rP   r	   r
   ro     s    zgTestModuleCleanUp.test_debug_module_cleanUp_when_teardown_exception.<locals>.TestableTest.tearDownClassNrp   r	   rP   r	   r
   r+     s
   r+   r   )r   rj   rC   ro   T)r   r   r<   r)   r   r   r   r   r{   r   r[   r=   r|   r}   rA   r   r   r   r   r	   rN   r
   1test_debug_module_cleanUp_when_teardown_exception  s,    	

&&zCTestModuleCleanUp.test_debug_module_cleanUp_when_teardown_exceptionc                    s   g fdd G  fdddt j}t |  W d    n1 sP0    Y  t" t jj|  d W d    n1 s0    Y  t| dddd	fg d S )
Nc                     s     | |f d S r   r.   r/   r2   r	   r
   r"      s    zBTestModuleCleanUp.test_addClassCleanup_arg_errors.<locals>.cleanupc                       s&   e Zd Ze fddZdd ZdS )zGTestModuleCleanUp.test_addClassCleanup_arg_errors.<locals>.TestableTestc                    sP   | j  ddddd t | j  dd W d    n1 sB0    Y  d S )Nr-   r5   r7   rc   r   rm   r8   r   )rf   r{   r   rl   r   r	   r
   rj     s    zRTestModuleCleanUp.test_addClassCleanup_arg_errors.<locals>.TestableTest.setUpClassc                 S   s   d S r   r	   r$   r	   r	   r
   r&   	  s    zSTestModuleCleanUp.test_addClassCleanup_arg_errors.<locals>.TestableTest.testNothingN)r(   r)   r*   rq   rj   r&   r	   r   r	   r
   r+     s   r+   )rm   r   r   r7   rc   r   )r   r<   r{   r   rf   r?   r   r=   r\   r	   r   r
   test_addClassCleanup_arg_errors  s    	&0z1TestModuleCleanUp.test_addClassCleanup_arg_errorsc                    s   g fdd G  fdddt j}t |   W d    n1 sR0    Y  t" t jj|  d W d    n1 s0    Y  t| dddd	fg d S )
Nc                     s     | |f d S r   r.   r/   r2   r	   r
   r"     s    z=TestModuleCleanUp.test_addCleanup_arg_errors.<locals>.cleanupc                       s"   e Zd Z fddZdd ZdS )zBTestModuleCleanUp.test_addCleanup_arg_errors.<locals>.TestableTestc                    sP   | j  ddddd t | j  dd W d    n1 sB0    Y  d S )Nr-   r5   r7   rc   r   r%   r8   r   )r?   r{   r   )Zself2r   r	   r
   rM     s    zHTestModuleCleanUp.test_addCleanup_arg_errors.<locals>.TestableTest.setUpc                 S   s   d S r   r	   r$   r	   r	   r
   r&     s    zNTestModuleCleanUp.test_addCleanup_arg_errors.<locals>.TestableTest.testNothingN)r(   r)   r*   rM   r&   r	   r   r	   r
   r+     s   r+   )r%   r   r   r7   rc   r   )r   r<   r{   r   r?   r   r=   r\   r	   r   r
   test_addCleanup_arg_errors  s    (0z,TestModuleCleanUp.test_addCleanup_arg_errorsc                    sx   g  G  fdddt }G  fdddtj}d|_|tjd< t|}| |jd d 	 d d |  g d	 d S )
Nc                       s,   e Zd Ze fddZe fddZdS )zETestModuleCleanUp.test_with_errors_in_addClassCleanup.<locals>.Modulec                      s     d tt  d S r   r   r	   rP   r	   r
   r   -  s    
zQTestModuleCleanUp.test_with_errors_in_addClassCleanup.<locals>.Module.setUpModulec                      s     d d S r   r.   r	   rP   r	   r
   r   1  s    zTTestModuleCleanUp.test_with_errors_in_addClassCleanup.<locals>.Module.tearDownModuleNr   r	   rP   r	   r
   r   ,  s   r   c                       s8   e Zd Ze fddZ fddZe fddZdS )zKTestModuleCleanUp.test_with_errors_in_addClassCleanup.<locals>.TestableTestc                    s     d | jt dd d S r   rz   rl   rP   r	   r
   rj   6  s    
zVTestModuleCleanUp.test_with_errors_in_addClassCleanup.<locals>.TestableTest.setUpClassc                    s     d d S rO   r.   r$   rP   r	   r
   r&   :  s    zWTestModuleCleanUp.test_with_errors_in_addClassCleanup.<locals>.TestableTest.testNothingc                    s     d d S rn   r.   rl   rP   r	   r
   ro   <  s    zYTestModuleCleanUp.test_with_errors_in_addClassCleanup.<locals>.TestableTest.tearDownClassNrp   r	   rP   r	   r
   r+   5  s
   r+   r   r-   r   r   )r   rj   rC   ro   r   r   r   
r   r   r<   r)   r   r   r   r=   rJ   r   r   r	   rP   r
   #test_with_errors_in_addClassCleanup)  s    	
z5TestModuleCleanUp.test_with_errors_in_addClassCleanupc                    sx   g  G  fdddt }G  fdddtj}d|_|tjd< t|}| |jd d 	 d d |  g d	 d S )
Nc                       s,   e Zd Ze fddZe fddZdS )z@TestModuleCleanUp.test_with_errors_in_addCleanup.<locals>.Modulec                      s     d tt  d S r   r   r	   rP   r	   r
   r   M  s    
zLTestModuleCleanUp.test_with_errors_in_addCleanup.<locals>.Module.setUpModulec                      s     d d S r   r.   r	   rP   r	   r
   r   Q  s    zOTestModuleCleanUp.test_with_errors_in_addCleanup.<locals>.Module.tearDownModuleNr   r	   rP   r	   r
   r   L  s   r   c                       s0   e Zd Z fddZ fddZ fddZdS )zFTestModuleCleanUp.test_with_errors_in_addCleanup.<locals>.TestableTestc                    s     d | jt dd d S r   r   r$   rP   r	   r
   rM   V  s    
zLTestModuleCleanUp.test_with_errors_in_addCleanup.<locals>.TestableTest.setUpc                    s     d d S rO   r.   r$   rP   r	   r
   r&   Y  s    zRTestModuleCleanUp.test_with_errors_in_addCleanup.<locals>.TestableTest.testNothingc                    s     d d S rQ   r.   r$   rP   r	   r
   rR   [  s    zOTestModuleCleanUp.test_with_errors_in_addCleanup.<locals>.TestableTest.tearDownNrS   r	   rP   r	   r
   r+   U  s   r+   r   r-   r   r   )r   rM   rC   rR   r   r   r   r   r   r	   rP   r
   test_with_errors_in_addCleanupJ  s    		
z0TestModuleCleanUp.test_with_errors_in_addCleanupc                    s  g dd dG fdddt }G  fdddtj}d|_|tjd< t|}| |jd d 	 d d	 | g d
 g dd dt|}| |jd d 	 d d | |jd d 	 d d	 | ddg g dd dt|}| |jd d 	 d d | |jd d 	 d d	 | g d g dd dt|}| |jd d 	 d d | |jd d 	 d d	 | g d d S )NFc                       s.   e Zd Ze fddZefddZdS )zQTestModuleCleanUp.test_with_errors_in_addModuleCleanup_and_setUps.<locals>.Modulec                      s*    d tjtdd  r&tdd S )Nr   Try   Z	ModuleExcr   r	   module_blow_upr    r	   r
   r   n  s    
z]TestModuleCleanUp.test_with_errors_in_addModuleCleanup_and_setUps.<locals>.Module.setUpModulec                      s     d d S r   r.   r	   rP   r	   r
   r   t  s    z`TestModuleCleanUp.test_with_errors_in_addModuleCleanup_and_setUps.<locals>.Module.tearDownModuleNr   r	   r   r	   r
   r   m  s   r   c                       sH   e Zd Ze fddZfddZfddZefddZd	S )
zWTestModuleCleanUp.test_with_errors_in_addModuleCleanup_and_setUps.<locals>.TestableTestc                    s    d  rtdd S )Nrj   r   r   rl   r   r	   r
   rj   y  s    
zbTestModuleCleanUp.test_with_errors_in_addModuleCleanup_and_setUps.<locals>.TestableTest.setUpClassc                    s    d  rtdd S r   r   r$   r   r	   r
   rM   ~  s    
z]TestModuleCleanUp.test_with_errors_in_addModuleCleanup_and_setUps.<locals>.TestableTest.setUpc                    s     d d S rO   r.   r$   rP   r	   r
   r&     s    zcTestModuleCleanUp.test_with_errors_in_addModuleCleanup_and_setUps.<locals>.TestableTest.testNothingc                    s     d d S rn   r.   rl   rP   r	   r
   ro     s    zeTestModuleCleanUp.test_with_errors_in_addModuleCleanup_and_setUps.<locals>.TestableTest.tearDownClassNr   r	   r   r	   r
   r+   x  s   r+   r   r-   r   r   )r   rj   rM   rC   ro   r   r   TzException: ModuleExcr   r   r   )r   rj   r   r   r   )r   rj   rM   ro   r   r   r   r   r	   )r   r   r   r    r
   /test_with_errors_in_addModuleCleanup_and_setUpsh  sf    
zATestModuleCleanUp.test_with_errors_in_addModuleCleanup_and_setUpsc                    s   g fdd fddfddG  fdddt }G fd	d
d
tj}G fdddtj}d|_d|_|tjd< t|| | g d d S )Nc                      s     d d S rT   r.   r	   rP   r	   r
   r4     s    zMTestModuleCleanUp.test_module_cleanUp_with_multiple_classes.<locals>.cleanup1c                      s     d d S rU   r.   r	   rP   r	   r
   r6     s    zMTestModuleCleanUp.test_module_cleanUp_with_multiple_classes.<locals>.cleanup2c                      s     d d S )Ncleanup3r.   r	   rP   r	   r
   r     s    zMTestModuleCleanUp.test_module_cleanUp_with_multiple_classes.<locals>.cleanup3c                       s.   e Zd Ze fddZefddZdS )zKTestModuleCleanUp.test_module_cleanUp_with_multiple_classes.<locals>.Modulec                      s    d t  d S r   )r   r   r   r	   rZ   r	   r
   r     s    
zWTestModuleCleanUp.test_module_cleanUp_with_multiple_classes.<locals>.Module.setUpModulec                      s     d d S r   r.   r	   rP   r	   r
   r     s    zZTestModuleCleanUp.test_module_cleanUp_with_multiple_classes.<locals>.Module.tearDownModuleNr   r	   rZ   r	   r
   r     s   r   c                       s2   e Zd Z fddZfddZfddZdS )zQTestModuleCleanUp.test_module_cleanUp_with_multiple_classes.<locals>.TestableTestc                    s    d |   d S rX   rY   r$   r6   r    r	   r
   rM     s    
zWTestModuleCleanUp.test_module_cleanUp_with_multiple_classes.<locals>.TestableTest.setUpc                    s     d d S rO   r.   r$   rP   r	   r
   r&     s    z]TestModuleCleanUp.test_module_cleanUp_with_multiple_classes.<locals>.TestableTest.testNothingc                    s     d d S rQ   r.   r$   rP   r	   r
   rR     s    zZTestModuleCleanUp.test_module_cleanUp_with_multiple_classes.<locals>.TestableTest.tearDownNrS   r	   r   r	   r
   r+     s   r+   c                       s2   e Zd Z fddZfddZfddZdS )zVTestModuleCleanUp.test_module_cleanUp_with_multiple_classes.<locals>.OtherTestableTestc                    s    d |   d S )NsetUp2rY   r$   r   r    r	   r
   rM     s    
z\TestModuleCleanUp.test_module_cleanUp_with_multiple_classes.<locals>.OtherTestableTest.setUpc                    s     d d S r   r.   r$   rP   r	   r
   r&     s    zbTestModuleCleanUp.test_module_cleanUp_with_multiple_classes.<locals>.OtherTestableTest.testNothingc                    s     d d S )N	tearDown2r.   r$   rP   r	   r
   rR     s    z_TestModuleCleanUp.test_module_cleanUp_with_multiple_classes.<locals>.OtherTestableTest.tearDownNrS   r	   r   r	   r
   OtherTestableTest  s   r   )r   rM   rC   rR   r6   r   r   r   r   r   r4   )r   r   r<   r)   r   r   r   r=   )r%   r   r+   r   r	   )r4   r6   r   r    r
   )test_module_cleanUp_with_multiple_classes  s    			

z;TestModuleCleanUp.test_module_cleanUp_with_multiple_classesN)r(   r)   r*   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r	   r	   r
   r     s   'K),!Or   c                   @   s   e Zd 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_TextTestRunnerzTests for TextTestRunner.c                 C   s    t jd| _| jrt jd= d S NZPYTHONWARNINGS)osenvirongetpythonwarningsr$   r	   r	   r
   rM     s    zTest_TextTestRunner.setUpc                 C   s   | j r| j tjd< d S r   )r   r   r   r$   r	   r	   r
   rR     s    zTest_TextTestRunner.tearDownc                 C   sh   t  }| |j | |j | |jd | |jd  | |j	 | |j
t j | |j d S r,   )r   r   rG   failfastbufferr=   	verbositywarningsrA   descriptionsr   TextTestResult	tb_localsr%   r   r	   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 r   )super__init__)r%   r   r   r   )AResult	__class__r	   r
   r     s    zGTest_TextTestRunner.test_multiple_inheritance.<locals>.AResult.__init__)r(   r)   r*   r   __classcell__r	   r   r   r
   r     s   r   c                   @   s   e Zd ZdS )zBTest_TextTestRunner.test_multiple_inheritance.<locals>.ATextResultN)r(   r)   r*   r	   r	   r	   r
   ATextResult  s   r   r-   )r   r   r   )r%   r   r	   r   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 r   r	   r$   r	   r	   r
   testFoo  s    z?Test_TextTestRunner.testBufferAndFailfast.<locals>.Test.testFooNr(   r)   r*   r  r	   r	   r	   r
   Test  s   r  T)r   r   r   c                      s    S r   r	   r	   rV   r	   r
   <lambda>      z;Test_TextTestRunner.testBufferAndFailfast.<locals>.<lambda>r  )r   r<   r   r   r   r   _makeResultr   rA   r   r   )r%   r  r   r	   r  r
   testBufferAndFailfast  s    z)Test_TextTestRunner.testBufferAndFailfastc                 C   s2   t jt dd}|t  }| d|j d S )NT)r   r   )r   r   r   r   r   r   r=   r   )r%   r   rV   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 r   r	   r$   r	   r	   r
   r  !  s    zCTest_TextTestRunner.testRunnerRegistersResult.<locals>.Test.testFooNr  r	   r	   r	   r
   r     s   r  c                      s    t j_d S r   )r   r   registerResultr	   )originalRegisterResultr	   r
   r"   $  s    z>Test_TextTestRunner.testRunnerRegistersResult.<locals>.cleanup)r   c                      s    S r   r	   r	   r  r	   r
   r  +  r  z?Test_TextTestRunner.testRunnerRegistersResult.<locals>.<lambda>r   c                    s    j d7  _ |   d S r,   )wasRegisteredr=   )Z
thisResult)rV   r%   r	   r
   fakeRegisterResult.  s    zITest_TextTestRunner.testRunnerRegistersResult.<locals>.fakeRegisterResultr-   )r   r<   r   r  r?   r   r   r   r   r  r  r   r   r=   )r%   r  r"   r   r  r	   )r  rV   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 r   r	   r$   r	   r	   r
   printErrors9  s    znTest_TextTestRunner.test_works_with_result_without_startTestRun_stopTestRun.<locals>.OldTextResult.printErrorsNr(   r)   r*   Z
separator2r  r	   r	   r	   r
   OldTextResult7  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 r   )r   r   r   r   r$   )Runnerr   r	   r
   r   =  s    zdTest_TextTestRunner.test_works_with_result_without_startTestRun_stopTestRun.<locals>.Runner.__init__c                    s     S r   r	   r$   )r  r	   r
   r  @  s    zgTest_TextTestRunner.test_works_with_result_without_startTestRun_stopTestRun.<locals>.Runner._makeResultr(   r)   r*   r   r  r   r	   r  r  r   r
   r  <  s   r  )r   r   r   r   r   r   r	   r  r
   7test_works_with_result_without_startTestRun_stopTestRun6  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 r   r	   r$   r	   r	   r
   r  I  s    z_Test_TextTestRunner.test_startTestRun_stopTestRun_called.<locals>.LoggingTextResult.printErrorsNr  r	   r	   r	   r
   LoggingTextResultG  s   r  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 r   )r   r   r   r   _events)r%   events)LoggingRunnerr   r	   r
   r   M  s    zXTest_TextTestRunner.test_startTestRun_stopTestRun_called.<locals>.LoggingRunner.__init__c                    s
    | j S r   )r  r$   )r  r	   r
   r  Q  s    z[Test_TextTestRunner.test_startTestRun_stopTestRun_called.<locals>.LoggingRunner._makeResultr  r	   r  r  r   r
   r  L  s   r  ZstartTestRunZstopTestRun)r   r   r   r   r   r=   )r%   r  r   Zexpectedr	   r  r
   $test_startTestRun_stopTestRun_calledF  s    z8Test_TextTestRunner.test_startTestRun_stopTestRun_calledc                 C   sZ   t d}t|}tdtjd D ]0}t||}t|}| 	|j
 |  q$d S )NrE   r5   r-   )r   r   r   r   rangepickleHIGHEST_PROTOCOLdumpsloadsr=   r   getvalue)r%   r   r   protocolsobjr	   r	   r
   test_pickle_unpickleZ  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 r   r	   )r0   r	   r	   r
   MockResultClassf  s    z=Test_TextTestRunner.test_resultclass.<locals>.MockResultClass)r   )r   r   r   r=   r   r   r  )r%   r(  ZSTREAMZDESCRIPTIONSZ	VERBOSITYr   Zexpectedresultr	   r	   r
   test_resultclasse  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i |}| ||\}}W d   n1 sj0    Y  | 
d	| | t|d
 dD ]}| ||d q||dfD ]}| ||d qtj	ddgtj	dddgtj	ddgf}	|	D ]d}
tj|
fi |}| ||\}}W d   n1 s40    Y  | 
d	| | t|d qtjtj	ddgfi |}| ||\}}W d   n1 s0    Y  | 
d	| | t|d dD ]}| ||d q||fD ]}| ||d qdS )zx
        Check that warnings argument of TextTestRunner correctly affects the
        behavior of the warnings.
        c                 S   s   dd |   D S )Nc                 S   s   g | ]}|  qS r	   )r   ).0br	   r	   r
   
<listcomp>z  r  zPTest_TextTestRunner.test_warnings.<locals>.get_parse_out_err.<locals>.<listcomp>)communicate)pr	   r	   r
   get_parse_out_erry  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.pyNs   OK   )   dw   iw   uwr7      rwr-   ignorez-Waz-Wir   always   )r4  r5  r6  r7  )r@   
subprocessPIPEr   pathdirname__file__Popenr   
executableZassertInr=   lencount)r%   r/  ZoptsZae_msgZat_msgr.  outerrmsgZ	args_listr0   r	   r	   r
   test_warningsr  sH    

*

	,,z!Test_TextTestRunner.test_warningsc                 C   sF   t j}t }|t _z$t }| |jj|u  W |t _n|t _0 d S r   )r   r1  r   r   r   r   rA   r   )r%   Z
old_stderrfr   r	   r	   r
   %testStdErrLookedUpAtInstantiationTime  s    z9Test_TextTestRunner.testStdErrLookedUpAtInstantiationTimec                 C   s(   t  }t|}| |jj|u  d S r   )r   r   r   r   rA   r   )r%   rH  r   r	   r	   r
   testSpecifiedStreamUsed  s    
z+Test_TextTestRunner.testSpecifiedStreamUsedN)r(   r)   r*   __doc__rM   rR   r   r  r	  r
  r  r  r  r'  r)  rG  rI  rJ  r	   r	   r	   r
   r     s   
9r   __main__)F)r   r   r   r  r;  r   Zunittest.caser   Zunittest.test.supportr   r   r   r   r   r"   r<   r#   r^   r   r   r(   mainr	   r	   r	   r
   <module>   s0   
{      ) W