
    daf                        	 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e      Z G d	 d
e      Z G d de      Z G d de      Zd Zd Zd Zd Zg Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z( G d d      Z) G d de)      Z* G d d e*      Z+ G d! d"e*      Z, G d# d$ejZ                        Z. G d% d&e      Z/ G d' d(e/      Z0 G d) d*e/      Z1y)+    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y)SkipTestN__name__
__module____qualname__     (/root/Python-3.12.4/Lib/unittest/case.pyr   r      s    r   r   c                       e Zd Zy)_ShouldStopNr   r   r   r   r   r   "       r   r   c                       e Zd Zy)_UnexpectedSuccessNr   r   r   r   r   r   '   r   r   r   c                   :    e Zd ZddZej
                  dd       Zy)_OutcomeNc                 ^    d| _         || _        t        |d      | _        d| _        d | _        y )NF
addSubTestT)expecting_failurer   hasattrresult_supports_subtestssuccessexpectedFailure)selfr   s     r   __init__z_Outcome.__init__.   s/    !&(/(E%#r   c              #     K   | j                   }d| _         	 d  |r4| j                   r(| j                  j                  |j                  |d        	 | j                   xr || _         y # t        $ r  t
        $ r1}d| _         t        | j                  |t        |             Y d }~Td }~wt        $ r Y b t        j                         }| j                  r|| _        nHd| _         |r(| j                  j                  |j                  ||       nt        | j                  ||       d }Y xY w# | j                   xr || _         w xY ww)NTF)r   r   r   	test_caseKeyboardInterruptr   _addSkipstrr   sysexc_infor   r    	_addError)r!   r$   subTestold_successer)   s         r   testPartExecutorz_Outcome.testPartExecutor5   s    ll	8, 4<<&&y':':ItL<<7KDL1 ! 	 	5 DLT[[)SV44 		||~H%%'/$$KK**9+>+>	8Tdkk9h? H
  <<7KDLsL   EA' 6D+ E'D(9'B% D+ %D(1D+ 3A3D(&D+ +EEN)F)r   r   r   r"   
contextlibcontextmanagerr.   r   r   r   r   r   -   s!    $ 8 8r   r   c                     t        | dd       }|
 |||       y t        j                  dt        d        | j                  |       y )NaddSkipz4TestResult has no addSkip method, skips not reported   )getattrwarningswarnRuntimeWarning
addSuccess)r   r$   reasonr3   s       r   r&   r&   V   sD    fi.G	6"L$a	))$r   c                     | D|At        |d   |j                        r | j                  ||       y  | j                  ||       y y y Nr   )
issubclassfailureException
addFailureaddError)r   testr)   s      r   r*   r*   _   sK    h2hqk4#8#89FdH-FOOD(+	 3r   c                     | S r/   r   )objs    r   _idrD   f   s    Jr   c                     t        |       }	 |j                  }|j                  } ||       } ||| d d d        |S # t        $ r( t	        d|j
                   d|j                   d      d w xY w)N'.z6' object does not support the context manager protocol)type	__enter____exit__AttributeError	TypeErrorr   r   )cm
addcleanupclsenterexitr   s         r   _enter_contextrR   j   s     r(CO|| 2YFtRtT*M  O!CNN+1S-=-=,> ?C D EJN	OOs	   ; 1A,c                6    	 t         j                  | ||f       y r/   )_module_cleanupsappend)functionargskwargss      r   addModuleCleanuprY   z   s    2XtV45r   c                 $    	 t        | t              S r/   )rR   rY   )rM   s    r   enterModuleContextr[      s    0".//r   c                      	 g } t         r(t         j                         \  }}}	  ||i | t         r(| r| d   y # t        $ r}| j                  |       Y d }~.d }~ww xY wr<   )rT   pop	ExceptionrU   )
exceptionsrV   rW   rX   excs        r   doModuleCleanupsra      st    J
!1!5!5!7$	#d%f%   m   	#c""	#s   : 	AAAc                 `     	  fd}t         t        j                        r }d  ||      S |S )Nc                     t        | t              st        j                  |       fd       }|} d| _        | _        | S )Nc                      t              r/   r   )rW   rX   r:   s     r   skip_wrapperz-skip.<locals>.decorator.<locals>.skip_wrapper   s    v&&r   T)
isinstancerH   	functoolswraps__unittest_skip____unittest_skip_why__)	test_itemrf   r:   s     r   	decoratorzskip.<locals>.decorator   sC    )T*__Y'' ('$I&*	#*0	'r    )rg   typesFunctionType)r:   rm   rl   s   `  r   skiprq      s:    	 &%,,-	##r   c                 *    	 | rt        |      S t        S r/   rq   rD   	conditionr:   s     r   skipIfrv      s     F|Jr   c                 *    	 | st        |      S t        S r/   rs   rt   s     r   
skipUnlessrx      s     F|Jr   c                     d| _         | S )NT)__unittest_expecting_failure__)rl   s    r   r    r       s    /3I,r   c                     t        | t              rt        fd| D              S t        | t              xr t	        |       S )Nc              3   6   K   | ]  }t        |        y wr/   )_is_subtype).0r-   basetypes     r   	<genexpr>z_is_subtype.<locals>.<genexpr>   s     >;q(+>s   )rg   tupleallrH   r=   )expectedr   s    `r   r}   r}      s7    (E">X>>>h%H*Xx*HHr   c                       e Zd Zd Zd Zy)_BaseTestCaseContextc                     || _         y r/   )r$   )r!   r$   s     r   r"   z_BaseTestCaseContext.__init__   s	    "r   c                     | j                   j                  | j                  |      }| j                   j                  |      r/   )r$   _formatMessagemsgr>   )r!   standardMsgr   s      r   _raiseFailurez"_BaseTestCaseContext._raiseFailure   s1    nn++DHHkBnn--c22r   N)r   r   r   r"   r   r   r   r   r   r      s    #3r   r   c                       e Zd ZddZd Zy)_AssertRaisesBaseContextNc                     t         j                  | |       || _        || _        |t	        j
                  |      }|| _        d | _        d | _        y r/   )	r   r"   r   r$   recompileexpected_regexobj_namer   )r!   r   r$   r   s       r   r"   z!_AssertRaisesBaseContext.__init__   sJ    %%dI6 "%ZZ7N,r   c                    	 	 t        | j                  | j                        st        |d| j                        |s=|j                  dd       | _        |r t        t        t        |            d      | d } S |^}}	 |j                  | _
        | 5   ||i | d d d        d } y # t        $ r t        |      | _
        Y 1w xY w# 1 sw Y   d } y xY w# d } w xY w)Nz() arg 1 must be r   z1 is an invalid keyword argument for this function)r}   r   
_base_typerL   _base_type_strr]   r   nextiterr   r   rK   r'   )r!   namerW   rX   callable_objs        r   handlez_AssertRaisesBaseContext.handle   s    		t}}doo>!%t':':!< = =!::eT2#7;DL7I%L M M D #'L42 , 5 5  .d-f-. D " 2 #L 12. D4DsT   A6C <C B( C 	CC (CC CC CC C Cr/   )r   r   r   r"   r   r   r   r   r   r      s    r   r   c                   F    e Zd Z	 eZdZd Zd Z ee	j                        Zy)_AssertRaisesContextz-an exception type or tuple of exception typesc                     | S r/   r   r!   s    r   rI   z_AssertRaisesContext.__enter__   s    r   c                    |p	 | j                   j                  }| j                  r,| j                  dj                  || j                               n6| j                  dj                  |             nt        j                  |       t        || j                         sy|j                  d       | _        | j                  y| j                  }|j                  t        |            s4| j                  dj                  |j                  t        |                   y# t        $ r t        | j                         }Y $w xY w)Nz{} not raised by {}z{} not raisedFT"{}" does not match "{}")r   r   rK   r'   r   r   format	tracebackclear_framesr=   with_traceback	exceptionr   searchpattern)r!   exc_type	exc_valuetbexc_namer   s         r   rJ   z_AssertRaisesContext.__exit__   s   .==11 }}""#8#?#?@D$O P ""?#9#9(#CD""2&(DMM2"11$7&,,$$S^49@@#++S^ = >+ " .t}}-.s   D D?>D?N)r   r   r   BaseExceptionr   r   rI   rJ   classmethodro   GenericAlias__class_getitem__r   r   r   r   r      s,    MJDN6 $E$6$67r   r   c                   "    e Zd Z	 eZdZd Zd Zy)_AssertWarnsContextz(a warning type or tuple of warning typesc                 <   t        t        j                  j                               D ]  }t	        |dd       si |_         t        j                  d      | _        | j                  j                         | _        t        j                  d| j                         | S )N__warningregistry__T)recordalways)listr(   modulesvaluesr5   r   r6   catch_warningswarnings_managerrI   simplefilterr   )r!   vs     r   rI   z_AssertWarnsContext.__enter__!  s~     ckk((*+ 	+Aq/6(*%	+ !) 7 7t D--779h6r   c                    | j                   j                  |||       |y 	 | j                  j                  }d }| j                  D ]  }|j                  }t        || j                        s&||}| j                  %| j                  j                  t        |            s[|| _        |j                  | _        |j                  | _         y  |>| j                  dj                  | j                  j                   t        |                   | j"                  r,| j                  dj                  || j"                               y | j                  dj                  |             y # t        $ r t        | j                        }Y Ow xY w)Nr   z{} not triggered by {}z{} not triggered)r   rJ   r   r   rK   r'   r6   messagerg   r   r   warningfilenamelinenor   r   r   r   )r!   r   r   r   r   first_matchingmws           r   rJ   z_AssertWarnsContext.__exit__,  sb   &&xB?	*}}--H  	A		Aa/%!"##/''..s1v6DLJJDM((DK	 %9@@((00#n2E G H==7>>x?C}} N O 188BC3  	*4==)H	*s   E& &FFN)r   r   r   Warningr   r   rI   rJ   r   r   r   r   r     s    LJ?N	 Dr   r   c                       e Zd Zd Zy)_OrderedChainMapc              #      K   t               }| j                  D ]#  }|D ]  }||vs|j                  |       |  % y wr/   )setmapsadd)r!   seenmappingks       r   __iter__z_OrderedChainMap.__iter__P  sF     uyy 	G D=HHQKG	s
   #A A N)r   r   r   r   r   r   r   r   r   O  s    r   r   c                   r    e Zd Z	 eZdZdZdZ fdZdKdZ	d Z
d Zd Zed	        Zed
        Zd Zd Zed        Zed        Zd Zd Zd Zd Zd Zd Zd Zd Zej:                  efd       Zd Z d Z!d Z"d Z#d Z$d Z%d Z&dLdZ'd  Z(ed!        Z)d" Z*d# Z+d$ Z,dLd%Z-dLd&Z.dLd'Z/d( Z0d) Z1d* Z2dMd+Z3dMd,Z4d- Z5dLd.Z6dLd/Z7dLd0Z8	 	 dNd1Z9	 	 dNd2Z:dMd3Z;d4 Z<dLd5Z=dLd6Z>dLd7Z?dLd8Z@dLd9ZAdLd:ZBdLd;ZCdLd<ZDdLd=ZEdLd>ZFdLd?ZGdLd@ZHdLdAZIdLdBZJdLdCZKdLdDZLdLdEZMdLdFZNdG ZOdH ZPdLdIZQdLdJZR xZSS )OTestCaseTi  i   c                 @    d| _         g | _        t        |   |i | y )NF)_classSetupFailed_class_cleanupssuper__init_subclass__)rO   rW   rX   	__class__s      r   r   zTestCase.__init_subclass__  s%     % !4262r   c                    	 || _         d | _        d| _        	 t        | |      }|j                  | _        g | _        d | _	        i | _
        | j                  t        d       | j                  t        d       | j                  t        d       | j                  t        d       | j                  t         d       | j                  t"        d	       y # t
        $ r# |dk7  rt        d| j                  d|      Y w xY w)
NzNo testrunTestzno such test method in : assertDictEqualassertListEqualassertTupleEqualassertSetEqualassertMultiLineEqual)_testMethodName_outcome_testMethodDocr5   __doc__rK   
ValueErrorr   	_cleanups_subtest_type_equality_funcsaddTypeEqualityFuncdictr   r   r   	frozensetr'   )r!   
methodName
testMethods      r   r"   zTestCase.__init__  s    	  *'		5 z2J #-"4"4D
 %'!  '89  '89  (:;  &67  ,<=  &<=)  	4Y& !~~z"3 4 4 '	4s   C )C;:C;c                 $    	 || j                   |<   y r/   )r   )r!   typeobjrV   s      r   r   zTestCase.addTypeEqualityFunc  s    	 .6!!'*r   c                B    	 | j                   j                  |||f       y r/   )r   rU   r!   rV   rW   rX   s       r   
addCleanupzTestCase.addCleanup  s#    	K
 	xv67r   c                 0    	 t        || j                        S r/   )rR   r   )r!   rM   s     r   enterContextzTestCase.enterContext  s    	
 b$//22r   c                B    	 | j                   j                  |||f       y r/   )r   rU   rO   rV   rW   rX   s       r   addClassCleanupzTestCase.addClassCleanup  s"    	4""HdF#;<r   c                 0    	 t        || j                        S r/   )rR   r   )rO   rM   s     r   enterClassContextzTestCase.enterClassContext  s    3b#"5"566r   c                      	 y r/   r   r   s    r   setUpzTestCase.setUp      Kr   c                      	 y r/   r   r   s    r   tearDownzTestCase.tearDown  r   r   c                      y r/   r   rO   s    r   
setUpClasszTestCase.setUpClass  s    Ur   c                      y r/   r   r   s    r   tearDownClasszTestCase.tearDownClass  s    `r   c                      y)Nr   r   r   s    r   countTestCaseszTestCase.countTestCases  s    r   c                 *    t        j                         S r/   )r   
TestResultr   s    r   defaultTestResultzTestCase.defaultTestResult  s      ""r   c                     	 | j                   }|r0|j                         j                  d      d   j                         S d S N
r   )r   stripsplitr!   docs     r   shortDescriptionzTestCase.shortDescription  s@    	 !!58syy{  &q)//1BdBr   c                 J    t        | j                        d| j                  S )NrG   r   r   r   r   s    r   idzTestCase.id  s    "4>>2D4H4HIIr   c                 l    t        |       t        |      urt        S | j                  |j                  k(  S r/   )rH   NotImplementedr   r!   others     r   __eq__zTestCase.__eq__  s/    :T%[(!!##u'<'<<<r   c                 B    t        t        |       | j                  f      S r/   )hashrH   r   r   s    r   __hash__zTestCase.__hash__  s    T$Z!5!5677r   c                 f    | j                   dt        | j                        d| j                   dS )N (rG   ))r   r   r   r   s    r   __str__zTestCase.__str__  s$    #33Xdnn5MtOcOcddr   c                 N    dt        | j                        d| j                  dS )N<z testMethod=>r  r   s    r   __repr__zTestCase.__repr__  s"    ($*>*>@ 	@r   c              +   J  K   	 | j                   | j                   j                  sd  y | j                  }|t        |      }n|j                  j                  |      }t        | ||      | _        	 | j                   j                  | j                  d      5  d  d d d        | j                   j                  s*| j                   j                  }|.|j                  r"t        | j                   j                  rt        || _        y # 1 sw Y   mxY w# || _        w xY ww)NT)r+   )r   r   r   r   params	new_child_SubTestr.   r   r   failfastr   r    )r!   r   r$  parent
params_mapr   s         r   r+   zTestCase.subTest  s     	 == (N(N>)&1J008J sJ7	#//t/L ==((--%&//%%.. "!"DM  #DMs7   A0D#3'D DA$D D#DD 	D  D#c                     	 |j                   } || |       y # t        $ r/ t        j                  dt                |j
                  |        Y y w xY w)Nz@TestResult has no addExpectedFailure method, reporting as passes)addExpectedFailurerK   r6   r7   r8   r9   )r!   r   r)   r+  s       r   _addExpectedFailurezTestCase._addExpectedFailure'  sR    	/!'!:!: tX.  	$MM\(*Fd#	$s    5AAc                     	 |j                   } ||        y # t        $ rX t        j                  dt               	 t
        d # t
        $ r)  |j                  | t        j                                Y Y y w xY ww xY w)NzCTestResult has no addUnexpectedSuccess method, reporting as failure)	addUnexpectedSuccessrK   r6   r7   r8   r   r?   r(   r)   )r!   r   r.  s      r   _addUnexpectedSuccesszTestCase._addUnexpectedSuccess1  st    	'#)#>#>  !&  	8MM_(*8(d2% 8!!!$78	8s&    #A8A.A40A83A44A8c                     	 |j                   } || |       y # t        $ r t        j                  dt               Y y w xY w)Nz$TestResult has no addDuration method)addDurationrK   r6   r7   r8   )r!   r   elapsedr1  s       r   _addDurationzTestCase._addDuration@  sA    	' ,,K
 g&	  	*MM@(*	*s    #>>c                 $    | j                          y r/   )r   r   s    r   
_callSetUpzTestCase._callSetUpI  s    

r   c                 T     |       !t        j                  d| dt        d       y y )NzFIt is deprecated to return a value that is not None from a test case (r     )
stacklevel)r6   r7   DeprecationWarning)r!   methods     r   _callTestMethodzTestCase._callTestMethodL  s3    8MM ((.xq23ERSU  r   c                 $    | j                          y r/   )r   r   s    r   _callTearDownzTestCase._callTearDownQ  s    r   c                     ||i | y r/   r   r   s       r   _callCleanupzTestCase._callCleanupT  s    $!&!r   c                    |4| j                         }t        |dd       }t        |dd       }|
 |        nd } |j                  |        	 t        | | j                        }t        | j                  dd      st        |dd      rQt        | j                  dd      xs t        |dd      }t        || |       | |j                  |        | |        S S t        | dd      xs t        |dd      }t        |      }t        j                         }	 || _
        |j                  |       5  | j                          d d d        |j                  rc||_        |j                  |       5  | j                  |       d d d        d|_        |j                  |       5  | j!                          d d d        | j#                          | j%                  |t        j                         |z
         |j                  rO|r;|j&                  r| j)                  ||j&                         n$| j+                  |       n |j,                  |        |d |_        d }d | _
         |j                  |        | |        S S # 1 sw Y   9xY w# 1 sw Y   xY w# 1 sw Y   xY w# d |_        d }d | _
        w xY w#  |j                  |        | |        w w xY w)NstartTestRunstopTestRunrj   Frk   rn   rz   )r  r5   	startTestr   r   r&   stopTestr   timeperf_counterr   r.   r5  r   r   r;  r=  
doCleanupsr3  r    r,  r/  r9   )	r!   r   rA  rB  r   skip_whyr   outcome
start_times	            r   runzTestCase.runW  s   >++-F"6>4@L!&->K'K4	 t';';<J(;UC
$7?#DNN4KRP P&z3JBO x0T FOOD!& 'Q >F M
$DeL  v&G**,J% '--d3 &OO%&??0AG- 11$7 9,,Z8905G- 11$7 -**,-!!!&4+<+<+>+KM??("22 44VW=T=TU 66v>)))$/ +/' !% FOOD!& 'A& &9 9- -" +/' !% FOOD!& 'st   A.J. ;J. J +I3<,J (J : J J+BJ J. 3I=8J  J
J JJ J++J. .Kc                 2   	 | j                   xs
 t               }| j                  r[| j                  j                         \  }}}|j	                  |       5   | j
                  |g|i | d d d        | j                  r[|j                  S # 1 sw Y   "xY wr/   )r   r   r   r]   r.   r?  r   )r!   rI  rV   rW   rX   s        r   rG  zTestCase.doCleanups  s    	---8:nn%)^^%7%7%9"HdF))$/ =!!!(<T<V<= nn = =s   BBc                    	 g | _         | j                  r5| j                  j                         \  }}}	  ||i | | j                  r4y y # t        $ r0 | j                   j	                  t        j                                Y Gw xY wr/   )tearDown_exceptionsr   r]   r^   rU   r(   r)   r   s       r   doClassCleanupszTestCase.doClassCleanups  s{    	"$!!%(%8%8%<%<%>"HdF?$)&) !!  ?''..s||~>?s   A 6BBc                 &     | j                   |i |S r/   )rK  )r!   rW   kwdss      r   __call__zTestCase.__call__  s    txx&&&r   c                    	 t        | | j                        }t        | j                  dd      st        |dd      r1t        | j                  dd      xs t        |dd      }t        |      | j	                          | j                  |       | j                          | j                  rB| j                  j                         \  }}} | j                  |g|i | | j                  rAy y )Nrj   Frk   rn   )
r5   r   r   r   r5  r;  r=  r   r]   r?  )r!   r   rH  rV   rW   rX   s         r   debugzTestCase.debug  s    DT4#7#78
DNN$7?J 3U;0GL L":/FK 8$$Z(nn%)^^%7%7%9"HdFDh888 nnr   c                     	 t        |      r/   re   )r!   r:   s     r   skipTestzTestCase.skipTest  s    vr   c                 &    	 | j                  |      r/   )r>   )r!   r   s     r   failzTestCase.fail  s    7##C((r   c                 h    	 |r/| j                  |dt        |      z        }| j                  |      y )Nz%s is not falser   r   r>   r!   exprr   s      r   assertFalsezTestCase.assertFalse  s:    1%%c+<y+NOC'',, r   c                 h    	 |s/| j                  |dt        |      z        }| j                  |      y )Nz%s is not truerZ  r[  s      r   
assertTruezTestCase.assertTrue  s:    0%%c+;io+MNC'',, r   c                     	 | j                   s|xs |S ||S 	 |d|S # t        $ r t        |      dt        |      cY S w xY w)Nz : )longMessageUnicodeDecodeErrorr   )r!   r   r   s      r   r   zTestCase._formatMessage  s`    	 %+%;	I !,S11! 	I!*;!73HH	Is     "AAc                 V    	 t        ||       }	 |j                  d||      d }S # d }w xY w)NassertRaisesr   r   )r!   expected_exceptionrW   rX   contexts        r   rd  zTestCase.assertRaises  s8    	2 ''94@	>>.$? GdGs   $ (c                 B    	 t        ||       }|j                  d||      S )NassertWarnsr   r   )r!   expected_warningrW   rX   rg  s        r   ri  zTestCase.assertWarns  s)    	6 &&6=~~mT6::r   c                 (    	 ddl m}  || ||d      S )Nr   _AssertLogsContextFno_logs_logrn  r!   loggerlevelrn  s       r   
assertLogszTestCase.assertLogs.  s    	( 	-!$uEEr   c                 (    	 ddl m}  || ||d      S )Nr   rm  Tro  rq  rs  s       r   assertNoLogszTestCase.assertNoLogsF  s    	
 	-!$tDDr   c                     	 t        |      t        |      u rD| j                  j                  t        |            }|t        |t              rt        | |      }|S | j                  S r/   )rH   r   getrg   r'   r5   _baseAssertEqual)r!   firstsecondasserters       r   _getAssertEqualityFunczTestCase._getAssertEqualityFuncO  s`    	  ;$v,&0044T%[AH#h,&tX6H$$$r   c                 t    	 ||k(  s2dt        ||      z  }| j                  ||      }| j                  |      y )N%s != %s)r	   r   r>   )r!   r|  r}  r   r   s        r   r{  zTestCase._baseAssertEquali  sF    H$';E6'JJK%%c;7C'',, r   c                 @    	 | j                  ||      } ||||       y )N)r   )r  )r!   r|  r}  r   assertion_funcs        r   assertEqualzTestCase.assertEqualp  s'    	 44UFCuf#.r   c                     	 ||k7  s:| j                  |t        |      dt        |            }| j                  |      y )N == rZ  )r!   r|  r}  r   s       r   assertNotEqualzTestCase.assertNotEqualw  sN    	 %%c59I:CF:K,M NC'',, r   c           	         	 ||k(  ry ||t        d      t        ||z
        }|9||k  ry t        |      dt        |      dt        |      dt        |      d}n=|d}t        ||      dk(  ry t        |      dt        |      d|dt        |      d}| j	                  ||      }| j                  |      )	N specify delta or places not bothz !=  within  delta ( difference)   r   z	 places (rL   absr   roundr   r>   r!   r|  r}  placesr   deltadiffr   s           r   assertAlmostEqualzTestCase.assertAlmostEqual  s    	 F?!3>??56>"u} % &!% $	!K ~T6"a' % &!$	!K
 !!#{3##C((r   c           	      p   	 ||t        d      t        ||z
        }|>||k(  s||kD  ry t        |      dt        |      dt        |      dt        |      d}n6|d}||k(  st        ||      dk7  ry t        |      dt        |      d|d}| j	                  ||      }| j                  |      )	Nr  r  r  r  r  r  r   z placesr  r  s           r   assertNotAlmostEqualzTestCase.assertNotAlmostEqual  s    		 !3>??56>"VO% &!% $	!K ~VOtV)<)A9B59I9B69J9?AK !!#{3##C((r   c           	         	 |d|j                   }t        ||      s | j                  d|dt        |            t        ||      s"| j                  d|dt        |            d}d }	 t	        |      }|	 t	        |      }|||k(  ry d|j                         ft        ||      z   z  }t        t                    D ]+  }		 ||	   }
	 ||	   }|
|k7  s|d
|	ft        |
|      z   z  z  } n  ||k(  r|t        |      t        |      k7  ry ||kD  r%|d|||z
  fz  z  }	 |d|t        ||         fz  z  }n)||k  r$|d|||z
  fz  z  }	 |d|t        ||         fz  z  }|}ddj                  t        j                  t!        j"                  |      j%                         t!        j"                  |      j%                                     z   }| j'                  ||      }| j)                  ||      }| j+                  |       y # t
        t        f$ r	 d|z  }Y w xY w# t
        t        f$ r	 d|z  }Y w xY w# t
        t        t        f$ r |d|	|fz  z  }Y  Mw xY w# t
        t        t        f$ r |d	|	|fz  z  }Y  sw xY w# t
        t        t        f$ r |d||fz  z  }Y Ew xY w# t
        t        t        f$ r |d||fz  z  }Y jw xY w)NzFirst sequence is not a r   zSecond sequence is not a 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   rg   r>   r   lenrL   NotImplementedError
capitalizer	   rangemin
IndexErrorrH   joindifflibndiffpprintpformat
splitlines_truncateMessager   rX  )r!   seq1seq2r   seq_typeseq_type_name	differinglen1len2iitem1item2r   diffMsgs                 r   assertSequenceEqualzTestCase.assertSequenceEqual  s   	 $--MdH-+++8)D/-K L LdH-+++8)D/-K L L 'M		#t9D
 '4y
 t|0"--/1(t456I 3tT?+  GE GE E>"K#$$)=eU)K"K#M NI%( DLX%5J$t*,d{ +.;TD[-IJ K	K"A#'4:)>"?#@ AI
  +.;TD[-IJ K	L"A#'4:)>"?#@ AI
  MM&...99; ...99;=> > ++KA!!#{3		#K ./ 	#B!#I	# 23 'G%'	' ":/BC "N"#]!3#4 5I ":/BC "O"#]!3#4 5I* ":/BC K #259=4I#J KIK ":/BC L #36:M5J#K LILsl   -H ;H! H<I"$J J- HH!H98H9<II"JJJ*)J*-KKc                 n    | j                   }|t        |      |k  r||z   S |t        t        |      z  z   S r/   )maxDiffr  DIFF_OMITTED)r!   r   r  max_diffs       r   r  zTestCase._truncateMessage3  s:    <<s4yH4T>!,T233r   c                 8    	 | j                  |||t               y N)r  )r  r   )r!   list1list2r   s       r   r   zTestCase.assertListEqual9  s     	 	  sT Br   c                 8    	 | j                  |||t               y r  )r  r   )r!   tuple1tuple2r   s       r   r   zTestCase.assertTupleEqualE  s     	 	  u Er   c                    	 	 |j                  |      }	 |j                  |      }ssy g }|r2|j	                  d       |D ]  }|j	                  t        |              r2|j	                  d       |D ]  }|j	                  t        |              dj                  |      }	| j                  | j                  ||	             y # t        $ r}| j                  d|z         Y d }~d }~wt        $ r}| j                  d|z         Y d }~d }~ww xY w# t        $ r}| j                  d|z         Y d }~d }~wt        $ r}| j                  d|z         Y d }~:d }~ww xY w)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
  )
differencerL   rX  rK   rU   reprr  r   )
r!   set1set2r   difference1r-   difference2linesitemr   s
             r   r   zTestCase.assertSetEqualP  sT   		P//$/K	Q//$/K {LLEF# )T$Z()LLEF# )T$Z() ii&		$%%c;785  	MIIG!KLL 	PIIJQNOO	P
  	MIIG!KLL 	QIIKaOPP	QsF   C D 	DC**D6DD	E% D::E%E  E%c                     	 ||vr;t        |      dt        |      }| j                  | j                  ||             y y )N not found in r   rX  r   r!   member	containerr   r   s        r   assertInzTestCase.assertIn{  sC    R"2;F2C2;I2FHKIId))#{;< #r   c                     	 ||v r;t        |      dt        |      }| j                  | j                  ||             y y )Nz unexpectedly found in r  r  s        r   assertNotInzTestCase.assertNotIn  sC    VY;DV;L8A)8LNKIId))#{;< r   c                     	 ||ur;t        |      dt        |      }| j                  | j                  ||             y y )Nz is not r  r!   expr1expr2r   r   s        r   assertIszTestCase.assertIs  sB    R,5e,<-6u-=?KIId))#{;< r   c                 n    	 ||u r0dt        |      }| j                  | j                  ||             y y )Nzunexpectedly identical: r  r  s        r   assertIsNotzTestCase.assertIsNot  s7    VE>:CE:JLKIId))#{;< r   c           	         | j                  |t        d       | j                  |t        d       ||k7  rdt        ||      z  }ddj                  t	        j
                  t        j                  |      j                         t        j                  |      j                                     z   }| j                  ||      }| j                  | j                  ||             y y )Nz"First argument is not a dictionaryz#Second argument is not a dictionaryr  r
  )assertIsInstancer   r	   r  r  r  r  r  r  r  rX  r   )r!   d1d2r   r   r  s         r   r   zTestCase.assertDictEqual  s    b$(LMb$(MN8$';B'CCK499W]]!>>"-88:!>>"-88:&< = =D //TBKIId))#{;< r   c                    	 t        |      t        |      }}	 t        j                  |      }t        j                  |      }||k(  ry t        ||      }|r[d}|D cg c]  }d|z  	 }	}dj                  |	      }
| j                  ||
      }| j                  ||      }| j                  |       y y # t        $ r t        ||      }Y uw xY wc c}w )NzElement counts were not equal:
z First has %d, Second has %d:  %rr
  )
r   collectionsCounterr   rL   r   r  r  r   rX  )r!   r|  r}  r   	first_seq
second_seqdifferencesr   r  r  r  s              r   assertCountEqualzTestCase.assertCountEqual  s    
	 !%UT&\:			F''	2E ((4F
 .y*EK<KKVW47$>WEWii&G//WEK%%c;7CIIcN   	I1)ZHK	I Xs   *B3 C3C
Cc                    	 | j                  |t        d       | j                  |t        d       ||k7  rt        |      | j                  kD  st        |      | j                  kD  r| j	                  |||       |}|}|r|r|d   dk7  s|d   dk7  r*|dz  }|dz  }n|r|d   dk7  r|dz  }n|r|d   dk7  r|dz  }|j                  d      }|j                  d      }dt        ||      z  }ddj                  t        j                  ||            z   }	| j                  ||	      }| j                  | j                  ||             y y )	NzFirst argument is not a stringzSecond argument is not a stringr
  T)keependsr  rn   )r  r'   r  _diffThresholdr{  r  r	   r  r  r  r  rX  r   )
r!   r|  r}  r   first_presplitsecond_presplit
firstlinessecondlinesr   r  s
             r   r   zTestCase.assertMultiLineEqual  s\   ;eS*JKfc+LMF?E
T000Fd111%%eVS9 #N$O9$r
d(:"d*N#t+OF2J$.4'59,$&'22D2AJ)44d4CK %';E6'JJK"'''--
K"HIID//TBKIId))#{;<9 r   c                     	 ||k  s;t        |      dt        |      }| j                  | j                  ||             y y )Nz not less than r  r!   abr   r   s        r   
assertLesszTestCase.assertLess  s<    Q1u3<Q<1NKIId))#{;< r   c                     	 ||k  s;t        |      dt        |      }| j                  | j                  ||             y y )Nz not less than or equal to r  r  s        r   assertLessEqualzTestCase.assertLessEqual  s=    RAv?H|YWX\ZKIId))#{;< r   c                     	 ||kD  s;t        |      dt        |      }| j                  | j                  ||             y y )Nz not greater than r  r  s        r   assertGreaterzTestCase.assertGreater  s<    Q1u6?lIaLQKIId))#{;< r   c                     	 ||k\  s;t        |      dt        |      }| j                  | j                  ||             y y )Nz not greater than or equal to r  r  s        r   assertGreaterEqualzTestCase.assertGreaterEqual  s?    RAvBKA,PYZ[P\]KIId))#{;< r   c                 j    	 |0t        |      d}| j                  | j                  ||             y y )Nz is not Noner  r!   rC   r   r   s       r   assertIsNonezTestCase.assertIsNone  s4    Q?.7n>KIId))#{;< r   c                 R    	 |$d}| j                  | j                  ||             y y )Nzunexpectedly None)rX  r   r  s       r   assertIsNotNonezTestCase.assertIsNotNone  s-    6;-KIId))#{;< r   c                     	 t        ||      s2t        |      d|}| j                  | j                  ||             y y )Nz is not an instance of rg   r   rX  r   r!   rC   rO   r   r   s        r   r  zTestCase.assertIsInstance	  s=    	#s#;DS>3OKIId))#{;< $r   c                     	 t        ||      r2t        |      d|}| j                  | j                  ||             y y )Nz is an instance of r  r  s        r   assertNotIsInstancezTestCase.assertNotIsInstance  s;    :c37@~sKKIId))#{;<  r   c                 D    	 t        || |      }|j                  d||      S )NassertRaisesRegexre  )r!   rf  r   rW   rX   rg  s         r   r   zTestCase.assertRaisesRegex  s,    
	 ''94P~~14@@r   c                 D    	 t        || |      }|j                  d||      S )NassertWarnsRegexrj  )r!   rk  r   rW   rX   rg  s         r   r  zTestCase.assertWarnsRegex&  s,    	 &&6nM~~0$??r   c                     	 t        |t        t        f      rt        j                  |      }|j                  |      s5d|j                  d|}| j                  ||      }| j                  |      y )NzRegex didn't match: r  )	rg   r'   bytesr   r   r   r   r   r>   )r!   textr   r   r   s        r   assertRegexzTestCase.assertRegex9  sk    KnsEl3ZZ7N$$T*&&.K %%c;7C'',, +r   c                 0   	 t        |t        t        f      rt        j                  |      }|j                  |      }|rWd||j                         |j                          d|j                  d|}| j                  ||      }| j                  |      y )NzRegex matched: z	 matches z in )rg   r'   r  r   r   r   startendr   r   r>   )r!   r  unexpected_regexr   matchr   s         r   assertNotRegexzTestCase.assertNotRegexE  s    G&e5!zz*:; ''-U[[]UYY[1 ((K
 %%c;7C'',, r   )r   r/   )NNNNN)Tr   r   r   AssertionErrorr>   ra  r  r  r   r"   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r"  r0   r1   _subtest_msg_sentinelr+   r,  r/  r3  r5  r;  r=  r?  rK  rG  rO  rR  rT  rV  rX  r]  r_  r   rd  ri  rv  rx  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  r  r  __classcell__r   s   @r   r   r   Y  s   @ &KG N3>@683 = =
 7 7 V V a a#CJ=8e@ / # #</''U
"?B 	? 	?'9")--I*B;>F0E%4-/- AE $+)Z DH#'!)FaF4
C	F)9V====
=@!=F========A @&
--r   r   c                   X     e Zd Z	 d fd	Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Z xZS )FunctionTestCasec                 b    t         t        |           || _        || _        || _        || _        y r/   )r   r  r"   
_setUpFunc_tearDownFunc	_testFunc_description)r!   testFuncr   r   descriptionr   s        r   r"   zFunctionTestCase.__init__^  s/    .0%!'r   c                 >    | j                   | j                          y y r/   )r  r   s    r   r   zFunctionTestCase.setUpe  s    ??&OO 'r   c                 >    | j                   | j                          y y r/   )r  r   s    r   r   zFunctionTestCase.tearDowni  s    )  *r   c                 $    | j                          y r/   )r  r   s    r   r   zFunctionTestCase.runTestm  s    r   c                 .    | j                   j                  S r/   )r  r   r   s    r   r  zFunctionTestCase.idp  s    ~~&&&r   c                    t        || j                        st        S | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j
                  |j
                  k(  xr | j                  |j                  k(  S r/   )rg   r   r  r  r  r  r  r  s     r   r  zFunctionTestCase.__eq__s  sv    %0!!%"2"22 7!!U%8%887~~07   E$6$66	7r   c                     t        t        |       | j                  | j                  | j                  | j
                  f      S r/   )r  rH   r  r  r  r  r   s    r   r  zFunctionTestCase.__hash__|  s7    T$Z$2D2D^^T%6%68 9 	9r   c                 `    t        | j                        d| j                  j                  dS )Nr  r  )r   r   r  r   r   s    r   r  zFunctionTestCase.__str__  s%    $T^^4 NN335 	5r   c                 N    dt        | j                        d| j                  dS )Nr   z tec=r!  )r   r   r  r   s    r   r"  zFunctionTestCase.__repr__  s     ( 8%)^^5 	5r   c                     | j                   | j                   S | j                  j                  }|xr" |j                  d      d   j	                         xs d S r	  )r  r  r   r  r  r  s     r   r  z!FunctionTestCase.shortDescription  sO    ($$$nn$$1syyq)//19T9r   r  )r   r   r   r"   r   r   r   r  r  r  r  r"  r  r  r  s   @r   r  r  U  s:    (!'7955:r   r  c                   <     e Zd Z fdZd Zd Zd Zd Zd Z xZ	S )r&  c                 n    t         |           || _        || _        || _        |j
                  | _        y r/   )r   r"   _messager$   r$  r>   )r!   r$   r   r$  r   s       r   r"   z_SubTest.__init__  s1    " ) : :r   c                     t        d      )Nzsubtests cannot be run directly)r  r   s    r   r   z_SubTest.runTest  s    !"CDDr   c                 `   g }| j                   t        ur*|j                  dj                  | j                                | j                  rPdj                  d | j                  j                         D              }|j                  dj                  |             dj                  |      xs dS )Nz[{}]z, c              3   F   K   | ]  \  }}d j                  ||        yw)z{}={!r}N)r   )r~   r   r   s      r   r   z+_SubTest._subDescription.<locals>.<genexpr>  s)      $3Q   A&$3s   !z({}) z(<subtest>))r&  r  rU   r   r$  r  items)r!   partsparams_descs      r   _subDescriptionz_SubTest._subDescription  s    == 55LLt}}56;;)) $3"kk//1$3 3K LL{34xx/-/r   c                 r    dj                  | j                  j                         | j                               S Nz{} {})r   r$   r  r.  r   s    r   r  z_SubTest.id  s)    ~~dnn//143G3G3IJJr   c                 8    	 | j                   j                         S r/   )r$   r  r   s    r   r  z_SubTest.shortDescription  s    	 ~~..00r   c                 V    dj                  | j                  | j                               S r0  )r   r$   r.  r   s    r   r  z_SubTest.__str__  s     ~~dnnd.B.B.DEEr   )
r   r   r   r"   r   r.  r  r  r  r  r  s   @r   r&  r&    s$    ;E	0K1Fr   r&  )2r(   rh   r  r  r   r6   r  r0   r   rE  ro   rn   r   utilr   r   r   r   r	   
__unittestobjectr  r  r^   r   r   r   r   r&   r*   rD   rR   rT   rY   r[   ra   rq   rv   rx   r    r}   r   r   r   r   ChainMapr   r   r  r&  r   r   r   <module>r7     s4    
    	       ? ? 
 7y ) 
 &8v &8R%,  6
0
 (I
3 3'3 'T$83 $8N1D2 1Dh{++ x-v x-x7:x 7:t!Fx !Fr   