£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
B
    ~ f%                 @   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dd Zdd Zdd Zdd Z dd Z!G dd dZ"dd Z#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Z/G d2d3 d3e/Z0G d4d5 d5e/Z1d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/python37/lib64/python3.7/unittest/case.pyr	      s   r	   c               @   s   e Zd ZdS )_ShouldStopN)r
   r   r   r   r   r   r   r   "   s   r   c               @   s   e Zd ZdS )_UnexpectedSuccessN)r
   r   r   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| _ zy
d V  W n tk
r.    Y n tk
rh } zd| _ | j|t|f W d 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 d | 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                s    fdd}|S )Nc                s4   t | ts$t|  fdd}|} d| _ | _| S )Nc                 s   t  d S )N)r	   )argskwargs)reasonr   r   skip_wrapper^   s    z-skip.<locals>.decorator.<locals>.skip_wrapperT)
isinstancetype	functoolswraps__unittest_skip____unittest_skip_why__)	test_itemr,   )r+   r   r   	decorator\   s    
zskip.<locals>.decoratorr   )r+   r4   r   )r+   r   skipX   s    
r5   c             C   s   | rt |S tS )N)r5   r(   )	conditionr+   r   r   r   skipIfh   s    r7   c             C   s   | st |S tS )N)r5   r(   )r6   r+   r   r   r   
skipUnlessp   s    r8   c             C   s
   d| _ | S )NT)__unittest_expecting_failure__)r3   r   r   r   r   x   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 )N)_is_subtype).0r#   )basetyper   r   	<genexpr>~   s    z_is_subtype.<locals>.<genexpr>)r-   tupleallr.   
issubclass)expectedr<   r   )r<   r   r:   |   s    
r:   c               @   s   e Zd Zdd Zdd ZdS )_BaseTestCaseContextc             C   s
   || _ d S )N)r!   )r   r!   r   r   r   r      s    z_BaseTestCaseContext.__init__c             C   s    | j | j|}| j |d S )N)r!   _formatMessagemsgfailureException)r   standardMsgrD   r   r   r   _raiseFailure   s    z"_BaseTestCaseContext._raiseFailureN)r
   r   r   r   rG   r   r   r   r   rB      s   rB   c             C   s   dt jkrt| S tS d S )NWITHIN_PYTHON_RPM_BUILD)osenvironr5   r(   )r+   r   r   r   _skipInRpmBuild   s    
rK   c                s   t   fdd}|S )Nc                 sN   dt jkr@y | | W n  tk
r8   tt Y nX tn
 | | d S )NrH   )rI   rJ   	ExceptionZ_ExpectedFailurer   r    r   )r)   r*   )funcr   r   wrapper   s    
z+_expectedFailureInRpmBuild.<locals>.wrapper)r/   r0   )rM   rN   r   )rM   r   _expectedFailureInRpmBuild   s    rO   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 )N)	rB   r   rA   r!   recompileexpected_regexobj_namerD   )r   rA   r!   rS   r   r   r   r      s    
z!_AssertRaisesBaseContext.__init__c          	   C   s   zt | j| js"td|| jf |rD|d d krDtdtd d}|sx|dd | _	|rttdt
t| td | S |^}}y|j| _W n tk
r   t|| _Y nX |  ||| W d Q R X W d d } X d S )Nz%s() arg 1 must be %sr   zcallable is None   r   rD   z3%r is an invalid keyword argument for this function)r:   rA   
_base_type	TypeError_base_type_strwarningswarnDeprecationWarningpoprD   nextiterr
   rT   AttributeErrorr   )r   namer)   r*   Zcallable_objr   r   r   handle   s.    z_AssertRaisesBaseContext.handle)N)r
   r   r   r   ra   r   r   r   r   rP      s   

rP   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 )Nr   )r   r   r   r   	__enter__   s    z_AssertRaisesContext.__enter__c             C   s   |d krby| 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 raisedFTz"{}" does not match "{}")rA   r
   r_   r   rT   rG   format	tracebackclear_framesr@   with_tracebackZ	exceptionrS   searchpattern)r   exc_type	exc_valuetbexc_namerS   r   r   r   __exit__   s(    


z_AssertRaisesContext.__exit__N)r
   r   r   BaseExceptionrV   rX   rc   rn   r   r   r   r   rb      s   rb   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   sV   x(t tj D ]}t|dd ri |_qW tjdd| _| j	 | _t
