B
    v9a                 @   s   d dl 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	Zd dl
Z
d dlZ
d dlZ
G dd de
jZG dd de
jZedkre
  dS )	    N)abspath)supportc               @   s<   e Zd ZdZdZd Z Z ZZdZ	dZ
d ZZdd ZdS )TestableTestProgramNT    c             C   s   d S )N )selfr   r   $/usr/lib/python3.7/test_discovery.py__init__   s    zTestableTestProgram.__init__)__name__
__module____qualname__moduleexitZdefaultTestfailfast
catchbreakbuffer	verbosityZprogNameZ
testRunner
testLoaderr
   r   r   r   r	   r      s   r   c               @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7S )8TestDiscoveryc             C   s2   t  }d|_|d}| |d d S Q R X d S )Nz/fooz/foo/bar/baz.pyzbar.bazz/bar/baz.py)unittest
TestLoader_top_level_dirZ_get_name_from_pathassertEqualassertRaisesAssertionError)r   loadernamer   r   r	   test_get_name_from_path   s    
 z%TestDiscovery.test_get_name_from_pathc                s*  t  }tjfdd}tjjfdd}tjjfdd}ddd	d
dddgddggfddt_| | dd }|tj_| | dd }|tj_| | dd |_|j	 d! fdd	}||_	dd |_
tjd}||_t||d}	dd dD }
|
dd d D  | |	|
 d S )"Nc                  s
    t _d S )N)oslistdirr   )original_listdirr   r	   restore_listdir/   s    z6TestDiscovery.test_find_tests.<locals>.restore_listdirc                  s    t j_d S )N)r   pathisfiler   )original_isfiler   r	   restore_isfile2   s    z5TestDiscovery.test_find_tests.<locals>.restore_isfilec                  s    t j_d S )N)r   r#   isdirr   )original_isdirr   r	   restore_isdir5   s    z4TestDiscovery.test_find_tests.<locals>.restore_isdirztest2.pyztest1.pyznot_a_test.pytest_dirztest.fooztest-not-a-module.pyanother_dirztest4.pyztest3.pyc                s
     dS )Nr   )pop)r#   )
path_listsr   r	   <lambda>;       z/TestDiscovery.test_find_tests.<locals>.<lambda>c             S   s
   |  dS )Ndir)endswith)r#   r   r   r	   r'   >   s    z,TestDiscovery.test_find_tests.<locals>.isdirc             S   s   |  d od| kS )Nr0   r+   )r1   )r#   r   r   r	   r$   C   s    z-TestDiscovery.test_find_tests.<locals>.isfilec             S   s   | d S )Nz moduler   )r#   r   r   r	   r.   I   r/   c                s    | |d}|| d g S )N)patternz testsr   )r   r2   base)orig_load_testsr   r	   loadTestsFromModuleK   s    z:TestDiscovery.test_find_tests.<locals>.loadTestsFromModulec             S   s   | S )Nr   )thingr   r   r	   r.   P   r/   z/fooztest*.pyc             S   s   g | ]}|d  gqS )z module testsr   ).0r   r   r   r	   
<listcomp>X   s    z1TestDiscovery.test_find_tests.<locals>.<listcomp>)Ztest1Ztest2r*   c             S   s   g | ]}d | d gqS )ztest_dir.%sz module testsr   )r7   r   r   r   r	   r8   Z   s    )Ztest3Ztest4)N)r   r   r   r    r#   r$   r'   
addCleanup_get_module_from_namer5   
suiteClassr   r   list_find_testsextendr   )r   r   r"   r&   r)   r'   r$   r5   	top_levelsuiteZexpectedr   )r4   r(   r%   r!   r-   r	   test_find_tests+   s>    







zTestDiscovery.test_find_testsc                s   t  }tjfdd}tjjfdd}tjjfdd}dggfdd	t_| | d
d	 tj_| | dd	 tj_| | dd	 |_|j	 d fdd	}||_	dd	 |_
tjd}||_t||d}| |g  d S )Nc                  s
    t _d S )N)r   r    r   )r!   r   r	   r"   d   s    z=TestDiscovery.test_find_tests_socket.<locals>.restore_listdirc                  s    t j_d S )N)r   r#   r$   r   )r%   r   r	   r&   g   s    z<TestDiscovery.test_find_tests_socket.<locals>.restore_isfilec                  s    t j_d S )N)r   r#   r'   r   )r(   r   r	   r)   j   s    z;TestDiscovery.test_find_tests_socket.<locals>.restore_isdirZsocketc                s
     dS )Nr   )r,   )r#   )r-   r   r	   r.   n   r/   z6TestDiscovery.test_find_tests_socket.<locals>.<lambda>c             S   s   dS )NFr   )r#   r   r   r	   r.   q   r/   c             S   s   dS )NFr   )r#   r   r   r	   r.   t   r/   c             S   s   | d S )Nz moduler   )r#   r   r   r	   r.   w   r/   c                s    | |d}|| d g S )N)r2   z testsr   )r   r2   r3   )r4   r   r	   r5   y   s    zATestDiscovery.test_find_tests_socket.<locals>.loadTestsFromModulec             S   s   | S )Nr   )r6   r   r   r	   r.   ~   r/   z/fooztest*.py)N)r   r   r   r    r#   r$   r'   r9   r:   r5   r;   r   r   r<   r=   r   )r   r   r"   r&   r)   r5   r?   r@   r   )r4   r(   r%   r!   r-   r	   test_find_tests_socket^   s.    




z$TestDiscovery.test_find_tests_socketc                s@  t  }tjfdd}tjjfdd}tjjfdd}ddd	gg g g gfd
dt_| | dd tj_| | fddtj_| | G dd dt  fdd|_	|j
dfdd	}||_
dd |_d|_t|dd}| |dgddgdgg |  jddd	g |  j|g dfg d S )Nc                  s
    t _d S )N)r   r    r   )r!   r   r	   r"      s    zCTestDiscovery.test_find_tests_with_package.<locals>.restore_listdirc                  s    t j_d S )N)r   r#   r$   r   )r%   r   r	   r&      s    zBTestDiscovery.test_find_tests_with_package.<locals>.restore_isfilec                  s    t j_d S )N)r   r#   r'   r   )r(   r   r	   r)      s    zATestDiscovery.test_find_tests_with_package.<locals>.restore_isdira_directorytest_directorytest_directory2c                s
     dS )Nr   )r,   )r#   )r-   r   r	   r.      r/   z<TestDiscovery.test_find_tests_with_package.<locals>.<lambda>c             S   s   dS )NTr   )r#   r   r   r	   r.      r/   c                s   t j|  kS )N)r   r#   basename)r#   )directoriesr   r	   r.      r/   c               @   s$   e Zd Zg Zg Zdd Zdd ZdS )z:TestDiscovery.test_find_tests_with_package.<locals>.Modulec                s8   | _  j| tj |dkr4 fdd}| _d S )NrD   c                s    j | ||f  jd gS )Nz load_tests)load_tests_argsappendr#   )r   testsr2   )r   r   r	   
load_tests   s    zWTestDiscovery.test_find_tests_with_package.<locals>.Module.__init__.<locals>.load_tests)r#   pathsrI   r   rF   rK   )r   r#   rK   r   )r   r	   r
      s
    zCTestDiscovery.test_find_tests_with_package.<locals>.Module.__init__c             S   s   | j |j kS )N)r#   )r   otherr   r   r	   __eq__   s    zATestDiscovery.test_find_tests_with_package.<locals>.Module.__eq__N)r   r   r   rL   rH   r
   rN   r   r   r   r	   Module   s   	rO   c                s    | S )Nr   )r   )rO   r   r	   r.      r/   c                s    | |d}|| j d g S )N)r2   z module tests)r#   )r   r2   r3   )r4   r   r	   r5      s    zGTestDiscovery.test_find_tests_with_package.<locals>.loadTestsFromModulec             S   s   | S )Nr   )r6   r   r   r	   r.      r/   z/fooztest*za_directory module testsztest_directory load_testsztest_directory module testsztest_directory2 module tests)N)r   r   r   r    r#   r$   r'   r9   objectr:   r5   r;   r   r<   r=   r   rL   rH   )r   r   r"   r&   r)   r5   r@   r   )rO   rG   r4   r(   r%   r!   r-   r	   test_find_tests_with_package   s@    





z*TestDiscovery.test_find_tests_with_packagec                s@  t  }tjfdd}tjjfdd}tjjfdd}ddd	gg g g gfd
dt_| | dd tj_| | fddtj_| | G dd dt  fdd|_	|j
dfdd	}||_
dd |_d|_t|dd}| |dgddgdgg |  jddd	g |  j|g dfg d S )Nc                  s
    t _d S )N)r   r    r   )r!   r   r	   r"      s    zWTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.restore_listdirc                  s    t j_d S )N)r   r#   r$   r   )r%   r   r	   r&      s    zVTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.restore_isfilec                  s    t j_d S )N)r   r#   r'   r   )r(   r   r	   r)      s    zUTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.restore_isdirrC   rD   rE   c                s
     dS )Nr   )r,   )r#   )r-   r   r	   r.      r/   zPTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.<lambda>c             S   s   dS )NTr   )r#   r   r   r	   r.      r/   c                s   t j|  kS )N)r   r#   rF   )r#   )rG   r   r	   r.      r/   c               @   s$   e Zd Zg Zg Zdd Zdd ZdS )zNTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.Modulec                s8   | _  j| tj |dkr4 fdd}| _d S )NrD   c                s    j | ||f  jd gS )Nz load_tests)rH   rI   r#   )r   rJ   r2   )r   r   r	   rK      s    zkTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.Module.__init__.<locals>.load_tests)r#   rL   rI   r   rF   rK   )r   r#   rK   r   )r   r	   r
      s
    zWTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.Module.__init__c             S   s   | j |j kS )N)r#   )r   rM   r   r   r	   rN      s    zUTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.Module.__eq__N)r   r   r   rL   rH   r
   rN   r   r   r   r	   rO      s   	rO   c                s    | S )Nr   )r   )rO   r   r	   r.      r/   c                s    | |d}|| j d g S )N)r2   z module tests)r#   )r   r2   r3   )r4   r   r	   r5      s    z[TestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.loadTestsFromModulec             S   s   | S )Nr   )r6   r   r   r	   r.      r/   z/fooztest*.pyza_directory module testsztest_directory load_testsztest_directory module testsztest_directory2 module tests)N)r   r   r   r    r#   r$   r'   r9   rP   r:   r5   r;   r   r<   r=   r   rL   rH   )r   r   r"   r&   r)   r5   r@   r   )rO   rG   r4   r(   r%   r!   r-   r	   0test_find_tests_default_calls_package_load_tests   s@    





z>TestDiscovery.test_find_tests_default_calls_package_load_testsc                sH  t jfdd}| | t jjfdd}| | t jjfdd}| | | tjjtd tddgtd	d
dgifdd}|t _dd t j_dd t j_G dd dt	 t
 } fdd|_dd |_td|_t|tdd}| |dg dggg |  jddg |  j|g df|g dfg d S )Nc                  s
    t _d S )N)r   r    r   )r!   r   r	   r"     s    zTTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.restore_listdirc                  s    t j_d S )N)r   r#   r$   r   )r%   r   r	   r&   !  s    zSTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.restore_isfilec                  s    t j_d S )N)r   r#   r'   r   )r(   r   r	   r)   %  s    zRTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.restore_isdirz/foo
my_packagez/foo/my_packagez__init__.pyztest_module.pyc                s   t  |  S )N)r<   )r#   )vfsr   r	   list_dir7  s    zMTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.list_dirc             S   s   |  d S )Nz.py)r1   )r#   r   r   r	   r.   :  r/   zMTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.<lambda>c             S   s
   |  dS )Nz.py)r1   )r#   r   r   r	   r.   ;  r/   c               @   s$   e Zd Zg Zg Zdd Zdd ZdS )zKTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.Modulec                s@   | _  j| |dr* fdd}n fdd}| _d S )NZtest_modulec                s    j | ||f  jd gS )Nz load_tests)rH   rI   r#   )r   rJ   r2   )r   r   r	   rK   E  s    zhTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.Module.__init__.<locals>.load_testsc                sB    j | ||f d}tj|}| j||d} jd |g| S )Nz/foo/my_package/__init__.py)	start_dirr2   z load_tests)rH   rI   r   r#   dirnamediscover)r   rJ   r2   __file__Zthis_dirZ	pkg_tests)r   r   r	   rK   I  s    
)r#   rL   rI   r1   rK   )r   r#   rK   r   )r   r	   r
   A  s    
	zTTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.Module.__init__c             S   s   | j |j kS )N)r#   )r   rM   r   r   r	   rN   T  s    zRTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.Module.__eq__N)r   r   r   rL   rH   r
   rN   r   r   r   r	   rO   =  s   rO   c                s    | S )Nr   )r   )rO   r   r	   r.   X  r/   c             S   s   | S )Nr   )r6   r   r   r	   r.   Y  r/   ztest*.pyzmy_package load_testsz!my_package.test_module load_testszmy_package.test_module)r   r    r9   r#   r$   r'   sysremover   rP   r   r   r:   r;   r   r<   r=   r   rL   rH   )r   r"   r&   r)   rU   r   r@   r   )rO   r(   r%   r!   rT   r	   -test_find_tests_customize_via_package_pattern  s<    






z;TestDiscovery.test_find_tests_customize_via_package_patternc       
   	      sb  t  }tjjtjjfdd}dd tj_| | tjd d  fdd}| | tjtj	d}| 
t |jddd	 W d Q R X | |j| | |tj d
d tj_dd tj_fdd}| | g  d fdd	}||_t|_|ddd}tjd}tjd}	| |d | |j| |  |	dfg | |tj d S )Nc                  s    t j_d S )N)r   r#   r$   r   )r%   r   r	   r&   t  s    z3TestDiscovery.test_discover.<locals>.restore_isfilec             S   s   dS )NFr   )r#   r   r   r	   r.   w  r/   z-TestDiscovery.test_discover.<locals>.<lambda>c                  s    t jd d < d S )N)rZ   r#   r   )orig_sys_pathr   r	   restore_path{  s    z1TestDiscovery.test_discover.<locals>.restore_pathz/fooz/foo/bar)top_level_dirc             S   s   dS )NTr   )r#   r   r   r	   r.     r/   c             S   s   dS )NTr   )r#   r   r   r	   r.     r/   c                  s    t j_d S )N)r   r#   r'   r   )r(   r   r	   r)     s    z2TestDiscovery.test_discover.<locals>.restore_isdirc                s     | |f dgS )NrJ   )rI   )rV   r2   	namespace)_find_tests_argsr   r	   r=     s    z0TestDiscovery.test_discover.<locals>._find_testsz/foo/bar/bazr2   z	['tests'])N)r   r   r   r#   r$   r'   r9   rZ   r   normpathr   ImportErrorrX   r   r   assertInr=   strr;   )
r   r   r&   r^   	full_pathr)   r=   r@   r_   rV   r   )ra   r]   r(   r%   r	   test_discovero  s:    


zTestDiscovery.test_discoverc                s   t ddgt ddgifdd}| ttdtj |t_| ttjdtjj d	d
 tj_| ttjdtjj dd
 tj_| tjj	t d G dd dt
 t } fdd
|_dd
 |_|jddd}| |dgg d S )Nz	/toplevelZstartdirz/toplevel/startdirz__init__.pyc                s   t  |  S )N)r<   )r#   )rT   r   r	   rU     s    z[TestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.list_dirr    r$   c             S   s
   |  dS )Nz.py)r1   )r#   r   r   r	   r.     r/   z[TestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.<lambda>r'   c             S   s   |  d S )Nz.py)r1   )r#   r   r   r	   r.     r/   c               @   s,   e Zd Zg Zg Zdd Zdd Zdd ZdS )zYTestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.Modulec             S   s
   || _ d S )N)r#   )r   r#   r   r   r	   r
     s    zbTestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.Module.__init__c             S   s   d| j  gS )Nzload_tests called )r#   )r   r   rJ   r2   r   r   r	   rK     s    zdTestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.Module.load_testsc             S   s   | j |j kS )N)r#   )r   rM   r   r   r	   rN     s    z`TestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.Module.__eq__N)r   r   r   rL   rH   r
   rK   rN   r   r   r   r	   rO     s
   rO   c                s    | S )Nr   )r   )rO   r   r	   r.     r/   c             S   s   | S )Nr   )r6   r   r   r	   r.     r/   )r_   zload_tests called startdir)r   r9   setattrr   r    r#   r$   r'   rZ   r[   rP   r   r   r:   r;   rX   r   )r   rU   r   r@   r   )rO   rT   r	   ;test_discover_start_dir_is_package_calls_package_load_tests  s"    	

zITestDiscovery.test_discover_start_dir_is_package_calls_package_load_testsc                sT   t j fddt _t jjdd t j_tjd d  fdd}| | d S )Nc                s    gS )Nr   )_)fakefiler   r	   r.     r/   z8TestDiscovery.setup_import_issue_tests.<locals>.<lambda>c             S   s   dS )NTr   )rj   r   r   r	   r.     r/   c                  s     t j_t _tjd d < d S )N)r   r#   r$   r    rZ   r   )r$   r    r]   r   r	   restore  s    z7TestDiscovery.setup_import_issue_tests.<locals>.restore)r   r    r#   r$   rZ   r9   )r   rk   rl   r   )rk   r$   r    r]   r	   setup_import_issue_tests  s    z&TestDiscovery.setup_import_issue_testsc                s   |  ttdtj |  ttjdtjj |  ttjdtjj |  tjjt	d t
tj  fdd}|t_dd tj_dd tj_d S )	Nr    r$   r'   c                s   t  |  S )N)r<   )r#   )rT   r   r	   rU     s    z@TestDiscovery.setup_import_issue_package_tests.<locals>.list_dirc             S   s   |  d S )Nz.py)r1   )r#   r   r   r	   r.     r/   z@TestDiscovery.setup_import_issue_package_tests.<locals>.<lambda>c             S   s
   |  dS )Nz.py)r1   )r#   r   r   r	   r.     r/   )r9   rh   r   r    r#   r$   r'   rZ   __setitem__slicer<   )r   rT   rU   r   )rT   r	    setup_import_issue_package_tests  s    z.TestDiscovery.setup_import_issue_package_testsc          	   C   s   t  }| d |d}| t tj | 	|
 d | g |j | 	dt|j |jd }| d|kd|  tt|d d }| t |  W d Q R X d S )Nztest_this_does_not_exist.py.r   r   z6Failed to import test module: test_this_does_not_existzmissing error string in %r)r   r   rm   rX   rd   r   getcwdrZ   r#   r   countTestCasesassertNotEqualerrorslen
assertTruer<   r   rc   Ztest_this_does_not_exist)r   r   r@   errortestr   r   r	   .test_discover_with_modules_that_fail_to_import  s    



z<TestDiscovery.test_discover_with_modules_that_fail_to_importc          	      s   t ddgt dddgi}| | g   fdd}t }||_|t d}| t dtj | 	|
 d | g |j | 	dt|j |jd	 }| d
|kd|  tt|d	 d	 }| t |  W d Q R X | 	 dg x*ttjd D ]}tt|| q W d S )Nz/foorS   z/foo/my_packagez__init__.pyztest_module.pyc                s     |  tdd S )NzCannot import Name)rI   rc   )r   )import_callsr   r	   r:     s    
z`TestDiscovery.test_discover_with_init_modules_that_fail_to_import.<locals>._get_module_from_namer   r   z(Failed to import test module: my_packagezmissing error string in %r)r   rp   r   r   r:   rX   rd   rZ   r#   r   rs   rt   ru   rv   rw   r<   r   rc   rS   rangepickleHIGHEST_PROTOCOLloadsdumps)r   rT   r:   r   r@   rx   ry   protor   )r{   r	   3test_discover_with_init_modules_that_fail_to_import  s,    



zATestDiscovery.test_discover_with_init_modules_that_fail_to_importc             C   s   t jjst dt  }dd }||_| d |d}| |	 d t 
 }|| | t|jd x(ttjd D ]}tt|| qW d S )NzSuite cleanup is disabledc             S   s   t dd S )N	skipperoo)r   SkipTest)r   r   r   r	   r:     s    zeTestDiscovery.test_discover_with_module_that_raises_SkipTest_on_import.<locals>._get_module_from_nameztest_skip_dummy.pyrq   r   )r   BaseTestSuite_cleanupr   r   r:   rm   rX   r   rs   
TestResultrunrv   skippedr|   r}   r~   r   r   )r   r   r:   r@   resultr   r   r   r	   8test_discover_with_module_that_raises_SkipTest_on_import  s    



zFTestDiscovery.test_discover_with_module_that_raises_SkipTest_on_importc                s   t jjst dtddgtdddgi}| | g   fdd}t  }||_|td}| 	tdt
j | | d	 t  }|| | t|jd	 | |jd	 |  dg x(ttjd	 D ]}tt|| qW d S )
NzSuite cleanup is disabledz/foorS   z/foo/my_packagez__init__.pyztest_module.pyc                s     |  tdd S )Nr   )rI   r   r   )r   )r{   r   r	   r:   2  s    
zjTestDiscovery.test_discover_with_init_module_that_raises_SkipTest_on_import.<locals>._get_module_from_namer   )r   r   r   r   r   rp   r   r:   rX   rd   rZ   r#   r   rs   r   r   rv   r   ZtestsRunr|   r}   r~   r   r   )r   rT   r:   r   r@   r   r   r   )r{   r	   =test_discover_with_init_module_that_raises_SkipTest_on_import*  s&    



zKTestDiscovery.test_discover_with_init_module_that_raises_SkipTest_on_importc             C   sb   t  }g }|j|_|ddg | |g g g |d d < |ddddg | |ddgg d S )N	somethingrX   foobar)r   rI   _do_discovery	parseArgsr   )r   programargsr   r   r	   $test_command_line_handling_parseArgsE  s    z2TestDiscovery.test_command_line_handling_parseArgsc             C   sh   t  }g }|j|_|dg | |g g | |jd | |jd | |jd | |j	d d S )Nr   r   F)
r   rI   r   r   r   r   assertIsr   r   r   )r   r   r   r   r   r	   .test_command_line_handling_discover_by_defaultQ  s    z<TestDiscovery.test_command_line_handling_discover_by_defaultc             C   sr   t  }g }|j|_|ddddddg | |g g | |jd | |jd | |jd | |j	d d S )Nr   z-vz-bz-cz-f   T)
r   rI   r   r   r   r   r   r   r   r   )r   r   r   r   r   r	   ;test_command_line_handling_discover_by_default_with_options]  s    zITestDiscovery.test_command_line_handling_discover_by_default_with_optionsc          
   C   sl   t  }d |_t .}| t}|ddddg W d Q R X W d Q R X | |jj	d | 
d|  d S )NZoneZtwoZthreeZfour)r   zusage:)r   r   r   Zcaptured_stderrr   
SystemExitr   r   	exceptionr   rd   getvalue)r   r   stderrcmr   r   r	   :test_command_line_handling_do_discovery_too_many_argumentsj  s    
&zHTestDiscovery.test_command_line_handling_do_discovery_too_many_argumentsc             C   sL   t tj}|  G dd dt }| |_|dg | |jdg d S )Nc               @   s   e Zd Zg Zdd ZdS )zYTestDiscovery.test_command_line_handling_do_discovery_uses_default_loader.<locals>.Loaderc             S   s   | j |||f dS )NrJ   )r   rI   )r   rV   r2   r_   r   r   r	   rX   |  s    zbTestDiscovery.test_command_line_handling_do_discovery_uses_default_loader.<locals>.Loader.discoverN)r   r   r   r   rX   r   r   r   r	   Loaderz  s   r   z-v)rq   ztest*.pyN)	rP   __new__r   TestProgramZ_initArgParsersr   r   r   r   )r   r   r   r   r   r	   ;test_command_line_handling_do_discovery_uses_default_loaderv  s    zITestDiscovery.test_command_line_handling_do_discovery_uses_default_loaderc             C   s  t  }G dd dt}|jdg|d | |jd | |jd | |jdg g |_t  }|jdg|d | |jd | |jdg g |_t  }|jg |d | |jd | |jdg g |_t  }|jd	g|d | |jd | |jd
g g |_t  }|jd	dg|d | |jd | |jdg g |_t  }|jd	ddg|d | |jd | |jdg g |_t  }|jdd	g|d | |jd | |jd
g g |_t  }|jdd	g|d | |jd | |jdg g |_t  }|jdd	g|d | |jd | |jdg | |j | |j	 g |_t  }|jdddd	dddg|d | |jd | |jdg | |jd | 
|j | 
|j	 d S )Nc               @   s   e Zd Zg Zdd ZdS )zRTestDiscovery.test_command_line_handling_do_discovery_calls_loader.<locals>.Loaderc             S   s   | j |||f dS )NrJ   )r   rI   )r   rV   r2   r_   r   r   r	   rX     s    z[TestDiscovery.test_command_line_handling_do_discovery_calls_loader.<locals>.Loader.discoverN)r   r   r   r   rX   r   r   r   r	   r     s   r   z-v)r   r   rJ   )rq   ztest*.pyNz	--verbosefish)r   ztest*.pyNeggs)r   r   Nham)r   r   r   z-sz-t)rq   ztest*.pyr   z-p)rq   r   Nz-fz-c)r   rP   r   r   r   ry   r   ZassertFalser   r   rw   )r   r   r   r   r   r	   4test_command_line_handling_do_discovery_calls_loader  sr    zBTestDiscovery.test_command_line_handling_do_discovery_calls_loaderc                s   G dd dt }|tjd< tjd tjtjjtjj fdd}| 	| dd }dd	 }d
d }|t_|tj_|tj_ S )Nc               @   s   e Zd ZdZdS )z0TestDiscovery.setup_module_clash.<locals>.Modulez
bar/foo.pyN)r   r   r   rY   r   r   r   r	   rO     s   rO   r   c                  s8   t _t j_t j_tjd=  tjkr4tj  d S )Nr   )r   r    r#   r$   r'   rZ   modulesr[   r   )rf   r(   r%   r!   r   r	   cleanup  s    
z1TestDiscovery.setup_module_clash.<locals>.cleanupc             S   s   dgS )Nzfoo.pyr   )rj   r   r   r	   r      s    z1TestDiscovery.setup_module_clash.<locals>.listdirc             S   s   dS )NTr   )rj   r   r   r	   r$     s    z0TestDiscovery.setup_module_clash.<locals>.isfilec             S   s   dS )NTr   )rj   r   r   r	   r'     s    z/TestDiscovery.setup_module_clash.<locals>.isdir)
rP   rZ   r   r   r#   r   r    r$   r'   r9   )r   rO   r   r    r$   r'   r   )rf   r(   r%   r!   r	   setup_module_clash  s    

z TestDiscovery.setup_module_clashc             C   sj   |   }t }tjd}tjd}td||f }| jt	d| |j
ddd | tjd | d S )Nr   r   zZ'foo' module incorrectly imported from %r. Expected %r. Is this module globally installed?z^%s$zfoo.py)rV   r2   r   )r   r   r   r   r#   r   reescapeZassertRaisesRegexrc   rX   r   rZ   )r   rf   r   mod_direxpected_dirmsgr   r   r	   test_detect_module_clash  s    
z&TestDiscovery.test_detect_module_clashc                sn   |   }tjjtjdtjd fdd}| |  fdd}|tj_t }|jddd d S )	Nr   r   c                  s    t j_d S )N)r   r#   realpathr   )original_realpathr   r	   r     s    z5TestDiscovery.test_module_symlink_ok.<locals>.cleanupc                s$   | t jdkr t j dS | S )Nzfoo.py)r   r#   join)r#   )r   r   r   r	   r     s    z6TestDiscovery.test_module_symlink_ok.<locals>.realpathzfoo.py)rV   r2   )	r   r   r#   r   r   r9   r   r   rX   )r   rf   r   r   r   r   )r   r   r   r	   test_module_symlink_ok  s    
z$TestDiscovery.test_module_symlink_okc                sl   t  }gtjtjt jj d_d fdd	}||_	|
d}j |j d S )NFc                s   d_ |   S )NT)wasRunr   )rV   r2   r`   )expectedPathr   rJ   r   r	   r=     s    zBTestDiscovery.test_discovery_from_dotted_path.<locals>._find_testszunittest.test)N)r   r   r   r#   r   rW   ry   rY   r   r=   rX   rw   r   Z_tests)r   r   r=   r@   r   )r   r   rJ   r	   test_discovery_from_dotted_path  s    
z-TestDiscovery.test_discovery_from_dotted_pathc          	      s   t  }tjdd t_tjjtjj dd tj_tjd d   fdd}| | | 	t
}|d W d Q R X | t|jd d S )Nc             S   s   dgS )Nztest_this_does_not_exist.pyr   )rj   r   r   r	   r.   #  r/   zOTestDiscovery.test_discovery_from_dotted_path_builtin_modules.<locals>.<lambda>c             S   s   dS )NFr   )rj   r   r   r	   r.   &  r/   c                  s(   t j_ t j_t _tjd d < d S )N)r   r#   r$   r'   r    rZ   r   )r'   r$   r    r]   r   r	   rl   (  s    zNTestDiscovery.test_discovery_from_dotted_path_builtin_modules.<locals>.restorerZ   z2Can not use builtin modules as dotted module names)r   r   r   r    r#   r$   r'   rZ   r9   r   	TypeErrorrX   r   re   r   )r   r   rl   r   r   )r'   r$   r    r]   r	   /test_discovery_from_dotted_path_builtin_modules  s    

