a
    *ñ»j1K  ã                   @  sZ  d 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Zdd	l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(m)Z) dd	l*Z*ej+d	d… dk �rhddl,m-Z- e�r~dd	l.Z.dd	l/Z0ee1e2e3 e3ej4f e1d f Z5ddd d!d"œd#d$„Z6G d%d&„ d&e%ƒZ7G d'd(„ d(e&ƒZ8ed)d*�d+d,d-d.œd/d0„ƒZ9d1d2œd3d4„Z:d-d2œd5d6„Z;G d7d8„ d8e
ƒZ<d8d2œd9d:„Z=d;Z>ed)d<�d+d=d>œd?d@„ƒZ?dAdBdCœdDdE„Z@d	S )Fz4Discover and run std-library "unittest" style tests.é    )Úannotations)ÚCallable)Ú	Generator)ÚIterable)ÚIterator)Úauto)ÚEnumN)ÚTYPE_CHECKING)ÚUnion)Úis_async_function)Úhookimpl)ÚFixtureRequest)ÚMonkeyPatch)Ú	Collector)ÚItem)Úexit)Úfail)Úskip)Úxfail)ÚClass)ÚFunction)ÚModule)ÚCallInfoé   )é   é   )ÚExceptionGroup)NNNzModule | ClassÚstrÚobjectzUnitTestCase | None)Ú	collectorÚnameÚobjÚreturnc                 C  sT   z t jd }t||jƒsW d S W n ty4   Y d S 0 t |¡rDd S tj| ||d�S )NÚunittest)r    r!   )	ÚsysÚmodulesÚ
issubclassÚTestCaseÚ	ExceptionÚinspectÚ
isabstractÚUnitTestCaseÚfrom_parent)r   r    r!   Úut© r.   ú6E:\soccer\ml_env\Lib\site-packages\_pytest/unittest.pyÚpytest_pycollect_makeitem4   s    


r0   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/   ÚnewinstanceM   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 urötj dd ¡}	|	d u sæ||	jjkrötj| dd�V  d S )	Nr   )Ú
TestLoaderZ__test__TF)r    r1   útwisted.trial.unittest)r#   r7   r!   ÚgetattrÚ_is_skippedÚ'_register_unittest_setup_method_fixtureÚ&_register_unittest_setup_class_fixtureZ_register_setup_class_fixtureÚsessionÚ_fixturemanagerZparsefactoriesr5   ÚnodeidZgetTestCaseNamesÚTestCaseFunctionr,   r$   r%   Úgetr'   r1   )
r4   r7   ÚclsÚskippedÚloaderZfoundsomethingr    ÚxÚruntestr-   r.   r.   r/   ÚcollectU   s0    

zUnitTestCase.collectÚtypeÚNone)rB   r"   c                   sŽ   t ˆddƒ‰t ˆddƒ‰ˆdu r,ˆdu 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>{   ó    zEUnitTestCase._register_unittest_setup_class_fixture.<locals>.<lambda>rI   r6   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>ƒ   rL   zlUnitTestCase._register_unittest_setup_class_fixture.<locals>.process_teardown_exceptions.<locals>.<listcomp>é   r   zUnittest class cleanup errors)r9   Úlenr   )Z	exc_infosÚ
exceptions)rB   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 urXz
ˆƒ  W n  tyV   ˆ ƒ  ˆƒ  ‚ Y n0 d V  zˆd urnˆƒ  W ˆ ƒ  ˆƒ  nˆ ƒ  ˆƒ  0 d S ©NT)Z_use_item_location)rB   r:   Ú__unittest_skip_why__Úpytestr   r(   )rW   rB   Úreason)ÚcleanuprT   Ú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©r9   r=   r>   Z_register_fixtureÚ__qualname__r?   )r4   rB   r_   r.   )r\   rB   rT   r]   r^   r/   r<   t   s    
úz3UnitTestCase._register_unittest_setup_class_fixturec                   sh   t |ddƒ‰ t |ddƒ‰ˆ du r,ˆdu 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   rU   rV   c                 3  sV   | j }t|ƒr$|j}tjj|dd�‚ˆ d ur8ˆ || jƒ d V  ˆd urRˆ|| jƒ d S rX   )Úinstancer:   rY   rZ   r   r(   Úfunction)rW   r4   r[   ©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_rg   Tra   rd   )r4   rB   ri   r.   rh   r/   r;   ¬   s    
úz4UnitTestCase._register_unittest_setup_method_fixtureN)Ú__name__Ú
__module__re   Ú
nofuncargsr5   rG   r<   r;   r.   r.   r.   r/   r+   H   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J ‚| j | j¡S rJ   )Ú
isinstanceÚparentr+   r!   r    r3   r.   r.   r/   Ú_getinstanceÏ   s    zTestCaseFunction._getinstancec                 C  s   | j S rJ   )rf   r3   r.   r.   r/   Ú	_testcaseÕ   s    zTestCaseFunction._testcaserI   r6   c                   s   d | _ tƒ  ¡  d S rJ   )Ú_explicit_tearDownÚsuperr]   r3   ©Ú	__class__r.   r/   r]   Ù   s    zTestCaseFunction.setupc                   s0   | j d ur|   ¡  d | _ d | _| `tƒ  ¡  d S rJ   )rr   Ú_objZ	_instancers   r^   r3   rt   r.   r/   r^   Þ   s    
zTestCaseFunction.teardownzunittest.TestCase)Útestcaser"   c                 C  s   d S rJ   r.   ©r4   rw   r.   r.   r/   Ú	startTestæ   s    zTestCaseFunction.startTestÚ_SysExcInfoType©Ú
rawexcinfor"   c                 C  sø   t |ƒ}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|›�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 )Nr   zCNOTE: Incompatible Exception Representation, displaying natively:

Ú F©Zpytracez6ERROR: Unknown Incompatible Exception representation:
rm   )Ú_handle_twisted_exc_infoÚ_pytestÚ_codeZExceptionInfoÚBaseExceptionZfrom_exc_infoÚvalueÚ	tracebackÚ	TypeErrorÚformat_exceptionÚinsertr   Újoinr(   ÚKeyboardInterruptZfrom_currentÚ__dict__Ú
setdefaultÚappend)r4   r|   ÚexcinforN   Úvaluesr.   r.   r/   Ú_addexcinfoé   s<    ÿ

þÿýzTestCaseFunction._addexcinfo)rw   r|   r"   c                 C  sD   z"t |d tjƒr t|d jƒ W n ty4   Y n0 |  |¡ d S )NrQ   )rn   r   r(   Úmsgr…   r�   ©r4   rw   r|   r.   r.   r/   ÚaddError  s    zTestCaseFunction.addErrorc                 C  s   |   |¡ d S rJ   )r�   r‘   r.   r.   r/   Ú
addFailure  s    zTestCaseFunction.addFailurer   )rw   r[   r"   c                 C  s<   zt jj|dd�‚W n" tjy6   |  t ¡ ¡ Y n0 d S rX   )rZ   r   r(   r�   r$   Úexc_info)r4   rw   r[   r.   r.   r/   ÚaddSkip  s    zTestCaseFunction.addSkipr}   )rw   r|   r[   r"   c                 C  s8   zt t|ƒƒ W n" t jy2   |  t ¡ ¡ Y n0 d S rJ   )r   r   r(   r�   r$   r”   )r4   rw   r|   r[   r.   r.   r/   ÚaddExpectedFailure   s    z#TestCaseFunction.addExpectedFailurez"twisted.trial.unittest.Todo | Nonec                 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: Fr~   )r[   r   r(   r�   r$   r”   )r4   rw   r[   r�   r.   r.   r/   ÚaddUnexpectedSuccess+  s    z%TestCaseFunction.addUnexpectedSuccessc                 C  s   d S rJ   r.   rx   r.   r.   r/   Ú
addSuccess9  s    zTestCaseFunction.addSuccessc                 C  s   d S rJ   r.   rx   r.   r.   r/   ÚstopTest<  s    zTestCaseFunction.stopTestÚfloat)rw   Úelapsedr"   c                 C  s   d S rJ   r.   )r4   rw   r›   r.   r.   r/   ÚaddDuration?  s    zTestCaseFunction.addDurationc              	   C  sÈ   ddl m} | j}|d usJ ‚|| ƒ t| jƒr<|| d� nˆt| jtƒsLJ ‚t| jƒp`t| jjƒ}| j	 
d¡rŠ|sŠ|j| _t|ddd„ ƒ t|| j| jƒ z|| d� W t|| jƒ nt|| jƒ 0 d S )Nr   )Ú&maybe_wrap_pytest_function_for_tracing)ÚresultZusepdbÚtearDownc                  W  s   d S rJ   r.   )Úargsr.   r.   r/   rK   Y  rL   z*TestCaseFunction.runtest.<locals>.<lambda>)Z_pytest.debuggingr�   rf   r   r!   rn   ro   r+   r:   ÚconfigZ	getoptionrŸ   rr   Úsetattrr    Údelattr)r4   r�   rw   rC   r.   r.   r/   rF   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_globalsrA   )rE   r.   r.   r/   rK   h  rL   z4TestCaseFunction._traceback_filter.<locals>.<lambda>)rs   Ú_traceback_filterÚfilter)r4   r�   r„   Z
ntracebackrt   r.   r/   r¦   c  s    ÿz"TestCaseFunction._traceback_filter)r}   )N)rj   rk   re   rl   rm   Ú__annotations__rp   Úpropertyrq   r]   r^   ry   r�   r’   r“   r•   r–   r—   r˜   r™   rœ   rF   r¦   Ú__classcell__r.   r.   rt   r/   r@   Ë   s*   

"

 ü ý!r@   T)Ztryfirstr   zCallInfo[None]rI   )ÚitemÚcallr"   c                   sŒ   t | tƒr:| jr:| j d¡|_z|`W n ty8   Y n0 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 rJ   )rZ   r   r   rƒ   r.   ©r�   r.   r/   rK   �  rL   z+pytest_runtest_makereport.<locals>.<lambda>)rn   r@   rm   Úpopr�   rž   ÚAttributeErrorr$   r%   rA   rƒ   ZSkipTestr   Z	from_callÚwhen)r«   r¬   r#   Zcall2r.   r­   r/   Úpytest_runtest_makereporto  s    
ÿr±   Úboolr6   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²   r9   r2   r.   r.   r/   r:   †  s    r:   c                  C  s2   t ƒ tjur.ddlm}  ddlm} |t| ƒ dS )zRRegister the TestCaseFunction class as an IReporter if twisted.trial is available.r   )Ú	IReporter)ÚclassImplementsN)Ú_get_twisted_versionÚTwistedVersionÚNotInstalledZtwisted.trial.itrialr³   Zzope.interfacer´   r@   )r³   r´   r.   r.   r/   Úpytest_configure‹  s    r¸   c                   @  s"   e Zd ZdZeƒ Zeƒ Zeƒ ZdS )r¶   zŠ
    The Twisted version installed in the environment.

    We have different workarounds in place for different versions of Twisted.
    N)rj   rk   re   Ú__doc__r   Ú	Version24Ú	Version25r·   r.   r.   r.   r/   r¶   ”  s   r¶   c                  C  sR   dt jvrtjS dd l} dd l}| j d¡}|j |¡}|j	dkrHtj
S tjS d S )Nr8   r   Útwistedé   )r$   r%   r¶   r·   Úimportlib.metadataZpackaging.versionÚmetadataÚversionÚparseÚmajorrº   r»   )Ú	importlibÚ	packagingÚversion_strrÀ   r.   r.   r/   rµ   £  s    

rµ   Z_twisted_raw_excinfo)ÚwrapperzIterator[None])r«   r"   c                 #  s~   t ƒ tju rtdd lm  m} |jj‰ d‡ fdd„	}t 	¡ �&}| 
|jd|¡ d V W  d   ƒ S 1 sh0    Y  nd V S d S )Nr   c                   sŒ   |d u rt  ¡ }n.|d u r"t|ƒ}|d u r6t  ¡ d }|||f}t| tt|ƒƒ zˆ | ||||d� W n  ty†   ˆ | |||ƒ Y n0 d S )Nr   )ÚcaptureVars)r$   r”   rH   r¢   ÚTWISTED_RAW_EXCINFO_ATTRÚtupler…   )r4   Ú	exc_valueÚexc_typeÚexc_tbrÇ   Zraw_exc_info©Zoriginal__init__r.   r/   Ústore_raw_exception_infoÄ  s    


ÿ
z9pytest_runtest_protocol.<locals>.store_raw_exception_infoÚ__init__)NNNN)rµ   r¶   rº   Útwisted.python.failureÚpythonÚfailureÚFailurerÏ   r   Úcontextr¢   )r«   r-   rÎ   Zpatcherr.   rÍ   r/   Úpytest_runtest_protocol¼  s     ÿ
&rÕ   z_SysExcInfoType | BaseExceptionrz   r{   c                 C  s¶   t ƒ }|tju r| S |tju rDt| tƒr@t| tƒ}t| tƒ |S | S |tju r t	| t
ƒrœddl}t	| |jjjƒrœ| j}|du rŠt ¡ d }t| jƒ| j|fS | S ds²J d|› �ƒ‚dS )zî
    Twisted passes a custom Failure instance to `addError()` instead of using `sys.exc_info()`.
    Therefore, if `rawexcinfo` is a `Failure` instance, convert it into the equivalent `sys.exc_info()` tuple
    as expected by pytest.
    r   Nr   FzUnexpected Twisted version: )rµ   r¶   r·   rº   ÚhasattrrÈ   r9   r£   r»   rn   r‚   rÐ   rÑ   rÒ   rÓ   Ú__traceback__r$   r”   rH   rƒ   )r|   Ztwisted_versionZsaved_exc_infor¼   Útbr.   r.   r/   r   Þ  s&    






r   )Ar¹   Ú
__future__r   Úcollections.abcr   r   r   r   Úenumr   r   r)   r$   r„   ÚtypesÚtypingr	   r
   Z_pytest._coder€   Z_pytest.compatr   Z_pytest.configr   Z_pytest.fixturesr   Z_pytest.monkeypatchr   Z_pytest.nodesr   r   Z_pytest.outcomesr   r   r   r   Z_pytest.pythonr   r   r   Z_pytest.runnerr   rZ   Úversion_infoZexceptiongroupr   r#   Ztwisted.trial.unittestr¼   rÉ   rH   r‚   ÚTracebackTyperz   r0   r+   r@   r±   r:   r¸   r¶   rµ   rÈ   rÕ   r   r.   r.   r.   r/   Ú<module>   sl   ÿÿ  %	!