a „oe -ã@sddlZddlZddlZddlZddlZddlZdd„Zdd„Zdd„ZGdd „d ej ƒZ Gd d „d ej ƒZ ej ej gZdad d „Zddd„ZGdd„deƒZz ejZWneyÀejZYn0Gdd„deƒZGdd„dejƒZGdd„dejƒZdd„ZdS)éNcCs(tjdkrt|tƒr| d¡}| d¡S©N©érÚlatin1)ÚsysÚ version_infoÚ isinstanceÚstrÚdecodeÚencode©Zsval©r ú;C:\Program Files\Certbot\pkgs\win32\lib\pywin32_testutil.pyÚ str2bytess rcCs tjdkrt|ƒSt| d¡ƒSr)rrÚbufferÚ memoryviewr r r r rÚ str2memorys rcCstjdkrt|ƒSt|ƒS)Nr)rrrr)Úobr r rÚ ob2memory!s rc@s<eZdZdZdd„Zdd„Zd dd„Zd d „Zdd d „ZdS)Ú LeakTestCaseaºAn 'adaptor' which takes another test. In debug builds we execute the test once to remove one-off side-effects, then capture the total reference count, then execute the test a few times. If the total refcount at the end is greater than we first captured, we have a leak! In release builds the test is executed just once, as normal. Generally used automatically by the test runner - you can safely ignore this. cCs:tj |¡||_d|_d|_ttdƒr6|j|j|_dS)NééÚgettotalrefcount)ÚunittestÚTestCaseÚ__init__Ú real_testÚnum_test_casesÚnum_leak_itersÚhasattrr)Úselfrr r rr:s   zLeakTestCase.__init__cCs|jS©N)r©r r r rÚcountTestCasesBszLeakTestCase.countTestCasesNc Csœddlm}m}t ¡|ƒ}|ƒ}| |¡|js<| ¡s@dS| |¡t ¡|ƒ|}|ƒ|}|sn|r˜d||f}t |ƒ} |  |j| j | df¡dS)Nr)Ú_GetGatewayCountÚ_GetInterfaceCountz2%d interface objects and %d gateway objects leaked) Ú pythoncomr$r%ÚgcÚcollectrÚ shouldStopZ wasSuccessfulÚ_do_leak_testsÚAssertionErrorÚ addFailureÚ __class__) r Úresultr$r%ZniZngZlost_iZlost_gÚmsgÚexcr r rÚ__call__Es$    þzLeakTestCase.__call__cCsds Jdƒ‚dS)Nrznot usedr r"r r rÚrunTest]szLeakTestCase.runTestcCsÐz tj}WntyYdS0t ¡|ƒ}t|jƒD]}| |¡|jr8qRq8~t ¡|ƒ||j}|dkr˜d|j| f}|  |jt |df¡|dkrÌd|j|f}t |ƒ}|  |j|j |df¡dS)Nrz-LeakTest: %s appeared to gain %d references!!zLeakTest: %s lost %d references) rrÚAttributeErrorr'r(Úrangerrr)r,r+r-)r r.ZgtrcZtrcÚiZlostr/r0r r rr*`s.   þzLeakTestCase._do_leak_tests)N)N) Ú__name__Ú __module__Ú __qualname__Ú__doc__rr#r1r2r*r r r rr.s   rc@s6eZdZdd„Zdd„Zdd„Zdd„Zd d d „Zd S) Ú TestLoadercCs:g}| |¡D] }||ƒ}| |¡}| |¡q| |¡S)z‰óz5TestLoader.fixupTestsForLeakTests..)rrÚ TestSuiteZ_testsr;)r Útestr r"rr?‡s z!TestLoader.fixupTestsForLeakTestscCs$t|ddƒ}|rtdƒ|St|ƒS)NÚ no_leak_testsFz%Test says it doesn't want leak tests!)ÚgetattrÚprintr)r rErFr r rr;�s  zTestLoader._getTestWrappercCs,t|dƒr| ¡}ntj ||¡}| |¡S)NÚsuite)rrIrr:ÚloadTestsFromModuler?)r ÚmodZtestsr r rrJ—s  zTestLoader.loadTestsFromModuleNcCsDtj |||¡}t|tjƒrn"t|tjƒr6| |¡}n td|ƒ|S)Nz XXX - what is)rr:ÚloadTestsFromNamerrDrr;rH)r r=ÚmodulerEr r rrLžs    zTestLoader.loadTestsFromName)N)r6r7r8r>r?r;rJrLr r r rr:}s  r:c Csdtdur`ddl}ddlm}z |ƒaWn8|jy^}z|jtjkrF‚daWYd}~n d}~00tS)Nr)Ú IsUserAnAdminT)Ú _is_adminr&Zwin32com.shell.shellrNÚ com_errorÚhresultÚwinerrorZ E_NOTIMPL)r&rNr0r r rÚcheck_is_admin¹s   rSÚ.cCsÎtj tjd¡|dg}|D]&}tj ||¡}tj |¡r|Sqtj tj tjd¡¡}t   ¡dd…}t j r€|  t j ¡|D]4}tj |¡}tj  ||g¡|kr„td|›d�ƒ‚q„td|›d�ƒ‚dS)NrrTzCan't find test fixture 'ú')ÚosÚpathÚdirnamerÚargvÚjoinÚisfileÚnormcaseÚabspathÚsiteÚgetsitepackagesÚ USER_SITEr<Ú commonprefixÚ TestSkippedÚ RuntimeError)ÚbasenameZ extra_dirZ candidatesÚ candidateÚfnameZ this_fileZ dirs_to_checkÚdr r rÚfind_test_fixtureÎs"ý    rhc@s eZdZdS)rbN)r6r7r8r r r rrbësrbcs4eZdZ‡fdd„Z‡fdd„Z‡fdd„Z‡ZS)Ú TestResultcs tt|ƒj|i|¤Ži|_dSr!)ÚsuperrirÚskips)r ÚargsÚkw©r-r rrùszTestResult.__init__c s"ddl}|d}t||jƒr6|jtvr6tƒs6t|ƒ}n>t||jƒrb|jtj tj tj fvrbt|ƒ}nt|t ƒrttt ƒ}t|tƒ�r |j d}zt|j ƒ}Wnttfy®Yn0|j |d¡|j|d7<|jrê|j d|f¡n|j�r|j d¡|j ¡dStt|ƒ ||¡dS)zmCalled when an error has occurred. 'err' is a tuple of values as returned by sys.exc_info(). rNrz SKIP (%s)ÚS)Ú pywintypesrÚerrorrRÚnon_admin_error_codesrSrbrPrQZCO_E_CLASSSTRINGZREGDB_E_CLASSNOTREGZTYPE_E_LIBNOTREGISTEREDÚNotImplementedErrorrlÚtupler3Ú TypeErrorrkÚ setdefaultZshowAllÚstreamÚwritelnZdotsÚwriteÚflushrjriÚaddError)r rEÚerrrpZexc_valÚreasonrnr rr{ýs@ ÿþý ý      zTestResult.addErrorcs:tt|ƒ ¡|j ¡D]\}}|j d||f¡qdS)NzSKIPPED: %d tests - %s)rjriÚ printErrorsrkÚitemsrwrx)r r}Z num_skippedrnr rr~,szTestResult.printErrors)r6r7r8rr{r~Ú __classcell__r r rnrriøs  /ric@seZdZdd„ZdS)Ú TestRunnercCst|j|j|jƒSr!)rirwZ descriptionsÚ verbosityr"r r rÚ _makeResult4szTestRunner._makeResultN)r6r7r8rƒr r r rr�3sr�c@seZdZdd„ZdS)Ú TestProgramcCst|jd�|_tj |¡dS)N)r‚)r�r‚Z testRunnerrr„ÚrunTestsr"r r rr…;szTestProgram.runTestsN)r6r7r8r…r r r rr„:sr„cOs8| ¡}d|vrtƒ|d<| dt¡}||i|¤ŽdS)NZ testLoaderZ testProgram)Úcopyr:Úgetr„)rlrmZnew_kwZ program_classr r rÚtestmainBs   rˆ)rT)r'rVr^rrrRrrrrrr:ZERROR_ACCESS_DENIEDZERROR_PRIVILEGE_NOT_HELDrrrOrSrhÚ ExceptionrbZ_TextTestResultZTextTestResultr3riZTextTestRunnerr�r„rˆr r r rÚs2  O5þ    ;