o
    JAf                     @   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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'G d'd( d(ej(Z)G d)d* d*eZ*G d+d, d,e*Z+G d-d. d.e*Z,dS )/    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                   @      e Zd ZdS )SkipTestN__name__
__module____qualname__ r   r   $/usr/lib/python3.10/unittest/case.pyr
          r
   c                   @   r	   )_ShouldStopNr   r   r   r   r   r   !   r   r   c                   @   r	   )_UnexpectedSuccessNr   r   r   r   r   r   &   r   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| _ zgzd V  W nJ ty     ty3 } zd| _ | j|t|f W Y d }~n7d }~w ty;   Y n+   t }| j	rI|| _
nd| _ | j||f d }Y n| jrf| j rf| j|d f W | j ok|| _ d S | j os|| _ w )NTF)r   KeyboardInterruptr
   r   appendstrr   sysexc_infor   r   r   r   )r   	test_caseisTestZold_successer#   r   r   r   testPartExecutor6   s0   
 z_Outcome.testPartExecutorN)F)r   r   r   r   
contextlibcontextmanagerr'   r   r   r   r   r   ,   s    
	r   c                 C      | S r(   r   )objr   r   r   _idT      r-   c                O   s   	 t | ||f d S r(   )_module_cleanupsr    )functionargskwargsr   r   r   addModuleCleanupY   s   r3   c               
   C   sn   	 g } t r/t  \}}}z	||i | W n ty, } z| | W Y d }~nd }~ww t s| r5| d d S Nr   )r/   pop	Exceptionr    )
exceptionsr0   r1   r2   excr   r   r   doModuleCleanups_   s   r9   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  r(   r
   r1   r2   reasonr   r   skip_wrapperu   s   z-skip.<locals>.decorator.<locals>.skip_wrapperT)
isinstancetype	functoolswraps__unittest_skip____unittest_skip_why__)	test_itemr>   r<   r   r   	decorators   s   
zskip.<locals>.decorator )r?   typesFunctionType)r=   rF   rE   r   r<   r   skipo   s   
rJ   c                 C   s   	 | rt |S tS r(   rJ   r-   Z	conditionr=   r   r   r   skipIf      rM   c                 C   s   	 | st |S tS r(   rK   rL   r   r   r   
skipUnless   rN   rO   c                 C   s
   d| _ | S )NT)__unittest_expecting_failure__)rE   r   r   r   r      s   r   c                    s4   t | trt fdd| D S t | tot|  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)expectedrT   r   rS   r   rQ      s   
rQ   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         
z_BaseTestCaseContext.__init__c                 C   s   | j | j|}| j |r(   )r$   _formatMessagemsgfailureException)r   standardMsgr]   r   r   r   _raiseFailure   s   z"_BaseTestCaseContext._raiseFailureN)r   r   r   r   r`   r   r   r   r   rZ      s    rZ   c                   @   s   e Zd ZdddZdd ZdS )_AssertRaisesBaseContextNc                 C   s@   t | | || _|| _|d urt|}|| _d | _d | _d S r(   )	rZ   r   rY   r$   recompileexpected_regexobj_namer]   )r   rY   r$   rd   r   r   r   r      s   

z!_AssertRaisesBaseContext.__init__c                 C   s   	 zgt | j| jstd|| jf |s-|dd | _|r(tdtt|f | W d } S |^}}z|j	| _
W n tyE   t|| _
Y nw |  ||i | W d    n1 sZw   Y  W d } d S W d } d S d } w )Nz%s() arg 1 must be %sr]   z3%r is an invalid keyword argument for this function)rQ   rY   
_base_type	TypeError_base_type_strr5   r]   nextiterr   re   AttributeErrorr!   )r   namer1   r2   Zcallable_objr   r   r   handle   s4   z_AssertRaisesBaseContext.handler(   )r   r   r   r   rm   r   r   r   r   ra      s    

