B
    v9aï(  ã               @   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.7/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   Z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   r0   r    r   r   r   r.   E   s    
z BaseTestSuite._removeTestAtIndexc             O   s   | j ||ŽS )N)r1   )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   r6   V   s    
zBaseTestSuite.debugN)r   )Ú__name__Ú
__module__Ú__qualname__r-   r   r   r   r   r   r)   r   r1   r.   r5   r6   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   Ú_previousTestClassr6   r-   r.   Ú_handleModuleTearDown)r   r/   r6   ZtopLevelr0   r    r   r   r   r1   f   s0    


zTestSuite.runc             C   s   t ƒ }|  |d¡ d S )NT)Ú_DebugResultr1   )r   r6   r   r   r   r6   ‡   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 )	NrA   Ú__unittest_skip__FÚ
setUpClassÚ_setupStdoutTzsetUpClass (%s)Ú_restoreStdout)r	   r   r<   r;   r"   r   Ú	Exceptionr   rC   r   r   Ú_addClassOrModuleLevelException)	r   r    r/   ÚpreviousClassÚcurrentClassrE   ÚeÚ	classNameÚ	errorNamer   r   r   r@   Ž   s2    




$zTestSuite._handleClassSetUpc             C   s"   d }t |dd ƒ}|d k	r|j}|S )NrA   )r	   r8   )r   r/   ÚpreviousModulerJ   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ÚsetUpModulerF   TzsetUpModule (%s)rG   )rP   r   r8   rB   r<   ÚsysÚmodulesÚKeyErrorr	   r   rH   r   rC   rI   )	r   r    r/   rO   ZcurrentModuleÚmodulerQ   rL   rN   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   ZSkipTestr*   ZaddErrorrR   Úexc_info)r   r/   Z	exceptionrN   ÚerrorrV   r   r   r   rI   Ò   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ÚtearDownModulerF   ztearDownModule (%s)rG   )rP   r<   rR   rS   rT   r	   r   rH   r   rC   rI   )r   r/   rO   rU   rZ   rL   rN   r   r   r   rB   Ú   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 )
NrA   r;   Fr<   rD   ÚtearDownClassrF   ztearDownClass (%s)rG   )	r	   r   r   rH   r   rC   r   r   rI   )	r   r    r/   rJ   rK   r[   rL   rM   rN   r   r   r   r>   ó   s,    



$z TestSuite._tearDownPreviousClassN)F)r7   r8   r9   r1   r6   r@   rP   r?   rI   rB   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 )rW   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)r]   )r   r   r   r   Ú__str__&  s    z_ErrorHolder.__str__c             C   s   d S )Nr   )r   r/   r   r   r   r1   )  s    z_ErrorHolder.runc             C   s
   |   |¡S )N)r1   )r   r/   r   r   r   r5   .  s    z_ErrorHolder.__call__c             C   s   dS )Nr   r   )r   r   r   r   r   1  s    z_ErrorHolder.countTestCases)r7   r8   r9   ZfailureExceptionr   r]   r^   r   r_   r1   r5   r   r   r   r   r   rW     s   
rW   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 )rC   NF)r7   r8   r9   rA   r<   r,   r   r   r   r   rC   =  s   rC   )rR   Ú r   r   Z
__unittestr   Úobjectr   r'   rW   r=   rC   r   r   r   r   Ú<module>   s   L 3&	