z=TestDiscovery.test_discovery_from_dotted_path_builtin_modulesc                s   t  }tdddg_tjd ddgd_fdd}g  d fdd	}||_t|_	t j
d	|> t * tjjd |d}W d Q R X W d Q R X W d Q R X | |d
dg d S )Npackagez/az/b)r   submodule_search_locationsc                s    t j| <  S )N)rZ   r   )packagenamer   kwargs)r   r   r	   _import?  s    
zLTestDiscovery.test_discovery_from_dotted_namespace_packages.<locals>._importc                s     | |f d|  gS )Nz%s/tests)rI   )rV   r2   r`   )ra   r   r	   r=   D  s    zPTestDiscovery.test_discovery_from_dotted_namespace_packages.<locals>._find_testszbuiltins.__import__z/a/testsz/b/tests)N)r   r   types
ModuleType__path__SimpleNamespace__spec__r=   r<   r;   mockpatchr   DirsOnSysPathry   test_importlibutiluncacherX   r   )r   r   r   r=   r@   r   )ra   r   r	   -test_discovery_from_dotted_namespace_packages5  s     


(z;TestDiscovery.test_discovery_from_dotted_namespace_packagesc                s   t  }td  fdd}t jd|l t X tj	j
d> | t}|d W d Q R X | t|jd  W d Q R X W d Q R X W d Q R X d S )Nr   c                s    t j| <  S )N)rZ   r   )r   r   r   )r   r   r	   r   X  s    
z>TestDiscovery.test_discovery_failed_discovery.<locals>._importzbuiltins.__import__z$don't know how to discover from {!r})r   r   r   r   r   r   r   r   ry   r   r   r   r   r   rX   r   re   r   format)r   r   r   r   r   )r   r	   test_discovery_failed_discoveryT  s    

z-TestDiscovery.test_discovery_failed_discoveryN)r   r   r   r   rA   rB   rQ   rR   r\   rg   ri   rm   rp   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r      s6   3(JGX.-Jr   __main__)Zos.pathr   r   r   rZ   r   r}   ry   r   Ztest.test_importlib.utilr   Zunittest.mockZunittest.testr   r   ZTestCaser   r   mainr   r   r   r	   <module>   s(         S