
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a¾è  ã                   @   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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mZmZmZ dZeƒ ZdZG dd„ deƒZG d	d
„ d
eƒZG dd„ deƒZG dd„ deƒZdd„ Zg Zdd„ Zdd„ Zdd„ Z dd„ Z!dd„ Z"dd„ Z#dd„ Z$G dd „ d ƒZ%G d!d"„ d"e%ƒZ&G d#d$„ d$e&ƒZ'G d%d&„ d&e&ƒZ(e )d'd(d)g¡Z*G d*d+„ d+ej+ƒZ,G d,d-„ d-e%ƒZ-G d.d/„ d/ej.ƒZ/G d0d1„ d1eƒZ0G d2d3„ d3e0ƒZ1G d4d5„ d5e0ƒZ2dS )6é    Né   )Úresult)ÚstrclassÚ	safe_reprÚ_count_diff_all_purposeÚ_count_diff_hashableÚ_common_shorten_reprTz@
Diff is %s characters long. Set self.maxDiff to None to see it.c                   @   s   e Zd ZdS )ÚSkipTestN©Ú__name__Ú
__module__Ú__qualname__© r   r   ú2/opt/alt/python38/lib64/python3.8/unittest/case.pyr	      s   r	   c                   @   s   e Zd ZdS )Ú_ShouldStopNr
   r   r   r   r   r   "   s   r   c                   @   s   e Zd ZdS )Ú_UnexpectedSuccessNr
   r   r   r   r   r   '   s   r   c                   @   s&   e Zd Zddd„Zejddd„ƒZdS )	Ú_OutcomeNc                 C   s4   d| _ || _t|dƒ| _d| _g | _d | _g | _d S )NFÚ
addSubTestT)Úexpecting_failurer   ÚhasattrÚresult_supports_subtestsÚsuccessÚskippedÚexpectedFailureÚerrors)Úselfr   r   r   r   Ú__init__.   s    z_Outcome.__init__Fc              
   c   sè   | j }d| _ zÈz
d V  W nœ tk
r.   ‚ Y n¤ tk
rh } zd| _ | j |t|ƒf¡ W 5 d }~X Y nj tk
rz   Y nX   t ¡ }| j	r–|| _
nd| _ | j ||f¡ d }Y nX | jrÒ| j rÒ| j |d f¡ W 5 | j oÞ|| _ X d S )NTF)r   ÚKeyboardInterruptr	   r   ÚappendÚstrr   ÚsysÚexc_infor   r   r   r   )r   Ú	test_caseÚisTestZold_successÚer!   r   r   r   ÚtestPartExecutor7   s*    
$
z_Outcome.testPartExecutor)N)F)r   r   r   r   Ú
contextlibÚcontextmanagerr%   r   r   r   r   r   -   s   
	r   c                 C   s   | S ©Nr   )Úobjr   r   r   Ú_idU   s    r*   c                O   s   t  | ||f¡ d S r(   )Ú_module_cleanupsr   )ÚfunctionÚargsÚkwargsr   r   r   ÚaddModuleCleanupZ   s    r/   c               
   C   sd   g } t rTt  ¡ \}}}z|||Ž W q tk
rP } z|  |¡ W 5 d }~X Y qX q| r`| d ‚d S ©Nr   )r+   ÚpopÚ	Exceptionr   )Ú
exceptionsr,   r-   r.   Úexcr   r   r   ÚdoModuleCleanups`   s    r5   c                    s,   ‡ fdd„}t ˆ tjƒr(ˆ }d‰ ||ƒS |S )Nc                    s4   t | tƒs$t | ¡‡ fdd„ƒ}|} d| _ˆ | _| S )Nc                     s   t ˆ ƒ‚d S r(   ©r	   ©r-   r.   ©Úreasonr   r   Úskip_wrapperv   s    z-skip.<locals>.decorator.<locals>.skip_wrapperT)Ú
isinstanceÚtypeÚ	functoolsÚwrapsÚ__unittest_skip__Ú__unittest_skip_why__)Ú	test_itemr:   r8   r   r   Ú	decoratort   s    
zskip.<locals>.decoratorÚ )r;   ÚtypesÚFunctionType)r9   rB   rA   r   r8   r   Úskipp   s    
rF   c                 C   s   | rt |ƒS tS r(   ©rF   r*   ©Z	conditionr9   r   r   r   ÚskipIf„   s    rI   c                 C   s   | st |ƒS tS r(   rG   rH   r   r   r   Ú
skipUnlessŒ   s    rJ   c                 C   s
   d| _ | S )NT)Ú__unittest_expecting_failure__)rA   r   r   r   r   ”   s    r   c                    s4   t | tƒr t‡ fdd„| D ƒƒS t | tƒo2t| ˆ ƒS )Nc                 3   s   | ]}t |ˆ ƒV  qd S r(   )Ú_is_subtype)Ú.0r$   ©Úbasetyper   r   Ú	<genexpr>š   s     z_is_subtype.<locals>.<genexpr>)r;   ÚtupleÚallr<   Ú
issubclass)ÚexpectedrO   r   rN   r   rL   ˜   s    
rL   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_BaseTestCaseContextc                 C   s
   || _ d S r(   )r"   )r   r"   r   r   r   r   Ÿ   s    z_BaseTestCaseContext.__init__c                 C   s    | j  | j|¡}| j  |¡‚d S r(   )r"   Ú_formatMessageÚmsgÚfailureException)r   ÚstandardMsgrW   r   r   r   Ú_raiseFailure¢   s    z"_BaseTestCaseContext._raiseFailureN)r   r   r   r   rZ   r   r   r   r   rU   �   s   rU   c                   @   s   e Zd Zddd„Zdd„ ZdS )Ú_AssertRaisesBaseContextNc                 C   s@   t  | |¡ || _|| _|d k	r*t |¡}|| _d | _d | _d S r(   )	rU   r   rT   r"   ÚreÚcompileÚexpected_regexÚobj_namerW   )r   rT   r"   r^   r   r   r   r   ¨   s    
z!_AssertRaisesBaseContext.__init__c              	   C   s²   z¦t | j| jƒs"td|| jf ƒ‚|sV| dd ¡| _|rNtdtt|ƒƒf ƒ‚| W ¢TS |^}}z|j	| _
W n tk
rˆ   t|ƒ| _
Y nX | � |||Ž W 5 Q R X W 5 d } X d S )Nz%s() arg 1 must be %srW   z3%r is an invalid keyword argument for this function)rL   rT   Ú
_base_typeÚ	TypeErrorÚ_base_type_strr1   rW   ÚnextÚiterr   r_   ÚAttributeErrorr   )r   Únamer-   r.   Zcallable_objr   r   r   Úhandle²   s(    ÿÿz_AssertRaisesBaseContext.handle)N)r   r   r   r   rg   r   r   r   r   r[   ¦   s   

r[   c                   @   s$   e Zd ZeZdZdd„ Zdd„ ZdS )Ú_AssertRaisesContextz-an exception type or tuple of exception typesc                 C   s   | S r(   r   ©r   r   r   r   Ú	__enter__Ö   s    z_AssertRaisesContext.__enter__c                 C   sÆ   |d krbz| j j}W n tk
r2   t| j ƒ}Y nX | jrP|  d || j¡¡ ql|  d |¡¡ n
t |¡ t	|| j ƒs|dS | 
d ¡| _| jd kr–dS | j}| t|ƒ¡sÂ|  d |jt|ƒ¡¡ dS )Nz{} not raised by {}z{} not raisedFTú"{}" does not match "{}")rT   r   re   r   r_   rZ   ÚformatÚ	tracebackÚclear_framesrS   Úwith_tracebackZ	exceptionr^   ÚsearchÚpattern)r   Úexc_typeÚ	exc_valueÚtbÚexc_namer^   r   r   r   Ú__exit__Ù   s.    
ÿ

 ÿz_AssertRaisesContext.__exit__N)r   r   r   ÚBaseExceptionr`   rb   rj   rv   r   r   r   r   rh   Ð   s   rh   c                   @   s$   e Zd ZeZdZdd„ Zdd„ ZdS )Ú_AssertWarnsContextz(a warning type or tuple of warning typesc                 C   sR   t tj ¡ ƒD ]}t|dd ƒri |_qtjdd�| _| j 	¡ | _t 
d| j¡ | S )NÚ__warningregistry__T)ÚrecordÚalways)Úlistr    ÚmodulesÚvaluesÚgetattrry   ÚwarningsÚcatch_warningsÚwarnings_managerrj   ÚsimplefilterrT   )r   Úvr   r   r   rj   û   s    z_AssertWarnsContext.__enter__c                 C   s   | j  |||¡ |d k	rd S z| jj}W n tk
rF   t| jƒ}Y nX d }| jD ]Z}|j}t|| jƒsjqR|d krv|}| j	d k	r’| j	 
t|ƒ¡s’qR|| _|j| _|j| _ d S |d k	rÐ|  d | j	jt|ƒ¡¡ | jrì|  d || j¡¡ n|  d |¡¡ d S )Nrk   z{} not triggered by {}z{} not triggered)r‚   rv   rT   r   re   r   r€   Úmessager;   r^   rp   ZwarningÚfilenameÚlinenorZ   rl   rq   r_   )r   rr   rs   rt   ru   Zfirst_matchingÚmÚwr   r   r   rv     s@    

ÿ ÿ
ÿz_AssertWarnsContext.__exit__N)r   r   r   ÚWarningr`   rb   rj   rv   r   r   r   r   rx   õ   s   rx   Ú_LoggingWatcherÚrecordsÚoutputc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú_CapturingHandlerc                 C   s   t j | ¡ tg g ƒ| _d S r(   )ÚloggingÚHandlerr   r‹   Úwatcherri   r   r   r   r   3  s    z_CapturingHandler.__init__c                 C   s   d S r(   r   ri   r   r   r   Úflush7  s    z_CapturingHandler.flushc                 C   s*   | j j |¡ |  |¡}| j j |¡ d S r(   )r‘   rŒ   r   rl   r�   )r   rz   rW   r   r   r   Úemit:  s    
z_CapturingHandler.emitN)r   r   r   r   r’   r“   r   r   r   r   rŽ   .  s   rŽ   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Ú_AssertLogsContextz"%(levelname)s:%(name)s:%(message)sc                 C   s:   t  | |¡ || _|r(tj ||¡| _ntj| _d | _d S r(   )	rU   r   Úlogger_namer�   Z_nameToLevelÚgetÚlevelÚINFOrW   )r   r"   r•   r—   r   r   r   r   F  s    z_AssertLogsContext.__init__c                 C   s’   t | jtjƒr| j }| _nt | j¡ }| _t | j¡}tƒ }| 	|¡ |j
| _
|jd d … | _|j| _|j| _|g|_| | j¡ d|_|j
S )NF)r;   r•   r�   ZLoggerÚloggerZ	getLoggerZ	FormatterÚLOGGING_FORMATrŽ   ZsetFormatterr‘   ÚhandlersÚold_handlersr—   Ú	old_levelÚ	propagateÚold_propagateÚsetLevel)r   r™   Z	formatterZhandlerr   r   r   rj   O  s    
z_AssertLogsContext.__enter__c                 C   s`   | j | j_| j| j_| j | j¡ |d k	r.dS t| jj	ƒdkr\|  
d t | j¡| jj¡¡ d S )NFr   z-no logs of level {} or higher triggered on {})rœ   r™   r›   rŸ   rž   r    r�   Úlenr‘   rŒ   rZ   rl   r�   ZgetLevelNamer—   rf   )r   rr   rs   rt   r   r   r   rv   `  s    


 ÿÿz_AssertLogsContext.__exit__N)r   r   r   rš   r   rj   rv   r   r   r   r   r”   A  s   	r”   c                   @   s   e Zd Zdd„ ZdS )Ú_OrderedChainMapc                 c   s8   t ƒ }| jD ]&}|D ]}||kr| |¡ |V  qqd S r(   )ÚsetÚmapsÚadd)r   ÚseenÚmappingÚkr   r   r   Ú__iter__n  s    

z_OrderedChainMap.__iter__N)r   r   r   r©   r   r   r   r   r¢   m  s   r¢   c                   @   s  e Zd ZeZdZdZdZdZg Z	d”dd„Z
dd	„ Zd
d„ Zde_edd„ ƒZdd„ Zdd„ Zedd„ ƒZe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ejefd)d*„ƒZ d+d,„ Z!d-d.„ Z"d/d0„ Z#d1d2„ Z$d3d4„ Z%d5d6„ Z&d7d8„ Z'd•d:d;„Z(d<d=„ Z)ed>d?„ ƒZ*d@dA„ Z+dBdC„ Z,dDdE„ Z-d–dFdG„Z.d—dHdI„Z/d˜dJdK„Z0dLdM„ Z1dNdO„ Z2dPdQ„ Z3d™dRdS„Z4dTdU„ Z5dšdVdW„Z6d›dXdY„Z7dœdZd[„Z8d�d\d]„Z9džd^d_„Z:dŸd`da„Z;dbdc„ Z<d ddde„Z=d¡dfdg„Z>d¢dhdi„Z?d£djdk„Z@d¤dldm„ZAd¥dndo„ZBd¦dpdq„ZCd§drds„ZDd¨dtdu„ZEd©dvdw„ZFdªdxdy„ZGd«dzd{„ZHd¬d|d}„ZId­d~d„ZJd®d€d�„ZKd¯d‚dƒ„ZLd°d„d…„ZMd±d†d‡„ZNd²dˆd‰„ZOdŠd‹„ ZPdŒd�„ ZQd³dŽd�„ZRd´d�d‘„ZSd’d“„ ZTeTe7ƒ ZUZVeTe8ƒ ZWZXeTe9ƒ ZYZZeTe:ƒ Z[Z\eTe0ƒ Z]Z^eTe2ƒZ_eTe/ƒZ`eTePƒZaeTeRƒZbeTeSƒZcd9S )µÚTestCaseTi€  i   FÚrunTestc                 C   s¶   || _ d | _d| _zt| |ƒ}W n. tk
rN   |dkrJtd| j|f ƒ‚Y n
X |j| _g | _d | _	i | _
|  td¡ |  td¡ |  td¡ |  td¡ |  td¡ |  td¡ d S )	NzNo testr«   zno such test method in %s: %sÚassertDictEqualÚassertListEqualÚassertTupleEqualÚassertSetEqualÚassertMultiLineEqual)Ú_testMethodNameÚ_outcomeÚ_testMethodDocr   re   Ú
ValueErrorÚ	__class__Ú__doc__Ú	_cleanupsÚ_subtestÚ_type_equality_funcsÚaddTypeEqualityFuncÚdictr|   rQ   r£   Ú	frozensetr   )r   Z
methodNameÚ
testMethodr   r   r   r   ¨  s(    ÿzTestCase.__init__c                 C   s   || j |< d S r(   )r¹   )r   Ztypeobjr,   r   r   r   rº   È  s    zTestCase.addTypeEqualityFuncc                  O   sŒ   t | ƒdkr| ^}}} nV| s&tdƒ‚nHd|krZ| d¡}| ^}} dd l}|jdtdd� ntdt | ƒd  ƒ‚t| ƒ} |j || |f¡ d S )	Né   z>descriptor 'addCleanup' of 'TestCase' object needs an argumentr,   r   z4Passing 'function' as keyword argument is deprecated)Ú
stacklevelz:addCleanup expected at least 1 positional argument, got %dr   )	r¡   ra   r1   r€   ÚwarnÚDeprecationWarningrQ   r·   r   )r-   r.   r   r,   r€   r   r   r   Ú
addCleanup×  s"    

 ÿ
