a
    ze4                     @   sx   d dl Z ddlmZ ddlmZ dZdd ZG dd	 d	eZG d
d deZG dd deZ	dd Z
G dd deZdS )    N   )case)utilTc                 C   s   t | |dd }|  d S )Nc                   S   s   d S N r   r   r   $/usr/lib/python3.9/unittest/suite.py<lambda>       z!_call_if_exists.<locals>.<lambda>)getattr)parentattrfuncr   r   r   _call_if_exists   s    r   c                   @   sj   e Zd ZdZd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 )BaseTestSuiteTr   c                 C   s   g | _ d| _| | d S Nr   )_tests_removed_testsaddTests)selftestsr   r   r   __init__   s    zBaseTestSuite.__init__c                 C   s   dt | jt| f S )Nz<%s tests=%s>)r   strclass	__class__listr   r   r   r   __repr__   s    zBaseTestSuite.__repr__c                 C   s    t || jstS t| t|kS r   )
isinstancer   NotImplementedr   )r   otherr   r   r   __eq__   s    zBaseTestSuite.__eq__c                 C   s
   t | jS r   )iterr   r   r   r   r   __iter__"   s    zBaseTestSuite.__iter__c                 C   s$   | j }| D ]}|r
|| 7 }q
|S r   )r   countTestCases)r   Zcasestestr   r   r   r"   %   s
    zBaseTestSuite.countTestCasesc                 C   sL   t |stdt|t|tr<t|tjt	fr<td| j
| d S )Nz{} is not callablezNTestCases and TestSuites must be instantiated before passing them to addTest())callable	TypeErrorformatreprr   type
issubclassr   ZTestCase	TestSuiter   appendr   r#   r   r   r   addTest,   s    zBaseTestSuite.addTestc                 C   s*   t |trtd|D ]}| | qd S )Nz0tests must be an iterable of tests, not a string)r   strr%   r-   )r   r   r#   r   r   r   r   6   s    
zBaseTestSuite.addTestsc                 C   s8   t | D ]*\}}|jr q4|| | jr| | q|S r   )	enumerate
shouldStop_cleanup_removeTestAtIndex)r   resultindexr#   r   r   r   run<   s    zBaseTestSuite.runc                 C   sL   z| j | }W n ty    Y n(0 t|dr>|  j| 7  _d | j |< d S )Nr"   )r   r%   hasattrr   r"   )r   r4   r#   r   r   r   r2   E   s    
z BaseTestSuite._removeTestAtIndexc                 O   s   | j |i |S r   r5   )r   argskwdsr   r   r   __call__S   s    zBaseTestSuite.__call__c                 C   s   | D ]}|   qd S r   )debugr,   r   r   r   r;   V   s    zBaseTestSuite.debugN)r   )__name__
__module____qualname__r1   r   r   r   r!   r"   r-   r   r5   r2   r:   r;   r   r   r   r   r      s   

	r   c                   @   sZ   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdddZdddZ	dd Z
dd ZdS )r*   Fc                 C   s   d}t |dddu rd |_}t| D ]\}}|jr8 qt|r| || | || | || |j|_	t |jdds&t |ddrq&|s|| n|
  | jr&| | q&|r| d | | | d|_|S )NF_testRunEnteredT_classSetupFailed_moduleSetUpFailed)r
   r?   r/   r0   _isnotsuite_tearDownPreviousClass_handleModuleFixture_handleClassSetUpr   _previousTestClassr;   r1   r2   _handleModuleTearDown)r   r3   r;   ZtopLevelr4   r#   r   r   r   r5   f   s2    



zTestSuite.runc                 C   s   t  }| |d d S )NT)_DebugResultr5   )r   r;   r   r   r   r;      s    zTestSuite.debugc                 C   sZ  t |dd }|j}||krd S |jr(d S t |ddr8d S d}z
d|_W n tyX   Y n0 t |dd }t |dd }|d urVt|d zz
|  W nl ty } zTt|tr d}z
d|_W n ty   Y n0 t	
|}	| ||d|	 W Y d }~n
d }~0 0 |r<|d ur<|  |jD ]}
| j||
d d|	|
d	 qW t|d
 nt|d
 0 d S )NrF   __unittest_skip__F
setUpClassdoClassCleanups_setupStdoutTr   info_restoreStdout)r
   r   rA   r@   r%   r   	Exceptionr   rH   r   r   "_createClassOrModuleLevelExceptiontearDown_exceptions)r   r#   r3   previousClasscurrentClassZfailedrJ   rK   e	classNameexc_infor   r   r   rE      sR    







zTestSuite._handleClassSetUpc                 C   s"   d }t |dd }|d ur|j}|S )NrF   )r
   r=   )r   r3   previousModulerS   r   r   r   _get_previous_module   s
    zTestSuite._get_previous_modulec              
   C   s0  |  |}|jj}||krd S | | d|_ztj| }W n tyP   Y d S 0 t|dd }|d ur,t	|d zz
|  W nF t
y } z.t|tr d|_| ||d| W Y d }~n
d }~0 0 |jrzt  W n6 t
y } z| ||d| W Y d }~n
d }~0 0 W t	|d nt	|d 0 d S )NFsetUpModulerL   TrO   )rY   r   r=   rG   rA   sysmodulesKeyErrorr
   r   rP   r   rH   rQ   r   doModuleCleanups)r   r#   r3   rX   ZcurrentModulemodulerZ   rU   r   r   r   rD      sB    





zTestSuite._handleModuleFixtureNc                 C   s$   | d| d}|  |||| d S )Nz ())_addClassOrModuleLevelException)r   r3   excZmethod_namer   rN   	errorNamer   r   r   rQ      s    z,TestSuite._createClassOrModuleLevelExceptionc                 C   s^   t |}t|dd }|d ur8t|tjr8||t| n"|sN||t  n||| d S )NaddSkip)	_ErrorHolderr
   r   r   ZSkipTestr.   ZaddErrorr[   rW   )r   r3   	exceptionrc   rN   errorrd   r   r   r   ra      s    z)TestSuite._addClassOrModuleLevelExceptionc              
   C   s  |  |}|d u rd S |jr d S ztj| }W n tyB   Y d S 0 t|d zt|dd }|d urz
|  W n@ ty } z(t|t	r | 
||d| W Y d }~n
d }~0 0 zt  W nB t y } z(t|t	rڂ | 
||d| W Y d }~n
d }~0 0 W t|d nt|d 0 d S )NrL   tearDownModulerO   )rY   rA   r[   r\   r]   r   r
   rP   r   rH   rQ   r   r^   )r   r3   rX   r_   rh   rU   r   r   r   rG      s@    




zTestSuite._handleModuleTearDownc           
   
   C   s^  t |dd }|j}||ks"|d u r&d S t |ddr6d S t |ddrFd S t |ddrVd S t |dd }t |dd }|d u r|d u rd S t|d z|d urz
|  W nJ ty } z2t|tr t|}| ||d| W Y d }~n
d }~0 0 |d ur@|  |j	D ]<}	t|tr|	d	 t|}| j||	d	 d||	d
 qW t|d nt|d 0 d S )NrF   r@   FrA   rI   tearDownClassrK   rL   r   rM   rO   )
r
   r   r   rP   r   rH   r   r   rQ   rR   )
r   r#   r3   rS   rT   ri   rK   rU   rV   rW   r   r   r   rC     sN    






z TestSuite._tearDownPreviousClass)F)N)N)r<   r=   r>   r5   r;   rE   rY   rD   rQ   ra   rG   rC   r   r   r   r   r*   \   s   

!.& 
 
#r*   c                   @   sP   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S )re   Nc                 C   s
   || _ d S r   description)r   rk   r   r   r   r   T  s    z_ErrorHolder.__init__c                 C   s   | j S r   rj   r   r   r   r   idW  s    z_ErrorHolder.idc                 C   s   d S r   r   r   r   r   r   shortDescriptionZ  s    z_ErrorHolder.shortDescriptionc                 C   s   d| j f S )Nz<ErrorHolder description=%r>rj   r   r   r   r   r   ]  s    z_ErrorHolder.__repr__c                 C   s   |   S r   )rl   r   r   r   r   __str__`  s    z_ErrorHolder.__str__c                 C   s   d S r   r   r   r3   r   r   r   r5   c  s    z_ErrorHolder.runc                 C   s
   |  |S r   r7   ro   r   r   r   r:   h  s    z_ErrorHolder.__call__c                 C   s   dS r   r   r   r   r   r   r"   k  s    z_ErrorHolder.countTestCases)r<   r=   r>   ZfailureExceptionr   rl   rm   r   rn   r5   r:   r"   r   r   r   r   re   H  s   
re   c                 C   s&   zt |  W n ty    Y dS 0 dS )NTF)r    r%   )r#   r   r   r   rB   n  s
    rB   c                   @   s   e Zd ZdZdZdZdS )rH   NF)r<   r=   r>   rF   rA   r0   r   r   r   r   rH   w  s   rH   )r[    r   r   Z
__unittestr   objectr   r*   re   rB   rH   r   r   r   r   <module>   s   L m&	