B
    18\                 @   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   `/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/unittest/test/test_discovery.py__init__   s    zTestableTestProgram.__init__)__name__
__module____qualname__moduleexitdefaultTestfailfast
catchbreakbuffer	verbosityprogName
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   sH   t  }d|_|d}| |d | t |d W d Q R X d S )Nz/fooz/foo/bar/baz.pyzbar.bazz/bar/baz.py)unittest
TestLoader_top_level_dir_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 )Nr4   r/   )r5   )r'   r   r   r	   r(   C   s    z-TestDiscovery.test_find_tests.<locals>.isfilec             S   s   | d S )Nz moduler   )r'   r   r   r	   r2   I   r3   c                s    | |d}|| d g S )N)patternz testsr   )r   r6   base)orig_load_testsr   r	   loadTestsFromModuleK   s    z:TestDiscovery.test_find_tests.<locals>.loadTestsFromModulec             S   s   | S )Nr   )thingr   r   r	   r2   P   r3   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   )r;   r!   r   r   r	   r<   Z   s    )Ztest3Ztest4)N)r   r   r#   r$   r'   r(   r+   
addCleanup_get_module_from_namer9   
suiteClassr   r   list_find_testsextendr   )r   r    r&   r*   r-   r+   r(   r9   	top_levelsuiteexpectedr   )r8   r,   r)   r%   r1   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_isdirsocketc                s
     dS )Nr   )r0   )r'   )r1   r   r	   r2   n   r3   z6TestDiscovery.test_find_tests_socket.<locals>.<lambda>c             S   s   dS )NFr   )r'   r   r   r	   r2   q   r3   c             S   s   dS )NFr   )r'   r   r   r	   r2   t   r3   c             S   s   | d S )Nz moduler   )r'   r   r   r	   r2   w   r3   c                s    | |d}|| d g S )N)r6   z testsr   )r   r6   r7   )r8   r   r	   r9   y   s    zATestDiscovery.test_find_tests_socket.<locals>.loadTestsFromModulec             S   s   | S )Nr   )r:   r   r   r	   r2   ~   r3   z/fooztest*.py)N)r   r   r#   r$   r'   r(   r+   r=   r>   r9   r?   r   r   r@   rA   r   )r   r    r&   r*   r-   r9   rC   rD   r   )r8   r,   r)   r%   r1   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   )r0   )r'   )r1   r   r	   r2      r3   z<TestDiscovery.test_find_tests_with_package.<locals>.<lambda>c             S   s   dS )NTr   )r'   r   r   r	   r2      r3   c                s   t j|  kS )N)r#   r'   basename)r'   )directoriesr   r	   r2      r3   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 )NrJ   c                s    j | ||f  jd gS )Nz load_tests)load_tests_argsappendr'   )r    testsr6   )r   r   r	   
load_tests   s    zWTestDiscovery.test_find_tests_with_package.<locals>.Module.__init__.<locals>.load_tests)r'   pathsrO   r#   rL   rQ   )r   r'   rQ   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   rR   rN   r
   rT   r   r   r   r	   Module   s   	rU   c                s    | S )Nr   )r!   )rU   r   r	   r2      r3   c                s    | |d}|| j d g S )N)r6   z module tests)r'   )r   r6   r7   )r8   r   r	   r9      s    zGTestDiscovery.test_find_tests_with_package.<locals>.loadTestsFromModulec             S   s   | S )Nr   )r:   r   r   r	   r2      r3   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+   r=   objectr>   r9   r?   r   r@   rA   r   rR   rN   )r   r    r&   r*   r-   r9   rD   r   )rU   rM   r8   r,   r)   r%   r1   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_isdirrI   rJ   rK   c                s
     dS )Nr   )r0   )r'   )r1   r   r	   r2      r3   zPTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.<lambda>c             S   s   dS )NTr   )r'   r   r   r	   r2      r3   c                s   t j|  kS )N)r#   r'   rL   )r'   )rM   r   r	   r2      r3   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 )NrJ   c                s    j | ||f  jd gS )Nz load_tests)rN   rO   r'   )r    rP   r6   )r   r   r	   rQ      s    zkTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.Module.__init__.<locals>.load_tests)r'   rR   rO   r#   rL   rQ   )r   r'   rQ   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   rS   r   r   r	   rT      s    zUTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.Module.__eq__N)r   r   r   rR   rN   r
   rT   r   r   r   r	   rU      s   	rU   c                s    | S )Nr   )r!   )rU   r   r	   r2      r3   c                s    | |d}|| j d g S )N)r6   z module tests)r'   )r   r6   r7   )r8   r   r	   r9      s    z[TestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.loadTestsFromModulec             S   s   | S )Nr   )r:   r   r   r	   r2      r3   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+   r=   rV   r>   r9   r?   r   r@   rA   r   rR   rN   )r   r    r&   r*   r-   r9   rD   r   )rU   rM   r8   r,   r)   r%   r1   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)r5   )r'   r   r   r	   r2   :  r3   zMTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.<lambda>c             S   s
   |  dS )Nz.py)r5   )r'   r   r   r	   r2   ;  r3   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)rN   rO   r'   )r    rP   r6   )r   r   r	   rQ   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_dirr6   z load_tests)rN   rO   r#   r'   dirnamediscover)r    rP   r6   __file__this_dirZ	pkg_tests)r   r   r	   rQ   I  s    
)r'   rR   rO   r5   rQ   )r   r'   rQ   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   rS   r   r   r	   rT   T  s    zRTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.Module.__eq__N)r   r   r   rR   rN   r
   rT   r   r   r   r	   rU   =  s   rU   c                s    | S )Nr   )r!   )rU   r   r	   r2   X  r3   c             S   s   | S )Nr   )r:   r   r   r	   r2   Y  r3   ztest*.pyzmy_package load_testsz!my_package.test_module load_testszmy_package.test_module)r#   r$   r=   r'   r(   r+   sysremover   rV   r   r   r>   r?   r   r@   rA   r   rR   rN   )r   r&   r*   r-   r[   r    rD   r   )rU   r,   r)   r%   rZ   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	   r2   w  r3   z-TestDiscovery.test_discover.<locals>.<lambda>c                  s    t jd d < d S )N)ra   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	   r2     r3   c             S   s   dS )NTr   )r'   r   r   r	   r2     r3   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 )NrP   )rO   )r\   r6   	namespace)_find_tests_argsr   r	   rA     s    z0TestDiscovery.test_discover.<locals>._find_testsz/foo/bar/bazr6   z	['tests'])N)r   r   r#   r'   r(   r+   r=   ra   r   normpathr   ImportErrorr^   r   r   assertInrA   strr?   )
r   r    r*   re   	full_pathr-   rA   rD   rf   r\   r   )rh   rd   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'   )rZ   r   r	   r[     s    z[TestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.list_dirr$   r(   c             S   s
   |  dS )Nz.py)r5   )r'   r   r   r	   r2     r3   z[TestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.<lambda>r+   c             S   s   |  d S )Nz.py)r5   )r'   r   r   r	   r2     r3   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    rP   r6   r   r   r	   rQ     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   rS   r   r   r	   rT     s    z`TestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.Module.__eq__N)r   r   r   rR   rN   r
   rQ   rT   r   r   r   r	   rU     s
   rU   c                s    | S )Nr   )r!   )rU   r   r	   r2     r3   c             S   s   | S )Nr   )r:   r   r   r	   r2     r3   )rf   zload_tests called startdir)r   r=   setattrr#   r$   r'   r(   r+   ra   rb   rV   r   r   r>   r?   r^   r   )r   r[   r    rD   r   )rU   rZ   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	   r2     r3   z8TestDiscovery.setup_import_issue_tests.<locals>.<lambda>c             S   s   dS )NTr   )rq   r   r   r	   r2     r3   c                  s     t j_t _tjd d < d S )N)r#   r'   r(   r$   ra   r   )r(   r$   rd   r   r	   restore  s    z7TestDiscovery.setup_import_issue_tests.<locals>.restore)r#   r$   r'   r(   ra   r=   )r   rr   rs   r   )rr   r(   r$   rd   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'   )rZ   r   r	   r[     s    z@TestDiscovery.setup_import_issue_package_tests.<locals>.list_dirc             S   s   |  d S )Nz.py)r5   )r'   r   r   r	   r2     r3   z@TestDiscovery.setup_import_issue_package_tests.<locals>.<lambda>c             S   s
   |  dS )Nz.py)r5   )r'   r   r   r	   r2     r3   )r=   ro   r#   r$   r'   r(   r+   ra   __setitem__slicer@   )r   rZ   r[   r   )rZ   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   rt   r^   rk   r#   getcwdra   r'   r   countTestCasesassertNotEqualerrorslen
assertTruer@   r   rj   Ztest_this_does_not_exist)r   r    rD   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/foorY   z/foo/my_packagez__init__.pyztest_module.pyc                s     |  tdd S )NzCannot import Name)rO   rj   )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   rw   r   r   r>   r^   rk   ra   r'   r   rz   r{   r|   r}   r~   r@   r   rj   rY   rangepickleHIGHEST_PROTOCOLloadsdumps)r   rZ   r>   r    rD   r   r   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.pyrx   r   )r   BaseTestSuite_cleanupr   r   r>   rt   r^   r   rz   
TestResultrunr}   skippedr   r   r   r   r   )r   r    r>   rD   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/foorY   z/foo/my_packagez__init__.pyztest_module.pyc                s     |  tdd S )Nr   )rO   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   rw   r   r>   r^   rk   ra   r'   r   rz   r   r   r}   r   testsRunr   r   r   r   r   )r   rZ   r>   r    rD   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	somethingr^   foobar)r   rO   _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   rO   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   rO   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 )NoneZtwoZthreeZfour)r   zusage:)r   r   r   captured_stderrr   
SystemExitr   r   	exceptionr   rk   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 )NrP   )r   rO   )r   r\   r6   rf   r   r   r	   r^   |  s    zbTestDiscovery.test_command_line_handling_do_discovery_uses_default_loader.<locals>.Loader.discoverN)r   r   r   r   r^   r   r   r   r	   Loaderz  s   r   z-v)rx   ztest*.pyN)	rV   __new__r   TestProgram_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 )NrP   )r   rO   )r   r\   r6   rf   r   r   r	   r^     s    z[TestDiscovery.test_command_line_handling_do_discovery_calls_loader.<locals>.Loader.discoverN)r   r   r   r   r^   r   r   r   r	   r     s   r   z-v)r   r   rP   )rx   ztest*.pyNz	--verbosefish)r   ztest*.pyNeggs)r   r   Nham)r   r   r   z-sz-t)rx   ztest*.pyr   z-p)rx   r   Nz-fz-c)r   rV   r   r   r   r   r   assertFalser   r   r~   )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   r_   r   r   r   r	   rU     s   rU   r   c                  s8   t _t j_t j_tjd=  tjkr4tj  d S )Nr   )r#   r$   r'   r(   r+   ra   modulesrb   r   )rm   r,   r)   r%   r   r	   cleanup  s    
z1TestDiscovery.setup_module_clash.<locals>.cleanupc             S   s   dgS )Nzfoo.pyr   )rq   r   r   r	   r$     s    z1TestDiscovery.setup_module_clash.<locals>.listdirc             S   s   dS )NTr   )rq   r   r   r	   r(     s    z0TestDiscovery.setup_module_clash.<locals>.isfilec             S   s   dS )NTr   )rq   r   r   r	   r+     s    z/TestDiscovery.setup_module_clash.<locals>.isdir)
rV   ra   r   r#   r'   r   r$   r(   r+   r=   )r   rU   r   r$   r(   r+   r   )rm   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)r\   r6   r   )r   r   r   r#   r'   r   reescapeassertRaisesRegexrj   r^   r   ra   )r   rm   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)r\   r6   )	r   r#   r'   r   r   r=   r   r   r^   )r   rm   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   )r\   r6   rg   )expectedPathr   rP   r   r	   rA     s    zBTestDiscovery.test_discovery_from_dotted_path.<locals>._find_testszunittest.test)N)r   r   r#   r'   r   r]   r   r_   r   rA   r^   r~   r   _tests)r   r    rA   rD   r   )r   r   rP   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   )rq   r   r   r	   r2   #  r3   zOTestDiscovery.test_discovery_from_dotted_path_builtin_modules.<locals>.<lambda>c             S   s   dS )NFr   )rq   r   r   r	   r2   &  r3   c                  s(   t j_ t j_t _tjd d < d S )N)r#   r'   r(   r+   r$   ra   r   )r+   r(   r$   rd   r   r	   rs   (  s    zNTestDiscovery.test_discovery_from_dotted_path_builtin_modules.<locals>.restorera   z2Can not use builtin modules as dotted module names)r   r   r#   r$   r'   r(   r+   ra   r=   r   	TypeErrorr^   r   rl   r   )r   r    rs   r   r   )r+   r(   r$   rd   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)ra   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)rO   )r\   r6   rg   )rh   r   r	   rA   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__rA   r@   r?   mockpatchr   DirsOnSysPathr   test_importlibutiluncacher^   r   )r   r    r   rA   rD   r   )rh   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)ra   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   r   r   r   r   r   r   r^   r   rl   r   format)r   r    r   r   r   )r   r	   test_discovery_failed_discoveryT  s    

z-TestDiscovery.test_discovery_failed_discoveryN)r   r   r   r"   rF   rH   rW   rX   rc   rn   rp   rt   rw   r   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__)os.pathr#   r   r   ra   r   r   r   r   Ztest.test_importlib.utilr   Zunittest.mockunittest.testr   r   TestCaser   r   mainr   r   r   r	   <module>   s(         S