B HE¯=þàã@sÄddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z ddl mZmZmZmZmZdZeƒZdZGdd„deƒZGd d „d eƒZGd d „d eƒZGd d„deƒZdd„Zdd„Zdd„Zdd„Zdd„Z dd„Z!Gdd„dƒZ"dd„Z#dd „Z$Gd!d"„d"e"ƒZ%Gd#d$„d$e%ƒZ&Gd%d&„d&e%ƒZ'e (d'd(d)g¡Z)Gd*d+„d+ej*ƒZ+Gd,d-„d-e"ƒZ,Gd.d/„d/ej-ƒZ.Gd0d1„d1eƒZ/Gd2d3„d3e/ƒZ0Gd4d5„d5e/ƒZ1dS)6éNé)Úresult)ÚstrclassÚ safe_reprÚ_count_diff_all_purposeÚ_count_diff_hashableÚ_common_shorten_reprTz@ Diff is %s characters long. Set self.maxDiff to None to see it.c@s eZdZdS)ÚSkipTestN)Ú__name__Ú __module__Ú __qualname__©r r ú0/opt/alt/python37/lib/python3.7/unittest/case.pyr sr c@s eZdZdS)Ú _ShouldStopN)r r r r r r rr"src@s eZdZdS)Ú_UnexpectedSuccessN)r r r r r r rr'src@s&eZdZddd„Zejddd„ƒZdS) Ú_OutcomeNcCs4d|_||_t|dƒ|_d|_g|_d|_g|_dS)NFÚ addSubTestT)Úexpecting_failurerÚhasattrÚresult_supports_subtestsÚsuccessÚskippedÚexpectedFailureÚerrors)Úselfrr r rÚ__init__.s z_Outcome.__init__Fc csè|j}d|_zÈy dVWnœtk r.‚Yn¤tk rh}zd|_|j |t|ƒf¡Wdd}~XYnjtk rzYnXt ¡}|j r–||_ nd|_|j  ||f¡d}YnX|j rÒ|jrÒ|j  |df¡Wd|joÞ||_XdS)NTF) rÚKeyboardInterruptr rÚappendÚstrrÚsysÚexc_inforrrr)rÚ test_caseÚisTestZ old_successÚer r r rÚtestPartExecutor7s* $  z_Outcome.testPartExecutor)N)F)r r r rÚ contextlibÚcontextmanagerr$r r r rr-s rcCs|S)Nr )Úobjr r rÚ_idUsr(cs‡fdd„}|S)Ncs4t|tƒs$t |¡‡fdd„ƒ}|}d|_ˆ|_|S)Ncs tˆƒ‚dS)N)r )ÚargsÚkwargs)Úreasonr rÚ skip_wrapper^sz-skip..decorator..skip_wrapperT)Ú isinstanceÚtypeÚ functoolsÚwrapsÚ__unittest_skip__Ú__unittest_skip_why__)Ú test_itemr,)r+r rÚ decorator\s  zskip..decoratorr )r+r4r )r+rÚskipXs r5cCs|r t|ƒStS)N)r5r()Ú conditionr+r r rÚskipIfhsr7cCs|s t|ƒStS)N)r5r()r6r+r r rÚ skipUnlesspsr8cCs d|_|S)NT)Ú__unittest_expecting_failure__)r3r r rrxsrcs4t|tƒr t‡fdd„|DƒƒSt|tƒo2t|ˆƒS)Nc3s|]}t|ˆƒVqdS)N)Ú _is_subtype)Ú.0r#)Úbasetyper rú ~sz_is_subtype..)r-ÚtupleÚallr.Ú issubclass)Úexpectedr<r )r<rr:|s r:c@seZdZdd„Zdd„ZdS)Ú_BaseTestCaseContextcCs ||_dS)N)r!)rr!r r rrƒsz_BaseTestCaseContext.__init__cCs |j |j|¡}|j |¡‚dS)N)r!Ú_formatMessageÚmsgÚfailureException)rÚ standardMsgrDr r rÚ _raiseFailure†sz"_BaseTestCaseContext._raiseFailureN)r r r rrGr r r rrBsrBcCsdtjkrt|ƒStSdS)NÚWITHIN_PYTHON_RPM_BUILD)ÚosÚenvironr5r()r+r r rÚ_skipInRpmBuilds rKcst ˆ¡‡fdd„ƒ}|S)NcsNdtjkr@yˆ||ŽWn tk r8tt ¡ƒ‚YnXt‚n ˆ||ŽdS)NrH)rIrJÚ ExceptionZ_ExpectedFailurerr r)r)r*)Úfuncr rÚwrapper¢s z+_expectedFailureInRpmBuild..wrapper)r/r0)rMrNr )rMrÚ_expectedFailureInRpmBuildšs rOc@seZdZddd„Zdd„ZdS)Ú_AssertRaisesBaseContextNcCs@t ||¡||_||_|dk r*t |¡}||_d|_d|_dS)N) rBrrAr!ÚreÚcompileÚexpected_regexÚobj_namerD)rrAr!rSr r rr±s  z!_AssertRaisesBaseContext.__init__c CsÔzÈt|j|jƒs"td||jfƒ‚|rD|ddkrDt dtd¡d}|sx| dd¡|_ |rtt dt t |ƒƒtd¡|S|^}}y |j |_ Wntk rªt|ƒ|_ YnX||||ŽWdQRXWdd}XdS)Nz%s() arg 1 must be %srzcallable is Noneér rDz3%r is an invalid keyword argument for this function)r:rAÚ _base_typeÚ TypeErrorÚ_base_type_strÚwarningsÚwarnÚDeprecationWarningÚpoprDÚnextÚiterr rTÚAttributeErrorr)rÚnamer)r*Z callable_objr r rÚhandle»s.  z_AssertRaisesBaseContext.handle)N)r r r rrar r r rrP¯s rPc@s$eZdZeZdZdd„Zdd„ZdS)Ú_AssertRaisesContextz-an exception type or tuple of exception typescCs|S)Nr )rr r rÚ __enter__äsz_AssertRaisesContext.__enter__cCsÆ|dkrby |jj}Wntk r2t|jƒ}YnX|jrP| d ||j¡¡ql| d |¡¡n t |¡t ||jƒs|dS|  d¡|_ |j dkr–dS|j }|  t|ƒ¡sÂ| d |jt|ƒ¡¡dS)Nz{} not raised by {}z {} not raisedFTz"{}" does not match "{}")rAr r_rrTrGÚformatÚ tracebackÚ clear_framesr@Úwith_tracebackZ exceptionrSÚsearchÚpattern)rÚexc_typeÚ exc_valueÚtbÚexc_namerSr r rÚ__exit__çs(       z_AssertRaisesContext.__exit__N)r r r Ú BaseExceptionrVrXrcrnr r r rrbÞsrbc@s$eZdZeZdZdd„Zdd„ZdS)Ú_AssertWarnsContextz(a warning type or tuple of warning typescCsVx(ttj ¡ƒD]}t|ddƒri|_qWtjdd|_|j  ¡|_t  d|j ¡|S)NÚ__warningregistry__T)ÚrecordÚalways) ÚlistrÚmodulesÚvaluesÚgetattrrqrYÚcatch_warningsÚwarnings_managerrcÚ simplefilterrA)rÚvr r rrc s   z_AssertWarnsContext.__enter__cCs|j |||¡|dk rdSy |jj}Wntk rFt|jƒ}YnXd}xb|jD]X}|j}t||jƒslqT|dkrx|}|j dk r”|j   t|ƒ¡s”qT||_ |j |_ |j |_ dSW|dk rÒ| d |j jt|ƒ¡¡|jrî| d ||j¡¡n| d |¡¡dS)Nz"{}" does not match "{}"z{} not triggered by {}z{} not triggered)ryrnrAr r_rrYÚmessager-rSrhZwarningÚfilenameÚlinenorGrdrirT)rrjrkrlrmZfirst_matchingÚmÚwr r rrns8      z_AssertWarnsContext.__exit__N)r r r ÚWarningrVrXrcrnr r r rrps rpÚ_LoggingWatcherÚrecordsÚoutputc@s$eZdZdd„Zdd„Zdd„ZdS)Ú_CapturingHandlercCstj |¡tggƒ|_dS)N)ÚloggingÚHandlerrr‚Úwatcher)rr r rrAs z_CapturingHandler.__init__cCsdS)Nr )rr r rÚflushEsz_CapturingHandler.flushcCs*|jj |¡| |¡}|jj |¡dS)N)rˆrƒrrdr„)rrrrDr r rÚemitHs z_CapturingHandler.emitN)r r r rr‰rŠr r r rr…<sr…c@s(eZdZdZdd„Zdd„Zdd„ZdS) Ú_AssertLogsContextz"%(levelname)s:%(name)s:%(message)scCs:t ||¡||_|r(tj ||¡|_ntj|_d|_dS)N) rBrÚ logger_namer†Z _nameToLevelÚgetÚlevelÚINFOrD)rr!rŒrŽr r rrTs  z_AssertLogsContext.__init__cCs’t|jtjƒr|j}|_nt |j¡}|_t |j¡}tƒ}|  |¡|j |_ |j dd…|_ |j |_|j|_|g|_ | |j ¡d|_|j S)NF)r-rŒr†ZLoggerÚloggerZ getLoggerZ FormatterÚLOGGING_FORMATr…Z setFormatterrˆÚhandlersÚ old_handlersrŽÚ old_levelÚ propagateÚ old_propagateÚsetLevel)rrÚ formatterZhandlerr r rrc]s   z_AssertLogsContext.__enter__cCs`|j|j_|j|j_|j |j¡|dk r.dSt|jj ƒdkr\|  d  t   |j¡|jj¡¡dS)NFrz-no logs of level {} or higher triggered on {})r“rr’r–r•r—r”ÚlenrˆrƒrGrdr†Z getLevelNamerŽr`)rrjrkrlr r rrnns  z_AssertLogsContext.__exit__N)r r r r‘rrcrnr r r rr‹Os r‹c@seZdZdd„ZdS)Ú_OrderedChainMapccs@tƒ}x4|jD]*}x$|D]}||kr| |¡|VqWqWdS)N)ÚsetÚmapsÚadd)rÚseenÚmappingÚkr r rÚ__iter__|s    z_OrderedChainMap.__iter__N)r r r r¡r r r rrš{sršc@sØeZdZeZdZdZdZdZd‡dd„Z dd „Z d d „Z d d „Z dd„Z edd„ƒZedd„ƒZdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zejefd&d'„ƒZd(d)„Zd*d+„Zd,d-„Z dˆd/d0„Z!d1d2„Z"d3d4„Z#d5d6„Z$d7d8„Z%d‰d9d:„Z&dŠd;d<„Z'd‹d=d>„Z(d?d@„Z)dAdB„Z*dCdD„Z+dŒdEdF„Z,dGdH„Z-ddIdJ„Z.dŽdKdL„Z/ddMdN„Z0ddOdP„Z1d‘dQdR„Z2d’dSdT„Z3dUdV„Z4d“dWdX„Z5d”dYdZ„Z6d•d[d\„Z7d–d]d^„Z8d—d_d`„Z9d˜dadb„Z:d™dcdd„Z;dšdedf„Zddkdl„Z?dždmdn„Z@dŸdodp„ZAd dqdr„ZBd¡dsdt„ZCd¢dudv„ZDd£dwdx„ZEd¤dydz„ZFd¥d{d|„ZGd}d~„ZHdd€„ZId¦dd‚„ZJd§dƒd„„ZKd…d†„ZLeLe/ƒZMZNeLe0ƒZOZPeLe1ƒZQZReLe2ƒZSZTeLe(ƒZUZVeLe*ƒZWeLe'ƒZXeLeHƒZYeLeJƒZZeLeKƒZ[d.S)¨ÚTestCaseTi€iFÚrunTestcCs¶||_d|_d|_yt||ƒ}Wn.tk rN|dkrJtd|j|fƒ‚Yn X|j|_g|_d|_ i|_ |  t d¡|  t d¡|  td¡|  td¡|  td¡|  td¡dS) NzNo testr£zno such test method in %s: %sÚassertDictEqualÚassertListEqualÚassertTupleEqualÚassertSetEqualÚassertMultiLineEqual)Ú_testMethodNameÚ_outcomeÚ_testMethodDocrwr_Ú ValueErrorÚ __class__Ú__doc__Ú _cleanupsÚ_subtestÚ_type_equality_funcsÚaddTypeEqualityFuncÚdictrtr>r›Ú frozensetr)rZ methodNameÚ testMethodr r rr´s&     zTestCase.__init__cCs||j|<dS)N)r±)rZtypeobjÚfunctionr r rr²Ôs zTestCase.addTypeEqualityFunccOstt|ƒdkr|^}}}n>|s&tdƒ‚n0d|krB| d¡}|^}}ntdt|ƒdƒ‚t|ƒ}|j |||f¡dS)Néz>descriptor 'addCleanup' of 'TestCase' object needs an argumentr¶z:addCleanup expected at least 1 positional argument, got %dr)r™rWr\r>r¯r)r)r*rr¶r r rÚ addCleanupãs     zTestCase.addCleanupcCsdS)Nr )rr r rÚsetUpøszTestCase.setUpcCsdS)Nr )rr r rÚtearDownüszTestCase.tearDowncCsdS)Nr )Úclsr r rÚ setUpClassszTestCase.setUpClasscCsdS)Nr )r»r r rÚ tearDownClassszTestCase.tearDownClasscCsdS)Nrr )rr r rÚcountTestCasesszTestCase.countTestCasescCst ¡S)N)rZ TestResult)rr r rÚdefaultTestResult szTestCase.defaultTestResultcCs$|j}|r | ¡ d¡d ¡SdS)NÚ r)r«ÚstripÚsplit)rÚdocr r rÚshortDescriptionszTestCase.shortDescriptioncCsdt|jƒ|jfS)Nz%s.%s)rr­r©)rr r rÚidsz TestCase.idcCs t|ƒt|ƒk rtS|j|jkS)N)r.ÚNotImplementedr©)rÚotherr r rÚ__eq__szTestCase.__eq__cCstt|ƒ|jfƒS)N)Úhashr.r©)rr r rÚ__hash__"szTestCase.__hash__cCsd|jt|jƒfS)Nz%s (%s))r©rr­)rr r rÚ__str__%szTestCase.__str__cCsdt|jƒ|jfS)Nz<%s testMethod=%s>)rr­r©)rr r rÚ__repr__(szTestCase.__repr__cCs<t|ddƒ}|dk r |||ƒnt dtd¡| |¡dS)NÚaddSkipz4TestResult has no addSkip method, skips not reportedr·)rwrYrZÚRuntimeWarningÚ addSuccess)rrr!r+rÍr r rÚ_addSkip,s   zTestCase._addSkipc ks´|jdks|jjsdVdS|j}|dkr4t|ƒ}n |j |¡}t|||ƒ|_zX|jj|jdd dVWdQRX|jjs˜|jj }|dk r¤|j r¤t ‚n |jj r¤t ‚Wd||_XdS)NT)r") rªrr°ršÚparamsÚ new_childÚ_SubTestr$rrZfailfastrr)rrDrÑÚparentZ params_maprr r rÚsubTest5s$  zTestCase.subTestcCsdx^|D]V\}}t|tƒr*| |j||¡q|dk rt|d|jƒrP| ||¡q| ||¡qWdS)Nr)r-rÓrr!r@rEÚ addFailureZaddError)rrrÚtestr r r rÚ_feedErrorsToResultTs zTestCase._feedErrorsToResultcCsDy |j}Wn*tk r4t dt¡| |¡Yn X|||ƒdS)Nz@TestResult has no addExpectedFailure method, reporting as passes)ÚaddExpectedFailurer_rYrZrÎrÏ)rrr rÙr r rÚ_addExpectedFailure^s zTestCase._addExpectedFailurec Cshy |j}WnPtk rZt dt¡y td‚Wn$tk rT| |t ¡¡YnXYn X||ƒdS)NzCTestResult has no addUnexpectedSuccess method, reporting as failure) ÚaddUnexpectedSuccessr_rYrZrÎrrÖrr )rrrÛr r rÚ_addUnexpectedSuccesshs  zTestCase._addUnexpectedSuccessNc Cs|}|dkr.| ¡}t|ddƒ}|dk r.|ƒ| |¡t||jƒ}t|jddƒs^t|ddƒrœz,t|jddƒpxt|ddƒ}| |||¡Wd| |¡XdSt|ddƒ}t|ddƒ}|pº|}t|ƒ} zð| |_|   |¡|  ¡WdQRX| j r<|| _ | j |dd |ƒWdQRXd| _ |   |¡|  ¡WdQRX| ¡x"| jD]\} } | || | ¡qLW| || j¡| j r²|r¨| jrœ| || j¡n | |¡n | |¡|S| |¡|dkræt|d dƒ} | dk ræ| ƒ| j ¡d| _d|_XdS) NÚ startTestRunr1Fr2Úr9T)r"Ú stopTestRun)r¿rwZ startTestr©r­rÐZstopTestrrªr$r¹rrrºÚ doCleanupsrrØrrrÚrÜrÏÚclear) rrZ orig_resultrÝrµZskip_whyZexpecting_failure_methodZexpecting_failure_classrÚoutcomer×r+rßr r rÚrunwsh               z TestCase.runc CsN|jp tƒ}x:|jrF|j ¡\}}}| |¡|||ŽWdQRXqW|jS)N)rªrr¯r\r$r)rrâr¶r)r*r r rrà¼s   zTestCase.doCleanupscOs |j||ŽS)N)rã)rr)Úkwdsr r rÚ__call__ÉszTestCase.__call__cCsJ| ¡t||jƒƒ| ¡x&|jrD|j d¡\}}}|||Žq WdS)Néÿÿÿÿ)r¹rwr©rºr¯r\)rr¶r)r*r r rÚdebugÌs zTestCase.debugcCs t|ƒ‚dS)N)r )rr+r r rÚskipTestÕszTestCase.skipTestcCs| |¡‚dS)N)rE)rrDr r rÚfailÙsz TestCase.failcCs&|r"| |dt|ƒ¡}| |¡‚dS)Nz%s is not false)rCrrE)rÚexprrDr r rÚ assertFalseÝszTestCase.assertFalsecCs&|s"| |dt|ƒ¡}| |¡‚dS)Nz%s is not true)rCrrE)rrêrDr r rÚ assertTrueãszTestCase.assertTruecCsP|js|p |S|dkr|Sy d||fStk rJdt|ƒt|ƒfSXdS)Nz%s : %s)Ú longMessageÚUnicodeDecodeErrorr)rrDrFr r rrCés  zTestCase._formatMessagecOs$t||ƒ}z| d||¡Sd}XdS)NÚ assertRaises)rbra)rÚexpected_exceptionr)r*Úcontextr r rrïþs zTestCase.assertRaisescOst||ƒ}| d||¡S)NÚ assertWarns)rpra)rÚexpected_warningr)r*rñr r rròs zTestCase.assertWarnscCs t|||ƒS)N)r‹)rrrŽr r rÚ assertLogs>szTestCase.assertLogscCsFt|ƒt|ƒkr@|j t|ƒ¡}|dk r@t|tƒrs zTestCase.assertListEqualcCs|j|||tddS)N)r)rr>)rZtuple1Ztuple2rDr r rr¦Js zTestCase.assertTupleEqualc Cshy| |¡}Wn^tk r>}z| d|¡Wdd}~XYn0tk rl}z| d|¡Wdd}~XYnXy| |¡}Wn^tk r¬}z| d|¡Wdd}~XYn0tk rÚ}z| d|¡Wdd}~XYnX|sè|sèdSg}|r| d¡x|D]}| t|ƒ¡qW|rH| d¡x|D]}| t|ƒ¡q0Wd |¡} | | || ¡¡dS)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À)Ú differencerWrér_rÚreprrrC) rZset1Zset2rDZ difference1r#Z difference2ÚlinesÚitemrFr r rr§Us2        zTestCase.assertSetEqualcCs2||kr.dt|ƒt|ƒf}| | ||¡¡dS)Nz%s not found in %s)rrérC)rÚmemberÚ containerrDrFr r rÚassertIn€s zTestCase.assertIncCs2||kr.dt|ƒt|ƒf}| | ||¡¡dS)Nz%s unexpectedly found in %s)rrérC)rrrrDrFr r rÚ assertNotIn‡s zTestCase.assertNotIncCs2||k r.dt|ƒt|ƒf}| | ||¡¡dS)Nz %s is not %s)rrérC)rÚexpr1Úexpr2rDrFr r rÚassertIsŽs zTestCase.assertIscCs,||kr(dt|ƒf}| | ||¡¡dS)Nzunexpectedly identical: %s)rrérC)rrrrDrFr r rÚ assertIsNot•szTestCase.assertIsNotc Cs~| |td¡| |td¡||krzdt||ƒ}dd t t |¡ ¡t |¡ ¡¡¡}|  ||¡}|  |  ||¡¡dS)Nz"First argument is not a dictionaryz#Second argument is not a dictionaryz%s != %srÀ) ÚassertIsInstancer³rrr r r r r rrérC)rZd1Zd2rDrFrr r rr¤›s   zTestCase.assertDictEqualc CsÒt dt¡g}g}xX| ¡D]L\}}||kr:| |¡q|||kr| dt|ƒt|ƒt||ƒf¡qW|sz|szdSd}|ršdd dd„|Dƒ¡}|r¼|rª|d7}|d d |¡7}| | ||¡¡dS) Nz&assertDictContainsSubset is deprecatedz%s, expected: %s, actual: %srÞz Missing: %sú,css|]}t|ƒVqdS)N)r)r;rr r rr=ºsz4TestCase.assertDictContainsSubset..z; zMismatched values: %s) rYrZr[ÚitemsrrrrérC) rZsubsetZ dictionaryrDÚmissingZ mismatchedÚkeyÚvaluerFr r rÚassertDictContainsSubset§s,     z!TestCase.assertDictContainsSubsetc Cs¦t|ƒt|ƒ}}yt |¡}t |¡}Wntk rHt||ƒ}YnX||krVdSt||ƒ}|r¢d}dd„|Dƒ}d |¡} | || ¡}| ||¡}|  |¡dS)NzElement counts were not equal: cSsg|] }d|‘qS)z First has %d, Second has %d: %rr )r;rr r rú ßsz-TestCase.assertCountEqual..rÀ) rtÚ collectionsÚCounterrWrrrrrCré) rrör÷rDZ first_seqZ second_seqZ differencesrFrrr r rÚassertCountEqualÄs      zTestCase.assertCountEqualcCsÚ| |td¡| |td¡||krÖt|ƒ|jks@t|ƒ|jkrN| |||¡|jdd}|jdd}t|ƒdkr”| d¡|kr”|dg}|dg}dt||ƒ}dd  t   ||¡¡}|  ||¡}|  |  ||¡¡dS) NzFirst argument is not a stringzSecond argument is not a stringT)Úkeependsrz rÀz%s != %srÞ)r!rr™Ú_diffThresholdrõr rÁrrr r rrérC)rrör÷rDZ firstlinesZ secondlinesrFrr r rr¨ås     zTestCase.assertMultiLineEqualcCs2||ks.dt|ƒt|ƒf}| | ||¡¡dS)Nz%s not less than %s)rrérC)rÚaÚbrDrFr r rÚ assertLessùszTestCase.assertLesscCs2||ks.dt|ƒt|ƒf}| | ||¡¡dS)Nz%s not less than or equal to %s)rrérC)rr.r/rDrFr r rÚassertLessEqualÿszTestCase.assertLessEqualcCs2||ks.dt|ƒt|ƒf}| | ||¡¡dS)Nz%s not greater than %s)rrérC)rr.r/rDrFr r rÚ assertGreaterszTestCase.assertGreatercCs2||ks.dt|ƒt|ƒf}| | ||¡¡dS)Nz"%s not greater than or equal to %s)rrérC)rr.r/rDrFr r rÚassertGreaterEqual szTestCase.assertGreaterEqualcCs,|dk r(dt|ƒf}| | ||¡¡dS)Nz%s is not None)rrérC)rr'rDrFr r rÚ assertIsNoneszTestCase.assertIsNonecCs"|dkrd}| | ||¡¡dS)Nzunexpectedly None)rérC)rr'rDrFr r rÚassertIsNotNoneszTestCase.assertIsNotNonecCs0t||ƒs,dt|ƒ|f}| | ||¡¡dS)Nz%s is not an instance of %r)r-rrérC)rr'r»rDrFr r rr!s zTestCase.assertIsInstancecCs0t||ƒr,dt|ƒ|f}| | ||¡¡dS)Nz%s is an instance of %r)r-rrérC)rr'r»rDrFr r rÚassertNotIsInstance$s zTestCase.assertNotIsInstancecOst|||ƒ}| d||¡S)NÚassertRaisesRegex)rbra)rrðrSr)r*rñr r rr7*s zTestCase.assertRaisesRegexcOst|||ƒ}| d||¡S)NÚassertWarnsRegex)rpra)rrórSr)r*rñr r rr8:s zTestCase.assertWarnsRegexcCsJt|ttfƒrt |¡}| |¡sFd|j|f}| ||¡}| |¡‚dS)Nz&Regex didn't match: %r not found in %r) r-rÚbytesrQrRrhrirCrE)rÚtextrSrDrFr r rÚ assertRegexMs    zTestCase.assertRegexcCs`t|ttfƒrt |¡}| |¡}|r\d|| ¡| ¡…|j|f}|  ||¡}|  |¡‚dS)Nz"Regex matched: %r matches %r in %r) r-rr9rQrRrhÚstartÚendrirCrE)rr:Zunexpected_regexrDÚmatchrFr r rÚassertNotRegexYs   zTestCase.assertNotRegexcs‡fdd„}|S)Ncs t d ˆj¡td¡ˆ||ŽS)NzPlease use {0} instead.r·)rYrZrdr r[)r)r*)Ú original_funcr rÚdeprecated_funcis z,TestCase._deprecate..deprecated_funcr )r@rAr )r@rÚ _deprecatehs zTestCase._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 ÚAssertionErrorrErírr-Z_classSetupFailedrr²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ìrCrïròrôrørõrùrúrrrrr¥r¦r§rrrr r¤r'r+r¨r0r1r2r3r4r5r!r6r7r8r;r?rBZfailUnlessEqualZ assertEqualsZ failIfEqualZassertNotEqualsZfailUnlessAlmostEqualZassertAlmostEqualsZfailIfAlmostEqualZassertNotAlmostEqualsZ failUnlessZassert_ZfailUnlessRaisesZfailIfZassertRaisesRegexpZassertRegexpMatchesZassertNotRegexpMatchesr r r rr¢…s¤!        E     !     , " c +      !               r¢csfeZdZd‡fdd„ Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z ‡Z S)ÚFunctionTestCaseNcs*tt|ƒ ¡||_||_||_||_dS)N)ÚsuperrFrÚ _setUpFuncÚ _tearDownFuncÚ _testFuncÚ _description)rZtestFuncr¹rºÚ description)r­r rr‡s zFunctionTestCase.__init__cCs|jdk r| ¡dS)N)rH)rr r rr¹Žs zFunctionTestCase.setUpcCs|jdk r| ¡dS)N)rI)rr r rrº’s zFunctionTestCase.tearDowncCs | ¡dS)N)rJ)rr r rr£–szFunctionTestCase.runTestcCs|jjS)N)rJr )rr r rrÅ™szFunctionTestCase.idcCs@t||jƒstS|j|jko>|j|jko>|j|jko>|j|jkS)N)r-r­rÆrHrIrJrK)rrÇr r rrÈœs     zFunctionTestCase.__eq__cCstt|ƒ|j|j|j|jfƒS)N)rÉr.rHrIrJrK)rr r rrÊ¥szFunctionTestCase.__hash__cCsdt|jƒ|jjfS)Nz%s (%s))rr­rJr )rr r rrË©s zFunctionTestCase.__str__cCsdt|jƒ|jfS)Nz <%s tec=%s>)rr­rJ)rr r rrÌ­s zFunctionTestCase.__repr__cCs2|jdk r|jS|jj}|r.| d¡d ¡p0dS)NrÀr)rKrJr®rÂrÁ)rrÃr r rrıs z!FunctionTestCase.shortDescription)NNN)r r r rr¹rºr£rÅrÈrÊrËrÌrÄÚ __classcell__r r )r­rrF~s  rFcsDeZdZ‡fdd„Zdd„Zdd„Zdd„Zd d „Zd d „Z‡Z S) rÓcs(tƒ ¡||_||_||_|j|_dS)N)rGrÚ_messager!rÑrE)rr!r|rÑ)r­r rrºs  z_SubTest.__init__cCs tdƒ‚dS)Nzsubtests cannot be run directly)r)rr r rr£Ász_SubTest.runTestcCs^g}|jtk r | d |j¡¡|jrPd dd„|j ¡Dƒ¡}| d |¡¡d |¡p\dS)Nz[{}]z, css|]\}}d ||¡VqdS)z{}={!r}N)rd)r;r r{r r rr=Êsz+_SubTest._subDescription..z({})ú z ())rNrErrdrÑrr#)rÚpartsZ params_descr r rÚ_subDescriptionÄs z_SubTest._subDescriptioncCsd |j ¡| ¡¡S)Nz{} {})rdr!rÅrQ)rr r rrÅÏsz _SubTest.idcCs |j ¡S)N)r!rÄ)rr r rrÄÒsz_SubTest.shortDescriptioncCsd |j| ¡¡S)Nz{} {})rdr!rQ)rr r rrËØsz_SubTest.__str__) r r r rr£rQrÅrÄrËrMr r )r­rrÓ¸s   rÓ)2rr/r rIr†r rQrYr)r%rerÞrÚutilrrrrrZ __unittestÚobjectrErrLr rrrr(r5r7r8rr:rBrKrOrPrbrpÚ namedtupler‚r‡r…r‹ÚChainMapršr¢rFrÓr r r rÚs^ (  /%5 , :