???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................U
    e5d                     @   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   %/usr/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| _ zz
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   zt | 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rd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|sqR|| _|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	dd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'dd:d;Z(d<d= Z)ed>d? Z*d@dA Z+dBdC Z,dDdE Z-ddFdGZ.ddHdIZ/ddJdKZ0dLdM Z1dNdO Z2dPdQ Z3ddRdSZ4dTdU Z5ddVdWZ6ddXdYZ7ddZd[Z8dd\d]Z9dd^d_Z:dd`daZ;dbdc Z<ddddeZ=ddfdgZ>ddhdiZ?ddjdkZ@ddldmZAddndoZBddpdqZCddrdsZDddtduZEddvdwZFddxdyZGddzd{ZHdd|d}ZIdd~dZJdddZKdddZLdddZMdddZNdddZOdd ZPdd ZQdddZRdddZSdd 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
rtn| j jrt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rz,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rt|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rd 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st||dkrd 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rzt|}W n  ttfk
r   d| }Y nX |d kr||krd S d| ft||  }t	t
||D ]}	z||	 }
W n4 tttfk
r<   |d|	|f 7 }Y  qY nX z||	 }W n4 tttfk
r~   |d|	|f 7 }Y  qY nX |
|kr|d	|	ft|
|  7 } qq||kr|d krt|t|krd 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|sd 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}|rd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||}|rd}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rt|| 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,
        $: