o
    JAfX                     @   s  	 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
mZmZ dZedejZG dd de
jZd	d
 Zdd Zdd Zdd Zdd ZG dd deZe ZdddZejdfddZdejejfddZdejejfddZ dS )    N)fnmatchfnmatchcase   )casesuiteutilTz[_a-z]\w*\.py$c                       s,   e Zd ZdZ fddZ fddZ  ZS )_FailedTestNc                    s   || _ tt| | d S N)
_exceptionsuperr   __init__)selfZmethod_name	exception	__class__ &/usr/lib/python3.10/unittest/loader.pyr      s   z_FailedTest.__init__c                    s*   | j krtt |S  fdd}|S )Nc                      s    j r	   )r
   r   r   r   r   testFailure!   s   z,_FailedTest.__getattr__.<locals>.testFailure)_testMethodNamer   r   __getattr__)r   namer   r   r   r   r      s   
z_FailedTest.__getattr__)__name__
__module____qualname__r   r   r   __classcell__r   r   r   r   r      s    r   c                 C   s"   d| t  f }t| t|||S )Nz#Failed to import test module: %s
%s)	traceback
format_exc_make_failed_testImportError)r   
suiteClassmessager   r   r   _make_failed_import_test&   s   r"   c                 C   s   dt  f }t| |||S )NzFailed to call load_tests:
%s)r   r   r   )r   r   r    r!   r   r   r   _make_failed_load_tests+   s   r#   c                 C   s   t | |}||f|fS r	   )r   )
methodnamer   r    r!   testr   r   r   r   0   s   
r   c                 C   s<   t t|dd }| |i}tdt jf|}||| fS )Nc                 S   s   d S r	   r   r   r   r   r   testSkipped5   s   z'_make_skipped_test.<locals>.testSkippedZModuleSkipped)r   skipstrtypeTestCase)r$   r   r    r&   ZattrsZ	TestClassr   r   r   _make_skipped_test4   s
   
r+   c                 C   s*   |   dr| d d S tj| d S )Nz	$py.classir   )lowerendswithospathsplitext)r/   r   r   r   _jython_aware_splitext<   s   r1   c                       s   e Zd Z	 dZeejZdZe	j
ZdZ fddZdd Zdddd	Zd d
dZd ddZdd Zd!ddZdd Zdd Zdd Zdd Zd"ddZd"ddZ  ZS )#
TestLoaderr%   Nc                    s    t t|   g | _t | _d S r	   )r   r2   r   errorsset_loading_packagesr   r   r   r   r   M   s   zTestLoader.__init__c                 C   sH   	 t |tjrtd| |}|st|drdg}| t||}|S )NzYTest cases should not be derived from TestSuite. Maybe you meant to derive from TestCase?ZrunTest)
issubclassr   	TestSuite	TypeErrorgetTestCaseNameshasattrr    map)r   testCaseClassZtestCaseNamesZloaded_suiter   r   r   loadTestsFromTestCaseT   s   
z TestLoader.loadTestsFromTestCasepatternc             
   O   s6  	 t |dksd|v rtdt |dd  t |dkr*t |d }td|t |dkr=t|d }td|g }t|D ]}t	||}t
|tr]t|tjr]|| | qCt	|dd }	| |}|	d urz|	| ||W S  ty }
 zt|j|
| j\}}| j| |W  Y d }
~
S d }
~
ww |S )Nr   Zuse_load_testsz(use_load_tests is deprecated and ignoredr   zCloadTestsFromModule() takes 1 positional argument but {} were givenz=loadTestsFromModule() got an unexpected keyword argument '{}'
load_tests)lenwarningswarnDeprecationWarningpopr8   formatsorteddirgetattr
isinstancer)   r6   r   r*   appendr=   r    	Exceptionr#   r   r3   )r   moduler?   argskwsZ	complainttestsr   objr@   e
error_caseerror_messager   r   r   loadTestsFromModuleb   s@   


zTestLoader.loadTestsFromModulec                 C   s4  	 | d}d\}}|d u rK|d d  }|rEzd|}t|}W n# tyB   | }t|| j\}}|s@| j| | Y S Y nw |s|dd  }|}	|D ]S}
z
|	t	|	|
}}	W qO t
y } z;t	|	dd d ur|d ur| j| |W  Y d }~  S t|
|| jdt f \}}| j| |W  Y d }~  S d }~ww t|	tjr| |	S t|	trt|	tjr| |	S t|	tjrt|trt|tjr|d }||}tt	||tjs| |gS nt|	tjr|	S t|	r|	 }t|tjr|S t|tjr| |gS td|	|f td|	 )	N.NNr   __path__zFailed to access attribute:
%sz"calling %s returned %s, not a testz$don't know how to make test from: %s)splitjoin
__import__r   rE   r"   r    r3   rK   rI   AttributeErrorr   r   r   rJ   types
ModuleTyperU   r)   r6   r   r*   r=   FunctionTyper   r7   callabler8   )r   r   rM   partsrS   rT   Z
parts_copymodule_nameZnext_attributerQ   partparentrR   instr%   r   r   r   loadTestsFromName   s   





zTestLoader.loadTestsFromNamec                    s    	  fdd|D } |S )Nc                    s   g | ]} | qS r   )rg   ).0r   rM   r   r   r   
<listcomp>   s    z1TestLoader.loadTestsFromNames.<locals>.<listcomp>)r    )r   namesrM   Zsuitesr   ri   r   loadTestsFromNames   s   
zTestLoader.loadTestsFromNamesc                    s@   	  fdd}t t|t} jr|jt jd |S )Nc                    sZ   |  jsdS t| }t|sdS djj| f  jd u p,t fddjD S )NFz%s.%s.%sc                 3   s    | ]}t  |V  qd S r	   )r   )rh   r?   ZfullNamer   r   	<genexpr>   s    zKTestLoader.getTestCaseNames.<locals>.shouldIncludeMethod.<locals>.<genexpr>)
startswithtestMethodPrefixrI   ra   r   r   testNamePatternsany)attrnameZtestFuncr   r<   rm   r   shouldIncludeMethod   s   


z8TestLoader.getTestCaseNames.<locals>.shouldIncludeMethod)key)listfilterrH   sortTestMethodsUsingsort	functools
cmp_to_key)r   r<   ru   ZtestFnNamesr   rt   r   r9      s   zTestLoader.getTestCaseNamestest*.pyc                 C   s(  	 d}|d u r| j d ur| j }n|d u rd}|}tj|}|tjvr*tjd| || _ d}d}g }tjtj|rTtj|}||krStjtj|d }nzt	| W n t
ye   d}Y nw tj| }|dd }	ztjtj|j}W nd ty   z|j}
W n ty   d }
Y nw |
r|
jd u r|
jd urd}|jD ]$}|s||sq||jdtjjd | _ || j||dd qn|jtjv rtdd td|d Y nw |r|s| |	| _ tj| ntj| |rt
d	| |st| ||}|  |S )
NFTr   __init__.pyrV   )	namespacez2Can not use builtin modules as dotted module namesz$don't know how to discover from {!r}z%Start directory is not importable: %r)!_top_level_dirr.   r/   abspathsysinsertisdirisfiler[   r\   r   modulesrZ   dirname__file__r]   __spec__loadersubmodule_search_locationsrX   ro   r   replacesepextend_find_testsbuiltin_module_namesr8   rF    _get_directory_containing_moduleremoverw   r    )r   	start_dirr?   Ztop_level_dirZset_implicit_topZis_not_importableis_namespacerP   Z
the_moduleZtop_partspecr/   r   r   r   discover   s   







zTestLoader.discoverc                 C   sN   t j| }tj|j}tj| dr!tj	tj	|S tj	|S )Nr~   )
r   r   r.   r/   r   r   basenamer,   ro   r   )r   rc   rM   	full_pathr   r   r   r   `  s
   
z+TestLoader._get_directory_containing_modulec                 C   sB   || j krdS ttj|}tj|| j }|tjjd}|S NrV   )r   r1   r.   r/   normpathrelpathr   r   )r   r/   Z_relpathr   r   r   r   _get_name_from_pathl  s   
zTestLoader._get_name_from_pathc                 C   s   t | tj| S r	   )r\   r   r   )r   r   r   r   r   _get_module_from_namex  s   
z TestLoader._get_module_from_namec                 C   s
   t ||S r	   )r   )r   r/   r   r?   r   r   r   _match_path|  s   
zTestLoader._match_pathFc           
   
   c   s    	 |  |}|dkr$|| jvr$| |||\}}|d ur |V  |s$d S tt|}|D ]@}tj||}	| |	||\}}|d urF|V  |rm|  |	}| j| z| 	|	||E d H  W | j
| q-| j
| w q-d S r   )r   r5   _find_test_pathrG   r.   listdirr/   r[   addr   discard)
r   r   r?   r   r   rP   Zshould_recursepathsr/   r   r   r   r   r     s6   

zTestLoader._find_testsc              
   C   sn  	 t j|}t j|rt|sdS | |||sdS | |}z| |}W n2 t	j
yE } zt||| jdfW  Y d }~S d }~w   t|| j\}}	| j|	 |df Y S t jt|d|}
tt j|
}tt j|}| | krt j|}tt j|}t j|}d}t||||f | j||ddfS t j|r5|st jt j|dsdS d }d }| |}z| |}W n2 t	j
y } zt||| jdfW  Y d }~S d }~w   t|| j\}}	| j|	 |df Y S t|dd }| j| z"| j||d}|d ur#|dfW | j| S |dfW | j| S | j| w dS )	N)NFFr   zW%r module incorrectly imported from %r. Expected %r. Is this module globally installed?r>   r~   r@   T)r.   r/   r   r   VALID_MODULE_NAMEmatchr   r   r   r   ZSkipTestr+   r    r"   r3   rK   r   rI   r1   realpathr,   r   r   rU   r   r[   r5   r   r   )r   r   r?   r   r   r   rM   rR   rS   rT   Zmod_filer   Zfullpath_noextZ
module_dirZmod_nameZexpected_dirmsgr@   rP   packager   r   r   r     s   









zTestLoader._find_test_pathr	   )r}   N)F)r   r   r   rp   staticmethodr   three_way_cmpry   rq   r   r7   r    r   r   r=   rU   rg   rl   r9   r   r   r   r   r   r   r   r   r   r   r   r   r2   B   s(    

(
N
n
"r2   c                 C   s&   t  }||_| |_||_|r||_|S r	   )r2   ry   rp   rq   r    )prefix	sortUsingr    rq   r   r   r   r   _makeLoader  s   r   c                 C   s   t |||d| S )N)rq   )r   r9   )r<   r   r   rq   r   r   r   r9     s   r9   r%   c                 C      t |||| S r	   )r   r=   )r<   r   r   r    r   r   r   	makeSuite     r   c                 C   r   r	   )r   rU   )rM   r   r   r    r   r   r   findTestCases  r   r   rW   )!r.   rer   r   r^   r{   rB   r   r    r   r   r   Z
__unittestcompile
IGNORECASEr   r*   r   r"   r#   r   r+   r1   objectr2   ZdefaultTestLoaderr   r   r9   r7   r   r   r   r   r   r   <module>   s>       /
	