ra   c                   @   s0   e Zd Z	 eZdZdd Zdd Zee	j
ZdS )_AssertRaisesContextz-an exception type or tuple of exception typesc                 C   r+   r(   r   r   r   r   r   	__enter__   r.   z_AssertRaisesContext.__enter__c                 C   s   |d u r0z| j j}W n ty   t| j }Y nw | jr'| d|| j n| d| nt| t	|| j s=dS |
d | _| jd u rJdS | j}|t|s`| d|jt| dS )Nz{} not raised by {}z{} not raisedFT"{}" does not match "{}")rY   r   rk   r!   re   r`   format	tracebackclear_framesrX   with_traceback	exceptionrd   searchpattern)r   exc_type	exc_valuetbexc_namerd   r   r   r   __exit__   s.   



z_AssertRaisesContext.__exit__N)r   r   r   BaseExceptionrf   rh   rp   r}   classmethodrH   GenericAlias__class_getitem__r   r   r   r   rn      s    rn   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getattrr   warningscatch_warningswarnings_managerrp   simplefilterrY   )r   vr   r   r   rp      s   z_AssertWarnsContext.__enter__c                 C   s   | j ||| |d urd S z| jj}W n ty"   t| j}Y nw d }| jD ]-}|j}t|| js4q(|d u r:|}| j	d urH| j	
t|sHq(|| _|j| _|j| _ d S |d urg| d| j	jt| | jrv| d|| j d S | d| d S )Nrq   z{} not triggered by {}z{} not triggered)r   r}   rY   r   rk   r!   r   messager?   rd   rw   warningfilenamelinenor`   rr   rx   re   )r   ry   rz   r{   r|   Zfirst_matchingmwr   r   r   r}     s@   



z_AssertWarnsContext.__exit__N)r   r   r   Warningrf   rh   rp   r}   r   r   r   r   r      s    r   c                   @   s   e Zd Zdd ZdS )_OrderedChainMapc                 c   s:    t  }| jD ]}|D ]}||vr|| |V  qqd S r(   )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g Z	dddZ
dd	 Zd
d Z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.d/ Z"d0d1 Z#d2d3 Z$d4d5 Z%d6d7 Z&dd9d:Z'd;d< Z(ed=d> Z)d?d@ Z*dAdB Z+dCdD Z,ddEdFZ-ddGdHZ.ddIdJZ/dKdL Z0dMdN Z1dOdP Z2ddQdRZ3ddSdTZ4dUdV Z5ddWdXZ6ddYdZZ7dd[d\Z8	8	8dd]d^Z9	8	8dd_d`Z:ddadbZ;dcdd Z<ddedfZ=ddgdhZ>ddidjZ?ddkdlZ@ddmdnZAddodpZBddqdrZCddsdtZDddudvZEddwdxZFddydzZGdd{d|ZHdd}d~ZIdddZJdddZKdddZLdddZMdddZNdddZOdd ZPdd ZQdddZRdddZSdd ZTeTe7 ZUZVeTe8 ZWZXeTe9 ZYZZeTe: Z[Z\eTe/ Z]Z^eTe1Z_eTe.Z`eTePZaeTeRZbeTeSZcd8S )TestCaseTi  i   FrunTestc                 C   s   	 || _ d | _d| _zt| |}W n ty'   |dkr%td| j|f Y nw |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   rk   
ValueError	__class____doc__	_cleanups_subtest_type_equality_funcsaddTypeEqualityFuncdictr   rV   r   	frozensetr!   )r   Z
methodName
testMethodr   r   r   r   e  s.   zTestCase.__init__c                 C   s   	 || j |< d S r(   )r   )r   Ztypeobjr0   r   r   r   r     s   zTestCase.addTypeEqualityFuncc                O      	 | j |||f d S r(   )r   r    r   r0   r1   r2   r   r   r   
addCleanup  s   zTestCase.addCleanupc                O   r   r(   )_class_cleanupsr    clsr0   r1   r2   r   r   r   addClassCleanup  s   zTestCase.addClassCleanupc                 C      	 d S r(   r   ro   r   r   r   setUp     zTestCase.setUpc                 C   r   r(   r   ro   r   r   r   tearDown  r   zTestCase.tearDownc                 C      d S r(   r   r   r   r   r   
setUpClass     zTestCase.setUpClassc                 C   r   r(   r   r   r   r   r   tearDownClass  r   zTestCase.tearDownClassc                 C   s   dS )Nr   r   ro   r   r   r   countTestCases  r.   zTestCase.countTestCasesc                 C   s   t  S r(   )r   Z
TestResultro   r   r   r   defaultTestResult     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      dt | j| jf S )Nz%s.%sr   r   r   ro   r   r   r   id     zTestCase.idc                 C   s    t | t |u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   ro   r   r   r   __hash__     zTestCase.__hash__c                 C   s   d| j t| jf S Nz%s (%s))r   r   r   ro   r   r   r   __str__  r   zTestCase.__str__c                 C   r   )Nz<%s testMethod=%s>r   ro   r   r   r   __repr__  s   zTestCase.__repr__c                 C   s>   t |dd }|d ur||| d S tdtd || d S )NaddSkipz4TestResult has no addSkip method, skips not reported   )r   r   warnRuntimeWarning
addSuccess)r   r   r$   r=   r   r   r   r   _addSkip  s   zTestCase._addSkipc                 k   s    	 | j d u s| j jsd V  d S | j}|d u rt|}n|j|}t| ||| _z@| j j| jdd d V  W d    n1 sAw   Y  | j jsX| j j	}|d urW|j
rWtn| j jr^tW || _d S W || _d S || _w )NTr%   )r   r   r   r   params	new_child_SubTestr'   r   r   Zfailfastr   r   )r   r]   r   parentZ
params_mapr   r   r   r   subTest  s2   

 zTestCase.subTestc                 C   s`   |D ]+\}}t |tr||j|| q|d ur-t|d | jr'||| q||| qd S r4   )r?   r   r   r$   rX   r^   
addFailureZaddError)r   r   r   testr#   r   r   r   _feedErrorsToResult  s   
zTestCase._feedErrorsToResultc                 C   sD   z|j }W n ty   tdt ||  Y d S w || | d S )Nz@TestResult has no addExpectedFailure method, reporting as passes)addExpectedFailurerk   r   r   r   r   )r   r   r#   r   r   r   r   _addExpectedFailure  s   
zTestCase._addExpectedFailurec                 C   s`   z|j }W n$ ty)   tdt ztd  ty(   || t  Y Y d S w w ||  d S )NzCTestResult has no addUnexpectedSuccess method, reporting as failure)	addUnexpectedSuccessrk   r   r   r   r   r   r"   r#   )r   r   r   r   r   r   _addUnexpectedSuccess  s   

zTestCase._addUnexpectedSuccessc                 C      |    d S r(   )r   ro   r   r   r   
_callSetUp!     zTestCase._callSetUpc                 C   s
   |  d S r(   r   )r   methodr   r   r   _callTestMethod$  r[   zTestCase._callTestMethodc                 C   r   r(   )r   ro   r   r   r   _callTearDown'  r   zTestCase._callTearDownc                O   s   ||i | d S r(   r   r   r   r   r   _callCleanup*  r   zTestCase._callCleanupNc           
   	   C   sh  |d u r|   }t|dd }t|dd }|d ur|  nd }||  z t| | j}t| jdds8t|ddr\t| jddpDt|dd}| || | |W ||  |d ur[|  S S t| ddpgt|dd}t|}z|| _|	|  | 
  W d    n1 sw   Y  |jr||_|j	| dd	 | | W d    n1 sw   Y  d|_|	|  |   W d    n1 sw   Y  |   |jD ]\}}	| |||	 q| ||j |jr|r|jr| ||j n| | n||  |W |j  d |_d | _W ||  |d ur|  S S |j  d |_d | _w ||  |d ur3|  w w )
NstartTestRunstopTestRunrC   FrD   rG   rP   Tr   )r   r   Z	startTestr   r   r   ZstopTestr   r   r'   r   r   r   r   r   
doCleanupsr   r   r   r   r   r   r   clear)
r   r   r   r   r   skip_whyr   outcomer   r=   r   r   r   run-  s   



,









zTestCase.runc                 C   sr   	 | j pt }| jr6| j \}}}||  | j|g|R i | W d    n1 s.w   Y  | js
|jS r(   )r   r   r   r5   r'   r   r   )r   r   r0   r1   r2   r   r   r   r   p  s   zTestCase.doCleanupsc                 C   sb   	 g | _ | jr/| j \}}}z	||i | W n ty)   | j t  Y nw | jsd S d S r(   )ZtearDown_exceptionsr   r5   r6   r    r"   r#   r   r   r   r   doClassCleanups}  s   zTestCase.doClassCleanupsc                 O   s   | j |i |S r(   )r   )r   r1   kwdsr   r   r   __call__  s   zTestCase.__call__c                 C   s   	 t | | j}t | jddst |ddr%t | jddp t |dd}t||   | | |   | jrN| j \}}}| j	|g|R i | | js5d S d S )NrC   FrD   rG   )
r   r   r   r
   r   r   r   r   r5   r   )r   r   r   r0   r1   r2   r   r   r   debug  s    


zTestCase.debugc                 C   s
   	 t |r(   r:   )r   r=   r   r   r   skipTest  s   zTestCase.skipTestc                 C   s   	 |  |r(   )r^   )r   r]   r   r   r   fail  s   
zTestCase.failc                 C   s(   	 |r|  |dt| }| |d S )Nz%s is not falser\   r   r^   r   exprr]   r   r   r   assertFalse  
   
zTestCase.assertFalsec                 C   s(   	 |s|  |dt| }| |d S )Nz%s is not truer  r  r   r   r   
assertTrue  r  zTestCase.assertTruec                 C   sR   	 | j s|p|S |d u r|S zd||f W S  ty(   dt|t|f  Y S w )Nz%s : %s)longMessageUnicodeDecodeErrorr   )r   r]   r_   r   r   r   r\     s   	zTestCase._formatMessagec                 O   s(   	 t || }z
|d||W d }S d }w )NassertRaisesrn   rm   )r   expected_exceptionr1   r2   contextr   r   r   r	    s
   
zTestCase.assertRaisesc                 O   s   	 t || }|d||S )NassertWarnsr   rm   )r   expected_warningr1   r2   r  r   r   r   r    s   
zTestCase.assertWarnsc                 C      	 ddl m} || ||ddS )Nr   _AssertLogsContextFZno_logs_logr  r   loggerlevelr  r   r   r   
assertLogs  s   zTestCase.assertLogsc                 C   r  )Nr   r  Tr  r  r  r   r   r   assertNoLogs  s   zTestCase.assertNoLogsc                 C   sH   	 t |t |u r!| jt |}|d ur!t|trt| |}|S | jS r(   )r@   r   getr?   r!   r   _baseAssertEqual)r   firstsecondZasserterr   r   r   _getAssertEqualityFunc'  s   

zTestCase._getAssertEqualityFuncc                 C   s2   	 ||ksdt || }| ||}| |d S )N%s != %s)r   r\   r^   )r   r  r  r]   r_   r   r   r   r  A  s   
zTestCase._baseAssertEqualc                 C   s    	 |  ||}||||d d S )N)r]   )r  )r   r  r  r]   Zassertion_funcr   r   r   assertEqualH  s   zTestCase.assertEqualc                 C   s4   	 ||ks|  |dt|t|f }| |d S )Nz%s == %sr  )r   r  r  r]   r   r   r   assertNotEqualO  s   
zTestCase.assertNotEqualc                 C   s   	 ||krd S |d ur|d urt dt|| }|d ur4||kr#d S dt|t|t|t|f }n|d u r:d}t||dkrCd S dt|t||t|f }| ||}| |)N specify delta or places not bothz(%s != %s within %s delta (%s difference)   r   z)%s != %s within %r places (%s difference)rg   absr   roundr\   r^   r   r  r  Zplacesr]   Zdeltadiffr_   r   r   r   assertAlmostEqualX  s6   
zTestCase.assertAlmostEqualc                 C   s   	 |d ur|d urt dt|| }|d ur2||ks!||kr!d S dt|t|t|t|f }n|d u r8d}||ksEt||dkrEd S dt|t||f }| ||}| |)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 ur)|j }t||s| d|t|f t||s(| d|t|f nd}d }zt|}W n ttfyB   d| }Y nw |d u r]zt|}W n ttfy\   d| }Y nw |d u r@||krhd S d| ft||  }t	t
||D ]L}	z||	 }
W n tttfy   |d|	|f 7 }Y  nBw z||	 }W n tttfy   |d|	|f 7 }Y  n&w |
|kr|d	|	ft|
|  7 } nq{||kr|d u rt|t|krd S ||kr|d
||| f 7 }z|d|t|| f 7 }W nH tttfy   |d||f 7 }Y n4w ||k r@|d||| f 7 }z|d|t|| f 7 }W n tttfy?   |d||f 7 }Y nw |}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?   r^   r   lenrg   NotImplementedError
capitalizer   rangemin
IndexErrorr@   joindifflibndiffpprintpformat
splitlines_truncateMessager\   r   )r   Zseq1Zseq2r]   seq_typeZseq_type_nameZ	differingZlen1Zlen2iZitem1Zitem2r_   diffMsgr   r   r   assertSequenceEqual  s   












zTestCase.assertSequenceEqualc                 C   s2   | j }|d u st||kr|| S |tt|  S r(   )maxDiffr,  DIFF_OMITTED)r   r   r)  Zmax_diffr   r   r   r8    s   zTestCase._truncateMessagec                 C      	 | j |||td d S N)r9  )r<  r   )r   Zlist1Zlist2r]   r   r   r   r     s   	zTestCase.assertListEqualc                 C   r?  r@  )r<  rV   )r   Ztuple1Ztuple2r]   r   r   r   r     s   zTestCase.assertTupleEqualc           
   
   C   sb  	 z| |}W n1 ty! } z| d|  W Y d }~nd }~w ty9 } z| d|  W Y d }~nd }~ww z| |}W n1 tyZ } z| d|  W Y d }~nd }~w tyr } z| d|  W Y d }~nd }~ww |sy|syd S g }|r|d |D ]	}|t| q|r|d |D ]	}|t| qd|}	| | ||	 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   )
differencerg   r   rk   r    reprr2  r\   )
r   Zset1Zset2r]   Zdifference1r&   Zdifference2linesitemr_   r   r   r   r   (  s@   


zTestCase.assertSetEqualc                 C   s8   	 ||vrdt |t |f }| | || d S d S )Nz%s not found in %sr   r   r\   r   member	containerr]   r_   r   r   r   assertInS     zTestCase.assertInc                 C   s8   	 ||v rdt |t |f }| | || d S d S )Nz%s unexpectedly found in %srE  rF  r   r   r   assertNotInZ  rJ  zTestCase.assertNotInc                 C   s8   	 ||urdt |t |f }| | || d S d S )Nz%s is not %srE  r   Zexpr1Zexpr2r]   r_   r   r   r   assertIsa  rJ  zTestCase.assertIsc                 C   s2   	 ||u rdt |f }| | || d S d S )Nzunexpectedly identical: %srE  rL  r   r   r   assertIsNoth  
   zTestCase.assertIsNotc              	   C   s   |  |td |  |td ||kr?dt|| }ddtt| t|  }| 	||}| 
| || d S d S )Nz"First argument is not a dictionaryz#Second argument is not a dictionaryr   r   )assertIsInstancer   r   r2  r3  r4  r5  r6  r7  r8  r   r\   )r   Zd1Zd2r]   r_   r)  r   r   r   r   n  s   
zTestCase.assertDictEqualc           	   	   C   s   	 t jdtdd g }g }| D ]&\}}||vr|| q||| kr7|dt|t|t|| f  q|s>|s>d S d}|rNdddd	 |D  }|r_|rV|d
7 }|dd| 7 }| | || d S )Nz&assertDictContainsSubset is deprecatedr   )
stacklevelz%s, expected: %s, actual: %srG   zMissing: %s,c                 s   s    | ]}t |V  qd S r(   )r   )rR   r   r   r   r   rU     s    z4TestCase.assertDictContainsSubset.<locals>.<genexpr>z; zMismatched values: %s)	r   r   DeprecationWarningitemsr    r   r2  r   r\   )	r   ZsubsetZ
dictionaryr]   missingZ
mismatchedkeyvaluer_   r   r   r   assertDictContainsSubsetz  s:   

z!TestCase.assertDictContainsSubsetc           
      C   s   	 t |t |}}zt|}t|}W n ty$   t||}Y nw ||kr+d S t||}|rSd}dd |D }d|}	| ||	}| ||}| 	| d S d S )NzElement counts were not equal:
c                 S   s   g | ]}d | qS )z First has %d, Second has %d:  %rr   )rR   r)  r   r   r   
<listcomp>  s    z-TestCase.assertCountEqual.<locals>.<listcomp>r   )
r   collectionsCounterrg   r   r   r2  r8  r\   r   )
r   r  r  r]   Z	first_seqZ
second_seqZdifferencesr_   rC  r;  r   r   r   assertCountEqual  s&   


zTestCase.assertCountEqualc                 C   s   	 |  |td |  |td ||krnt|| jks!t|| jkr(| ||| |jdd}|jdd}t|dkrK|d|krK|d g}|d g}dt|| }dd	t	
|| }| ||}| | || d S d S )
NzFirst argument is not a stringzSecond argument is not a stringT)keependsr   z
r   r   rG   )rP  r!   r,  _diffThresholdr  r7  r   r   r2  r3  r4  r8  r   r\   )r   r  r  r]   Z
firstlinesZsecondlinesr_   r)  r   r   r   r     s"   

zTestCase.assertMultiLineEqualc                 C   s8   	 ||k sdt |t |f }| | || d S d S )Nz%s not less than %srE  r   abr]   r_   r   r   r   
assertLess  
   zTestCase.assertLessc                 C   s8   	 ||ksdt |t |f }| | || d S d S )Nz%s not less than or equal to %srE  r_  r   r   r   assertLessEqual  rc  zTestCase.assertLessEqualc                 C   s8   	 ||ksdt |t |f }| | || d S d S )Nz%s not greater than %srE  r_  r   r   r   assertGreater  rc  zTestCase.assertGreaterc                 C   s8   	 ||ksdt |t |f }| | || d S d S )Nz"%s not greater than or equal to %srE  r_  r   r   r   assertGreaterEqual  rc  zTestCase.assertGreaterEqualc                 C   s2   	 |d urdt |f }| | || d S d S )Nz%s is not NonerE  r   r,   r]   r_   r   r   r   assertIsNone  rO  zTestCase.assertIsNonec                 C   s(   	 |d u rd}|  | || d S d S )Nzunexpectedly None)r   r\   rg  r   r   r   assertIsNotNone  s
   zTestCase.assertIsNotNonec                 C   s6   	 t ||sdt||f }| | || d S d S )Nz%s is not an instance of %rr?   r   r   r\   r   r,   r   r]   r_   r   r   r   rP    s
   
zTestCase.assertIsInstancec                 C   s6   	 t ||rdt||f }| | || d S d S )Nz%s is an instance of %rrj  rk  r   r   r   assertNotIsInstance  s
   
zTestCase.assertNotIsInstancec                 O      	 t || |}|d||S )NassertRaisesRegexr
  )r   r  rd   r1   r2   r  r   r   r   rn    s   zTestCase.assertRaisesRegexc                 O   rm  )NassertWarnsRegexr  )r   r  rd   r1   r2   r  r   r   r   ro    s   zTestCase.assertWarnsRegexc                 C   sL   	 t |ttfrt|}||s$d|j|f }| ||}| |d S )Nz&Regex didn't match: %r not found in %r)	r?   r!   bytesrb   rc   rw   rx   r\   r^   )r   textrd   r]   r_   r   r   r   assertRegex   s   


zTestCase.assertRegexc                 C   sb   	 t |ttfrt|}||}|r/d|| |  |j|f }| 	||}| 
|d S )Nz"Regex matched: %r matches %r in %r)r?   r!   rp  rb   rc   rw   startendrx   r\   r^   )r   rq  Zunexpected_regexr]   matchr_   r   r   r   assertNotRegex,  s   


zTestCase.assertNotRegexc                    s    fdd}|S )Nc                     s$   t d jtd  | i |S )NzPlease use {0} instead.r   )r   r   rr   r   rS  r;   original_funcr   r   deprecated_func<  s
   
z,TestCase._deprecate.<locals>.deprecated_funcr   )rx  ry  r   rw  r   
_deprecate;  s   zTestCase._deprecate)r   r(   )NNNNN)dr   r   r   AssertionErrorr^   r  r=  r^  Z_classSetupFailedr   r   r   r   r   r   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  r\   r	  r  r  r  r  r  r!  r"  r*  r+  r<  r8  r   r   r   rI  rK  rM  rN  r   rX  r\  r   rb  rd  re  rf  rh  ri  rP  rl  rn  ro  rr  rv  rz  ZfailUnlessEqualZassertEqualsZfailIfEqualZassertNotEqualsZfailUnlessAlmostEqualZassertAlmostEqualsZfailIfAlmostEqualZassertNotAlmostEqualsZ
failUnlessZassert_ZfailUnlessRaisesZfailIfZassertRaisesRegexpZassertRegexpMatchesZassertNotRegexpMatchesr   r   r   r   r   4  s     
 


	


C



!

	


	
-

#c



+






 









	r   c                       sh   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(   )superr~  r   
_setUpFunc_tearDownFunc	_testFunc_description)r   ZtestFuncr   r   descriptionr   r   r   r   Z  s
   
zFunctionTestCase.__init__c                 C      | j d ur|    d S d S r(   )r  ro   r   r   r   r   a     
zFunctionTestCase.setUpc                 C   r  r(   )r  ro   r   r   r   r   e  r  zFunctionTestCase.tearDownc                 C   r   r(   )r  ro   r   r   r   r   i  r   zFunctionTestCase.runTestc                 C   s   | j jS r(   )r  r   ro   r   r   r   r   l  r   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   r  r  r  r  r   r   r   r   r   o  s   


zFunctionTestCase.__eq__c                 C   s   t t| | j| j| j| jfS r(   )r   r@   r  r  r  r  ro   r   r   r   r   x  s   zFunctionTestCase.__hash__c                 C   s   dt | j| jjf S r   )r   r   r  r   ro   r   r   r   r   |  s   
zFunctionTestCase.__str__c                 C   r   )Nz<%s tec=%s>)r   r   r  ro   r   r   r   r     s   
zFunctionTestCase.__repr__c                 C   s2   | j d ur| j S | jj}|r|dd  pd S r   )r  r  r   r   r   r   r   r   r   r     s   
z!FunctionTestCase.shortDescriptionr{  )r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__r   r   r  r   r~  Q  s    	r~  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(   )r  r   _messager$   r   r^   )r   r$   r   r   r  r   r   r     s
   
z_SubTest.__init__c                 C   s   t d)Nzsubtests cannot be run directly)r-  ro   r   r   r   r     r   z_SubTest.runTestc                 C   s^   g }| j tur|d| j  | jr(ddd | j D }|d| d|p.dS )Nz[{}]z, c                 s   s     | ]\}}d  ||V  qdS )z{}={!r}N)rr   )rR   r   r   r   r   r   rU     s
    

z+_SubTest._subDescription.<locals>.<genexpr>z({}) z(<subtest>))r  r}  r    rr   r   r2  rT  )r   partsZparams_descr   r   r   _subDescription  s   

z_SubTest._subDescriptionc                 C   s   d | j |  S Nz{} {})rr   r$   r   r  ro   r   r   r   r     s   z_SubTest.idc                 C   s   	 | j  S r(   )r$   r   ro   r   r   r   r     s   
z_SubTest.shortDescriptionc                 C   s   d | j|  S r  )rr   r$   r  ro   r   r   r   r     r   z_SubTest.__str__)
r   r   r   r   r   r  r   r   r   r  r   r   r  r   r     s    r   )-r"   rA   r3  r5  rb   r   rZ  r)   rs   rH   rG   r   utilr   r   r   r   r   Z
__unittestobjectr}  r>  r6   r
   r   r   r   r-   r/   r3   r9   rJ   rM   rO   r   rQ   rZ   ra   rn   r   ChainMapr   r   r~  r   r   r   r   r   <module>   sZ    (	*'4
        %: