o
    JAf4                     @   sz   	 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      d S N r   r   r   %/usr/lib/python3.10/unittest/suite.py<lambda>   s    z!_call_if_exists.<locals>.<lambda>)getattr)parentattrfuncr   r   r   _call_if_exists   s   
r   c                   @   sl   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__"      
zBaseTestSuite.__iter__c                 C   s$   | j }| D ]
}|r|| 7 }q|S r   )r   countTestCases)r   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   s:   t | D ]\}}|jr |S || | jr| | q|S r   )	enumerate
shouldStop_cleanup_removeTestAtIndex)r   resultindexr%   r   r   r   run<   s   
zBaseTestSuite.runc                 C   sP   	 z| j | }W n
 ty   Y d S w t|dr!|  j| 7  _d | j |< d S )Nr#   )r   r'   hasattrr   r#   )r   r6   r%   r   r   r   r4   E   s   
z BaseTestSuite._removeTestAtIndexc                 O   s   | j |i |S r   r7   )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__r3   r   r   r   r!   r#   r/   r   r7   r4   r<   r=   r   r   r   r   r      s    

	r   c                   @   s`   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 ]D\}}|jr n<t|rD| || | || | || |j|_	t |jddsCt |ddrDq|sK|| n|
  | jrW| | q|rh| d | | | d|_|S )NF_testRunEnteredT_classSetupFailed_moduleSetUpFailed)r
   rA   r1   r2   _isnotsuite_tearDownPreviousClass_handleModuleFixture_handleClassSetUpr   _previousTestClassr=   r3   r4   _handleModuleTearDown)r   r5   r=   ZtopLevelr6   r%   r   r   r   r7   f   s4   




zTestSuite.runc                 C   s   	 t  }| |d d S )NT)_DebugResultr7   )r   r=   r   r   r   r=      s   zTestSuite.debugc                 C   st  t |dd }|j}||krd S |jrd S t |ddrd S d}zd|_W n	 ty,   Y nw t |dd }t |dd }|d urt|d zoz|  W n6 ty~ } z*t|trV d}zd|_W n	 tyf   Y nw t	
|}	| ||d|	 W Y d }~nd }~ww |r|d ur|  |jD ]}
| j||
d d|	|
d	 qW t|d
 d S W t|d
 d S W t|d
 d S t|d
 w d S )NrH   __unittest_skip__F
setUpClassdoClassCleanups_setupStdoutTr   info_restoreStdout)r
   r   rC   rB   r'   r   	Exceptionr   rJ   r   r   "_createClassOrModuleLevelExceptiontearDown_exceptions)r   r%   r5   previousClasscurrentClassZfailedrL   rM   e	classNameexc_infor   r   r   rG      sf   






zTestSuite._handleClassSetUpc                 C   s"   d }t |dd }|d ur|j}|S )NrH   )r
   r?   )r   r5   previousModulerU   r   r   r   _get_previous_module   s
   zTestSuite._get_previous_modulec              
   C   sL  |  |}|jj}||krd S | | d|_ztj| }W n
 ty(   Y d S w t|dd }|d urt	|d zez|  W n# t
ya } zt|trL d|_| ||d| W Y d }~nd }~ww |jrzt  W n" t
y } z| ||d| W Y d }~nd }~ww W t	|d d S W t	|d d S W t	|d d S t	|d w d S )NFsetUpModulerN   TrQ   )r[   r   r?   rI   rC   sysmodulesKeyErrorr
   r   rR   r   rJ   rS   r   doModuleCleanups)r   r%   r5   rZ   ZcurrentModulemoduler\   rW   r   r   r   rF      sX   




zTestSuite._handleModuleFixtureNc                 C   s$   | d| d}|  |||| d S )Nz ())_addClassOrModuleLevelException)r   r5   excZmethod_namer   rP   	errorNamer   r   r   rS      s   z,TestSuite._createClassOrModuleLevelExceptionc                 C   sb   t |}t|dd }|d urt|tjr||t| d S |s)||t  d S ||| d S )NaddSkip)	_ErrorHolderr
   r   r   ZSkipTestr0   ZaddErrorr]   rY   )r   r5   	exceptionre   rP   errorrf   r   r   r   rc      s   z)TestSuite._addClassOrModuleLevelExceptionc              
   C   s*  |  |}|d u rd S |jrd S ztj| }W n
 ty!   Y d S w t|d zgt|dd }|d urXz|  W n  tyW } zt|t	rE | 
||d| W Y d }~nd }~ww zt  W n  ty~ } zt|t	rl | 
||d| W Y d }~nd }~ww W t|d d S W t|d d S t|d w )NrN   tearDownModulerQ   )r[   rC   r]   r^   r_   r   r
   rR   r   rJ   rS   r   r`   )r   r5   rZ   ra   rj   rW   r   r   r   rI      sP   




zTestSuite._handleModuleTearDownc           
   
   C   sf  t |dd }|j}||ks|d u rd S t |ddrd S t |ddr#d S t |ddr+d S t |dd }t |dd }|d u rA|d u rAd S t|d zf|d urvz|  W n% tyu } zt|tr^ t|}| ||d| W Y d }~nd }~ww |d ur|  |j	D ]$}	t|tr|	d	 t|}| j||	d	 d||	d
 qW t|d d S W t|d d S t|d w )NrH   rB   FrC   rK   tearDownClassrM   rN   r   rO   rQ   )
r
   r   r   rR   r   rJ   r   r   rS   rT   )
r   r%   r5   rU   rV   rk   rM   rW   rX   rY   r   r   r   rE     sX   






	z TestSuite._tearDownPreviousClass)Fr   )r>   r?   r@   r7   r=   rG   r[   rF   rS   rc   rI   rE   r   r   r   r   r,   \   s    
	!.&

#r,   c                   @   sR   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 )rg   Nc                 C   s
   || _ d S r   description)r   rm   r   r   r   r   T  r"   z_ErrorHolder.__init__c                 C   s   | j S r   rl   r   r   r   r   idW  s   z_ErrorHolder.idc                 C   r   r   r   r   r   r   r   shortDescriptionZ     z_ErrorHolder.shortDescriptionc                 C   s   d| j f S )Nz<ErrorHolder description=%r>rl   r   r   r   r   r   ]  s   z_ErrorHolder.__repr__c                 C   s   |   S r   )rn   r   r   r   r   __str__`  s   z_ErrorHolder.__str__c                 C   r   r   r   r   r5   r   r   r   r7   c  s   z_ErrorHolder.runc                 C   s
   |  |S r   r9   rr   r   r   r   r<   h  r"   z_ErrorHolder.__call__c                 C   s   dS r   r   r   r   r   r   r#   k  rp   z_ErrorHolder.countTestCases)r>   r?   r@   ZfailureExceptionr   rn   ro   r   rq   r7   r<   r#   r   r   r   r   rg   H  s    	rg   c                 C   s&   	 zt |  W dS  ty   Y dS w )NTF)r    r'   )r%   r   r   r   rD   n  s   
rD   c                   @   s   e Zd Z	 dZdZdZdS )rJ   NF)r>   r?   r@   rH   rC   r2   r   r   r   r   rJ   w  s
    rJ   )r]    r   r   Z
__unittestr   objectr   r,   rg   rD   rJ   r   r   r   r   <module>   s    L m&	