d| j | S )N__warningregistry__T)recordalways)listr   modulesvaluesgetattrrq   rY   catch_warningswarnings_managerrc   simplefilterrA   )r   vr   r   r   rc   	  s    
z_AssertWarnsContext.__enter__c             C   s  | j ||| |d k	rd S y| jj}W n tk
rF   t| j}Y nX d }xb| jD ]X}|j}t|| jslqT|d krx|}| j	d k	r| j	
t|sqT|| _|j| _|j| _d S W |d k	r| d| j	jt| | jr| d|| j n| d| d S )Nz"{}" does not match "{}"z{} not triggered by {}z{} not triggered)ry   rn   rA   r
   r_   r   rY   messager-   rS   rh   ZwarningfilenamelinenorG   rd   ri   rT   )r   rj   rk   rl   rm   Zfirst_matchingmwr   r   r   rn     s8    

z_AssertWarnsContext.__exit__N)r
   r   r   WarningrV   rX   rc   rn   r   r   r   r   rp     s   rp   _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 )N)loggingHandlerr   r   watcher)r   r   r   r   r   A  s    z_CapturingHandler.__init__c             C   s   d S )Nr   )r   r   r   r   flushE  s    z_CapturingHandler.flushc             C   s*   | j j| | |}| j j| d S )N)r   r   r   rd   r   )r   rr   rD   r   r   r   emitH  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 )N)	rB   r   logger_namer   Z_nameToLevelgetlevelINFOrD   )r   r!   r   r   r   r   r   r   T  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   	formatterZhandlerr   r   r   rc   ]  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   rG   rd   r   ZgetLevelNamer   r`   )r   rj   rk   rl   r   r   r   rn   n  s    

z_AssertLogsContext.__exit__N)r
   r   r   r   r   rc   rn   r   r   r   r   r   O  s   	r   c               @   s   e Zd Zdd ZdS )_OrderedChainMapc             c   s@   t  }x4| jD ]*}x$|D ]}||kr|| |V  qW qW d S )N)setmapsadd)r   seenmappingkr   r   r   __iter__|  s    

z_OrderedChainMap.__iter__N)r
   r   r   r   r   r   r   r   r   {  s   r   c               @   s  e Zd ZeZdZdZdZdZdddZ	dd	 Z
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,d- Z dd/d0Z!d1d2 Z"d3d4 Z#d5d6 Z$d7d8 Z%dd9d:Z&dd;d<Z'dd=d>Z(d?d@ Z)dAdB Z*dCdD Z+ddEdFZ,dGdH Z-ddIdJZ.ddKdLZ/ddMdNZ0ddOdPZ1ddQdRZ2ddSdTZ3dUdV Z4ddWdXZ5ddYdZZ6dd[d\Z7dd]d^Z8dd_d`Z9ddadbZ:ddcddZ;ddedfZ<ddgdhZ=ddidjZ>ddkdlZ?ddmdnZ@ddodpZAddqdrZBddsdtZCddudvZDddwdxZEddydzZFdd{d|ZGd}d~ ZHdd ZIdddZJdddZKdd ZLeLe/ ZMZNeLe0 ZOZPeLe1 ZQZReLe2 ZSZTeLe( ZUZVeLe*ZWeLe'ZXeLeHZYeLeJZZeLeKZ[d.S )TestCaseTi  i   FrunTestc             C   s   || _ d | _d| _y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_testMethodDocrw   r_   
ValueError	__class____doc__	_cleanups_subtest_type_equality_funcsaddTypeEqualityFuncdictrt   r>   r   	frozensetr   )r   Z
methodName
testMethodr   r   r   r     s&    zTestCase.__init__c             C   s   || j |< d S )N)r   )r   Ztypeobjfunctionr   r   r   r     s    zTestCase.addTypeEqualityFuncc              O   st   t | dkr| ^}}} n>| s&tdn0d|krB|d}| ^}} ntdt | d  t| } |j|| |f d S )N   z>descriptor 'addCleanup' of 'TestCase' object needs an argumentr   z:addCleanup expected at least 1 positional argument, got %dr   )r   rW   r\   r>   r   r   )r)   r*   r   r   r   r   r   
addCleanup  s    


