B
    18\h                 @   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
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!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 d,d- d-eZ,G d.d/ d/e,Z-G d0d1 d1e,Z.dS )2    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   Q/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/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   testPartExecutor6   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   _idT   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   skipW   s    
r5   c             C   s   | rt |S tS )N)r5   r(   )	conditionr+   r   r   r   skipIfg   s    r7   c             C   s   | st |S tS )N)r5   r(   )r6   r+   r   r   r   
skipUnlesso   s    r8   c             C   s
   d| _ | S )NT)__unittest_expecting_failure__)r3   r   r   r   r   w   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               @   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!   rK   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
   rL   AttributeErrorr   )r   namer)   r*   Zcallable_objr   r   r   handle   s.    z_AssertRaisesBaseContext.handle)N)r
   r   r   r   rY   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 )_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
   rW   r   rL   rG   format	tracebackclear_framesr@   with_traceback	exceptionrK   searchpattern)r   exc_type	exc_valuetbexc_namerK   r   r   r   __exit__   s(    


z_AssertRaisesContext.__exit__N)r
   r   r   BaseExceptionrN   rP   r[   rg   r   r   r   r   rZ      s   rZ   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   x$t j D ]}t|dd ri |_qW tjdd| _| j | _t	d| j
 | S )N__warningregistry__T)recordalways)r   modulesvaluesgetattrrj   rQ   catch_warningswarnings_managerr[   simplefilterrA   )r   vr   r   r   r[      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)rq   rg   rA   r
   rW   r   rQ   messager-   rK   ra   warningfilenamelinenorG   r\   rb   rL   )r   rc   rd   re   rf   Zfirst_matchingmwr   r   r   rg      s8    

z_AssertWarnsContext.__exit__N)r
   r   r   WarningrN   rP   r[   rg   r   r   r   r   ri      s   ri   _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     s    z_CapturingHandler.__init__c             C   s   d S )Nr   )r   r   r   r   flush  s    z_CapturingHandler.flushc             C   s*   | j j| | |}| j j| d S )N)r   r|   r   r\   r}   )r   rk   rD   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 )N)	rB   r   logger_namer   _nameToLevelgetlevelINFOrD   )r   r!   r   r   r   r   r   r   .  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   Loggerlogger	getLogger	FormatterLOGGING_FORMATr~   setFormatterr   handlersold_handlersr   	old_level	propagateold_propagatesetLevel)r   r   	formatterhandlerr   r   r   r[   7  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   r\   r   getLevelNamer   rX   )r   rc   rd   re   r   r   r   rg   H  s    

z_AssertLogsContext.__exit__N)r
   r   r   r   r   r[   rg   r   r   r   r   r   )  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__V  s    

z_OrderedChainMap.__iter__N)r
   r   r   r   r   r   r   r   r   U  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_testMethodDocro   rW   
ValueError	__class____doc__	_cleanups_subtest_type_equality_funcsaddTypeEqualityFuncdictlistr>   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   s   | j |||f d S )N)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   
TestResult)r   r   r   r   defaultTestResult  s    zTestCase.defaultTestResultc             C   s    | j }|r|dd  pd S )N
r   )r   splitstrip)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 reported   )ro   rQ   rR   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   failfastr   r   )r   rD   r   parentZ
params_mapr   r   r   r   subTest  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   
addFailureaddError)r   r   r   testr    r   r   r   _feedErrorsToResult!  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)addExpectedFailurerW   rQ   rR   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)	addUnexpectedSuccessrW   rQ   rR   r   r   r   r   r    )r   r   r   r   r   r   _addUnexpectedSuccess5  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   ro   	startTestr   r   r   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   runD  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   rT   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   ro   r   r   r   rT   )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)rZ   rY   )r   expected_exceptionr)   r*   contextr   r   r   r     s    
zTestCase.assertRaisesc             O   s   t || }|d||S )NassertWarns)ri   rY   )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   ro   _baseAssertEqual)r   firstsecondZasserterr   r   r   _getAssertEqualityFunc!  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   ;  s    zTestCase._baseAssertEqualc             C   s   |  ||}||||d d S )N)rD   )r   )r   r   r   rD   Zassertion_funcr   r   r   assertEqualB  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   assertNotEqualI  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))rO   absr   roundrC   rE   )r   r   r   placesrD   deltadiffrF   r   r   r   assertAlmostEqualR  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)rO   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   rO   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   rt   r  Zmax_diffr   r   r   r    s    zTestCase._truncateMessagec             C   s   | j |||td d S )N)r  )r  r   )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     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   )
differencerO   r   rW   r   reprr  rC   )
r   Zset1Zset2rD   Zdifference1r#   Zdifference2linesitemrF   r   r   r   r   "  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   assertInM  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   assertNotInT  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   assertIsNotb  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   h  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;   rx   r   r   r   r=     s    z4TestCase.assertDictContainsSubset.<locals>.<genexpr>z; zMismatched values: %s)	rQ   rR   rS   itemsr   r   r  r   rC   )	r   ZsubsetZ
dictionaryrD   missingZ
mismatchedkeyvaluerF   r   r   r   assertDictContainsSubsett  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   )
r   collectionsCounterrO   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   r4  r5  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   r4  r5  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   r4  r5  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)rZ   rY   )r   r   rK   r)   r*   r   r   r   r   r=    s    zTestCase.assertRaisesRegexc             O   s   t || |}|d||S )NassertWarnsRegex)ri   rY   )r   r   rK   r)   r*   r   r   r   r   r>    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   bytesrI   rJ   ra   rb   rC   rE   )r   textrK   rD   rF   r   r   r   assertRegex  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?  rI   rJ   ra   startendrb   rC   rE   )r   r@  Zunexpected_regexrD   matchrF   r   r   r   assertNotRegex&  s    

zTestCase.assertNotRegexc                s    fdd}|S )Nc                 s    t d jtd  | |S )NzPlease use {0} instead.r   )rQ   rR   r\   r
   rS   )r)   r*   )original_funcr   r   deprecated_func6  s    
z,TestCase._deprecate.<locals>.deprecated_funcr   )rF  rG  r   )rF  r   
_deprecate5  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  r3  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-  r1  r   r6  r7  r8  r9  r:  r;  r'  r<  r=  r>  rA  rE  rH  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)superrL  r   
_setUpFunc_tearDownFunc	_testFunc_description)r   ZtestFuncr   r   description)r   r   r   r   T  s
    zFunctionTestCase.__init__c             C   s   | j d k	r|    d S )N)rN  )r   r   r   r   r   [  s    
zFunctionTestCase.setUpc             C   s   | j d k	r|    d S )N)rO  )r   r   r   r   r   _  s    
zFunctionTestCase.tearDownc             C   s   |    d S )N)rP  )r   r   r   r   r   c  s    zFunctionTestCase.runTestc             C   s   | j jS )N)rP  r
   )r   r   r   r   r   f  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   rN  rO  rP  rQ  )r   r   r   r   r   r   i  s    zFunctionTestCase.__eq__c             C   s   t t| | j| j| j| jfS )N)r   r.   rN  rO  rP  rQ  )r   r   r   r   r   r  s    zFunctionTestCase.__hash__c             C   s   dt | j| jjf S )Nz%s (%s))r   r   rP  r
   )r   r   r   r   r   v  s    
zFunctionTestCase.__str__c             C   s   dt | j| jf S )Nz<%s tec=%s>)r   r   rP  )r   r   r   r   r   z  s    
zFunctionTestCase.__repr__c             C   s2   | j d k	r| j S | jj}|r.|dd  p0d S )Nr   r   )rQ  rP  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   rL  K  s   		rL  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)rM  r   _messager!   r   rE   )r   r!   rt   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)r\   )r;   r   rs   r   r   r   r=     s   z+_SubTest._subDescription.<locals>.<genexpr>z({}) z(<subtest>))rT  rK  r   r\   r   r  r)  )r   partsZparams_descr   r   r   _subDescription  s    
z_SubTest._subDescriptionc             C   s   d | j |  S )Nz{} {})r\   r!   r   rW  )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{} {})r\   r!   rW  )r   r   r   r   r     s    z_SubTest.__str__)
r
   r   r   r   r   rW  r   r   r   rS  r   r   )r   r   r     s   r   )/r   r/   r  r   r  rI   rQ   r/  r%   r]   r   r   utilr   r   r   r   r   
__unittestobjectrK  r  	Exceptionr	   r   r   r   r(   r5   r7   r8   r   r:   rB   rH   rZ   ri   
namedtupler{   r   r~   r   ChainMapr   r   rL  r   r   r   r   r   <module>   sV   (	/%5
,
       s: