U
    `»{jþ<  ã                   @  s  d Z ddlmZ ddl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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&Z&ej'dd… dk �r\ddl(m)Z) e�rrddl*Z*ddl+Z,eeee- e-ej.f ed f Z/dddd d!œd"d#„Z0G d$d%„ d%e!ƒZ1G d&d'„ d'e"ƒZ2ed(d)�d*d+d,d-œd.d/„ƒZ3d0a4ed(d1�d*d2d3œd4d5„ƒZ5d6d7œd8d9„Z6dS ):z4Discover and run std-library "unittest" style tests.é    )ÚannotationsN)ÚAny)ÚCallable)Ú	Generator)ÚIterable)ÚTuple)ÚType)ÚTYPE_CHECKING)ÚUnion)Úis_async_function)Úhookimpl)ÚFixtureRequest)Ú	Collector)ÚItem)Úexit)Úfail)Úskip)Úxfail)ÚClass)ÚFunction)ÚModule)ÚCallInfoé   )é   é   )ÚExceptionGroup)NNNzModule | ClassÚstrÚobjectzUnitTestCase | None)Ú	collectorÚnameÚobjÚreturnc                 C  sV   z t jd }t||jƒsW d S W n tk
r6   Y d S X t |¡rFd S tj| ||d�S )NÚunittest)r   r    )	ÚsysÚmodulesÚ
issubclassÚTestCaseÚ	ExceptionÚinspectÚ
isabstractÚUnitTestCaseÚfrom_parent)r   r   r    Úut© r-   úO/var/www/html/bwave/python/venv/lib/python3.8/site-packages/_pytest/unittest.pyÚpytest_pycollect_makeitem3   s    


r/   c                   @  sF   e Zd ZdZdd„ Zddœdd„Zdd	d
œdd„Zdd	d
œdd„ZdS )r*   Tc                 C  s
   |   d¡S )NÚrunTest©r    ©Úselfr-   r-   r.   ÚnewinstanceL   s    zUnitTestCase.newinstancezIterable[Item | Collector]©r!   c           
      c  sú   ddl m} | j}t|ddƒs"d S t|ƒ}|sJ|  |¡ |  |¡ |  ¡  | jj	 
|  ¡ | j¡ |ƒ }d}| | j¡D ]2}t| j|ƒ}t|ddƒs”qvtj| |d�V  d}qv|söt| jdd ƒ}|d k	rötj dd ¡}	|	d ksæ||	jjkrötj| dd�V  d S )	Nr   )Ú
TestLoaderZ__test__TF)r   r0   útwisted.trial.unittest)r"   r6   r    ÚgetattrÚ_is_skippedÚ'_register_unittest_setup_method_fixtureÚ&_register_unittest_setup_class_fixtureZ_register_setup_class_fixtureÚsessionÚ_fixturemanagerZparsefactoriesr4   ÚnodeidZgetTestCaseNamesÚTestCaseFunctionr+   r#   r$   Úgetr&   r0   )
r3   r6   ÚclsÚskippedÚloaderZfoundsomethingr   ÚxÚruntestr,   r-   r-   r.   ÚcollectT   s0    

zUnitTestCase.collectÚtypeÚNone)rA   r!   c                   sŽ   t ˆddƒ‰t ˆddƒ‰ˆdkr,ˆdkr,dS t ˆddd„ ƒ‰ ddœ‡fd	d
„‰dddœ‡ ‡‡‡fdd„}| jjjdˆj› �|| jddd� dS )zSRegister an auto-use fixture to invoke setUpClass and
        tearDownClass (#517).Z
setUpClassNZtearDownClassZdoClassCleanupsc                   S  s   d S ©Nr-   r-   r-   r-   r.   Ú<lambda>z   ó    zEUnitTestCase._register_unittest_setup_class_fixture.<locals>.<lambda>rH   r5   c                    sF   t ˆ dd ƒ} | sd S dd„ | D ƒ}t|ƒdkr8|d ‚n
td|ƒ‚d S )NZtearDown_exceptionsc                 S  s   g | ]\}}}|‘qS r-   r-   )Ú.0Ú_Úexcr-   r-   r.   Ú
<listcomp>‚   s     zlUnitTestCase._register_unittest_setup_class_fixture.<locals>.process_teardown_exceptions.<locals>.<listcomp>é   r   zUnittest class cleanup errors)r8   Úlenr   )Z	exc_infosÚ
exceptions)rA   r-   r.   Úprocess_teardown_exceptions|   s    
zXUnitTestCase._register_unittest_setup_class_fixture.<locals>.process_teardown_exceptionsr   úGenerator[None]©Úrequestr!   c                 3  s†   | j }t|ƒr$|j}tjj|dd�‚ˆd k	rZz
ˆƒ  W n" tk
rX   ˆ ƒ  ˆƒ  ‚ Y nX d V  zˆd k	rpˆƒ  W 5 ˆ ƒ  ˆƒ  X d S ©NT)Z_use_item_location)rA   r9   Ú__unittest_skip_why__Úpytestr   r'   )rV   rA   Úreason)ÚcleanuprS   ÚsetupÚteardownr-   r.   Úunittest_setup_class_fixtureŠ   s"    

zYUnitTestCase._register_unittest_setup_class_fixture.<locals>.unittest_setup_class_fixtureZ_unittest_setUpClass_fixture_ÚclassT©r   Úfuncr>   ÚscopeZautouse©r8   r<   r=   Z_register_fixtureÚ__qualname__r>   )r3   rA   r^   r-   )r[   rA   rS   r\   r]   r.   r;   s   s    
úz3UnitTestCase._register_unittest_setup_class_fixturec                   sh   t |ddƒ‰ t |ddƒ‰ˆ dkr,ˆdkr,dS dddœ‡ ‡fdd„}| jjjd	|j› �|| jd
dd� dS )zWRegister an auto-use fixture to invoke setup_method and
        teardown_method (#517).Zsetup_methodNZteardown_methodr   rT   rU   c                 3  sV   | j }t|ƒr$|j}tjj|dd�‚ˆ d k	r8ˆ || jƒ d V  ˆd k	rRˆ|| jƒ d S rW   )Úinstancer9   rX   rY   r   r'   Úfunction)rV   r3   rZ   ©r\   r]   r-   r.   Úunittest_setup_method_fixture³   s    z[UnitTestCase._register_unittest_setup_method_fixture.<locals>.unittest_setup_method_fixtureZ_unittest_setup_method_fixture_rf   Tr`   rc   )r3   rA   rh   r-   rg   r.   r:   «   s    
úz4UnitTestCase._register_unittest_setup_method_fixtureN)Ú__name__Ú
__module__rd   Ú
nofuncargsr4   rF   r;   r:   r-   r-   r-   r.   r*   G   s
   8r*   c                      s.  e Zd ZU dZdZded< dd„ Zedd„ ƒZd	d
œ‡ fdd„Z	d	d
œ‡ f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dd	dœdd„Zd6dddd	d!œd"d#„Zd7dd$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/d0„Zd1d2d3œ‡ fd4d5„Z‡  ZS )8r?   TNz7list[_pytest._code.ExceptionInfo[BaseException]] | NoneÚ_excinfoc                 C  s   t | jtƒst‚| j | j¡S rI   )Ú
isinstanceÚparentr*   ÚAssertionErrorr    r   r2   r-   r-   r.   Ú_getinstanceÎ   s    zTestCaseFunction._getinstancec                 C  s   | j S rI   )re   r2   r-   r-   r.   Ú	_testcaseÔ   s    zTestCaseFunction._testcaserH   r5   c                   s   d | _ tƒ  ¡  d S rI   )Ú_explicit_tearDownÚsuperr\   r2   ©Ú	__class__r-   r.   r\   Ø   s    zTestCaseFunction.setupc                   s0   | j d k	r|   ¡  d | _ d | _| `tƒ  ¡  d S rI   )rr   Ú_objZ	_instancers   r]   r2   rt   r-   r.   r]   Ý   s    
zTestCaseFunction.teardownzunittest.TestCase)Útestcaser!   c                 C  s   d S rI   r-   ©r3   rw   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k
rì   zrz,tj	|Ž }| 
dd¡ td |¡dd� W n@ tjtfk
rˆ   ‚ Y n& tk
r¬   td|›�dd� Y nX W n6 tk
rÆ   ‚ Y n" tjk
ræ   tjj ¡ }Y nX Y nX | j dg ¡ |¡ d S )	NÚ_rawexcinfor   zCNOTE: Incompatible Exception Representation, displaying natively:

Ú F©Zpytracez6ERROR: Unknown Incompatible Exception representation:
rl   )r8   Ú_pytestÚ_codeZExceptionInfoÚBaseExceptionZfrom_exc_infoÚvalueÚ	tracebackÚ	TypeErrorÚformat_exceptionÚinsertr   Újoinr'   ÚKeyboardInterruptZfrom_currentÚ__dict__Ú
setdefaultÚappend)r3   r{   ÚexcinforM   Úvaluesr-   r-   r.   Ú_addexcinfoè   s8    ÿ

þýzTestCaseFunction._addexcinfo)rw   r{   r!   c                 C  sF   z"t |d tjƒr t|d jƒ W n tk
r6   Y nX |  |¡ d S )NrP   )rm   r   r'   Úmsgr„   rŽ   ©r3   rw   r{   r-   r-   r.   ÚaddError  s    zTestCaseFunction.addErrorc                 C  s   |   |¡ d S rI   )rŽ   r�   r-   r-   r.   Ú
addFailure  s    zTestCaseFunction.addFailurer   )rw   rZ   r!   c                 C  s>   zt jj|dd�‚W n$ tjk
r8   |  t ¡ ¡ Y nX d S rW   )rY   r   r'   rŽ   r#   Úexc_info)r3   rw   rZ   r-   r-   r.   ÚaddSkip  s    zTestCaseFunction.addSkipr}   )rw   r{   rZ   r!   c                 C  s:   zt t|ƒƒ W n$ t jk
r4   |  t ¡ ¡ Y nX d S rI   )r   r   r'   rŽ   r#   r“   )r3   rw   r{   rZ   r-   r-   r.   ÚaddExpectedFailure   s    z#TestCaseFunction.addExpectedFailurez"twisted.trial.unittest.Todo | Nonec                 C  sR   d}|r|d|j › �7 }zt|dd� W n$ tjk
rL   |  t ¡ ¡ Y nX d S )NzUnexpected successz: Fr~   )rZ   r   r'   rŽ   r#   r“   )r3   rw   rZ   r�   r-   r-   r.   ÚaddUnexpectedSuccess+  s    z%TestCaseFunction.addUnexpectedSuccessc                 C  s   d S rI   r-   rx   r-   r-   r.   Ú
addSuccess9  s    zTestCaseFunction.addSuccessc                 C  s   d S rI   r-   rx   r-   r-   r.   ÚstopTest<  s    zTestCaseFunction.stopTestÚfloat)rw   Úelapsedr!   c                 C  s   d S rI   r-   )r3   rw   rš   r-   r-   r.   ÚaddDuration?  s    zTestCaseFunction.addDurationc              	   C  s¼   ddl m} | j}|d k	st‚|| ƒ t| jƒr<|| d� n|t| jtƒsLt‚t	| jƒp`t	| jjƒ}| j
 d¡rŠ|sŠ|j| _t|ddd„ ƒ t|| j| jƒ z|| d� W 5 t|| jƒ X d S )Nr   )Ú&maybe_wrap_pytest_function_for_tracing)ÚresultZusepdbÚtearDownc                  W  s   d S rI   r-   )Úargsr-   r-   r.   rJ   Y  rK   z*TestCaseFunction.runtest.<locals>.<lambda>)Z_pytest.debuggingrœ   re   ro   r   r    rm   rn   r*   r9   ÚconfigZ	getoptionrž   rr   Úsetattrr   Údelattr)r3   rœ   rw   rB   r-   r-   r.   rE   B  s    
	zTestCaseFunction.runtestz*_pytest._code.ExceptionInfo[BaseException]z_pytest._code.Traceback)rŒ   r!   c                   s&   t ƒ  |¡}| dd„ ¡}|s"|}|S )Nc                 S  s   | j j d¡ S )NZ
__unittest)ÚframeÚ	f_globalsr@   )rD   r-   r-   r.   rJ   h  rK   z4TestCaseFunction._traceback_filter.<locals>.<lambda>)rs   Ú_traceback_filterÚfilter)r3   rŒ   rƒ   Z
ntracebackrt   r-   r.   r¥   c  s    ÿz"TestCaseFunction._traceback_filter)r}   )N)ri   rj   rd   rk   rl   Ú__annotations__rp   Úpropertyrq   r\   r]   ry   rŽ   r‘   r’   r”   r•   r–   r—   r˜   r›   rE   r¥   Ú__classcell__r-   r-   rt   r.   r?   Ê   s*   

#

 ü ý!r?   T)Ztryfirstr   zCallInfo[None]rH   )ÚitemÚcallr!   c                   sŽ   t | tƒr<| jr<| j d¡|_z|`W n tk
r:   Y nX tj 	d¡}|rŠ|jrŠt |jj
|jƒrŠ|j‰ td   ‡ fdd„|j¡}|j|_d S )Nr   r"   c                     s   t  tˆ jƒ¡S rI   )rY   r   r   r‚   r-   ©rŒ   r-   r.   rJ   �  rK   z+pytest_runtest_makereport.<locals>.<lambda>)rm   r?   rl   ÚpoprŒ   r�   ÚAttributeErrorr#   r$   r@   r‚   ZSkipTestr   Z	from_callÚwhen)rª   r«   r"   Zcall2r-   r¬   r.   Úpytest_runtest_makereporto  s    

 ÿr°   F)ÚwrapperzGenerator[None, object, object])rª   r!   c                 #  sˆ   t | tƒr~dtjkr~tjd }|jj‰ tsPddlm} ddl	m
} |t|ƒ dad	‡ fdd„	}||j_z
d V }W 5 ˆ |j_X nd V }|S )
Nr7   ztwisted.python.failurer   )Ú	IReporter)ÚclassImplementsTc                   sn   |d krt  ¡ | _n|d kr$t|ƒ}|||f| _zˆ | ||||d� W n" tk
rh   ˆ | |||ƒ Y nX d S )N)ÚcaptureVars)r#   r“   r|   rG   r„   )r3   Ú	exc_valueÚexc_typeÚexc_tbr´   ©ZFailure__init__r-   r.   Úexcstore—  s        ÿ
z)pytest_runtest_protocol.<locals>.excstore)NNNN)rm   r?   r#   r$   ZFailureÚ__init__ÚclassImplements_has_runZtwisted.trial.itrialr²   Zzope.interfacer³   )rª   r,   r²   r³   r¹   Úresr-   r¸   r.   Úpytest_runtest_protocolŠ  s&    

       ÿ
r½   Úboolr5   c                 C  s   t t| ddƒƒS )zDReturn True if the given object has been marked with @unittest.skip.Z__unittest_skip__F)r¾   r8   r1   r-   r-   r.   r9   ±  s    r9   )7Ú__doc__Ú
__future__r   r(   r#   rƒ   ÚtypesÚtypingr   r   r   r   r   r   r	   r
   Z_pytest._coder   Z_pytest.compatr   Z_pytest.configr   Z_pytest.fixturesr   Z_pytest.nodesr   r   Z_pytest.outcomesr   r   r   r   Z_pytest.pythonr   r   r   Z_pytest.runnerr   rY   Úversion_infoZexceptiongroupr   r"   Ztwisted.trial.unittestZtwistedr�   ÚTracebackTyperz   r/   r*   r?   r°   r»   r½   r9   r-   r-   r-   r.   Ú<module>   sb   ÿÿ  &&