zTestCase.addCleanupc             C   s   d S )Nr   )r   r   r   r   setUp  s    zTestCase.setUpc             C   s   d S )Nr   )r   r   r   r   tearDown  s    zTestCase.tearDownc             C   s   d S )Nr   )clsr   r   r   
setUpClass   s    zTestCase.setUpClassc             C   s   d S )Nr   )r   r   r   r   tearDownClass  s    zTestCase.tearDownClassc             C   s   dS )Nr   r   )r   r   r   r   countTestCases  s    zTestCase.countTestCasesc             C   s   t  S )N)r   Z
TestResult)r   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   )r   r   r   r   id  s    zTestCase.idc             C   s    t | t |k	rtS | j|jkS )N)r.   NotImplementedr   )r   otherr   r   r   __eq__  s    zTestCase.__eq__c             C   s   t t| | jfS )N)hashr.   r   )r   r   r   r   __hash__"  s    zTestCase.__hash__c             C   s   d| j t| jf S )Nz%s (%s))r   r   r   )r   r   r   r   __str__%  s    zTestCase.__str__c             C   s   dt | j| jf S )Nz<%s testMethod=%s>)r   r   r   )r   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   )rw   rY   rZ   RuntimeWarning
addSuccess)r   r   r!   r+   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 d Q R X | j js| j j	}|d k	r|j
rtn| j jrtW d || _X d S )NT)r"   )r   r   r   r   params	new_child_SubTestr$   r   r   Zfailfastr   r   )r   rD   r   parentZ
params_mapr   r   r   r   subTest5  s$    
zTestCase.subTestc             C   sd   x^|D ]V\}}t |tr*||j|| q|d k	rt|d | jrP||| q||| qW d S )Nr   )r-   r   r   r!   r@   rE   
addFailureZaddError)r   r   r   testr    r   r   r   _feedErrorsToResultT  s    
zTestCase._feedErrorsToResultc             C   sD   y
|j }W n* tk
r4   tdt ||  Y nX || | d S )Nz@TestResult has no addExpectedFailure method, reporting as passes)addExpectedFailurer_   rY   rZ   r   r   )r   r   r    r   r   r   r   _addExpectedFailure^  s    
zTestCase._addExpectedFailurec             C   sh   y
|j }W nP tk
rZ   tdt y
td W n$ tk
rT   || t  Y nX Y n
X ||  d S )NzCTestResult has no addUnexpectedSuccess method, reporting as failure)	addUnexpectedSuccessr_   rY   rZ   r   r   r   r   r    )r   r   r   r   r   r   _addUnexpectedSuccessh  s    

zTestCase._addUnexpectedSuccessNc          
   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 d ||  X d S t|dd}t| dd}|p|}t|}	z|	| _|		|  | 
  W d Q R X |	jr<||	_|	j	| dd |  W d Q R X d|	_|		|  |   W d Q R X |   x"|	jD ]\}
}| ||
| qLW | ||	j |	jr|r|	jr| ||	j n
| | n
||  |S ||  |d krt|d	d }|d k	r|  |	j  d |	_d | _X d S )
NstartTestRunr1   Fr2    r9   T)r"   stopTestRun)r   rw   Z	startTestr   r   r   ZstopTestr   r   r$   r   r   r   r   
doCleanupsr   r   r   r   r   r   r   clear)r   r   Zorig_resultr   r   Zskip_whyZexpecting_failure_methodZexpecting_failure_classr   outcomer   r+   r   r   r   r   runw  sh    





