U e5d@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z ddl mZmZmZmZmZdZeZdZGdddeZGd d d eZGd d d eZGd ddeZddZgZddZddZddZ ddZ!ddZ"ddZ#ddZ$Gdd d Z%Gd!d"d"e%Z&Gd#d$d$e&Z'Gd%d&d&e&Z(e)d'd(d)gZ*Gd*d+d+ej+Z,Gd,d-d-e%Z-Gd.d/d/ej.Z/Gd0d1d1eZ0Gd2d3d3e0Z1Gd4d5d5e0Z2dS)6N)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__rr%/usr/lib64/python3.8/unittest/case.pyr sr c@s eZdZdS) _ShouldStopNr rrrrr"src@s eZdZdS)_UnexpectedSuccessNr rrrrr'src@s&eZdZdddZejdddZdS) _OutcomeNcCs4d|_||_t|d|_d|_g|_d|_g|_dS)NF addSubTestT)expecting_failurerhasattrresult_supports_subtestssuccessskippedexpectedFailureerrors)selfrrrr__init__.s z_Outcome.__init__Fc cs|j}d|_zz dVWntk r.Yntk rh}zd|_|j|t|fW5d}~XYnjtk rzYnXt}|j r||_ nd|_|j ||fd}YnX|j r|jr|j |dfW5|jo||_XdS)NTF) rKeyboardInterruptr rappendstrrsysexc_inforrrr)r test_caseisTestZ old_successer!rrrtestPartExecutor7s* $  z_Outcome.testPartExecutor)N)F)r r r r contextlibcontextmanagerr%rrrrr-s rcCs|SNr)objrrr_idUsr*cOst|||fdSr()_module_cleanupsr)functionargskwargsrrraddModuleCleanupZsr/c Csdg}trTt\}}}z|||Wqtk rP}z||W5d}~XYqXq|r`|ddSNr)r+pop Exceptionr) exceptionsr,r-r.excrrrdoModuleCleanups`sr5cs,fdd}ttjr(}d||S|S)Ncs4t|ts$t|fdd}|}d|_|_|S)Ncs tdSr(r r-r.reasonrr skip_wrappervsz-skip..decorator..skip_wrapperT) isinstancetype functoolswraps__unittest_skip____unittest_skip_why__) test_itemr:r8rr decoratorts zskip..decorator)r;types FunctionType)r9rBrArr8rskipps  rFcCs|r t|StSr(rFr*Z conditionr9rrrskipIfsrIcCs|s t|StSr(rGrHrrr skipUnlesssrJcCs d|_|S)NT)__unittest_expecting_failure__)rArrrrsrcs4t|tr tfdd|DSt|to2t|S)Nc3s|]}t|VqdSr() _is_subtype).0r$basetyperr sz_is_subtype..)r;tupleallr< issubclass)expectedrOrrNrrLs rLc@seZdZddZddZdS)_BaseTestCaseContextcCs ||_dSr()r")rr"rrrrsz_BaseTestCaseContext.__init__cCs |j|j|}|j|dSr()r"_formatMessagemsgfailureException)r standardMsgrWrrr _raiseFailuresz"_BaseTestCaseContext._raiseFailureN)r r r rrZrrrrrUsrUc@seZdZdddZddZdS)_AssertRaisesBaseContextNcCs@t||||_||_|dk r*t|}||_d|_d|_dSr() rUrrTr"recompileexpected_regexobj_namerW)rrTr"r^rrrrs  z!_AssertRaisesBaseContext.__init__c Cszt|j|js"td||jf|sV|dd|_|rNtdtt|f|WTS|^}}z |j |_ Wnt k rt ||_ YnX||||W5QRXW5d}XdS)Nz%s() arg 1 must be %srWz3%r is an invalid keyword argument for this function) rLrT _base_type TypeError_base_type_strr1rWnextiterr r_AttributeErrorr)rnamer-r.Z callable_objrrrhandles(  z_AssertRaisesBaseContext.handle)N)r r r rrgrrrrr[s r[c@s$eZdZeZdZddZddZdS)_AssertRaisesContextz-an exception type or tuple of exception typescCs|Sr(rrrrr __enter__sz_AssertRaisesContext.__enter__cCs|dkrbz |jj}Wntk r2t|j}YnX|jrP|d||jql|d|n t|t ||js|dS| d|_ |j dkrdS|j }| t|s|d|jt|dS)Nz{} not raised by {}z {} not raisedFT"{}" does not match "{}")rTr rerr_rZformat traceback clear_framesrSwith_tracebackZ exceptionr^searchpattern)rexc_type exc_valuetbexc_namer^rrr__exit__s.      z_AssertRaisesContext.__exit__N)r r r BaseExceptionr`rbrjrvrrrrrhsrhc@s$eZdZeZdZddZddZdS)_AssertWarnsContextz(a warning type or tuple of warning typescCsRttjD]}t|ddri|_qtjdd|_|j |_t d|j |S)N__warningregistry__T)recordalways) listr modulesvaluesgetattrrywarningscatch_warningswarnings_managerrj simplefilterrT)rvrrrrjs  z_AssertWarnsContext.__enter__cCs|j||||dk rdSz |jj}Wntk rFt|j}YnXd}|jD]Z}|j}t||jsjqR|dkrv|}|j dk r|j t|sqR||_ |j |_ |j |_ dS|dk r|d|j jt||jr|d||jn|d|dS)Nrkz{} not triggered by {}z{} not triggered)rrvrTr rerrmessager;r^rpZwarningfilenamelinenorZrlrqr_)rrrrsrtruZfirst_matchingmwrrrrvs@     z_AssertWarnsContext.__exit__N)r r r Warningr`rbrjrvrrrrrxs rx_LoggingWatcherrecordsoutputc@s$eZdZddZddZddZdS)_CapturingHandlercCstj|tgg|_dSr()loggingHandlerrrwatcherrirrrr3s z_CapturingHandler.__init__cCsdSr(rrirrrflush7sz_CapturingHandler.flushcCs*|jj|||}|jj|dSr()rrrrlr)rrzrWrrremit:s z_CapturingHandler.emitN)r r r rrrrrrrr.src@s(eZdZdZddZddZddZdS) _AssertLogsContextz"%(levelname)s:%(name)s:%(message)scCs:t||||_|r(tj|||_ntj|_d|_dSr() rUr logger_namerZ _nameToLevelgetlevelINFOrW)rr"rrrrrrFs  z_AssertLogsContext.__init__cCst|jtjr|j}|_nt|j}|_t|j}t}| ||j |_ |j dd|_ |j |_|j|_|g|_ ||j d|_|j S)NF)r;rrZLoggerloggerZ getLoggerZ FormatterLOGGING_FORMATrZ setFormatterrhandlers old_handlersr old_level propagate old_propagatesetLevel)rrZ formatterZhandlerrrrrjOs   z_AssertLogsContext.__enter__cCs`|j|j_|j|j_|j|j|dk r.dSt|jj dkr\| d t |j|jjdS)NFrz-no logs of level {} or higher triggered on {})rrrrrrrlenrrrZrlrZ getLevelNamerrf)rrrrsrtrrrrv`s   z_AssertLogsContext.__exit__N)r r r rrrjrvrrrrrAs rc@seZdZddZdS)_OrderedChainMapccs8t}|jD]&}|D]}||kr|||Vqq dSr()setmapsadd)rseenmappingkrrr__iter__ns   z_OrderedChainMap.__iter__N)r r r rrrrrrmsrc@seZdZeZdZdZdZdZgZ dddZ dd Z d d Z d e _ ed dZddZddZeddZeddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zejefd)d*Z d+d,Z!d-d.Z"d/d0Z#d1d2Z$d3d4Z%d5d6Z&d7d8Z'dd:d;Z(dd?Z*d@dAZ+dBdCZ,dDdEZ-ddFdGZ.ddHdIZ/ddJdKZ0dLdMZ1dNdOZ2dPdQZ3ddRdSZ4dTdUZ5ddVdWZ6ddXdYZ7ddZd[Z8dd\d]Z9dd^d_Z:dd`daZ;dbdcZddhdiZ?ddjdkZ@ddldmZAddndoZBddpdqZCddrdsZDddtduZEddvdwZFddxdyZGddzd{ZHdd|d}ZIdd~dZJdddZKdddZLdddZMdddZNdddZOddZPddZQdddZRdddZSddZTeTe7ZUZVeTe8ZWZXeTe9ZYZZeTe:Z[Z\eTe0Z]Z^eTe2Z_eTe/Z`eTePZaeTeRZbeTeSZcd9S)TestCaseTiiFrunTestcCs||_d|_d|_zt||}Wn.tk rN|dkrJtd|j|fYn X|j|_g|_d|_ i|_ | t d| t d| td| td| td| tddS) NzNo testrzno such test method in %s: %sassertDictEqualassertListEqualassertTupleEqualassertSetEqualassertMultiLineEqual)_testMethodName_outcome_testMethodDocrre ValueError __class____doc__ _cleanups_subtest_type_equality_funcsaddTypeEqualityFuncdictr|rQr frozensetr)rZ methodName testMethodrrrrs(      zTestCase.__init__cCs||j|<dSr()r)rZtypeobjr,rrrrs zTestCase.addTypeEqualityFunccOst|dkr|^}}}nV|s&tdnHd|krZ|d}|^}}ddl}|jdtddntdt|dt|}|j|||fdS) Nz>descriptor 'addCleanup' of 'TestCase' object needs an argumentr,rz4Passing 'function' as keyword argument is deprecated) stacklevelz:addCleanup expected at least 1 positional argument, got %dr) rrar1rwarnDeprecationWarningrQrr)r-r.rr,rrrr addCleanups"     zTestCase.addCleanupz%($self, function, /, *args, **kwargs)cOs|j|||fdSr()_class_cleanupsr)clsr,r-r.rrraddClassCleanupszTestCase.addClassCleanupcCsdSr(rrirrrsetUpszTestCase.setUpcCsdSr(rrirrrtearDownszTestCase.tearDowncCsdSr(rrrrr setUpClassszTestCase.setUpClasscCsdSr(rrrrr tearDownClassszTestCase.tearDownClasscCsdS)NrrrirrrcountTestCasesszTestCase.countTestCasescCstSr()rZ TestResultrirrrdefaultTestResult szTestCase.defaultTestResultcCs$|j}|r |ddSdSN r)rstripsplitrdocrrrshortDescription szTestCase.shortDescriptioncCsdt|j|jfS)Nz%s.%srrrrirrridsz TestCase.idcCs t|t|k rtS|j|jkSr()r<NotImplementedrrotherrrr__eq__szTestCase.__eq__cCstt||jfSr()hashr<rrirrr__hash__ szTestCase.__hash__cCsd|jt|jfSNz%s (%s))rrrrirrr__str__#szTestCase.__str__cCsdt|j|jfS)Nz<%s testMethod=%s>rrirrr__repr__&szTestCase.__repr__cCs<t|dd}|dk r |||ntdtd||dS)NaddSkipz4TestResult has no addSkip method, skips not reportedr)rrrRuntimeWarning addSuccess)rrr"r9rrrr_addSkip*s  zTestCase._addSkipc ks|jdks|jjsdVdS|j}|dkr4t|}n |j|}t||||_zX|jj|jdd dVW5QRX|jjs|jj }|dk r|j rt n |jj rt W5||_XdS)NTr#) rrrrparams new_child_SubTestr%rrZfailfastrr)rrWrparentZ params_maprrrrsubTest3s$  zTestCase.subTestcCs`|D]V\}}t|tr(||j||q|dk rt|d|jrN|||q|||qdSr0)r;rrr"rSrX addFailureZaddError)rrrtestr!rrr_feedErrorsToResultRs  zTestCase._feedErrorsToResultcCsDz |j}Wn*tk r4tdt||Yn X|||dS)Nz@TestResult has no addExpectedFailure method, reporting as passes)addExpectedFailurererrrr)rrr!rrrr_addExpectedFailure\s zTestCase._addExpectedFailurec Cshz |j}WnPtk rZtdtz tdWn$tk rT||tYnXYn X||dS)NzCTestResult has no addUnexpectedSuccess method, reporting as failure) addUnexpectedSuccessrerrrrrr r!)rrrrrr_addUnexpectedSuccessfs  zTestCase._addUnexpectedSuccesscCs |dSr()rrirrr _callSetUpuszTestCase._callSetUpcCs |dSr(r)rmethodrrr_callTestMethodxszTestCase._callTestMethodcCs |dSr()rrirrr _callTearDown{szTestCase._callTearDowncOs|||dSr(rrr,r-r.rrr _callCleanup~szTestCase._callCleanupNc Cs|}|dkr.|}t|dd}|dk r.|||t||j}t|jdds^t|ddrz,t|jddpxt|dd}||||W5||XdSt|dd}t|dd}|p|}t|} z| |_ | || W5QRX| jr@|| _| j |dd ||W5QRXd| _| ||W5QRX|| jD]\} } ||| | qN||| j| jr|r| j r||| j n ||n |||WS|||dkrt|dd} | dk r| | j d| _ d|_ XdS) N startTestRunr?Fr@rCrK stopTestRunTr)rrZ startTestrrZstopTestrrrclearrrr%rrrrr doCleanupsrrrrr) rrZ orig_resultrrZskip_whyZexpecting_failure_methodZexpecting_failure_classroutcomerrr9rrrrunst               z TestCase.runc CsR|jp t}|jrL|j\}}}|||j|f||W5QRXq |jSr()rrrr1r%rr)rrr,r-r.rrrrs   zTestCase.doCleanupsc Csdg|_|jr`|j\}}}z|||Wqtk r\}z|jtW5d}~XYqXqdSr()ZtearDown_exceptionsrr1r2rr r!)rr,r-r.r4rrrdoClassCleanupsszTestCase.doClassCleanupscOs |j||Sr()r)rr-kwdsrrr__call__szTestCase.__call__cCsF|t||j||jrB|jd\}}}|||qdS)N)rrrrrr1rrrrdebugs zTestCase.debugcCs t|dSr(r6)rr9rrrskipTestszTestCase.skipTestcCs||dSr()rX)rrWrrrfailsz TestCase.failcCs&|r"||dt|}||dS)Nz%s is not falserVrrXrexprrWrrr assertFalseszTestCase.assertFalsecCs&|s"||dt|}||dS)Nz%s is not truerrrrr assertTrueszTestCase.assertTruecCsV|js|p |S|dkr|Szd||fWStk rPdt|t|fYSXdS)Nz%s : %s) longMessageUnicodeDecodeErrorr)rrWrYrrrrVs zTestCase._formatMessagecOs(t||}z|d||WSd}XdS)N assertRaisesrhrg)rexpected_exceptionr-r.contextrrrr s zTestCase.assertRaisescOst||}|d||S)N assertWarnsrxrg)rexpected_warningr-r.r rrrr5s zTestCase.assertWarnscCs t|||Sr()r)rrrrrr assertLogsTszTestCase.assertLogscCsFt|t|kr@|jt|}|dk r@t|tr}z|d|W5d}~XYn0tk rl}z|d|W5d}~XYnXz||}Wn^tk r}z|d|W5d}~XYn0tk r}z|d|W5d}~XYnX|s|sdSg}|r|d|D]}|t|q|r@|d|D]}|t|q*d|} |||| 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) differencerarrerreprr'rV) rZset1Zset2rWZ difference1r$Z difference2linesitemrYrrrrks2      zTestCase.assertSetEqualcCs2||kr.dt|t|f}||||dS)Nz%s not found in %srrrVrmemberZ containerrWrYrrrassertIns zTestCase.assertIncCs2||kr.dt|t|f}||||dS)Nz%s unexpectedly found in %sr9r:rrr assertNotIns zTestCase.assertNotIncCs2||k r.dt|t|f}||||dS)Nz %s is not %sr9rZexpr1Zexpr2rWrYrrrassertIss zTestCase.assertIscCs,||kr(dt|f}||||dS)Nzunexpectedly identical: %sr9r>rrr assertIsNotszTestCase.assertIsNotc Cs~||td||td||krzdt||}ddtt|t|}| ||}| | ||dS)Nz"First argument is not a dictionaryz#Second argument is not a dictionaryrr) assertIsInstancerrr'r(r)r*r+r,r-rrV)rZd1Zd2rWrYrrrrrs    zTestCase.assertDictEqualc Cstdtg}g}|D]L\}}||kr8||q|||kr|dt|t|t||fq|sv|svdSd}|rdddd|D}|r|r|d7}|d d|7}||||dS) Nz&assertDictContainsSubset is deprecatedz%s, expected: %s, actual: %srCz Missing: %s,css|]}t|VqdSr()r)rMrrrrrPsz4TestCase.assertDictContainsSubset..z; zMismatched values: %s) rrritemsrrr'rrV) rZsubsetZ dictionaryrWZmissingZ mismatchedkeyvaluerYrrrassertDictContainsSubsets4      z!TestCase.assertDictContainsSubsetc Cst|t|}}zt|}t|}Wntk rHt||}YnX||krVdSt||}|rd}dd|D}d|} ||| }|||}| |dS)NzElement counts were not equal: cSsg|] }d|qS)z First has %d, Second has %d: %rr)rMrrrr sz-TestCase.assertCountEqual..r) r| collectionsCounterrarrr'r-rVr) rrrrWZ first_seqZ second_seqZ differencesrYr7r0rrrassertCountEquals      zTestCase.assertCountEqualcCs||td||td||krt||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 rrrC)rArr_diffThresholdrr,rrr'r(r)r-rrV)rrrrWZ firstlinesZ secondlinesrYrrrrrs       zTestCase.assertMultiLineEqualcCs2||ks.dt|t|f}||||dS)Nz%s not less than %sr9rabrWrYrrr assertLessszTestCase.assertLesscCs2||ks.dt|t|f}||||dS)Nz%s not less than or equal to %sr9rMrrrassertLessEqualszTestCase.assertLessEqualcCs2||ks.dt|t|f}||||dS)Nz%s not greater than %sr9rMrrr assertGreaterszTestCase.assertGreatercCs2||ks.dt|t|f}||||dS)Nz"%s not greater than or equal to %sr9rMrrrassertGreaterEqual szTestCase.assertGreaterEqualcCs,|dk r(dt|f}||||dS)Nz%s is not Noner9rr)rWrYrrr assertIsNone&szTestCase.assertIsNonecCs"|dkrd}||||dS)Nzunexpectedly None)rrVrTrrrassertIsNotNone,szTestCase.assertIsNotNonecCs0t||s,dt||f}||||dS)Nz%s is not an instance of %rr;rrrVrr)rrWrYrrrrA2s zTestCase.assertIsInstancecCs0t||r,dt||f}||||dS)Nz%s is an instance of %rrWrXrrrassertNotIsInstance9s zTestCase.assertNotIsInstancecOst|||}|d||S)NassertRaisesRegexr )rr r^r-r.r rrrrZ?s zTestCase.assertRaisesRegexcOst|||}|d||S)NassertWarnsRegexr)rrr^r-r.r rrrr[Os zTestCase.assertWarnsRegexcCsJt|ttfrt|}||sFd|j|f}|||}||dS)Nz&Regex didn't match: %r not found in %r) r;rbytesr\r]rprqrVrX)rtextr^rWrYrrr assertRegexbs   zTestCase.assertRegexcCs`t|ttfrt|}||}|r\d||||j|f}| ||}| |dS)Nz"Regex matched: %r matches %r in %r) r;rr\r\r]rpstartendrqrVrX)rr]Zunexpected_regexrWmatchrYrrrassertNotRegexns   zTestCase.assertNotRegexcsfdd}|S)Ncs tdjtd||S)NzPlease use {0} instead.r)rrrlr rr7 original_funcrrdeprecated_func~s  z,TestCase._deprecate..deprecated_funcr)rdrerrcr _deprecate}s 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)dr r r AssertionErrorrXrr2rLZ_classSetupFailedrrrr__text_signature__ classmethodrrrrrrrrrrrrrrr&r'_subtest_msg_sentinelrrrrrrrrrrrrrrrrrrVr rrrrrrr r!r1r-rrrr<r=r?r@rrFrJrrPrQrRrSrUrVrArYrZr[r^rbrfZfailUnlessEqualZ assertEqualsZ failIfEqualZassertNotEqualsZfailUnlessAlmostEqualZassertAlmostEqualsZfailIfAlmostEqualZassertNotAlmostEqualsZ failUnlessZassert_ZfailUnlessRaisesZfailIfZassertRaisesRegexpZassertRegexpMatchesZassertNotRegexpMatchesrrrrrws!         E      !     - # c +                    rcsfeZdZdfdd ZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ Z S)FunctionTestCaseNcs*tt|||_||_||_||_dSr()superrkr _setUpFunc _tearDownFunc _testFunc _description)rZtestFuncrrZ descriptionrrrrs zFunctionTestCase.__init__cCs|jdk r|dSr()rmrirrrrs zFunctionTestCase.setUpcCs|jdk r|dSr()rnrirrrrs zFunctionTestCase.tearDowncCs |dSr()rorirrrrszFunctionTestCase.runTestcCs|jjSr()ror rirrrrszFunctionTestCase.idcCs@t||jstS|j|jko>|j|jko>|j|jko>|j|jkSr()r;rrrmrnrorprrrrrs     zFunctionTestCase.__eq__cCstt||j|j|j|jfSr()rr<rmrnrorprirrrrszFunctionTestCase.__hash__cCsdt|j|jjfSr)rrror rirrrrs zFunctionTestCase.__str__cCsdt|j|jfS)Nz <%s tec=%s>)rrrorirrrrs zFunctionTestCase.__repr__cCs2|jdk r|jS|jj}|r.|ddp0dSr)rprorrrrrrrrs z!FunctionTestCase.shortDescription)NNN)r r r rrrrrrrrrr __classcell__rrrqrrks  rkcsDeZdZfddZddZddZddZd d Zd d ZZ S) rcs(t||_||_||_|j|_dSr()rlr_messager"rrX)rr"rrrqrrrs  z_SubTest.__init__cCs tddS)Nzsubtests cannot be run directly)r"rirrrrsz_SubTest.runTestcCs^g}|jtk r |d|j|jrPddd|jD}|d|d|p\dS)Nz[{}]z, css|]\}}d||VqdS)z{}={!r}N)rl)rMrrrrrrPsz+_SubTest._subDescription..z({}) z ())rsrjrrlrr'rC)rpartsZ params_descrrr_subDescriptions  z_SubTest._subDescriptioncCsd|j|SNz{} {})rlr"rrvrirrrrsz _SubTest.idcCs |jSr()r"rrirrrrsz_SubTest.shortDescriptioncCsd|j|Srw)rlr"rvrirrrrsz_SubTest.__str__) r r r rrrvrrrrrrrrqrrs   r)3r r=r(rr*r\rrHr&rmrDrCrutilrrrrrZ __unittestobjectrjr3r2r rrrr*r+r/r5rFrIrJrrLrUr[rhrx namedtuplerrrrChainMaprrrkrrrrrsb ( *%5, $: