a
    xþd§*  ã                   @   st   d Z ddlZddlZddlZddlmZ ddlmZmZ dd„ Z	dd„ Z
d	d
„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )z
Test discovery functions.
é    N)ÚTestingConfig)Ú	LitConfigÚTestc                 C   s0   |D ]&}t j | |¡}t j |¡r|  S qd S ©N)ÚosÚpathÚjoinÚexists)ÚdirÚconfig_namesÚnameÚp© r   úV/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/lit/discovery.pyÚchooseConfigFileFromDir   s
    
r   c                 C   s    t | |jƒ}|st | |jƒ}|S r   )r   Zsite_config_namesr   )r   Ú
lit_configÚcfgpathr   r   r   ÚdirContainsTestSuite   s    r   c                    sš   ‡‡fdd„‰‡ ‡fdd„‰t j t j t  ¡ | ¡¡} g }t j | ¡srt j | ¡\}}|| krbdS | |¡ |} q:| ¡  ˆ| ƒ\}}|t	|t	|ƒ ƒfS )a+  getTestSuite(item, litConfig, cache) -> (suite, relative_path)

    Find the test suite containing @arg item.

    @retval (None, ...) - Indicates no test suite contains @arg item.
    @retval (suite, relative_path) - The suite that @arg item is in, and its
    relative path inside that suite.
    c                    sÞ   t | ˆ ƒ}|sDtj | ¡\}}|| kr*dS ˆ|ƒ\}}|||f fS ˆ j d¡}|rztj |¡}| tj |¡¡}|rz|}ˆ jrŽˆ  	d| ¡ t
 ˆ ¡}| |ˆ ¡ tj |jp²| ¡}	tj |jpÄ| ¡}
t |j|	|
|¡dfS )N©Nr   Ú
config_mapzloading suite config %rr   )r   r   r   ÚsplitÚparamsÚgetÚrealpathÚnormcaseÚdebugÚnoter   ZfromdefaultsÚload_from_pathZtest_source_rootZtest_exec_rootr   Z	TestSuiter   )r   r   ÚparentÚbaseÚtsÚrelativer   ÚtargetÚcfgZsource_rootZ	exec_root)Ú	litConfigÚsearchr   r   Úsearch1"   s(    

zgetTestSuite.<locals>.search1c                    s2   t j | ¡}ˆ  |¡}|d u r.ˆ| ƒ ˆ |< }|S r   )r   r   r   r   )r   Ú	real_pathÚres)Úcacher&   r   r   r%   F   s
    
zgetTestSuite.<locals>.searchr   )
r   r   Únormpathr   ÚgetcwdÚisdirr   ÚappendÚreverseÚtuple)Úitemr$   r)   Ú
componentsr   r   r    r!   r   )r)   r$   r%   r&   r   ÚgetTestSuite   s    	$	
r2   c                    s(   ‡‡‡fdd„‰‡ ‡‡fdd„‰ˆ|ƒS )Nc                    sh   | sˆj }nˆ| d d… ƒ}ˆ | ¡}t|ˆ jƒ}|s:|S t |¡}ˆ jrXˆ  d| ¡ | |ˆ ¡ |S )Néÿÿÿÿzloading local config %r)	ÚconfigÚgetSourcePathr   Zlocal_config_namesÚcopyÚdeepcopyr   r   r   )Úpath_in_suiter   Úsource_pathr   r4   )r$   r%   r    r   r   r&   _   s    

zgetLocalConfig.<locals>.search1c                    s.   ˆ| f}ˆ   |¡}|d u r*ˆ| ƒ ˆ |< }|S r   )r   )r8   Úkeyr(   )r)   r&   r    r   r   r%   v   s
    
zgetLocalConfig.<locals>.searchr   )r    r8   r$   r)   r   )r)   r$   r%   r&   r    r   ÚgetLocalConfig^   s    r;   c                 C   s\   t | ||ƒ\}}|d u r*| d|  ¡ dS |jrF| d| |j|f ¡ |t||||||ƒfS )Nz unable to find test suite for %r)r   r   zresolved input %r to %r::%r)r2   Úwarningr   r   r   ÚgetTestsInSuite)r   r$   ÚtestSuiteCacheÚlocalConfigCacheÚindirectlyRunCheckr    r8   r   r   r   ÚgetTests   s    ÿ
ÿrA   c                 c   s.  |   |¡}tj |¡sd S tj |¡s¶|d d… }t| |||ƒ}t | ||¡}	|r¬|jd ur¬|js¬d}
|j 	| |||¡D ]}|	 
¡ | 
¡ krxd}
 q–qx|
s¬| d|	 
¡  ¡ |	V  d S t| |||ƒ}|jrä|jsÖ|jrà| d¡ d S |jd ur|j 	| |||¡D ]}|V  qt |¡D ]}|dv s||jv r:qtj ||¡}tj |¡sZq||f }|  |¡}t||ƒrŒt|||ƒ\}}n"t||ƒrªt|||ƒ\}}nd }|| u r¼q|d urÚt||||||ƒ}nt| |||||ƒ}d}|D ]}|d7 }|V  qô|r|s| d	|j ¡ qd S )
Nr3   FTzf%r would not be run indirectly: change name or LIT config(e.g. suffixes or standalone_tests variables)zHstandalone_tests set in LIT config but suffixes or excludes are also set)ZOutputz.svnz.gitr   é   z test suite %r contained no tests)r5   r   r   r	   r,   r;   r   Ztest_formatZstandalone_testsZgetTestsInDirectoryZgetFullNameÚerrorÚsuffixesÚexcludesr<   Úlistdirr   ZgetExecPathr   r2   r=   r   )r    r8   r$   r>   r?   r@   r9   Ztest_dir_in_suiteÚlcÚtestÚfoundr(   ÚfilenameZfile_sourcepathÚsubpathZfile_execpathZsub_tsZsubpath_in_suiteZsubiterÚNr   r   r   r=   Ž   s’    
ÿþý
ÿþÿÿ
ÿ


ÿ
ÿ


þ
ÿ
r=   c              	   C   s
  g }|D ]b}|  d¡r`t|dd… ƒ}z,|D ]}| ¡ }|r,| |¡ q,W | ¡  qj| ¡  0 q| |¡ qg }i }i }	|D ]@}t|ƒ}
| t|| ||	|ƒd ¡ |
t|ƒkr||  d| ¡ q|| 	¡ D ]\}}|d rÆd|d _
qÆ| jrtj d| j ¡ t d¡ |S )z¢
    find_tests_for_inputs(lit_config, inputs) -> [Test]

    Given a configuration object and a list of input specifiers, find all the
    tests to execute.
    ú@rB   Nzinput %r contained no testsr   z%d errors, exiting.
é   )Ú
startswithÚopenÚstripr-   ÚcloseÚlenÚextendrA   r<   ÚitemsZ
test_timesZ	numErrorsÚsysÚstderrÚwriteÚexit)r   Úinputsr@   Zactual_inputsÚinputÚfÚlnÚtestsZtest_suite_cacheZlocal_config_cacheÚprevÚkZsuiter   r   r   Úfind_tests_for_inputsù   s<    	
ÿÿ
ra   )Ú__doc__r6   r   rV   Zlit.TestingConfigr   Zlitr   r   r   r   r2   r;   rA   r=   ra   r   r   r   r   Ú<module>   s   E!k