U
    ‡ª/eÑ2  ã                   @   s®   d Z ddlZdd„ Zedkrªz
eƒ  W 5 zddlmZ e ¡  W n   Y nX X ddlZddlZe	edƒrªe	edƒrªddl
Z
ddlZG d	d
„ d
ejƒZeƒ Zde_e ¡  dS )zW
Entry point module (keep at root):

Used to run with tests with unittest/pytest/nose.
é    Nc            .   	      sD  dd l } g }g }d }d}d}| jdd … D ]8}|sN||krN||krN| |¡ q*|sX|}q*| |¡ q*zdd l‰ ‡ fdd„}W n   dd„ }Y nX ddlm} dd	lm}	 dd
lm}
 ddl	m
} d}|r| j d| jf ¡ | j d|f ¡ |r| j d||f ¡ z| | jd g| ¡}W n"   | j d| jf ¡ ‚ Y nX |	 |j¡ d}d}d }zP|rª||kr‚|}dd l}n&||krš|}dd l}ntd|f ƒ‚ntƒ ‚W n" tk
rÔ   |rÌ‚ d }Y nX t| dƒrê|  ¡  |sú| |¡S i }|j}|r†g }| ¡ D ]l\}}||krH|D ]}| |d | ¡ q,n8||krr|||< ||||ƒ< | |¡ ntd|f ƒ‚qnŠ|jr
g }|jD ]n}||krÈ|jD ]}| |d | ¡ q¬n<||krö|j||< |j|||ƒ< | |¡ ntd|f ƒ‚q˜n|j}|| }||kr†| d| jd ¡ |rT| j d|dd … f ¡ ddlm} | |¡}| d¡ |j||gd S ||kr2d|krJd|krJ||  d¡d  }||  d¡d  }zdd l!}W n$ tk
rø   | j d¡ ‚ Y nX | dd¡ | dd¡ | dd |f ¡ dd l"} t#j$ %|d!|  "¡ f ¡t#j&d"< |rt| j d|f ¡ | j d#|f ¡ d$d%„ }!t#j$ 'd&¡}"|!|"ƒd& }#| j$D ]*}$|!|$ƒ}%|# (|%¡ršt# )|$¡  qÆqšg }&t*t+|ƒƒD ]ˆ}'||' }t#j$ ,|¡sþt#j$ -|¡rH||ƒ}|||'< dd'l.m/}( z|(|ƒ}W n t0k
r<   Y n
X |||'< nd(|krÖ|& |'¡ qÖt1|&ƒD ]}'||'= qht#j$ 2t3¡})|)| j$krœ| j$ d|)¡ dd l4}*dd l5}+dd l6},t#j7 %| j$¡t#j&d)< |, 8|+ 9|* :|¡¡¡}-|- ;d*¡}-|-t#j&d+< t<t# =¡ ƒt#j&d,< t<|jƒt#j&d-< | d.¡ | d/¡ | |¡S td|f ƒ‚d S )0Nr   z--nose-paramsz--py-test-paramsé   c                    s   ˆ   ˆ  | ¡¡S ©N)ZGetLongPathNameÚGetShortPathName©Úf©Úwin32api© úE/tmp/pip-unpacked-wheel-dg3irmqq/debugpy/_vendored/pydevd/runfiles.pyÚget_with_filesystem_case#   s    z&main.<locals>.get_with_filesystem_casec                 S   s   | S r   r	   r   r	   r	   r
   r   (   s    )Úpydev_runfiles©Úpydev_runfiles_xml_rpc)Úpydevd_constants)Úcanonical_normalized_pathzReceived parameters: %s
zParams for pydev: %s
z"Params for test framework: %s, %s
zCommand line received: %s
Únosezpy.testz!Test framework: %s not supported.Ú	exc_clearú:z/Cannot handle test framework: %s at this point.zFinal test framework args: %s
)Úpydev_runfiles_nosez--with-pydevplugin)ÚargvZ
addpluginsz--coverage_output_dirz--coverage_includezcTo do a coverage run with pytest the pytest-cov library is needed (i.e.: pip install pytest-cov).