zTestCase.runc          	   C   sN   | j p
t }x:| jrF| j \}}}||  ||| W d Q R X qW |jS )N)r   r   r   r\   r$   r   )r   r   r   r)   r*   r   r   r   r     s    zTestCase.doCleanupsc             O   s   | j ||S )N)r   )r   r)   kwdsr   r   r   __call__  s    zTestCase.__call__c             C   sJ   |    t| | j  |   x&| jrD| jd\}}}||| q W d S )N)r   rw   r   r   r   r\   )r   r   r)   r*   r   r   r   debug  s    zTestCase.debugc             C   s   t |d S )N)r	   )r   r+   r   r   r   skipTest  s    zTestCase.skipTestc             C   s   |  |d S )N)rE   )r   rD   r   r   r   fail  s    zTestCase.failc             C   s&   |r"|  |dt| }| |d S )Nz%s is not false)rC   r   rE   )r   exprrD   r   r   r   assertFalse  s    zTestCase.assertFalsec             C   s&   |s"|  |dt| }| |d S )Nz%s is not true)rC   r   rE   )r   r   rD   r   r   r   
assertTrue  s    zTestCase.assertTruec             C   sP   | j s|p|S |d kr|S yd||f S  tk
rJ   dt|t|f S X d S )Nz%s : %s)longMessageUnicodeDecodeErrorr   )r   rD   rF   r   r   r   rC     s    
zTestCase._formatMessagec             O   s$   t || }z|d||S d }X d S )NassertRaises)rb   ra   )r   expected_exceptionr)   r*   contextr   r   r   r     s    
zTestCase.assertRaisesc             O   s   t || }|d||S )NassertWarns)rp   ra   )r   expected_warningr)   r*   r   r   r   r   r     s    
zTestCase.assertWarnsc             C   s   t | ||S )N)r   )r   r   r   r   r   r   
assertLogs>  s    zTestCase.assertLogsc             C   sF   t |t |kr@| jt |}|d k	r@t|tr<t| |}|S | jS )N)r.   r   r   r-   r   rw   _baseAssertEqual)r   firstsecondZasserterr   r   r   _getAssertEqualityFuncT  s    

zTestCase._getAssertEqualityFuncc             C   s0   ||ks,dt || }| ||}| |d S )Nz%s != %s)r   rC   rE   )r   r   r   rD   rF   r   r   r   r   n  s    zTestCase._baseAssertEqualc             C   s   |  ||}||||d d S )N)rD   )r   )r   r   r   rD   Zassertion_funcr   r   r   assertEqualu  s    zTestCase.assertEqualc             C   s2   ||ks.|  |dt|t|f }| |d S )Nz%s == %s)rC   r   rE   )r   r   r   rD   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 )Nz specify delta or places not bothz(%s != %s within %s delta (%s difference)   r   z)%s != %s within %r places (%s difference))rW   absr   roundrC   rE   )r   r   r   placesrD   deltadiffrF   r   r   r   assertAlmostEqual  s0    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 )Nz specify delta or places not bothz(%s == %s within %s delta (%s difference)r   r   z%s == %s within %r places)rW   r   r   r   rC   rE   )r   r   r   r   rD   r   r   rF   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 }yt|}W n  ttfk
r   d| }Y nX |d kryt|}W n  ttfk
r   d| }Y nX |d kr||krd S d| ft||  }xt	t
||D ]}	y||	 }
W n. tttfk
r8   |d|	|f 7 }P Y nX y||	 }W n. tttfk
rt   |d|	|f 7 }P Y nX |
|kr|d	|	ft|
|  7 }P qW ||kr|d krt|t|krd S ||kr0|d
||| f 7 }y|d|t|| f 7 }W n, tttfk
r,   |d||f 7 }Y nX nh||k r|d||| f 7 }y|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-   rE   r   r   rW   NotImplementedError
capitalizer   rangemin
IndexErrorr.   joindifflibndiffpprintpformat
splitlines_truncateMessagerC   r   )r   Zseq1Zseq2rD   seq_typeZseq_type_nameZ	differingZlen1Zlen2iZitem1Zitem2rF   diffMsgr   r   r   assertSequenceEqual  s    




zTestCase.assertSequenceEqualc             C   s2   | j }|d kst||kr"|| S |tt|  S )N)maxDiffr   DIFF_OMITTED)r   r|   r   Zmax_diffr   r   r   r  8  s    zTestCase._truncateMessagec             C   s   | j |||td d S )N)r  )r  rt   )r   Zlist1Zlist2rD   r   r   r   r   >  s    
zTestCase.assertListEqualc             C   s   | j |||td d S )N)r  )r  r>   )r   Ztuple1Ztuple2rD   r   r   r   r   J  s    	zTestCase.assertTupleEqualc       
   
   C   sh  y| |}W n^ tk
