PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  qY`@sGddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z mZmZmZmZdZeZdZGdddeZGd d d eZGd d d eZGd ddeZddZddZddZddZddZddZ GdddZ!Gddde!Z"Gdd d e"Z#Gd!d"d"e"Z$ej%d#d$d%gZ&Gd&d'd'ej'Z(Gd(d)d)e!Z)Gd*d+d+eZ*Gd,d-d-e*Z+Gd.d/d/e*Z,dS)0N)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@seZdZdS)SkipTestN)__name__ __module__ __qualname__r r #/opt/python35/lib/python3.5/case.pyr s r c@seZdZdS) _ShouldStopN)r r r r r r rr!s rc@seZdZdS)_UnexpectedSuccessN)r r r r r r rr&s rc@s7eZdZdddZejdddZdS)_OutcomeNcCsLd|_||_t|d|_d|_g|_d|_g|_dS)NF addSubTestT)expecting_failurerhasattrresult_supports_subtestssuccessskippedexpectedFailureerrors)selfrr r r__init__-s     z_Outcome.__init__Fccs |j}d|_zy dVWntk r5Yntk r~}z*d|_|jj|t|fWYdd}~Xntk rYnvtj}|j r||_ nd|_|j j||fd}Yn)X|j r|jr|j j|dfWd|jo||_XdS)NTF) rKeyboardInterruptr rappendstrrsysexc_inforrrr)r test_caseisTestZ old_successer r r rtestPartExecutor6s*     .      z_Outcome.testPartExecutor)r r r r contextlibcontextmanagerr$r r r rr,s  rcCs|S)Nr )objr r r_idTsr(csfdd}|S)NcsLt|ts6tj|fdd}|}d|_|_|S)NcstdS)N)r )argskwargs)reasonr r skip_wrapper]sz-skip..decorator..skip_wrapperT) isinstancetype functoolswraps__unittest_skip____unittest_skip_why__) test_itemr,)r+r r decorator[s !  zskip..decoratorr )r+r4r )r+rskipWs r5cCs|rt|StS)N)r5r() conditionr+r r rskipIfgs r7cCs|st|StS)N)r5r()r6r+r r r skipUnlessos r8cCs d|_|S)NT)__unittest_expecting_failure__)r3r r rrws rcsHt|tr,tfdd|DSt|toGt|S)Nc3s|]}t|VqdS)N) _is_subtype).0r#)basetyper r }sz_is_subtype..)r-tupleallr. issubclass)expectedr<r )r<rr:{sr:c@s(eZdZddZddZdS)_BaseTestCaseContextcCs ||_dS)N)r!)rr!r r rrsz_BaseTestCaseContext.__init__cCs.|jj|j|}|jj|dS)N)r!_formatMessagemsgfailureException)r standardMsgrDr r r _raiseFailuresz"_BaseTestCaseContext._raiseFailureN)r r r rrGr r r rrBs  rBc@s+eZdZdddZddZdS)_AssertRaisesBaseContextNcCs\tj||||_||_|dk r=tj|}||_d|_d|_dS)N) rBrrAr!recompileexpected_regexobj_namerD)rrAr!rKr r rrs     z!_AssertRaisesBaseContext.__init__cCszt|j|js1td||jf|r`|ddkr`tjdtdf}|s|jdd|_ |rtjdt t |td|S|^}}y|j |_ Wn!tk rt||_ YnX||||WdQRXWdd}XdS)Nz%s() arg 1 must be %srzcallable is NonerDz3%r is an invalid keyword argument for this function)r:rA _base_type TypeError_base_type_strwarningswarnDeprecationWarningpoprDnextiterr rLAttributeErrorr)rnamer)r*Z callable_objr r rhandles.      z_AssertRaisesBaseContext.handle)r r r rrYr r r rrHs  rHc@s4eZdZeZdZddZddZdS)_AssertRaisesContextz-an exception type or tuple of exception typescCs|S)Nr )rr r r __enter__sz_AssertRaisesContext.__enter__c Cs |dkry|jj}Wn!tk r?t|j}YnX|jrh|jdj||jq|jdj|n tj|t ||jsdS|j d|_ |j dkrdS|j }|j t|s |jdj|jt|dS)Nz{} not raised by {}z {} not raisedFTz"{}" does not match "{}")rAr rWrrLrGformat traceback clear_framesr@with_traceback exceptionrKsearchpattern)rexc_type exc_valuetbexc_namerKr r r__exit__s(      z_AssertRaisesContext.__exit__N)r r r BaseExceptionrNrPr[rgr r r rrZs  rZc@s4eZdZeZdZddZddZdS)_AssertWarnsContextz(a warning type or tuple of warning typescCssx2tjjD]!}t|ddri|_qWtjdd|_|jj|_tj d|j |S)N__warningregistry__recordTalways) rmodulesvaluesgetattrrjrQcatch_warningswarnings_managerr[ simplefilterrA)rvr r rr[s z_AssertWarnsContext.__enter__c Csd|jj||||dk r&dSy|jj}Wn!tk rYt|j}YnXd}x|jD]}|j}t||jsqj|dkr|}|j dk r|j j t| rqj||_ |j |_ |j |_ dSW|dk r"|jdj|j jt||jrJ|jdj||jn|jdj|dS)Nz"{}" does not match "{}"z{} not triggered by {}z{} not triggered)rqrgrAr rWrrQmessager-rKrawarningfilenamelinenorGr\rbrL)rrcrdrerfZfirst_matchingmwr r rrgs8          z_AssertWarnsContext.__exit__N)r r r WarningrNrPr[rgr r r rris  ri_LoggingWatcherrecordsoutputc@s4eZdZddZddZddZdS)_CapturingHandlercCs&tjj|tgg|_dS)N)loggingHandlerrr{watcher)rr r rrsz_CapturingHandler.__init__cCsdS)Nr )rr r rflushsz_CapturingHandler.flushcCs9|jjj||j|}|jjj|dS)N)rr|rr\r})rrkrDr r remit"sz_CapturingHandler.emitN)r r r rrrr r r rr~s   r~c@s:eZdZdZddZddZddZdS) _AssertLogsContextz"%(levelname)s:%(name)s:%(message)scCsStj||||_|r:tjj|||_n tj|_d|_dS)N) rBr logger_namer _nameToLevelgetlevelINFOrD)rr!rrr r rr.s   z_AssertLogsContext.__init__cCst|jtjr(|j}|_ntj|j}|_tj|j}t}|j ||j |_ |j dd|_ |j |_|j|_|g|_ |j|j d|_|j S)NF)r-rrLoggerlogger getLogger FormatterLOGGING_FORMATr~ setFormatterrhandlers old_handlersr old_level propagate old_propagatesetLevel)rr formatterhandlerr r rr[7s       z_AssertLogsContext.__enter__cCs|j|j_|j|j_|jj|j|dk rAdSt|jj dkr|j dj t j |j|jjdS)NFrz-no logs of level {} or higher triggered on {})rrrrrrrlenrr|rGr\r getLevelNamerrX)rrcrdrer r rrgHs z_AssertLogsContext.__exit__N)r r r rrr[rgr r r rr)s  rc@sGeZdZeZdZdZdZdZddd Z d d Z d d Z ddZ ddZ eddZeddZddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zejed(d)Zd*d+Zd,d-Zd.d/Z d0d1d2Z!d3d4Z"d5d6Z#d7d8Z$d9d:Z%d0d;d<Z&d0d=d>Z'd0d?d@Z(dAdBZ)dCdDZ*dEdFZ+d0d0dGdHZ,dIdJZ-d0dKdLZ.d0dMdNZ/d0dOdPZ0d0d0d0dQdRZ1d0d0d0dSdTZ2d0d0dUdVZ3dWdXZ4d0dYdZZ5d0d[d\Z6d0d]d^Z7d0d_d`Z8d0dadbZ9d0dcddZ:d0dedfZ;d0dgdhZ<d0didjZ=d0dkdlZ>d0dmdnZ?d0dodpZ@d0dqdrZAd0dsdtZBd0dudvZCd0dwdxZDd0dydzZEd0d{d|ZFd0d}d~ZGddZHddZId0ddZJd0ddZKddZLeLe/ZMZNeLe0ZOZPeLe1ZQZReLe2ZSZTeLe(ZUZVeLe*ZWeLe'ZXeLeHZYeLeJZZeLeKZ[d0S)TestCaseTPFrunTestc Cs||_d|_d|_yt||}Wn7tk rg|dkrctd|j|fYn X|j|_g|_d|_ i|_ |j t d|j t d|j td|j td|j td|j tddS) NzNo testrzno such test method in %s: %sassertDictEqualassertListEqualassertTupleEqualassertSetEqualassertMultiLineEqual)_testMethodName_outcome_testMethodDocrorW ValueError __class____doc__ _cleanups_subtest_type_equality_funcsaddTypeEqualityFuncdictlistr>set frozensetr)rZ methodName testMethodr r rrs&         zTestCase.__init__cCs||j|)rrr)rr r r__repr__szTestCase.__repr__cCsRt|dd}|dk r.|||n tjdtd|j|dS)NaddSkipz4TestResult has no addSkip method, skips not reportedr)rorQrRRuntimeWarning addSuccess)rrr!r+rr r r_addSkips    zTestCase._addSkipcks|jjsdVdS|j}|dkr<tj|}n|jj|}t||||_zt|jj|jdd dVWdQRX|jj s|jj }|dk r|j rt n|jj rt Wd||_XdS)Nr"T)rrr collectionsChainMapparams new_child_SubTestr$rrZfailfastrr)rrDrparentZ params_maprr r rsubTests$         zTestCase.subTestcCsx|D]y\}}t|tr;|j|j||q|dk rt|d|jrp|j||q|j||qWdS)Nr)r-rrr!r@rE addFailureZaddError)rrrtestr r r r_feedErrorsToResults zTestCase._feedErrorsToResultc CsPy |j}Wn/tk r>tjdt|j|YnX|||dS)Nz@TestResult has no addExpectedFailure method, reporting as passes)addExpectedFailurerWrQrRrr)rrr rr r r_addExpectedFailure!s   zTestCase._addExpectedFailurecCsxy |j}WnZtk ritjdty tdWn(tk rd|j|tjYnXYn X||dS)NzCTestResult has no addUnexpectedSuccess method, reporting as failure) addUnexpectedSuccessrWrQrRrrrrr )rrrr r r_addUnexpectedSuccess+s      zTestCase._addUnexpectedSuccessNc (Cs|}|dkrC|j}t|dd}|dk rC||j|t||j}t|jddst|ddrz>t|jddpt|dd}|j|||Wd|j|XdSt|dd}t|dd}|p |}t|} z'| |_| j ||j WdQRX| j r|| _ | j |dd |WdQRXd| _ | j ||j WdQRX|jx*| jD]\} } |j|| | qW|j|| j| j r:|r-| jr|j|| jq:|j|n |j||SWd|j||dkrt|d d} | dk r| | jjd| _d|_XdS) N startTestRunr1Fr2r9r"T stopTestRun)rroZ startTestrrrZstopTestrrr$rrrr doCleanupsrrrrrrrclear) rrZ orig_resultrrZskip_whyZexpecting_failure_methodZexpecting_failure_classroutcomerr+rr r rrun:sh                     z TestCase.runc Cse|jpt}xI|jr]|jj\}}}|j||||WdQRXqW|jS)N)rrrrTr$r)rrrr)r*r r rrs  zTestCase.doCleanupscOs|j||S)N)r)rr)kwdsr r r__call__szTestCase.__call__cCsc|jt||j|jx5|jr^|jjd\}}}|||q*WdS)Nr)rrorrrrT)rrr)r*r r rdebugs    zTestCase.debugcCst|dS)N)r )rr+r r rskipTestszTestCase.skipTestcCs|j|dS)N)rE)rrDr r rfailsz TestCase.failcCs5|r1|j|dt|}|j|dS)Nz%s is not false)rCrrE)rexprrDr r r assertFalseszTestCase.assertFalsecCs5|s1|j|dt|}|j|dS)Nz%s is not true)rCrrE)rrrDr r r assertTrueszTestCase.assertTruec Csh|js|p|S|dkr#|Syd||fSWn,tk rcdt|t|fSYnXdS)Nz%s : %s) longMessageUnicodeDecodeErrorr)rrDrFr r rrCs    zTestCase._formatMessagec Os4t||}z|jd||SWdd}XdS)N assertRaises)rZrY)rexpected_exceptionr)r*contextr r rrszTestCase.assertRaisescOs"t||}|jd||S)N assertWarns)rirY)rexpected_warningr)r*rr r rrszTestCase.assertWarnscCst|||S)N)r)rrrr r r assertLogsszTestCase.assertLogscCset|t|kr^|jjt|}|dk r^t|trZt||}|S|jS)N)r.rrr-rro_baseAssertEqual)rfirstsecondZasserterr r r_getAssertEqualityFuncs zTestCase._getAssertEqualityFunccCsD||ks@dt||}|j||}|j|dS)Nz%s != %s)rrCrE)rrrrDrFr r rr1s zTestCase._baseAssertEqualcCs)|j||}|||d|dS)NrD)r)rrrrDZassertion_funcr r r assertEqual8szTestCase.assertEqualcCsG||ksC|j|dt|t|f}|j|dS)Nz%s == %s)rCrrE)rrrrDr r rassertNotEqual?s zTestCase.assertNotEqualcCs||krdS|dk r4|dk r4td|dk rt|||krZdSdt|t|t|f}nT|dkrd}tt|||dkrdSdt|t||f}|j||}|j|dS)Nz specify delta or places not bothz%s != %s within %s deltarz%s != %s within %r places)rOabsrroundrCrE)rrrplacesrDdeltarFr r rassertAlmostEqualHs&         zTestCase.assertAlmostEqualcCs|dk r$|dk r$td|dk r||k rWt|||krWdSdt|t|t|f}na|dkrd}||k rtt|||dkrdSdt|t||f}|j||}|j|dS)Nz specify delta or places not bothz%s == %s within %s deltarrz%s == %s within %r places)rOrrrrCrE)rrrrrDrrFr r rassertNotAlmostEqualos"   #   ,   zTestCase.assertNotAlmostEqualc'Cs|dk rt|j}t||sC|jd|t|ft||sz|jd|t|fnd}d}yt|}Wn"ttfk rd|}YnX|dkryt|}Wn"ttfk rd|}YnX|dkr&||krdSd|jft||}xt t ||D]} y|| } Wn0tt tfk r|d| |f7}PYnXy|| } Wn0tt tfk r|d| |f7}PYnX| | krH|d | ft| | 7}PqHW||kr3|dkr3t |t |kr3dS||kr|d |||f7}y"|d |t||f7}Wq&tt tfk r|d ||f7}Yq&Xnx||kr&|d |||f7}y"|d |t||f7}Wn/tt tfk r%|d||f7}YnX|} ddj tjtj|jtj|j} |j| | } |j|| }|j|dS)NzFirst sequence is not a %s: %szSecond sequence is not a %s: %sZsequencez(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. zFirst 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-rErrrONotImplementedError capitalizerrangemin IndexErrorr.joindifflibndiffpprintpformat splitlines_truncateMessagerCr)rZseq1Zseq2rDseq_typeZ seq_type_nameZ differingZlen1Zlen2iZitem1Zitem2rFdiffMsgr r rassertSequenceEquals              zTestCase.assertSequenceEqualcCsA|j}|dks't||kr/||S|tt|S)N)maxDiffr DIFF_OMITTED)rrtdiffZmax_diffr r rr s zTestCase._truncateMessagecCs|j|||dtdS)Nr )rr)rZlist1Zlist2rDr r rrs zTestCase.assertListEqualcCs|j|||dtdS)Nr )rr>)rZtuple1Ztuple2rDr r rrs zTestCase.assertTupleEqualc Csy|j|}Wnktk rK}z|jd|WYdd}~Xn6tk r}z|jd|WYdd}~XnXy|j|}Wnktk r}z|jd|WYdd}~Xn6tk r}z|jd|WYdd}~XnX|p |sdSg}|rO|jdx!|D]}|jt|q2W|r|jdx!|D]}|jt|qiWdj|} |j|j|| 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) differencerOrrWrreprrrC) rZset1Zset2rDZ difference1r#Z difference2linesitemrFr r rrs2 #$#$     zTestCase.assertSetEqualcCsE||krAdt|t|f}|j|j||dS)Nz%s not found in %s)rrrC)rmember containerrDrFr r rassertIn;s  zTestCase.assertIncCsE||krAdt|t|f}|j|j||dS)Nz%s unexpectedly found in %s)rrrC)rrrrDrFr r r assertNotInBs  zTestCase.assertNotIncCsE||k rAdt|t|f}|j|j||dS)Nz %s is not %s)rrrC)rexpr1expr2rDrFr r rassertIsIs  zTestCase.assertIscCs<||kr8dt|f}|j|j||dS)Nzunexpectedly identical: %s)rrrC)rrrrDrFr r r assertIsNotPs zTestCase.assertIsNotcCs|j|td|j|td||krdt||}ddjtjtj|jtj|j}|j ||}|j |j ||dS)Nz"First argument is not a dictionaryz#Second argument is not a dictionaryz%s != %sr) assertIsInstancerrrrrr r r r rrC)rZd1Zd2rDrFrr r rrVs zTestCase.assertDictEqualc Cstjdtg}g}xv|jD]h\}}||krQ|j|q)|||kr)|jdt|t|t||fq)W|p|sdSd}|rddjdd|D}|r|r|d7}|d dj|7}|j|j||dS) Nz&assertDictContainsSubset is deprecatedz%s, expected: %s, actual: %srz Missing: %s,css|]}t|VqdS)N)r)r;rxr r rr=usz4TestCase.assertDictContainsSubset..z; zMismatched values: %s) rQrRrSitemsrrrrrC) rZsubsetZ dictionaryrDmissingZ mismatchedkeyvaluerFr r rassertDictContainsSubsetbs,     z!TestCase.assertDictContainsSubsetc Cst|t|}}y"tj|}tj|}Wn!tk r^t||}Yn X||krodSt||}|rd}dd|D}dj|} |j|| }|j||}|j |dS)NzElement counts were not equal: cSsg|]}d|qS)z First has %d, Second has %d: %rr )r;rr r r s z-TestCase.assertCountEqual..r) rrCounterrOrrrr rCr) rrrrDZ first_seqZ second_seqZ differencesrFrrr r rassertCountEquals   zTestCase.assertCountEqualcCs5|j|td|j|td||kr1t||jks\t||jkro|j||||jdd}|jdd}t|dkr|jd|kr|dg}|dg}dt||}dd jt j ||}|j ||}|j |j ||dS) NzFirst argument is not a stringzSecond argument is not a stringkeependsTrz rz%s != %sr)r rr_diffThresholdrr rrrrrr rrC)rrrrDZ firstlinesZ secondlinesrFrr r rrs '  zTestCase.assertMultiLineEqualcCsE||ksAdt|t|f}|j|j||dS)Nz%s not less than %s)rrrC)rabrDrFr r r assertLesss zTestCase.assertLesscCsE||ksAdt|t|f}|j|j||dS)Nz%s not less than or equal to %s)rrrC)rr,r-rDrFr r rassertLessEquals zTestCase.assertLessEqualcCsE||ksAdt|t|f}|j|j||dS)Nz%s not greater than %s)rrrC)rr,r-rDrFr r r assertGreaters zTestCase.assertGreatercCsE||ksAdt|t|f}|j|j||dS)Nz"%s not greater than or equal to %s)rrrC)rr,r-rDrFr r rassertGreaterEquals zTestCase.assertGreaterEqualcCs<|dk r8dt|f}|j|j||dS)Nz%s is not None)rrrC)rr'rDrFr r r assertIsNones zTestCase.assertIsNonecCs/|dkr+d}|j|j||dS)Nzunexpectedly None)rrC)rr'rDrFr r rassertIsNotNones zTestCase.assertIsNotNonecCsBt||s>dt||f}|j|j||dS)Nz%s is not an instance of %r)r-rrrC)rr'rrDrFr r rr szTestCase.assertIsInstancecCsBt||r>dt||f}|j|j||dS)Nz%s is an instance of %r)r-rrrC)rr'rrDrFr r rassertNotIsInstanceszTestCase.assertNotIsInstancecOs%t|||}|jd||S)NassertRaisesRegex)rZrY)rrrKr)r*rr r rr5s zTestCase.assertRaisesRegexcOs%t|||}|jd||S)NassertWarnsRegex)rirY)rrrKr)r*rr r rr6szTestCase.assertWarnsRegexcCskt|ttfr$tj|}|j|sgd|j|f}|j||}|j|dS)Nz&Regex didn't match: %r not found in %r) r-rbytesrIrJrarbrCrE)rtextrKrDrFr r r assertRegexszTestCase.assertRegexcCst|ttfr$tj|}|j|}|rd||j|j|j|f}|j ||}|j |dS)Nz"Regex matched: %r matches %r in %r) r-rr7rIrJrastartendrbrCrE)rr8Zunexpected_regexrDmatchrFr r rassertNotRegexs zTestCase.assertNotRegexcsfdd}|S)Ncs,tjdjjtd||S)NzPlease use {0} instead.r)rQrRr\r rS)r)r*) original_funcr rdeprecated_func$s z,TestCase._deprecate..deprecated_funcr )r>r?r )r>r _deprecate#szTestCase._deprecateii)\r r r AssertionErrorrErrr+Z_classSetupFailedrrrrr classmethodrrrrrrrrrrrr%r&_subtest_msg_sentinelrrrrrrrrrrrrrCrrrrrrrrrrr rrrrrrrrr&r)rr.r/r0r1r2r3r r4r5r6r9r=r@ZfailUnlessEqualZ assertEqualsZ failIfEqualZassertNotEqualsZfailUnlessAlmostEqualZassertAlmostEqualsZfailIfAlmostEqualZassertNotAlmostEqualsZ failUnlessZassert_ZfailUnlessRaisesZfailIfZassertRaisesRegexpZassertRegexpMatchesZassertNotRegexpMatchesr r r rrUs !             E    !   & c   + !        rcseZdZdddfddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ S)FunctionTestCaseNcs;tt|j||_||_||_||_dS)N)superrDr _setUpFunc _tearDownFunc _testFunc _description)rZtestFuncrr description)rr rrBs    zFunctionTestCase.__init__cCs|jdk r|jdS)N)rF)rr r rrIszFunctionTestCase.setUpcCs|jdk r|jdS)N)rG)rr r rrMszFunctionTestCase.tearDowncCs|jdS)N)rH)rr r rrQszFunctionTestCase.runTestcCs |jjS)N)rHr )rr r rrTszFunctionTestCase.idcCs\t||jstS|j|jko[|j|jko[|j|jko[|j|jkS)N)r-rrrFrGrHrI)rrr r rrWs zFunctionTestCase.__eq__cCs+tt||j|j|j|jfS)N)rr.rFrGrHrI)rr r rr`szFunctionTestCase.__hash__cCsdt|j|jjfS)Nz%s (%s))rrrHr )rr r rrdszFunctionTestCase.__str__cCsdt|j|jfS)Nz <%s tec=%s>)rrrH)rr r rrhszFunctionTestCase.__repr__cCsE|jdk r|jS|jj}|rA|jddjpDdS)Nrr)rIrHrrr)rrr r rrls z!FunctionTestCase.shortDescription) r r r rrrrrrrrrrr r )rrrD9s        rDcs^eZdZfddZddZddZddZd d Zd d ZS) rcs8tj||_||_||_|j|_dS)N)rEr_messager!rrE)rr!rtr)rr rrus     z_SubTest.__init__cCstddS)Nzsubtests cannot be run directly)r)rr r rr|sz_SubTest.runTestcCsg}|jtk r.|jdj|j|jrxdjddt|jjD}|jdj|dj|pdS)Nz[{}]z, css'|]\}}dj||VqdS)z{}={!r}N)r\)r;krsr r rr=sz+_SubTest._subDescription..z({}) z ())rKrCrr\rrsortedr")rpartsZ params_descr r r_subDescriptions  z_SubTest._subDescriptioncCsdj|jj|jS)Nz{} {})r\r!rrP)rr r rrsz _SubTest.idcCs |jjS)N)r!r)rr r rrsz_SubTest.shortDescriptioncCsdj|j|jS)Nz{} {})r\r!rP)rr r rrsz_SubTest.__str__) r r r rrrPrrrr r )rrrss    r)-rr/rrr rIrQrr%r]rrutilrrrrrZ __unittestobjectrCr Exceptionr rrrr(r5r7r8rr:rBrHrZri namedtupler{rr~rrrDrr r r rsL          ( (       /%5 ,: