a
    !f9                     @   sR  d Z ddlZddlZddlZddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ddlm
Z
 dd	lmZ dd
lmZ ddlmZ ddlmZ ddlZddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z" ddl!m#Z# ddl!m$Z$ ddl%m&Z& ddl'm(Z( erddl)Z)ddl*Z+eeee, e,ej-f ed f Z.ee$e"f e/e0e
d ddd Z1G d!d de"Z2e3e/e/e
e/ e(e4d"d#d$Z5G d%d& d&e#Z6ed'd(ee&d dd)d*d+Z7ed'd,eed d-d.d/Z8g fe	e9 dd0d1d2Z:e4d3d4d5Z;dS )6z4Discover and run std-library "unittest" style tests.    N)Any)Callable)	Generator)Iterable)List)Optional)Tuple)Type)TYPE_CHECKING)Union)	getimfunc)is_async_function)hookimpl)FixtureRequest)	Collector)Item)exit)fail)skip)xfail)Class)Function)Module)CallInfo)ScopeNNNUnitTestCase)	collectornameobjreturnc                 C   sJ   z t jd }t||jsW d S W n ty4   Y d S 0 tj| ||d}|S )Nunittest)r   r   )sysmodules
issubclassTestCase	Exceptionr   from_parent)r   r   r   utitem r*   Q/var/www/html/python-backend/venv/lib/python3.9/site-packages/_pytest/unittest.pypytest_pycollect_makeitem,   s    

r,   c                   @   s:   e Zd ZdZeeeef  dddZe	ddddZ
dS )	r   Tr    c                 c   s   ddl m} | j}t|dds"d S t|}|s@| | |   | jjj	| dd | }d}|
| jD ]<}t| j|}t|ddsqht|}tj| ||dV  d}qh|st| jdd }	|	d urtjd	d }
|
d u s|	|
jjkrtj| dd
V  d S )Nr   )
TestLoaderZ__test__T)r!   F)r   ZcallobjrunTesttwisted.trial.unittest)r   )r!   r.   r   getattr_is_skipped_inject_setup_teardown_fixturesZ_inject_setup_class_fixturesessionZ_fixturemanagerZparsefactoriesZgetTestCaseNamesr   TestCaseFunctionr'   r"   r#   getr%   r/   )selfr.   clsskippedloaderZfoundsomethingr   xfuncobjruntestr(   r*   r*   r+   collectA   s0    
zUnitTestCase.collectN)r8   r    c                 C   sD   t |dddtjdd}|r ||_t |dddtjd	d}|r@||_dS )
zxInjects a hidden auto-use fixture to invoke setUpClass/setup_method and corresponding
        teardown functions (#517).Z
setUpClassZtearDownClassZdoClassCleanupsF)scope	pass_selfZsetup_methodZteardown_methodNT)_make_xunit_fixturer   r   Z!_UnitTestCase__pytest_class_setupr   Z"_UnitTestCase__pytest_method_setup)r7   r8   Zclass_fixtureZmethod_fixturer*   r*   r+   r3   `   s(    z,UnitTestCase._inject_setup_teardown_fixtures)__name__
__module____qualname__
nofuncargsr   r   r   r   r>   typer3   r*   r*   r*   r+   r   <   s   )r   
setup_nameteardown_namecleanup_namer?   r@   c                    s   t | |d t | |d d u r,d u r,d S |rBt | |dd  ndd  tj|jdd| d| j dttd	 d
 fdd}|S )Nc                  W   s   d S Nr*   argsr*   r*   r+   <lambda>       z%_make_xunit_fixture.<locals>.<lambda>c                  W   s   d S rJ   r*   rK   r*   r*   r+   cleanup   s    z$_make_xunit_fixture.<locals>.cleanupTZ
_unittest_Z	_fixture_)r?   Zautouser   r   )requestr    c                 3   s   t | r| j}tjj|ddd urlzr:| |j n  W n( tyj   r^ |  n    Y n0 d V  z8d urr| |j n  W r |  q   nr |  n   0 d S NT)Z_use_item_location)r2   Z__unittest_skip_why__pytestr   r&   function)r7   rP   reasonrO   r@   setupteardownr*   r+   fixture   s2    



z$_make_xunit_fixture.<locals>.fixture)r1   rR   rX   valuerD   r   r   )r   rG   rH   rI   r?   r@   rX   r*   rU   r+   rA   z   s      rA   c                       sJ  e Zd ZU dZdZeeejj	e
   ed< dZed ed< dd Zddd	d
ZddddZdddddZdddddZddddddZddddddZdeddddZd/ddeddddZd0ded  ddd!d"Zdddd#d$Zdddd%d&Zdedd'd(d)Zddd*d+Zejj	e
 ejjd, fd-d.Z  ZS )1r5   TN_excinfozunittest.TestCase	_testcasec                 C   s   | j d usJ t| j j| jS rJ   )parentr1   r   Zoriginalnamer7   r*   r*   r+   _getobj   s    zTestCaseFunction._getobjr-   c                 C   sL   d | _ | jd usJ | j| j| _t| j| j| _t| drH| j	  d S )N_request)
_explicit_tearDownr\   r   r   r[   r1   _objhasattrr_   Z_fillfixturesr]   r*   r*   r+   rV      s    
zTestCaseFunction.setupc                 C   s(   | j d ur|    d | _ d | _d | _d S rJ   )r`   r[   ra   r]   r*   r*   r+   rW      s
    
zTestCaseFunction.teardown)testcaser    c                 C   s   d S rJ   r*   r7   rc   r*   r*   r+   	startTest   s    zTestCaseFunction.startTest_SysExcInfoType)
rawexcinfor    c                 C   s   t |d|}z"tjjt |}|j |j W n ty   znz,tj	| }|
dd td|dd W n< tjtfy    Y n$ ty   td|f dd Y n0 W n2 ty    Y n  tjy   tjj }Y n0 Y n0 | jdg | d S )	N_rawexcinfor   zCNOTE: Incompatible Exception Representation, displaying natively:

 FZpytracez8ERROR: Unknown Incompatible Exception representation:
%rrZ   )r1   _pytest_codeExceptionInfoBaseExceptionZfrom_exc_inforY   	traceback	TypeErrorformat_exceptioninsertr   joinr&   KeyboardInterruptZfrom_current__dict__
setdefaultappend)r7   rg   excinfovaluesr*   r*   r+   _addexcinfo   s8    

zTestCaseFunction._addexcinfo)rc   rg   r    c                 C   sD   z"t |d tjr t|d j W n ty4   Y n0 | | d S )N   )
isinstancer   r&   msgrp   rz   r7   rc   rg   r*   r*   r+   addError   s    zTestCaseFunction.addErrorc                 C   s   |  | d S rJ   )rz   r~   r*   r*   r+   
addFailure  s    zTestCaseFunction.addFailure)rc   rT   r    c                 C   s<   zt jj|ddW n" tjy6   | t  Y n0 d S rQ   )rR   r   r&   rz   r"   exc_info)r7   rc   rT   r*   r*   r+   addSkip  s    zTestCaseFunction.addSkipri   )rc   rg   rT   r    c                 C   s8   zt t| W n" t jy2   | t  Y n0 d S rJ   )r   strr&   rz   r"   r   )r7   rc   rg   rT   r*   r*   r+   addExpectedFailure  s    z#TestCaseFunction.addExpectedFailureztwisted.trial.unittest.Todoc                 C   sP   d}|r|d|j  7 }zt|dd W n" tjyJ   | t  Y n0 d S )NzUnexpected successz: Frj   )rT   r   r&   rz   r"   r   )r7   rc   rT   r}   r*   r*   r+   addUnexpectedSuccess  s    z%TestCaseFunction.addUnexpectedSuccessc                 C   s   d S rJ   r*   rd   r*   r*   r+   
addSuccess'  s    zTestCaseFunction.addSuccessc                 C   s   d S rJ   r*   rd   r*   r*   r+   stopTest*  s    zTestCaseFunction.stopTest)rc   elapsedr    c                 C   s   d S rJ   r*   )r7   rc   r   r*   r*   r+   addDuration-  s    zTestCaseFunction.addDurationc              	   C   s   ddl m} | jd usJ ||  t| jr:| j| d nt| jtsJJ t| jp^t| jj}| j	
dr|s| jj| _t| jddd  t| j| j| j z| j| d W t| j| j nt| j| j 0 d S )Nr   )&maybe_wrap_pytest_function_for_tracing)resultZusepdbtearDownc                  W   s   d S rJ   r*   rK   r*   r*   r+   rM   G  rN   z*TestCaseFunction.runtest.<locals>.<lambda>)Z_pytest.debuggingr   r[   r   r   r|   r\   r   r2   configZ	getoptionr   r`   setattrr   delattr)r7   r   r9   r*   r*   r+   r=   0  s    
	
zTestCaseFunction.runtest)rx   r    c                    s&   t  |}|dd }|s"|}|S )Nc                 S   s   | j jd S )NZ
__unittest)frame	f_globalsr6   )r;   r*   r*   r+   rM   V  rN   z4TestCaseFunction._traceback_filter.<locals>.<lambda>)super_traceback_filterfilter)r7   rx   ro   Z
ntraceback	__class__r*   r+   r   Q  s    z"TestCaseFunction._traceback_filter)ri   )N) rB   rC   rD   rE   rZ   r   r   rk   rl   rm   rn   __annotations__r[   r^   rV   rW   re   rz   r   r   r   r   r   r   r   r   floatr   r=   	Tracebackr   __classcell__r*   r*   r   r+   r5      sF   
		"
  "
r5   T)Ztryfirst)r)   callr    c                    s   t | tr:| jr:| jd|_z|`W n ty8   Y n0 tj	d}|r|jrt |jj
|jr|j td   fdd|j}|j|_d S )Nr   r!   c                      s   t t jS rJ   )rR   r   r   rY   r*   rx   r*   r+   rM   s  rN   z+pytest_runtest_makereport.<locals>.<lambda>)r|   r5   rZ   poprx   r   AttributeErrorr"   r#   r6   rY   ZSkipTestr   Z	from_callwhen)r)   r   r!   Zcall2r*   r   r+   pytest_runtest_makereport]  s&    
r   )Zhookwrapper)r)   r    c                 #   s\   t | trRdtjv rRtjd }|jj t  d fdd	}||j_d V   |j_nd V  d S )Nr0   ztwisted.python.failurec                    sl   |d u rt  | _n|d u r$t|}|||f| _z | ||||d W n  tyf    | ||| Y n0 d S )N)captureVars)r"   r   rh   rF   rp   )r7   	exc_valueexc_typeexc_tbr   ZFailure__init__r*   r+   excstore  s    

z)pytest_runtest_protocol.<locals>.excstore)NNNN)r|   r5   r"   r#   ZFailure__init__(check_testcase_implements_trial_reporter)r)   r(   r   r*   r   r+   pytest_runtest_protocol{  s    
 
r   )doner    c                 C   s8   | rd S ddl m} ddlm} |t| | d d S )Nr   )classImplements)	IReporterr{   )Zzope.interfacer   Ztwisted.trial.itrialr   r5   rw   )r   r   r   r*   r*   r+   r     s    
r   r-   c                 C   s   t t| ddS )zDReturn True if the given object has been marked with @unittest.skip.Z__unittest_skip__F)boolr1   )r   r*   r*   r+   r2     s    r2   )<__doc__r"   ro   typestypingr   r   r   r   r   r   r   r	   r
   r   Z_pytest._coderk   rR   Z_pytest.compatr   r   Z_pytest.configr   Z_pytest.fixturesr   Z_pytest.nodesr   r   Z_pytest.outcomesr   r   r   r   Z_pytest.pythonr   r   r   Z_pytest.runnerr   Z_pytest.scoper   r!   Ztwisted.trial.unittestZtwistedrn   TracebackTyperf   r   objectr,   r   rF   r   rA   r5   r   r   intr   r2   r*   r*   r*   r+   <module>   sr   ?= '