r> } z| d|  W d d }~X Y n0 tk
rl } z| d|  W d d }~X Y nX y| |}W n^ tk
r } z| d|  W d d }~X Y n0 tk
r } z| d|  W d d }~X Y nX |s|sd S g }|r|d x|D ]}|t| qW |rH|d x|D ]}|t| q0W 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   )
differencerW   r   r_   r   reprr  rC   )
r   Zset1Zset2rD   Zdifference1r#   Zdifference2linesitemrF   r   r   r   r   U  s2      




zTestCase.assertSetEqualc             C   s2   ||kr.dt |t |f }| | || d S )Nz%s not found in %s)r   r   rC   )r   member	containerrD   rF   r   r   r   assertIn  s    zTestCase.assertInc             C   s2   ||kr.dt |t |f }| | || d S )Nz%s unexpectedly found in %s)r   r   rC   )r   r  r  rD   rF   r   r   r   assertNotIn  s    zTestCase.assertNotInc             C   s2   ||k	r.dt |t |f }| | || d S )Nz%s is not %s)r   r   rC   )r   expr1expr2rD   rF   r   r   r   assertIs  s    zTestCase.assertIsc             C   s,   ||kr(dt |f }| | || d S )Nzunexpectedly identical: %s)r   r   rC   )r   r  r  rD   rF   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 dictionaryz%s != %sr   )assertIsInstancer   r   r  r	  r
  r  r  r  r  r   rC   )r   Zd1Zd2rD   rF   r   r   r   r   r     s    
zTestCase.assertDictEqualc       	   	   C   s   t dt g }g }xX| D ]L\}}||kr:|| q||| kr|dt|t|t|| f  qW |sz|szd S d}|rdddd |D  }|r|r|d7 }|d	d| 7 }| | || d S )
Nz&assertDictContainsSubset is deprecatedz%s, expected: %s, actual: %sr   zMissing: %s,c             s   s   | ]}t |V  qd S )N)r   )r;   r   r   r   r   r=     s    z4TestCase.assertDictContainsSubset.<locals>.<genexpr>z; zMismatched values: %s)	rY   rZ   r[   itemsr   r   r  r   rC   )	r   ZsubsetZ
dictionaryrD   missingZ
mismatchedkeyvaluerF   r   r   r   assertDictContainsSubset  s,    z!TestCase.assertDictContainsSubsetc       
      C   s   t |t | }}y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   )r;   r   r   r   r   
<listcomp>  s    z-TestCase.assertCountEqual.<locals>.<listcomp>r   )
rt   collectionsCounterrW   r   r   r  r  rC   r   )
r   r   r   rD   Z	first_seqZ
second_seqZdifferencesrF   r  r  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   z%s != %sr   )r!  r   r   _diffThresholdr   r  r   r   r  r	  r
  r  r   rC   )r   r   r   rD   Z
firstlinesZsecondlinesrF   r   r   r   r   r     s    

zTestCase.assertMultiLineEqualc             C   s2   ||k s.dt |t |f }| | || d S )Nz%s not less than %s)r   r   rC   )r   abrD   rF   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 %s)r   r   rC   )r   r.  r/  rD   rF   r   r   r   assertLessEqual  s    zTestCase.assertLessEqualc             C   s2   ||ks.dt |t |f }| | || d S )Nz%s not greater than %s)r   r   rC   )r   r.  r/  rD   rF   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 %s)r   r   rC   )r   r.  r/  rD   rF   r   r   r   assertGreaterEqual  s    zTestCase.assertGreaterEqualc             C   s,   |d k	r(dt |f }| | || d S )Nz%s is not None)r   r   rC   )r   r'   rD   rF   r   r   r   assertIsNone  s    zTestCase.assertIsNonec             C   s"   |d krd}|  | || d S )Nzunexpectedly None)r   rC   )r   r'   rD   rF   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   rC   )r   r'   r   rD   rF   r   r   r   r!    s    
zTestCase.assertIsInstancec             C   s0   t ||r,dt||f }| | || d S )Nz%s is an instance of %r)r-   r   r   rC   )r   r'   r   rD   rF   r   r   r   assertNotIsInstance$  s    
zTestCase.assertNotIsInstancec             O   s   t || |}|d||S )NassertRaisesRegex)rb   ra   )r   r   rS   r)   r*   r   r   r   r   r7  *  s    zTestCase.assertRaisesRegexc             O   s   t || |}|d||S )NassertWarnsRegex)rp   ra   )r   r   rS   r)   r*   r   r   r   r   r8  :  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   bytesrQ   rR   rh   ri   rC   rE   )r   textrS   rD   rF   r   r   r   assertRegexM  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   r9  rQ   rR   rh   startendri   rC   rE   )r   r:  Zunexpected_regexrD   matchrF   r   r   r   assertNotRegexY  s    

zTestCase.assertNotRegexc                s    fdd}|S )Nc                 s    t d jtd  | |S )NzPlease use {0} instead.r   )rY   rZ   rd   r
   r[   )r)   r*   )original_funcr   r   deprecated_funci  s    
z,TestCase._deprecate.<locals>.deprecated_funcr   )r@  rA  r   )r@  r   
_deprecateh  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)\r
   r   r   AssertionErrorrE   r   r  r-  Z_classSetupFailedr   r   r   r   r   classmethodr   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   rC   r   r   r   r   r   r   r   r  r  r  r  r   r   r   r  r  r  r   r   r'  r+  r   r0  r1  r2  r3  r4  r5  r!  r6  r7  r8  r;  r?  rB  ZfailUnlessEqualZassertEqualsZfailIfEqualZassertNotEqualsZfailUnlessAlmostEqualZassertAlmostEqualsZfailIfAlmostEqualZassertNotAlmostEqualsZ
failUnlessZassert_ZfailUnlessRaisesZfailIfZassertRaisesRegexpZassertRegexpMatchesZassertNotRegexpMatchesr   r   r   r   r     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 )N)superrF  r   
_setUpFunc_tearDownFunc	_testFunc_description)r   ZtestFuncr   r   description)r   r   r   r     s
    zFunctionTestCase.__init__c             C   s   | j d k	r|    d S )N)rH  )r   r   r   r   r     s    
zFunctionTestCase.setUpc             C   s   | j d k	r|    d S )N)rI  )r   r   r   r   r     s    
zFunctionTestCase.tearDownc             C   s   |    d S )N)rJ  )r   r   r   r   r     s    zFunctionTestCase.runTestc             C   s   | j jS )N)rJ  r
   )r   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 )N)r-   r   r   rH  rI  rJ  rK  )r   r   r   r   r   r     s    zFunctionTestCase.__eq__c             C   s   t t| | j| j| j| jfS )N)r   r.   rH  rI  rJ  rK  )r   r   r   r   r     s    zFunctionTestCase.__hash__c             C   s   dt | j| jjf S )Nz%s (%s))r   r   rJ  r
   )r   r   r   r   r     s    
zFunctionTestCase.__str__c             C   s   dt | j| jf S )Nz<%s tec=%s>)r   r   rJ  )r   r   r   r   r     s    
zFunctionTestCase.__repr__c             C   s2   | j d k	r| j S | jj}|r.|dd  p0d S )Nr   r   )rK  rJ  r   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   )r   r   rF  ~  s   		rF  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 )N)rG  r   _messager!   r   rE   )r   r!   r|   r   )r   r   r   r     s
    
z_SubTest.__init__c             C   s   t dd S )Nzsubtests cannot be run directly)r  )r   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)rd   )r;   r   r{   r   r   r   r=     s   z+_SubTest._subDescription.<locals>.<genexpr>z({}) z(<subtest>))rN  rE  r   rd   r   r  r#  )r   partsZparams_descr   r   r   _subDescription  s    
z_SubTest._subDescriptionc             C   s   d | j |  S )Nz{} {})rd   r!   r   rQ  )r   r   r   r   r     s    z_SubTest.idc             C   s
   | j  S )N)r!   r   )r   r   r   r   r     s    z_SubTest.shortDescriptionc             C   s   d | j|  S )Nz{} {})rd   r!   rQ  )r   r   r   r   r     s    z_SubTest.__str__)
r
   r   r   r   r   rQ  r   r   r   rM  r   r   )r   r   r     s   r   )2r   r/   r	  rI   r   r  rQ   rY   r)  r%   re   r   r   utilr   r   r   r   r   Z
__unittestobjectrE  r  rL   r	   r   r   r   r(   r5   r7   r8   r   r:   rB   rK   rO   rP   rb   rp   
namedtupler   r   r   r   ChainMapr   r   rF  r   r   r   r   r   <module>   s^   (/%5
,
        :