ÿzTestCase.addCleanupz%($self, function, /, *args, **kwargs)c                O   s   | j  |||f¡ d S r(   )Ú_class_cleanupsr   )Úclsr,   r-   r.   r   r   r   ÚaddClassCleanupð  s    zTestCase.addClassCleanupc                 C   s   d S r(   r   ri   r   r   r   ÚsetUpö  s    zTestCase.setUpc                 C   s   d S r(   r   ri   r   r   r   ÚtearDownú  s    zTestCase.tearDownc                 C   s   d S r(   r   ©rÄ   r   r   r   Ú
setUpClassþ  s    zTestCase.setUpClassc                 C   s   d S r(   r   rÈ   r   r   r   ÚtearDownClass  s    zTestCase.tearDownClassc                 C   s   dS )Nr   r   ri   r   r   r   ÚcountTestCases  s    zTestCase.countTestCasesc                 C   s   t  ¡ S r(   )r   Z
TestResultri   r   r   r   ÚdefaultTestResult	  s    zTestCase.defaultTestResultc                 C   s$   | j }|r | ¡  d¡d  ¡ S d S ©NÚ
r   )r³   ÚstripÚsplit©r   Údocr   r   r   ÚshortDescription  s    zTestCase.shortDescriptionc                 C   s   dt | jƒ| jf S )Nz%s.%s©r   rµ   r±   ri   r   r   r   Úid  s    zTestCase.idc                 C   s    t | ƒt |ƒk	rtS | j|jkS r(   )r<   ÚNotImplementedr±   ©r   Úotherr   r   r   Ú__eq__  s    zTestCase.__eq__c                 C   s   t t| ƒ| jfƒS r(   )Úhashr<   r±   ri   r   r   r   Ú__hash__   s    zTestCase.__hash__c                 C   s   d| j t| jƒf S ©Nz%s (%s))r±   r   rµ   ri   r   r   r   Ú__str__#  s    zTestCase.__str__c                 C   s   dt | jƒ| jf S )Nz<%s testMethod=%s>rÔ   ri   r   r   r   Ú__repr__&  s    ÿzTestCase.__repr__c                 C   s<   t |dd ƒ}|d k	r |||ƒ nt dtd¡ | |¡ d S )NÚaddSkipz4TestResult has no addSkip method, skips not reportedr¾   )r   r€   rÀ   ÚRuntimeWarningÚ
addSuccess)r   r   r"   r9   rß   r   r   r   Ú_addSkip*  s     ÿzTestCase._addSkipc              	   k   s´   | j d ks| j jsd V  d S | j}|d kr4t|ƒ}n|j |¡}t| ||ƒ| _zX| j j| jdd�� d V  W 5 Q R X | j js˜| j j	}|d k	r¤|j
r¤t‚n| j jr¤t‚W 5 || _X d S )NT©r#   )r²   r   r¸   r¢   ÚparamsÚ	new_childÚ_SubTestr%   r   r   Zfailfastr   r   )r   rW   rä   ÚparentZ
params_mapr   r   r   r   ÚsubTest3  s$    
zTestCase.subTestc                 C   s`   |D ]V\}}t |tƒr(| |j||¡ q|d k	rt|d | jƒrN| ||¡ q| ||¡ qd S r0   )r;   ræ   r   r"   rS   rX   Ú
addFailureZaddError)r   r   r   Útestr!   r   r   r   Ú_feedErrorsToResultR  s    
zTestCase._feedErrorsToResultc                 C   sD   z
|j }W n* tk
r4   t dt¡ | | ¡ Y nX || |ƒ d S )Nz@TestResult has no addExpectedFailure method, reporting as passes)ÚaddExpectedFailurere   r€   rÀ   rà   rá   )r   r   r!   rì   r   r   r   Ú_addExpectedFailure\  s    
ÿzTestCase._addExpectedFailurec                 C   sh   z
|j }W nP tk
rZ   t dt¡ z
td ‚W n$ tk
rT   | | t ¡ ¡ Y nX Y n
X || ƒ d S )NzCTestResult has no addUnexpectedSuccess method, reporting as failure)	ÚaddUnexpectedSuccessre   r€   rÀ   rà   r   ré   r    r!   )r   r   rî   r   r   r   Ú_addUnexpectedSuccessf  s    
ÿ
zTestCase._addUnexpectedSuccessc                 C   s   |   ¡  d S r(   )rÆ   ri   r   r   r   Ú
_callSetUpu  s    zTestCase._callSetUpc                 C   s
   |ƒ  d S r(   r   )r   Úmethodr   r   r   Ú_callTestMethodx  s    zTestCase._callTestMethodc                 C   s   |   ¡  d S r(   )rÇ   ri   r   r   r   Ú_callTearDown{  s    zTestCase._callTearDownc                O   s   |||Ž d S r(   r   ©r   r,   r-   r.   r   r   r   Ú_callCleanup~  s    zTestCase._callCleanupNc              
   C   s  |}|d kr.|   ¡ }t|dd ƒ}|d k	r.|ƒ  | | ¡ t| | jƒ}t| jddƒs^t|ddƒrœz,t| jddƒpxt|ddƒ}|  || |¡ W 5 | | ¡ X d S t|ddƒ}t| ddƒ}|pº|}t|ƒ}	zô|	| _|	 | ¡� |  ¡  W 5 Q R X |	j�r@||	_|	j| dd	�� |  |¡ W 5 Q R X d|	_|	 | ¡� |  ¡  W 5 Q R X |  ¡  |	jD ]\}}|  |||¡ �qN|  ||	j¡ |	j�r²|�r¨|	j
�rœ|  ||	j
¡ n
|  |¡ n
| | ¡ |W ¢S | | ¡ |d k�rêt|dd ƒ}
|
d k	�rê|
ƒ  |	j 	¡  d |	_
d | _X d S )
NÚstartTestRunr?   Fr@   rC   rK   ÚstopTestRunTrã   )rÌ   r   Z	startTestr±   rµ   ZstopTestrâ   r   r   Úclearr   r²   r%   rð   r   r   rò   ró   Ú
doCleanupsr   rë   rí   rï   rá   )r   r   Zorig_resultrö   r½   Zskip_whyZexpecting_failure_methodZexpecting_failure_classr   Úoutcomer÷   rê   r9   r   r   r   Úrun�  st    

ÿ
ÿ ÿ ÿ




zTestCase.runc              	   C   sR   | j p
tƒ }| jrL| j ¡ \}}}| | ¡� | j|f|ž|Ž W 5 Q R X q|jS r(   )r²   r   r·   r1   r%   rõ   r   )r   rú   r,   r-   r.   r   r   r   rù   Æ  s    zTestCase.doCleanupsc              
   C   sd   g | _ | jr`| j ¡ \}}}z|||Ž W q tk
r\ } z| j  t ¡ ¡ W 5 d }~X Y qX qd S r(   )ZtearDown_exceptionsrÃ   r1   r2   r   r    r!   )rÄ   r,   r-   r.   r4   r   r   r   ÚdoClassCleanupsÓ  s    zTestCase.doClassCleanupsc                 O   s   | j ||ŽS r(   )rû   )r   r-   Úkwdsr   r   r   Ú__call__ß  s    zTestCase.__call__c                 C   sF   |   ¡  t| | jƒƒ  |  ¡  | jrB| j d¡\}}}|||Ž qd S )Néÿÿÿÿ)rÆ   r   r±   rÇ   r·   r1   rô   r   r   r   Údebugâ  s    zTestCase.debugc                 C   s   t |ƒ‚d S r(   r6   )r   r9   r   r   r   ÚskipTestë  s    zTestCase.skipTestc                 C   s   |   |¡‚d S r(   )rX   )r   rW   r   r   r   Úfailï  s    zTestCase.failc                 C   s&   |r"|   |dt|ƒ ¡}|  |¡‚d S )Nz%s is not false©rV   r   rX   ©r   ÚexprrW   r   r   r   ÚassertFalseó  s    zTestCase.assertFalsec                 C   s&   |s"|   |dt|ƒ ¡}|  |¡‚d S )Nz%s is not truer  r  r   r   r   Ú
assertTrueù  s    zTestCase.assertTruec                 C   sV   | j s|p|S |d kr|S zd||f W S  tk
rP   dt|ƒt|ƒf  Y S X d S )Nz%s : %s)ÚlongMessageÚUnicodeDecodeErrorr   )r   rW   rY   r   r   r   rV   ÿ  s    
zTestCase._formatMessagec                 O   s(   t || ƒ}z| d||¡W ¢S d }X d S )NÚassertRaises©rh   rg   )r   Úexpected_exceptionr-   r.   Úcontextr   r   r   r
    s    
zTestCase.assertRaisesc                 O   s   t || ƒ}| d||¡S )NÚassertWarns©rx   rg   )r   Úexpected_warningr-   r.   r  r   r   r   r  5  s    
zTestCase.assertWarnsc                 C   s   t | ||ƒS r(   )r”   )r   r™   r—   r   r   r   Ú
assertLogsT  s    zTestCase.assertLogsc                 C   sF   t |ƒt |ƒkr@| j t |ƒ¡}|d k	r@t|tƒr<t| |ƒ}|S | jS r(   )r<   r¹   r–   r;   r   r   Ú_baseAssertEqual)r   ÚfirstÚsecondZasserterr   r   r   Ú_getAssertEqualityFuncj  s    

zTestCase._getAssertEqualityFuncc                 C   s0   ||ks,dt ||ƒ }|  ||¡}|  |¡‚d S )Nú%s != %s)r   rV   rX   )r   r  r  rW   rY   r   r   r   r  „  s    zTestCase._baseAssertEqualc                 C   s   |   ||¡}||||d� d S )N)rW   )r  )r   r  r  rW   Zassertion_funcr   r   r   ÚassertEqual‹  s    zTestCase.assertEqualc                 C   s2   ||ks.|   |dt|ƒt|ƒf ¡}|  |¡‚d S )Nz%s == %sr  )r   r  r  rW   r   r   r   ÚassertNotEqual’  s
    ÿzTestCase.assertNotEqualc                 C   sº   ||krd S |d k	r$|d k	r$t dƒ‚t|| ƒ}|d k	rf||krDd S dt|ƒt|ƒt|ƒt|ƒf }n:|d krrd}t||ƒdkr„d S dt|ƒt|ƒ|t|ƒf }|  ||¡}|  |¡‚d S )Nú specify delta or places not bothz(%s != %s within %s delta (%s difference)é   r   z)%s != %s within %r places (%s difference)©ra   Úabsr   ÚroundrV   rX   ©r   r  r  ZplacesrW   ZdeltaÚdiffrY   r   r   r   ÚassertAlmostEqual›  s4    üüzTestCase.assertAlmostEqualc                 C   s¸   |d k	r|d k	rt dƒ‚t|| ƒ}|d k	rb||ks@||kr@d S dt|ƒt|ƒt|ƒt|ƒf }n<|d krnd}||ksˆt||ƒdkrˆd S dt|ƒt|ƒ|f }|  ||¡}|  |¡‚d S )Nr  z(%s == %s within %s delta (%s difference)r  r   z%s == %s within %r placesr  r  r   r   r   ÚassertNotAlmostEqualÈ  s,    üþzTestCase.assertNotAlmostEqualc                 C   sø  |d k	rP|j }t||ƒs.|  d|t|ƒf ¡‚t||ƒsT|  d|t|ƒf ¡‚nd}d }zt|ƒ}W n  ttfk
