B
    18\X                 @   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__)selfmethod_name	exception)	__class__ S/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/unittest/loader.pyr      s    z_FailedTest.__init__c                s*   | j krtt |S  fdd}|S )Nc                  s
    j d S )N)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 )N)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 )Nr   )r   r   r   r   testSkipped5   s    z'_make_skipped_test.<locals>.testSkippedZModuleSkipped)r   skipstrtypeTestCase)r"   r   r   r$   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    r0   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 )N)r
   r1   r   errorsset_loading_packages)r   )r   r   r   r   M   s    zTestLoader.__init__c             C   sF   t |tjrtd| |}|s2t|dr2dg}| t||}|S )NzYTest cases should not be derived from TestSuite. Maybe you meant to derive from TestCase?runTest)
issubclassr   	TestSuite	TypeErrorgetTestCaseNameshasattrr   map)r   testCaseClassZtestCaseNamesZloaded_suiter   r   r   loadTestsFromTestCaseT   s    
z TestLoader.loadTestsFromTestCase)patternc         
   O   s4  t |dksd|kr,tdt |dd  t |dkrRt |d }td|t |dkrxt|d }td|g }x@t|D ]4}t	||}t
|trt|tjr|| | qW t	|dd }	| |}|	d k	r0y|	| ||S  tk
r. }
 z$t|j|
| j\}}| j| |S d }
~
X Y nX |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   r2   )r   moduler>   argskwsZ	complainttestsr   objr?   e
error_caseerror_messager   r   r   loadTestsFromModuleb   s4    


zTestLoader.loadTestsFromModulec             C   s>  | d}d\}}|d kr|d d  }xb|ryd|}t|}P W q( tk
r   | }t|| j\}}|s| j| |S Y q(X q(W |dd  }|}	x|D ]}
y|	t	|	|
 }}	W q t
k
r2 } zZt	|	dd d k	r|d k	r| j| |S t|
|| jdt f \}}| j| |S W d d }~X Y qX qW t|	tjrP| |	S t|	trtt|	tjrt| |	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 ntd|	 d S )	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   rD   r    r   r2   rJ   rH   AttributeErrorr   r   r   rI   types
ModuleTyperT   r'   r6   r   r(   r=   FunctionTyper   r7   callabler8   )r   r   rL   partsrR   rS   Z
parts_copymodule_nameZnext_attributerP   partparentrQ   instr#   r   r   r   loadTestsFromName   sl    	





zTestLoader.loadTestsFromNamec                s    fdd|D } |S )Nc                s   g | ]} | qS r   )re   ).0r   )rL   r   r   r   
<listcomp>   s    z1TestLoader.loadTestsFromNames.<locals>.<listcomp>)r   )r   namesrL   Zsuitesr   )rL   r   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 kpXt fddjD S )NFz%s.%s.%sc             3   s   | ]}t  |V  qd S )N)r   )rf   r>   )fullNamer   r   	<genexpr>   s    zKTestLoader.getTestCaseNames.<locals>.shouldIncludeMethod.<locals>.<genexpr>)
startswithtestMethodPrefixrH   r_   r   r   testNamePatternsany)ZattrnametestFunc)r   r<   )rj   r   shouldIncludeMethod   s    

z8TestLoader.getTestCaseNames.<locals>.shouldIncludeMethod)key)listfilterrG   sortTestMethodsUsingsort	functools
cmp_to_key)r   r<   rq   ZtestFnNamesr   )r   r<   r   r9      s
    zTestLoader.getTestCaseNamestest*.pyc             C   sN  d}|d kr| j d k	r| j }n|d kr.d}|}tj|}|tjkrRtjd| || _ d}d}g }tjtj|rtj|}||krtjtj|d }ntyt	| W n t
k
r   d}Y nNX tj| }|dd }	ytjtj|j}W n tk
r   y
|j}
W n tk
r8   d }
Y nX |
r|
jd kr|
jd k	rd}x|jD ]P}|s~||s~qd||jdtjjd | _ || j||dd qdW n*|jtjkrtdd ntd|d Y nX |r|s| |	| _ tj| ntj| |r.t
d	| |sDt| ||}|  |S )
NFTr   z__init__.pyrU   )	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isfilerY   rZ   r   modulesrX   dirname__file__r[   __spec__loadersubmodule_search_locationsrV   rl   r   replacesepextend_find_testsbuiltin_module_namesr8   rE    _get_directory_containing_moduleremovers   r   )r   	start_dirr>   top_level_dirZset_implicit_topZis_not_importableis_namespacerO   Z
the_moduleZtop_partspecr.   r   r   r   discover   sv    





zTestLoader.discoverc             C   sR   t j| }tj|j}tj| drBtj	tj	|S tj	|S d S )Nz__init__.py)
r}   r   r-   r.   r|   r   basenamer+   rl   r   )r   ra   rL   	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 )NrU   )r{   r0   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 )N)rZ   r}   r   )r   r   r   r   r   _get_module_from_namex  s    z TestLoader._get_module_from_namec             C   s
   t ||S )N)r   )r   r.   r   r>   r   r   r   _match_path|  s    zTestLoader._match_pathFc       
   
   c   s   |  |}|dkrD|| jkrD| |||\}}|d k	r<|V  |sDd S tt|}x||D ]t}tj||}	| |	||\}}|d k	r|V  |rX|  |	}| j| z| 	|	||E d H  W d | j
| X qXW d S )NrU   )r   r4   _find_test_pathrF   r-   listdirr.   rY   addr   discard)
r   r   r>   rz   r   rO   Zshould_recursepathsr.   r   r   r   r   r     s*    


zTestLoader._find_testsc          
   C   sP  t j|}t j|rHt|s(dS | |||s:dS | |}y| |}W nZ t	j
k
r } zt||| jdfS d }~X Y n   t|| j\}}	| j|	 |dfS t jt|d|}
tt j|
}tt j|}| | kr2t j|}tt j|}t j|}d}t||||f | j||ddfS nt j|rH|sxt jt j|dsxdS d }d }| |}y| |}W n\ t	j
k
r } zt||| jdfS d }~X Y nz   t|| j\}}	| j|	 |dfS t|dd }| j| z(| j||d}|d k	r0|dfS |dfS | j| X ndS d S )	N)NFFr   zW%r module incorrectly imported from %r. Expected %r. Is this module globally installed?)r>   z__init__.pyr?   T)r-   r.   r   r   VALID_MODULE_NAMEmatchr   r   r   r   SkipTestr*   r   r    r2   rJ   r|   rH   r0   realpathr+   r   r   rT   r   rY   r4   r   r   )r   r   r>   rz   r   r   rL   rQ   rR   rS   Zmod_filer   Zfullpath_noextZ
module_dirZmod_nameZexpected_dirmsgr?   rO   packager   r   r   r     sl    



zTestLoader._find_test_path)N)N)ry   N)F)F)r   r   r   rm   staticmethodr   three_way_cmpru   rn   r   r7   r   r{   r   r=   rT   re   ri   r9   r   r   r   r   r   r   r   r   r   r   )r   r   r1   B   s$   
(
N

n
"r1   c             C   s&   t  }||_| |_||_|r"||_|S )N)r1   ru   rm   rn   r   )prefix	sortUsingr   rn   r   r   r   r   _makeLoader  s    r   c             C   s   t |||d| S )N)rn   )r   r9   )r<   r   r   rn   r   r   r   r9     s    r9   r#   c             C   s   t |||| S )N)r   r=   )r<   r   r   r   r   r   r   	makeSuite  s    r   c             C   s   t |||| S )N)r   rT   )rL   r   r   r   r   r   r   findTestCases  s    r   )NN)!r-   rer}   r   r\   rw   rA   r   r    r   r   r   
__unittestcompile
IGNORECASEr   r(   r   r    r!   r   r*   r0   objectr1   defaultTestLoaderr   r   r9   r7   r   r   r   r   r   r   <module>   s6      /
	