z--cov-appendz--cov-report=é   z--cov=%sz.coverage.%sZCOVERAGE_FILEzpy_test_accept_filter: %s
c                 S   s   t j | ¡ t jd¡ dd¡S )Nú/Ú.)ÚosÚpathÚnormpathÚreplaceÚsep)Úpr	   r	   r
   Údotted»   s    zmain.<locals>.dottedr   )Úrelpathz<unable to get>Ú
PYTHONPATHÚasciiZPYDEV_PYTEST_SKIPZPYDEV_MAIN_PIDZPYDEV_PYTEST_SERVERz-pz&_pydev_runfiles.pydev_runfiles_pytest2)>Úsysr   Úappendr   Ú_pydev_runfilesr   r   Z_pydevd_bundler   Zpydevd_file_utilsr   ÚstdoutÚwriteZparse_cmdlineÚstderrZinitialize_serverÚportr   ÚpytestÚImportErrorÚhasattrr   ÚmainÚfiles_to_testsÚitemsÚAssertionErrorÚtestsÚfiles_or_dirsÚinsertr   Z!start_pydev_nose_plugin_singletonÚrunÚindexÚ
pytest_covÚtimer   r   ÚjoinÚenvironÚrealpathÚ
startswithÚchdirÚrangeÚlenÚisfileÚisdirÚos.pathr    Ú
ValueErrorÚreversedÚdirnameÚ__file__ÚpickleÚzlibÚbase64ÚpathsepÚ	b64encodeÚcompressÚdumpsÚdecodeÚstrÚgetpid).r#   Zpydev_paramsZother_test_framework_paramsZ found_other_test_framework_paramZNOSE_PARAMSZPY_TEST_PARAMSÚargr   r   r   r   r   ÚDEBUGÚconfigurationZNOSE_FRAMEWORKZPY_TEST_FRAMEWORKZtest_frameworkr   r*   Zpy_test_accept_filterr.   r2   Úfiler1   ÚtestÚtr   r   ZPYDEV_NOSE_PLUGIN_SINGLETONZcoverage_output_dirZcoverage_includer6   r7   r   Zcurr_dirZcurr_dottedr   Zpath_dottedÚremoveÚir    ÚdrF   rG   rH   Úsr	   r   r
   r-   
   s   




























r-   Ú__main__r   Ú_current_framesÚ	enumeratec                   @   s   e Zd Zdd„ ZdS )ÚDumpThreadsc           
      C   s  t  d¡ i }z(t ¡ D ]}d|j|jf ||j< qW n   Y nX dddg}t ¡  	¡ D ]˜\}}| 
d¡ | 
d| ||¡ ¡ | 
d¡ d	|jkr°tj t|jd	 ƒd
 ¡ t |¡D ]6\}}}}	| 
d|||f ¡ |	rº| 
d|	 ¡  ¡ qºqZ| 
d¡ tj d
 |¡¡ d S )Né
   z%s  (daemon: %s)zO===============================================================================zEpydev pyunit runner: Threads still found running after tests finishedzO================================= Thread Dump =================================zP
-------------------------------------------------------------------------------z
 Thread %sÚ ÚselfÚ
z File "%s", line %d, in %sz   %szP
=============================== END Thread Dump ===============================)r7   ÚsleepÚ	threadingr\   ÚnameÚdaemonÚidentr#   r[   r/   r$   ÚgetÚf_localsr(   r'   rN   Ú	tracebackÚextract_stackÚstripr8   )
r`   Zthread_id_to_namerU   Zstack_traceZ	thread_idÚstackÚfilenameÚlinenord   Úliner	   r	   r
   r4     s.    
ý



zDumpThreads.runN)Ú__name__Ú
__module__Ú__qualname__r4   r	   r	   r	   r
   r]     s   r]   T)Ú__doc__r   r-   rp   r%   r   Zforce_server_killr#   rc   r,   r7   ri   ÚThreadr]   Zdump_current_frames_threadre   Ústartr	   r	   r	   r
   Ú<module>   s*     
 