r„   d| }Y nX |d kr¼zt|ƒ}W n  ttfk
rº   d| }Y nX |d k�r¤||krÒd S d| ¡ ft||ƒ  }t	t
||ƒƒD ]®}	z||	 }
W n4 tttfk
�r<   |d|	|f 7 }Y  �qÒY nX z||	 }W n4 tttfk
�r~   |d|	|f 7 }Y  �qÒY nX |
|krø|d	|	ft|
|ƒ  7 } �qÒqø||k�rÒ|d k�rÒt|ƒt|ƒk�rÒd S ||k�r<|d
||| f 7 }z|d|t|| ƒf 7 }W n, tttfk
�r8   |d||f 7 }Y nX nh||k �r¤|d||| f 7 }z|d|t|| ƒf 7 }W n, tttfk
�r¢   |d||f 7 }Y nX |}dd t t |¡ ¡ t |¡ ¡ ¡¡ }|  ||¡}|  ||¡}|  |¡ d S )NzFirst sequence is not a %s: %szSecond sequence is not a %s: %sZsequencez(First %s has no length.    Non-sequence?z)Second %s has no length.    Non-sequence?z%ss differ: %s != %s
z(
Unable to index element %d of first %s
z)
Unable to index element %d of second %s
z#
First differing element %d:
%s
%s
z+
First %s contains %d additional elements.
zFirst extra element %d:
%s
z'Unable to index element %d of first %s
z,
Second %s contains %d additional elements.
z(Unable to index element %d of second %s
rÎ   )r   r;   rX   r   r¡   ra   ÚNotImplementedErrorÚ
capitalizer   ÚrangeÚminÚ
IndexErrorr<   ÚjoinÚdifflibÚndiffÚpprintÚpformatÚ
splitlinesÚ_truncateMessagerV   r  )r   Zseq1Zseq2rW   Úseq_typeZseq_type_nameZ	differingZlen1Zlen2ÚiZitem1Zitem2rY   ÚdiffMsgr   r   r   ÚassertSequenceEqualë  s´    

ÿ

ÿÿ
ÿ

ÿÿÿÿÿÿ

ÿÿ
ÿ

ÿÿ
ÿÿÿzTestCase.assertSequenceEqualc                 C   s2   | j }|d kst|ƒ|kr"|| S |tt|ƒ  S r(   )ÚmaxDiffr¡   ÚDIFF_OMITTED)r   r…   r  Zmax_diffr   r   r   r-  N  s    zTestCase._truncateMessagec                 C   s   | j |||td� d S ©N)r.  )r1  r|   )r   Zlist1Zlist2rW   r   r   r   r­   T  s    
zTestCase.assertListEqualc                 C   s   | j |||td� d S r4  )r1  rQ   )r   Ztuple1Ztuple2rW   r   r   r   r®   `  s    	zTestCase.assertTupleEqualc           
   
   C   s`  z|  |¡}W n^ tk
r> } z|  d| ¡ W 5 d }~X Y n0 tk
rl } z|  d| ¡ W 5 d }~X Y nX z|  |¡}W n^ tk
r¬ } z|  d| ¡ W 5 d }~X Y n0 tk
rÚ } z|  d| ¡ W 5 d }~X Y nX |sè|sèd S g }|�r| d¡ |D ]}| t|ƒ¡ �q |�r@| d¡ |D ]}| t|ƒ¡ �q*d |¡}	|  |  ||	¡¡ d S )Nz/invalid type when attempting set difference: %sz2first argument does not support set difference: %sz3second argument does not support set difference: %sz*Items in the first set but not the second:z*Items in the second set but not the first:rÎ   )Ú
differencera   r  re   r   Úreprr'  rV   )
r   Zset1Zset2rW   Zdifference1r$   Zdifference2ÚlinesÚitemrY   r   r   r   r¯   k  s2      


zTestCase.assertSetEqualc                 C   s2   ||kr.dt |ƒt |ƒf }|  |  ||¡¡ d S )Nz%s not found in %s©r   r  rV   ©r   ÚmemberZ	containerrW   rY   r   r   r   ÚassertIn–  s
    ÿzTestCase.assertInc                 C   s2   ||kr.dt |ƒt |ƒf }|  |  ||¡¡ d S )Nz%s unexpectedly found in %sr9  r:  r   r   r   ÚassertNotIn�  s
    ÿzTestCase.assertNotInc                 C   s2   ||k	r.dt |ƒt |ƒf }|  |  ||¡¡ d S )Nz%s is not %sr9  ©r   Zexpr1Zexpr2rW   rY   r   r   r   ÚassertIs¤  s
    ÿzTestCase.assertIsc                 C   s,   ||kr(dt |ƒf }|  |  ||¡¡ d S )Nzunexpectedly identical: %sr9  r>  r   r   r   ÚassertIsNot«  s    zTestCase.assertIsNotc              	   C   s~   |   |td¡ |   |td¡ ||krzdt||ƒ }dd t t |¡ ¡ t |¡ ¡ ¡¡ }|  	||¡}|  
|  ||¡¡ d S )Nz"First argument is not a dictionaryz#Second argument is not a dictionaryr  rÎ   )ÚassertIsInstancer»   r   r'  r(  r)  r*  r+  r,  r-  r  rV   )r   Zd1Zd2rW   rY   r  r   r   r   r¬   ±  s    
þzTestCase.assertDictEqualc           	   	   C   sÎ   t  dt¡ g }g }| ¡ D ]L\}}||kr8| |¡ q||| kr| dt|ƒt|ƒt|| ƒf ¡ q|sv|svd S d}|r–dd dd„ |D ƒ¡ }|r¸|r¦|d7 }|d	d |¡ 7 }|  |  ||¡¡ d S )
Nz&assertDictContainsSubset is deprecatedz%s, expected: %s, actual: %srC   zMissing: %sú,c                 s   s   | ]}t |ƒV  qd S r(   )r   )rM   rˆ   r   r   r   rP   Ð  s     z4TestCase.assertDictContainsSubset.<locals>.<genexpr>z; zMismatched values: %s)	r€   rÀ   rÁ   Úitemsr   r   r'  r  rV   )	r   ZsubsetZ
dictionaryrW   ZmissingZ
mismatchedÚkeyÚvaluerY   r   r   r   ÚassertDictContainsSubset½  s4    ÿ
ÿÿÿ
z!TestCase.assertDictContainsSubsetc           
      C   s¦   t |ƒt |ƒ }}zt |¡}t |¡}W n tk
rH   t||ƒ}Y nX ||krVd S t||ƒ}|r¢d}dd„ |D ƒ}d |¡}	|  ||	¡}|  ||¡}|  	|¡ d S )NzElement counts were not equal:
c                 S   s   g | ]}d | ‘qS )z First has %d, Second has %d:  %rr   )rM   r  r   r   r   Ú
<listcomp>ô  s     z-TestCase.assertCountEqual.<locals>.<listcomp>rÎ   )
r|   ÚcollectionsÚCounterra   r   r   r'  r-  rV   r  )
r   r  r  rW   Z	first_seqZ
second_seqZdifferencesrY   r7  r0  r   r   r   ÚassertCountEqualÚ  s     


zTestCase.assertCountEqualc                 C   sÚ   |   |td¡ |   |td¡ ||krÖt|ƒ| jks@t|ƒ| jkrN|  |||¡ |jdd�}|jdd�}t|ƒdkr”| d¡|kr”|d g}|d g}dt||ƒ }dd	 t	 
||¡¡ }|  ||¡}|  |  ||¡¡ d S )
NzFirst argument is not a stringzSecond argument is not a stringT)Úkeependsr   z
rÎ   r  rC   )rA  r   r¡   Ú_diffThresholdr  r,  rÏ   r   r'  r(  r)  r-  r  rV   )r   r  r  rW   Z
firstlinesZsecondlinesrY   r  r   r   r   r°   ú  s     ÿ

zTestCase.assertMultiLineEqualc                 C   s2   ||k s.dt |ƒt |ƒf }|  |  ||¡¡ d S )Nz%s not less than %sr9  ©r   ÚaÚbrW   rY   r   r   r   Ú
assertLess  s    zTestCase.assertLessc                 C   s2   ||ks.dt |ƒt |ƒf }|  |  ||¡¡ d S )Nz%s not less than or equal to %sr9  rM  r   r   r   ÚassertLessEqual  s    zTestCase.assertLessEqualc                 C   s2   ||ks.dt |ƒt |ƒf }|  |  ||¡¡ d S )Nz%s not greater than %sr9  rM  r   r   r   ÚassertGreater  s    zTestCase.assertGreaterc                 C   s2   ||ks.dt |ƒt |ƒf }|  |  ||¡¡ d S )Nz"%s not greater than or equal to %sr9  rM  r   r   r   ÚassertGreaterEqual   s    zTestCase.assertGreaterEqualc                 C   s,   |d k	r(dt |ƒf }|  |  ||¡¡ d S )Nz%s is not Noner9  ©r   r)   rW   rY   r   r   r   ÚassertIsNone&  s    zTestCase.assertIsNonec                 C   s"   |d krd}|   |  ||¡¡ d S )Nzunexpectedly None)r  rV   rT  r   r   r   ÚassertIsNotNone,  s    zTestCase.assertIsNotNonec                 C   s0   t ||ƒs,dt|ƒ|f }|  |  ||¡¡ d S )Nz%s is not an instance of %r©r;   r   r  rV   ©r   r)   rÄ   rW   rY   r   r   r   rA  2  s    
zTestCase.assertIsInstancec                 C   s0   t ||ƒr,dt|ƒ|f }|  |  ||¡¡ d S )Nz%s is an instance of %rrW  rX  r   r   r   ÚassertNotIsInstance9  s    
zTestCase.assertNotIsInstancec                 O   s   t || |ƒ}| d||¡S )NÚassertRaisesRegexr  )r   r  r^   r-   r.   r  r   r   r   rZ  ?  s    zTestCase.assertRaisesRegexc                 O   s   t || |ƒ}| d||¡S )NÚassertWarnsRegexr  )r   r  r^   r-   r.   r  r   r   r   r[  O  s    zTestCase.assertWarnsRegexc                 C   sJ   t |ttfƒrt |¡}| |¡sFd|j|f }|  ||¡}|  |¡‚d S )Nz&Regex didn't match: %r not found in %r)	r;   r   Úbytesr\   r]   rp   rq   rV   rX   )r   Útextr^   rW   rY   r   r   r   ÚassertRegexb  s    

 ÿzTestCase.assertRegexc                 C   s`   t |ttfƒrt |¡}| |¡}|r\d|| ¡ | ¡ … |j|f }|  	||¡}|  
|¡‚d S )Nz"Regex matched: %r matches %r in %r)r;   r   r\  r\   r]   rp   ÚstartÚendrq   rV   rX   )r   r]  Zunexpected_regexrW   ÚmatchrY   r   r   r   ÚassertNotRegexn  s    

ýzTestCase.assertNotRegexc                    s   ‡ fdd„}|S )Nc                     s    t  d ˆ j¡td¡ ˆ | |ŽS )NzPlease use {0} instead.r¾   )r€   rÀ   rl   r   rÁ   r7   ©Úoriginal_funcr   r   Údeprecated_func~  s    
 þz,TestCase._deprecate.<locals>.deprecated_funcr   )rd  re  r   rc  r   Ú
_deprecate}  s    zTestCase._deprecate)r«   )N)N)N)N)NN)N)N)N)NNN)NNN)NN)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)dr   r   r   ÚAssertionErrorrX   r  r2  rL  Z_classSetupFailedrÃ   r   rº   rÂ   Ú__text_signature__ÚclassmethodrÅ   rÆ   rÇ   rÉ   rÊ   rË   rÌ   rÓ   rÕ   rÙ   rÛ   rÝ   rÞ   râ   r&   r'   Ú_subtest_msg_sentinelrè   rë   rí   rï   rð   rò   ró   rõ   rû   rù   rü   rþ   r   r  r  r  r  rV   r
  r  r  r  r  r  r  r   r!  r1  r-  r­   r®   r¯   r<  r=  r?  r@  r¬   rF  rJ  r°   rP  rQ  rR  rS  rU  rV  rA  rY  rZ  r[  r^  rb  rf  ZfailUnlessEqualZassertEqualsZfailIfEqualZassertNotEqualsZfailUnlessAlmostEqualZassertAlmostEqualsZfailIfAlmostEqualZassertNotAlmostEqualsZ
failUnlessZassert_ZfailUnlessRaisesZfailIfZassertRaisesRegexpZassertRegexpMatchesZassertNotRegexpMatchesr   r   r   r   rª   w  sÀ   !
 


	


E
	


!



	  ÿ
-  ÿ
#
c


+






 










	rª   c                       sf   e Zd Zd‡ f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‡  ZS )ÚFunctionTestCaseNc                    s*   t t| ƒ ¡  || _|| _|| _|| _d S r(   )Úsuperrk  r   Ú
_setUpFuncÚ_tearDownFuncÚ	_testFuncÚ_description)r   ZtestFuncrÆ   rÇ   Zdescription©rµ   r   r   r   œ  s
    zFunctionTestCase.__init__c                 C   s   | j d k	r|   ¡  d S r(   )rm  ri   r   r   r   rÆ   £  s    
zFunctionTestCase.setUpc                 C   s   | j d k	r|   ¡  d S r(   )rn  ri   r   r   r   rÇ   §  s    
zFunctionTestCase.tearDownc                 C   s   |   ¡  d S r(   )ro  ri   r   r   r   r«   «  s    zFunctionTestCase.runTestc                 C   s   | j jS r(   )ro  r   ri   r   r   r   rÕ   ®  s    zFunctionTestCase.idc                 C   s@   t || jƒstS | j|jko>| j|jko>| j|jko>| j|jkS r(   )r;   rµ   rÖ   rm  rn  ro  rp  r×   r   r   r   rÙ   ±  s    
ÿ
þ
ýzFunctionTestCase.__eq__c                 C   s   t t| ƒ| j| j| j| jfƒS r(   )rÚ   r<   rm  rn  ro  rp  ri   r   r   r   rÛ   º  s     ÿzFunctionTestCase.__hash__c                 C   s   dt | jƒ| jjf S rÜ   )r   rµ   ro  r   ri   r   r   r   rÝ   ¾  s    
ÿzFunctionTestCase.__str__c                 C   s   dt | jƒ| jf S )Nz<%s tec=%s>)r   rµ   ro  ri   r   r   r   rÞ   Â  s    
ÿzFunctionTestCase.__repr__c                 C   s2   | j d k	r| j S | jj}|r.| d¡d  ¡ p0d S rÍ   )rp  ro  r¶   rÐ   rÏ   rÑ   r   r   r   rÓ   Æ  s    
z!FunctionTestCase.shortDescription)NNN)r   r   r   r   rÆ   rÇ   r«   rÕ   rÙ   rÛ   rÝ   rÞ   rÓ   Ú__classcell__r   r   rq  r   rk  “  s   		rk  c                       sD   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z‡  Z	S )ræ   c                    s(   t ƒ  ¡  || _|| _|| _|j| _d S r(   )rl  r   Ú_messager"   rä   rX   )r   r"   r…   rä   rq  r   r   r   Ï  s
    
z_SubTest.__init__c                 C   s   t dƒ‚d S )Nzsubtests cannot be run directly)r"  ri   r   r   r   r«   Ö  s    z_SubTest.runTestc                 C   s^   g }| j tk	r | d | j ¡¡ | jrPd dd„ | j ¡ D ƒ¡}| d |¡¡ d |¡p\dS )Nz[{}]z, c                 s   s   | ]\}}d   ||¡V  qdS )z{}={!r}N)rl   )rM   r¨   r„   r   r   r   rP   Þ  s   ÿz+_SubTest._subDescription.<locals>.<genexpr>z({})ú z(<subtest>))rs  rj  r   rl   rä   r'  rC  )r   ÚpartsZparams_descr   r   r   Ú_subDescriptionÙ  s    

þz_SubTest._subDescriptionc                 C   s   d  | j ¡ |  ¡ ¡S ©Nz{} {})rl   r"   rÕ   rv  ri   r   r   r   rÕ   ä  s    z_SubTest.idc                 C   s
   | j  ¡ S r(   )r"   rÓ   ri   r   r   r   rÓ   ç  s    z_SubTest.shortDescriptionc                 C   s   d  | j|  ¡ ¡S rw  )rl   r"   rv  ri   r   r   r   rÝ   í  s    z_SubTest.__str__)
r   r   r   r   r«   rv  rÕ   rÓ   rÝ   rr  r   r   rq  r   ræ   Í  s   ræ   )3r    r=   r(  r�   r*  r\   r€   rH  r&   rm   rD   rC   r   Úutilr   r   r   r   r   Z
__unittestÚobjectrj  r3  r2   r	   r   r   r   r*   r+   r/   r5   rF   rI   rJ   r   rL   rU   r[   rh   rx   Ú
namedtupler‹   r�   rŽ   r”   ÚChainMapr¢   rª   rk  ræ   r   r   r   r   Ú<module>   sb   (	*%5ÿ,
        $: