
    s@;j                     X   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Zd dlmZmZ d dlmZ d ZddZ	 	 ddZd Z G d d	          Z G d
 de j                  Zdad Zd Zej        Zd Z G d dej                  Z G d dej                  Zd ZdS )    N)_GetGatewayCount_GetInterfaceCount)IsUserAnAdminc                      t                      } | rt          d| z             t                      } | rt          d| z             d S d S )Nz.Warning - %d com interface objects still alivez,Warning - %d com gateway objects still alive)r   printr   )cs    `C:\Users\Administrator\AppData\Local\Temp\2\pip-target-b0z114gj\lib\python\win32com/test/util.py
CheckCleanr
      sf     	A D>BCCCA B<q@AAAAAB B    c                    |r"t          |t                    r|g}d }|D ]}	 t          j        |          }n# t          j        $ r Y  nw xY w	 t          j        }t          j        |d|z            }t          j	        |d          }n# t          $ r Y  nw xY wt          j                            t          j                  dt          j        j        t          j        j        fz  g}	t          j                            |          |	vrd                    ||          } nd S t)                      s6d|d         z  }
|r|
d|z  z  }
t	          j        t*          j        |
d d          t/          j        d           d	|  d
}|rt3          d|            t          j        |          }|r0t3          d           t3          |           t7          d| z            d S )NzCLSID\%sInprocServer32zpythoncomloader%d%d.dllz:{!r} is registered against a different Python version ({})zF%r isn't registered, but I'm not an administrator who can register it.r   z"
(registration check failed as %s)z "z" --unattended > nul 2>&1zRegistering enginezRegistration command was:z"Registration of engine '%s' failed)
isinstancestr
pywintypesIID	pythoncom	com_errorwinregHKEY_CLASSES_ROOTOpenKey
QueryValueOSErrorospathbasename__file__sysversion_infomajorminorformatr   winerrorCO_E_CLASSSTRINGwin32apiGetModuleFileNamer   systemRuntimeError)filenameprogidsverbosewhy_notprogidclsidHKCRhkdllok_filesmsgcmdrcs                r	   RegisterPythonServerr6      s:    #gs## 	 iG  	 	F"v..&   /^D+*=>>',<==      !344)#)3+;+ABCH
 w$$H44PWW    5 F?? 	LTaj 	  	C87BBC !(";S$KKK'**
Q
Qh
Q
Q
QC ."H---	3B	 L)***c


?(JKKKL Ls!   9AA9B


BBc                    t          j        d          }| d|z  z  } t          j        |           }t	          |d                                                                          }t          j        |            G d dt                    }	 |r |dt          |          z             |||k    r |d|d|d	          |s$|
                    d
          dk    r |d          |S # |$ ru}t          d| z             t          d|           t          d           t          |           t          d           |                    d|  d|            Y d }~d S d }~ww xY w)Nwin32com_testz > "%s" 2>&1rc                       e Zd ZdS )#ExecuteShellCommand.<locals>.FailedN)__name__
__module____qualname__ r   r	   Failedr;   e   s        r   r@   zexit code was zExpected output z (got )z!Traceback (most recent call last)r   ztraceback in program outputzFailed to exec command '%r'z	Failed asz** start of program output **z** end of program output **zExecuting 'z' failed as )tempfilemktempr   r'   openreadstripremove	Exceptionr   findr   fail)	r4   testcaseexpected_outputtracebacks_okoutput_namer5   outputr@   whys	            r	   ExecuteShellCommandrQ   Y   s    //22K>K''C	3B+s##((**0022FIk       < 	5&)CGG3444&6_+D+D&POPPVPPPQQQ 	8-P!Q!QUV!V!V&6777 < < <+c1222k3-...f+,,,:C::S::;;;;;;;;;<s   AC, ,E&1A*E!!E&c                     	  ||i | n-# t           j        $ r}|j        |k    rY d }~d S Y d }~nd }~ww xY w|                     d|z             d S )Nz*Excepected COM exception with HRESULT 0x%x)r   r   hresultrJ   )rK   rS   funcargskwdetailss         r	   assertRaisesCOM_HRESULTrX   y   s    db   ?g%%FFFFF &%%%% MM>HIIIIIs    505c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	CaptureWriterc                 J    d x| _         | _        |                                  d S N)old_errold_outclearselfs    r	   __init__zCaptureWriter.__init__   s!    &**t|

r   c                     |                                   t          j        | _        t          j        | _        | xt          _        t          _        d S r\   )r_   r   stdoutr^   stderrr]   r`   s    r	   capturezCaptureWriter.capture   s3    

zz"&&
SZZZr   c                     | j         r| j         t          _        d | _         | j        r| j        t          _        d | _        d S d S r\   )r^   r   rd   r]   re   r`   s    r	   releasezCaptureWriter.release   sD    < 	 CJDL< 	 CJDLLL	  	 r   c                     g | _         d S r\   )capturedr`   s    r	   r_   zCaptureWriter.clear   s    r   c                 :    | j                             |           d S r\   )rj   append)ra   r3   s     r	   writezCaptureWriter.write   s    S!!!!!r   c                 6    d                     | j                  S )N )joinrj   r`   s    r	   get_capturedzCaptureWriter.get_captured   s    wwt}%%%r   c                 v    t          d                    | j                                      d                    S )Nro   
)lenrp   rj   splitr`   s    r	   get_num_lines_capturedz$CaptureWriter.get_num_lines_captured   s,    2774=))//55666r   N)
r<   r=   r>   rb   rf   rh   r_   rm   rq   rv   r?   r   r	   rZ   rZ      s}          ' ' '       " " "& & &7 7 7 7 7r   rZ   c                       e Zd Zd Zd ZdS )
LogHandlerc                 R    g | _         t          j                            |            d S r\   )emittedloggingHandlerrb   r`   s    r	   rb   zLogHandler.__init__   s%      &&&&&r   c                 :    | j                             |           d S r\   )rz   rl   )ra   records     r	   emitzLogHandler.emit   s    F#####r   N)r<   r=   r>   rb   r   r?   r   r	   rx   rx      s2        ' ' '$ $ $ $ $r   rx   c                     t          t          dd           } t          <t          j        d          at                      }t                              |           t          t          _        t          j        d         }g |_	        |j	        | fS )Nloggertestr   )
getattrwin32com_win32com_loggerr{   Loggerrx   
addHandlerr   handlersrz   )old_loghandlers     r	   setup_test_loggerr      sn    h$//G">&11,,##G,,,&HO'*GGO?G##r   c                 L    | 
J d            | 	t           `d S | t           _        d S )Nzwho needs this?)r   r   )prev_loggers    r	   restore_test_loggerr      s1     1OOO%r   c                  B    t          | i |}t          j        |          S r\   )_CapturingFunctionTestCasepywin32_testutilLeakTestCase)rU   rV   	real_tests      r	   CapturingFunctionTestCaser      s%    *D7B77I(333r   c                       e Zd ZddZd ZdS )r   Nc                    ||                                  }t                      }|                                 	 t          j                            | |           t          | dd          r*t          t          d          r| 	                    |           |
                                 n# |
                                 w xY w|                                }|                     ||           |j        rt          |           d S d S )Ndo_leak_testsr   gettotalrefcount)defaultTestResultrZ   rf   unittestFunctionTestCase__call__r   hasattrr   run_leak_testsrh   rq   checkOutputshowAllr   )ra   resultwriterrO   s       r	   r   z#_CapturingFunctionTestCase.__call__   s    >++--F	%..tV<<<t_a00 ,WSBT5U5U ,##F+++NNFNN$$&&(((> 	&MMMMM	 	s   AB* *C c                 ~    |                     d          dk    r#d|z  }|j                            | |f           d S d S )N	Tracebackr   z,Test output contained a traceback
---
%s
---)rI   errorsrl   )ra   rO   r   r3   s       r	   r   z&_CapturingFunctionTestCase.checkOutput   sK    ;;{##q((CfLCM  $----- )(r   r\   )r<   r=   r>   r   r   r?   r   r	   r   r      s7           $. . . . .r   r   c                        e Zd Zd Zd Zd ZdS )ShellTestCasec                 `    || _         || _        t          j                            |            d S r\   )_ShellTestCase__cmd_ShellTestCase__eor   TestCaserb   )ra   r4   rL   s      r	   rb   zShellTestCase.__init__   s-    
#	""4(((((r   c                 <    t          | j        | | j                   d S r\   )rQ   r   r   r`   s    r	   runTestzShellTestCase.runTest   s    DJdi88888r   c                 t    d}t          | j                  |k    r| j        d |         dz   }n| j        }d|z   S )N   z...zexec: )rt   r   )ra   maxcmd_reprs      r	   __str__zShellTestCase.__str__   sC    tz??S  z$3$'%/HHzH(""r   N)r<   r=   r>   rb   r   r   r?   r   r	   r   r      sA        ) ) )
9 9 9# # # # #r   r   c                  D    t          j        | i | t                       d S r\   )r   testmainr
   )rU   rV   s     r	   r   r      s%    t*r***LLLLLr   )Nr   ) r{   r   r   rB   r   r   r   r   r   r%   r   r#   r   r   win32com.shell.shellr   r
   r6   rQ   rX   rZ   r|   rx   r   r   r   r   r   r   r   r   r   r?   r   r	   <module>r      s    				 



                   : : : : : : : : . . . . . .B B B9L 9L 9L 9L~ 	< < < <@J J J7 7 7 7 7 7 7 7D$ $ $ $ $ $ $ $  $ $ $& & & 4 4 4
. . . . .!: . . .2# # # # #H% # # #$    r   