B
    18™\ï(  ã               @   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   úR/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/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 )N)Ú
isinstancer   ÚNotImplementedr   )r   Úotherr   r   r   Ú__eq__   s    zBaseTestSuite.__eq__c             C   s
   t | jƒS )N)Úiterr   )r   r   r   r   Ú__iter__"   s    zBaseTestSuite.__iter__c             C   s(   | j }x| D ]}|r|| ¡ 7 }qW |S )N)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   ÚTestCaseÚ	TestSuiter   Úappend)r   r    r   r   r   ÚaddTest,   s    zBaseTestSuite.addTestc             C   s.   t |tƒrtdƒ‚x|D ]}|  |¡ qW 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:   x4t | ƒD ](\}}|jrP ||ƒ | jr
|  |¡ q
W |S )N)Ú	enumerateÚ
shouldStopÚ_cleanupÚ_removeTestAtIndex)r   ÚresultÚindexr    r   r   r   Úrun<   s    zBaseTestSuite.runc             C   sN   y| j | }W n tk
r"   Y n(X t|dƒr@|  j| ¡ 7  _d | j |< d S )Nr   )r   r"   Úhasattrr   r   )r   r1   r    r   r   r   r/   E   s    
z BaseTestSuite._removeTestAtIndexc             O   s   | j ||ŽS )N)r2   )r   ÚargsÚkwdsr   r   r   Ú__call__S   s    zBaseTestSuite.__call__c             C   s   x| D ]}|  ¡  qW d S )N)Údebug)r   r    r   r   r   r7   V   s    
zBaseTestSuite.debugN)r   )Ú__name__Ú
__module__Ú__qualname__r.   r   r   r   r   r   r*   r   r2   r/   r6   r7   r   r   r   r   r      s   

	r   c               @   sN   e 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S )r(   Fc             C   sÖ   d}t |ddƒdkrd |_}x’t| ƒD ]†\}}|jr8P t|ƒrˆ|  ||¡ |  ||¡ |  ||¡ |j|_	t |jddƒs(t |ddƒrˆq(|s–||ƒ n| 
¡  | jr(|  |¡ q(W |rÒ|  d |¡ |  |¡ d|_|S )NFÚ_testRunEnteredTÚ_classSetupFailedÚ_moduleSetUpFailed)r	   r;   r,   r-   Ú_isnotsuiteÚ_tearDownPreviousClassÚ_handleModuleFixtureÚ_handleClassSetUpr   Ú_previousTestClassr7   r.   r/   Ú_handleModuleTearDown)r   r0   r7   ZtopLevelr1   r    r   r   r   r2   f   s0    


zTestSuite.runc             C   s   t ƒ }|  |d¡ d S )NT)Ú_DebugResultr2   )r   r7   r   r   r   r7   ‡   s    zTestSuite.debugc       	   
   C   sì   t |dd ƒ}|j}||krd S |jr(d S t |ddƒr8d S y
d|_W n tk
rV   Y nX t |dd ƒ}|d k	rèt|dƒ zdy
|ƒ  W nT tk
rÖ } z6t|tƒr ‚ d|_t	 
|¡}d| }|  |||¡ W d d }~X Y nX W d t|dƒ X d S )	NrB   Ú__unittest_skip__FÚ
setUpClassÚ_setupStdoutTzsetUpClass (%s)Ú_restoreStdout)r	   r   r=   r<   r"   r   Ú	Exceptionr   rD   r   r   Ú_addClassOrModuleLevelException)	r   r    r0   ÚpreviousClassÚcurrentClassrF   ÚeÚ	classNameÚ	errorNamer   r   r   rA   Ž   s2    




$zTestSuite._handleClassSetUpc             C   s"   d }t |dd ƒ}|d k	r|j}|S )NrB   )r	   r9   )r   r0   ÚpreviousModulerK   r   r   r   Ú_get_previous_module®   s
    zTestSuite._get_previous_modulec       	   
   C   sÜ   |   |¡}|jj}||krd S |  |¡ d|_ytj| }W n tk
rP   d S X t|dd ƒ}|d k	rØt	|dƒ zZy
|ƒ  W nJ t
k
rÆ } z,t|tƒrš‚ d|_d| }|  |||¡ W d d }~X Y nX W d t	|dƒ X d S )NFÚsetUpModulerG   TzsetUpModule (%s)rH   )rQ   r   r9   rC   r=   ÚsysÚmodulesÚKeyErrorr	   r   rI   r   rD   rJ   )	r   r    r0   rP   ZcurrentModuleÚmodulerR   rM   rO   r   r   r   r@   ¶   s,    




$zTestSuite._handleModuleFixturec             C   sL   t |ƒ}t|dd ƒ}|d k	r8t|tjƒr8||t|ƒƒ n| |t ¡ ¡ d S )NÚaddSkip)	Ú_ErrorHolderr	   r   r   ÚSkipTestr+   ÚaddErrorrS   Úexc_info)r   r0   Ú	exceptionrO   ÚerrorrW   r   r   r   rJ   Ò   s
    z)TestSuite._addClassOrModuleLevelExceptionc          
   C   sÈ   |   |¡}|d krd S |jr d S ytj| }W n tk
rB   d S X t|dd ƒ}|d k	rÄt|dƒ zTy
|ƒ  W nD tk
r² } z&t|t	ƒrŒ‚ d| }|  
|||¡ W d d }~X Y nX W d t|dƒ X d S )NÚtearDownModulerG   ztearDownModule (%s)rH   )rQ   r=   rS   rT   rU   r	   r   rI   r   rD   rJ   )r   r0   rP   rV   r^   rM   rO   r   r   r   rC   Ú   s(    



$zTestSuite._handleModuleTearDownc       	   
   C   sÜ   t |dd ƒ}|j}||krd S t |ddƒr.d S t |ddƒr>d S t |ddƒrNd S t |dd ƒ}|d k	rØt|dƒ z^y
|ƒ  W nN tk
rÆ } z0t|tƒr–‚ t |¡}d| }|  |||¡ W d d }~X Y nX W d t|d	ƒ X d S )
NrB   r<   Fr=   rE   ÚtearDownClassrG   ztearDownClass (%s)rH   )	r	   r   r   rI   r   rD   r   r   rJ   )	r   r    r0   rK   rL   r_   rM   rN   rO   r   r   r   r?   ó   s,    



$z TestSuite._tearDownPreviousClassN)F)r8   r9   r:   r2   r7   rA   rQ   r@   rJ   rC   r?   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 )rX   Nc             C   s
   || _ d S )N)Údescription)r   r`   r   r   r   r     s    z_ErrorHolder.__init__c             C   s   | j S )N)r`   )r   r   r   r   Úid  s    z_ErrorHolder.idc             C   s   d S )Nr   )r   r   r   r   ÚshortDescription   s    z_ErrorHolder.shortDescriptionc             C   s   d| j f S )Nz<ErrorHolder description=%r>)r`   )r   r   r   r   r   #  s    z_ErrorHolder.__repr__c             C   s   |   ¡ S )N)ra   )r   r   r   r   Ú__str__&  s    z_ErrorHolder.__str__c             C   s   d S )Nr   )r   r0   r   r   r   r2   )  s    z_ErrorHolder.runc             C   s
   |   |¡S )N)r2   )r   r0   r   r   r   r6   .  s    z_ErrorHolder.__call__c             C   s   dS )Nr   r   )r   r   r   r   r   1  s    z_ErrorHolder.countTestCases)r8   r9   r:   ÚfailureExceptionr   ra   rb   r   rc   r2   r6   r   r   r   r   r   rX     s   
rX   c             C   s&   yt | ƒ W n tk
r    dS X dS )NTF)r   r"   )r    r   r   r   r>   4  s
    r>   c               @   s   e Zd ZdZdZdZdS )rD   NF)r8   r9   r:   rB   r=   r-   r   r   r   r   rD   =  s   rD   )rS   Ú r   r   Ú
__unittestr   Úobjectr   r(   rX   r>   rD   r   r   r   r   Ú<module>   s   L 3&	