B
    2*\Z                 @   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__ :C:\ALexclude\prg\programme\Python37\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#   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    r.   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
   r/   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?Z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popr5   formatsorteddirgetattr
isinstancer&   r3   r   r'   appendr:   r   	Exceptionr    r   r0   )r   moduler;   argsZ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   rA   r   r   r0   rG   rE   AttributeErrorr   r   r   rF   types
ModuleTyperP   r&   r3   r   r'   r:   FunctionTyper   r4   callabler5   )r   r   rI   partsrN   rO   Z
parts_copymodule_nameZnext_attributerL   partparentrM   Zinstr"   r   r   r   loadTestsFromName   sl    	





zTestLoader.loadTestsFromNamec                s    fdd|D } |S )Nc                s   g | ]} | qS r   )r`   ).0r   )rI   r   r   r   
<listcomp>   s    z1TestLoader.loadTestsFromNames.<locals>.<listcomp>)r   )r   namesrI   Zsuitesr   )rI   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   )ra   r;   )fullNamer   r   	<genexpr>   s    zKTestLoader.getTestCaseNames.<locals>.shouldIncludeMethod.<locals>.<genexpr>)
startswithtestMethodPrefixrE   r[   r   r   testNamePatternsany)ZattrnameZtestFunc)r   r9   )re   r   shouldIncludeMethod   s    

z8TestLoader.getTestCaseNames.<locals>.shouldIncludeMethod)key)listfilterrD   sortTestMethodsUsingsort	functools
cmp_to_key)r   r9   rk   ZtestFnNamesr   )r   r9   r   r6      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__.pyrQ   )	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isfilerU   rV   r   modulesrT   dirname__file__rW   __spec__loadersubmodule_search_locationsrR   rg   r   replacesepextend_find_testsbuiltin_module_namesr5   rB    _get_directory_containing_moduleremoverm   r   )r   	start_dirr;   Ztop_level_dirZset_implicit_topZis_not_importableis_namespacerK   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)
rw   r{   r+   r,   rv   r}   basenamer)   rg   r|   )r   r]   rI   	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 )NrQ   )ru   r.   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)rV   rw   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 )NrQ   )r   r2   _find_test_pathrC   r+   listdirr,   rU   addr   discard)
r   r   r;   rt   r   rK   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   rz   VALID_MODULE_NAMEmatchr   r   r   r   ZSkipTestr(   r   r   r0   rG   rv   rE   r.   realpathr)   r|   r   rP   ry   rU   r2   r   r   )r   r   r;   rt   r   r   rI   rM   rN   rO   Zmod_filer   Zfullpath_noextZ
module_dirZmod_nameZexpected_dirmsgr<   rK   packager   r   r   r     sl    



zTestLoader._find_test_path)N)N)rs   N)F)F)r   r   r   rh   staticmethodr   three_way_cmpro   ri   r   r4   r   ru   r   r:   rP   r`   rd   r6   r   r   r   r   r   r   r   r   r   r   )r   r   r/   B   s$   
(
N

n
"r/   c             C   s&   t  }||_| |_||_|r"||_|S )N)r/   ro   rh   ri   r   )prefix	sortUsingr   ri   r   r   r   r   _makeLoader  s    r   c             C   s   t |||d| S )N)ri   )r   r6   )r9   r   r   ri   r   r   r   r6     s    r6   r"   c             C   s   t |||| S )N)r   r:   )r9   r   r   r   r   r   r   	makeSuite  s    r   c             C   s   t |||| S )N)r   rP   )rI   r   r   r   r   r   r   findTestCases  s    r   )NN)!r+   rerw   r   rX   rq   r>   r   r    r   r   r   Z
__unittestcompile
IGNORECASEr   r'   r   r   r    r   r(   r.   objectr/   ZdefaultTestLoaderr   r   r6   r4   r   r   r   r   r   r   <module>   s6      /
	