a
    ze؄                     @   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   2/usr/lib/python3.9/unittest/test/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   s\   t  }d|_|d}| |d | t |d W d    n1 sN0    Y  d S )N/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}g 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}	dd dD }
|
dd dD  | |	|
 d S )Nc                      s
    t _d S r   oslistdirr   original_listdirr   r   restore_listdir/   s    z6TestDiscovery.test_find_tests.<locals>.restore_listdirc                      s    t j_d S r   r#   pathisfiler   original_isfiler   r   restore_isfile2   s    z5TestDiscovery.test_find_tests.<locals>.restore_isfilec                      s    t j_d S r   r#   r)   isdirr   original_isdirr   r   restore_isdir5   s    z4TestDiscovery.test_find_tests.<locals>.restore_isdir)z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endswithr8   r   r   r   r/   >   s    z,TestDiscovery.test_find_tests.<locals>.isdirc                 S   s   |  d od| vS )Nr=   r4   r>   r8   r   r   r   r*   C   s    z-TestDiscovery.test_find_tests.<locals>.isfilec                 S   s   | d S Nz moduler   r8   r   r   r   r;   I   r<   c                    s    | |d}|| d g S Npatternz testsr   r   rC   baseorig_load_testsr   r   loadTestsFromModuleK   s    z:TestDiscovery.test_find_tests.<locals>.loadTestsFromModulec                 S   s   | S r   r   thingr   r   r   r;   P   r<   r   test*.pyc                 S   s   g | ]}|d  gqS ) module testsr   .0r    r   r   r   
<listcomp>X   r<   z1TestDiscovery.test_find_tests.<locals>.<listcomp>)Ztest1Ztest2r3   c                 S   s   g | ]}d | d gqS )ztest_dir.%srL   r   rM   r   r   r   rO   Z   r<   )Ztest3Ztest4)N)r   r   r#   r$   r)   r*   r/   
addCleanup_get_module_from_namerH   
suiteClassr   r   list_find_testsextendr   )r
   r   r'   r-   r2   r/   r*   rH   	top_levelsuiteZexpectedr   rG   r1   r,   r&   r:   r   test_find_tests+   sB    





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 r   r"   r   r%   r   r   r'   d   s    z=TestDiscovery.test_find_tests_socket.<locals>.restore_listdirc                      s    t j_d S r   r(   r   r+   r   r   r-   g   s    z<TestDiscovery.test_find_tests_socket.<locals>.restore_isfilec                      s    t j_d S r   r.   r   r0   r   r   r2   j   s    z;TestDiscovery.test_find_tests_socket.<locals>.restore_isdirsocketc                    s
     dS r5   r6   r8   r9   r   r   r;   n   r<   z6TestDiscovery.test_find_tests_socket.<locals>.<lambda>c                 S   s   dS NFr   r8   r   r   r   r;   q   r<   c                 S   s   dS r[   r   r8   r   r   r   r;   t   r<   c                 S   s   | d S r@   r   r8   r   r   r   r;   w   r<   c                    s    | |d}|| d g S rA   r   rD   rF   r   r   rH   y   s    zATestDiscovery.test_find_tests_socket.<locals>.loadTestsFromModulec                 S   s   | S r   r   rI   r   r   r   r;   ~   r<   r   rK   )N)r   r   r#   r$   r)   r*   r/   rP   rQ   rH   rR   r   r   rS   rT   r   )r
   r   r'   r-   r2   rH   rV   rW   r   rX   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}g d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g d |  j|g dfg d S )Nc                      s
    t _d S r   r"   r   r%   r   r   r'      s    zCTestDiscovery.test_find_tests_with_package.<locals>.restore_listdirc                      s    t j_d S r   r(   r   r+   r   r   r-      s    zBTestDiscovery.test_find_tests_with_package.<locals>.restore_isfilec                      s    t j_d S r   r.   r   r0   r   r   r2      s    zATestDiscovery.test_find_tests_with_package.<locals>.restore_isdirZa_directorytest_directoryZtest_directory2c                    s
     dS r5   r6   r8   r9   r   r   r;      r<   z<TestDiscovery.test_find_tests_with_package.<locals>.<lambda>c                 S   s   dS NTr   r8   r   r   r   r;      r<   c                    s   t j|  vS r   r#   r)   basenamer8   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 )Nr^   c                    s    j | ||f  jd gS N load_testsload_tests_argsappendr)   r   testsrC   r	   r   r   
load_tests   s    zWTestDiscovery.test_find_tests_with_package.<locals>.Module.__init__.<locals>.load_testsr)   pathsrh   r#   ra   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 r   r8   r
   otherr   r   r   __eq__   s    zATestDiscovery.test_find_tests_with_package.<locals>.Module.__eq__Nr   r   r   rm   rg   r   rq   r   r   r   r   Module   s   	rs   c                    s    | S r   r   r    rs   r   r   r;      r<   c                    s    | |d}|| j d g S NrB   rL   r8   rD   rF   r   r   rH      s    zGTestDiscovery.test_find_tests_with_package.<locals>.loadTestsFromModulec                 S   s   | S r   r   rI   r   r   r   r;      r<   r   ztest*a_directory module teststest_directory load_teststest_directory module teststest_directory2 module tests)Nr   r   r#   r$   r)   r*   r/   rP   objectrQ   rH   rR   r   rS   rT   r   rm   rg   r
   r   r'   r-   r2   rH   rW   r   rs   rc   rG   r1   r,   r&   r:   r   test_find_tests_with_package   sJ    




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}g d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g d |  j|g dfg d S )Nc                      s
    t _d S 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 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 r   r.   r   r0   r   r   r2      s    zUTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.restore_isdirr]   c                    s
     dS r5   r6   r8   r9   r   r   r;      r<   zPTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.<lambda>c                 S   s   dS r_   r   r8   r   r   r   r;      r<   c                    s   t j|  vS r   r`   r8   rb   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 )Nr^   c                    s    j | ||f  jd gS rd   rf   ri   r	   r   r   rk      s    zkTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.Module.__init__.<locals>.load_testsrl   rn   r   r	   r   r      s
    zWTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.Module.__init__c                 S   s   | j |j kS r   r8   ro   r   r   r   rq      s    zUTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.Module.__eq__Nrr   r   r   r   r   rs      s   	rs   c                    s    | S r   r   rt   ru   r   r   r;      r<   c                    s    | |d}|| j d g S rv   r8   rD   rF   r   r   rH      s    z[TestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.loadTestsFromModulec                 S   s   | S r   r   rI   r   r   r   r;      r<   r   rK   rw   rx   ry   rz   )Nr{   r}   r   r~   r   0test_find_tests_default_calls_package_load_tests   sJ    




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 r   r"   r   r%   r   r   r'     s    zTTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.restore_listdirc                      s    t j_d S r   r(   r   r+   r   r   r-   !  s    zSTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.restore_isfilec                      s    t j_d S r   r.   r   r0   r   r   r2   %  s    zRTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.restore_isdirr   
my_package/foo/my_package__init__.pytest_module.pyc                    s   t  |  S r   rS   r8   vfsr   r   list_dir7  s    zMTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.list_dirc                 S   s   |  d S Nz.pyr>   r8   r   r   r   r;   :  r<   zMTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.<lambda>c                 S   s
   |  dS r   r>   r8   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 rd   rf   ri   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_dirrC   re   )rg   rh   r#   r)   dirnamediscover)r   rj   rC   __file__Zthis_dirZ	pkg_testsr	   r   r   rk   I  s    )r)   rm   rh   r?   rk   rn   r   r	   r   r   A  s    
	zTTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.Module.__init__c                 S   s   | j |j kS r   r8   ro   r   r   r   rq   T  s    zRTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.Module.__eq__Nrr   r   r   r   r   rs   =  s   rs   c                    s    | S r   r   rt   ru   r   r   r;   X  r<   c                 S   s   | S r   r   rI   r   r   r   r;   Y  r<   rK   zmy_package load_testsz!my_package.test_module load_testszmy_package.test_module)r#   r$   rP   r)   r*   r/   sysremover   r|   r   r   rQ   rR   r   rS   rT   r   rm   rg   )r
   r'   r-   r2   r   r   rW   r   )rs   r1   r,   r&   r   r   -test_find_tests_customize_via_package_pattern  sH    





z;TestDiscovery.test_find_tests_customize_via_package_patternc           
         sv  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    n1 s0    Y  | |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 r   r(   r   r+   r   r   r-   t  s    z3TestDiscovery.test_discover.<locals>.restore_isfilec                 S   s   dS r[   r   r8   r   r   r   r;   w  r<   z-TestDiscovery.test_discover.<locals>.<lambda>c                      s    t jd d < d S r   )r   r)   r   )orig_sys_pathr   r   restore_path{  s    z1TestDiscovery.test_discover.<locals>.restore_pathr   z/foo/bartop_level_dirc                 S   s   dS r_   r   r8   r   r   r   r;     r<   c                 S   s   dS r_   r   r8   r   r   r   r;     r<   c                      s    t j_d S r   r.   r   r0   r   r   r2     s    z2TestDiscovery.test_discover.<locals>.restore_isdirc                    s     | |f dgS Nrj   rh   r   rC   	namespace_find_tests_argsr   r   rT     s    z0TestDiscovery.test_discover.<locals>._find_testsz/foo/bar/bazrC   z	['tests'])N)r   r   r#   r)   r*   r/   rP   r   r   normpathr   ImportErrorr   r   r   assertInrT   strrR   )
r
   r   r-   r   	full_pathr2   rT   rW   r   r   r   )r   r   r1   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/startdirr   c                    s   t  |  S r   r   r8   r   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 r   r>   r8   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 r   r>   r8   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 r   r8   )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 r8   )r
   r   rj   rC   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 r   r8   ro   r   r   r   rq     s    z`TestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.Module.__eq__N)r   r   r   rm   rg   r   rk   rq   r   r   r   r   rs     s
   rs   c                    s    | S r   r   rt   ru   r   r   r;     r<   c                 S   s   | S r   r   rI   r   r   r   r;     r<   r   zload_tests called startdir)r   rP   setattrr#   r$   r)   r*   r/   r   r   r|   r   r   rQ   rR   r   r   )r
   r   r   rW   r   )rs   r   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 r   r   _)fakefiler   r   r;     r<   z8TestDiscovery.setup_import_issue_tests.<locals>.<lambda>c                 S   s   dS r_   r   r   r   r   r   r;     r<   c                      s     t j_t _tjd d < d S r   )r#   r)   r*   r$   r   r   )r*   r$   r   r   r   restore  s    z7TestDiscovery.setup_import_issue_tests.<locals>.restore)r#   r$   r)   r*   r   rP   )r
   r   r   r   )r   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 r   r   r8   r   r   r   r     s    z@TestDiscovery.setup_import_issue_package_tests.<locals>.list_dirc                 S   s   |  d S r   r>   r8   r   r   r   r;     r<   z@TestDiscovery.setup_import_issue_package_tests.<locals>.<lambda>c                 S   s
   |  dS r   r>   r8   r   r   r   r;     r<   )rP   r   r#   r$   r)   r*   r/   r   __setitem__slicerS   )r
   r   r   r   r   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|v d|  tt|d d }| t |  W d    n1 s0    Y  d S )Ntest_this_does_not_exist.py.r   r   z6Failed to import test module: test_this_does_not_existmissing error string in %r)r   r   r   r   r   r#   getcwdr   r)   r   countTestCasesassertNotEqualerrorslen
assertTruerS   r   r   Ztest_this_does_not_exist)r
   r   rW   errortestr   r   r   .test_discover_with_modules_that_fail_to_import  s    


z<TestDiscovery.test_discover_with_modules_that_fail_to_importc                    s0  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
|v d|  tt|d	 d	 }| t |  W d    n1 s0    Y  | 	 dg ttjd D ]}tt|| qd S )Nr   r   r   r   r   c                    s     |  tdd S )NzCannot import Name)rh   r   rt   Zimport_callsr   r   rQ     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_packager   )r   r   r   r   rQ   r   r   r   r)   r   r   r   r   r   r   rS   r   r   r   rangepickleHIGHEST_PROTOCOLloadsdumps)r
   r   rQ   r   rW   r   r   protor   r   r   3test_discover_with_init_modules_that_fail_to_import  s0    


&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 ttjd D ]}tt|| q~d S )NSuite cleanup is disabledc                 S   s   t dd S NZ	skipperoo)r   SkipTestrt   r   r   r   rQ     s    zeTestDiscovery.test_discover_with_module_that_raises_SkipTest_on_import.<locals>._get_module_from_nameztest_skip_dummy.pyr   r   )r   BaseTestSuite_cleanupr   r   rQ   r   r   r   r   
TestResultrunr   skippedr   r   r   r   r   )r
   r   rQ   rW   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 ttjd	 D ]}tt|| qd S )
Nr   r   r   r   r   r   c                    s     |  tdd S r   )rh   r   r   rt   r   r   r   rQ   2  s    
zjTestDiscovery.test_discover_with_init_module_that_raises_SkipTest_on_import.<locals>._get_module_from_namer   )r   r   r   r   r   r   r   rQ   r   r   r   r)   r   r   r   r   r   r   ZtestsRunr   r   r   r   r   )r
   r   rQ   r   rW   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   s^   t  }g }|j|_|ddg | |g g g |d d < |g d | |ddgg d S )N	somethingr   )r   r   foobarr   r   )r   rh   _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   rh   r   r   r   r   ZassertIsr   r   r   r   r   r   r   .test_command_line_handling_discover_by_defaultQ  s    z<TestDiscovery.test_command_line_handling_discover_by_defaultc                 C   sj   t  }g }|j|_|g d | |g g | |jd | |jd | |jd | |j	d d S )N)r   -vz-br   -c-f   Tr   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   s   t  }d |_t H}| t}|g d W d    n1 sD0    Y  W d    n1 sb0    Y  | |jj	d | 
d|  d S )N)ZoneZtwoZthreeZfour)r   zusage:)r   r   r   Zcaptured_stderrr   
SystemExitr   r   	exceptionr   r   getvalue)r
   r   stderrcmr   r   r   :test_command_line_handling_do_discovery_too_many_argumentsj  s    
J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 r   r   rh   r
   r   rC   r   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   r   r   rK   N)	r|   __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g d|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g d|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 r   r   r   r   r   r   r     s    z[TestDiscovery.test_command_line_handling_do_discovery_calls_loader.<locals>.Loader.discoverNr   r   r   r   r   r     s   r   r   )r   r   rj   r   z	--verbosefish)r   rK   Neggs)r   r   N)r   r   Zham-sz-t)r   rK   r   -p)r   r   N)r   r   r   r   r   r   r   )r   r|   r   r   r   r   r   ZassertFalser   r   r   r   r   r   r   4test_command_line_handling_do_discovery_calls_loader  st    
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tjj	 fdd}| 
| dd }dd	 }d
d }|t_|tj_|tj_tjdkrtj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   rs     s   rs   r   c                      s@   t _t j_t j_t j_tjd=  tjv r<tj  d S )Nr   )	r#   r$   r)   r*   r/   realpathr   modulesr   r   r   r1   r,   r&   original_realpathr   r   cleanup  s    
z1TestDiscovery.setup_module_clash.<locals>.cleanupc                 S   s   dgS Nfoo.pyr   r   r   r   r   r$     s    z1TestDiscovery.setup_module_clash.<locals>.listdirc                 S   s   dS r_   r   r   r   r   r   r*     s    z0TestDiscovery.setup_module_clash.<locals>.isfilec                 S   s   dS r_   r   r   r   r   r   r/     s    z/TestDiscovery.setup_module_clash.<locals>.isdirnt)r|   r   r   r#   r)   r   r$   r*   r/   r   rP   r    )r
   rs   r   r$   r*   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$r   r   r   )r   r   r   r#   r)   r   reescapeZassertRaisesRegexr   r   r   r   )r
   r   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 r   )r#   r)   r   r   )r   r   r   r     s    z5TestDiscovery.test_module_symlink_ok.<locals>.cleanupc                    s$   | t jdkr t j dS | S r   )r#   r)   joinr8   )r   r   r   r   r     s    z6TestDiscovery.test_module_symlink_ok.<locals>.realpathr   r   )	r   r#   r)   r   r   rP   r   r   r   )r
   r   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 r_   )wasRunr   r   ZexpectedPathr
   rj   r   r   rT     s    zBTestDiscovery.test_discovery_from_dotted_path.<locals>._find_testszunittest.test)N)r   r   r#   r)   r   r   r   r   r   rT   r   r   r   Z_tests)r
   r   rT   rW   r   r  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    n1 s0    Y  | t|jd d S )Nc                 S   s   dgS )Nr   r   r   r   r   r   r;   )  r<   zOTestDiscovery.test_discovery_from_dotted_path_builtin_modules.<locals>.<lambda>c                 S   s   dS r[   r   r   r   r   r   r;   ,  r<   c                      s(   t j_ t j_t _tjd d < d S r   )r#   r)   r*   r/   r$   r   r   r/   r*   r$   r   r   r   r   .  s    zNTestDiscovery.test_discovery_from_dotted_path_builtin_modules.<locals>.restorer   z2Can not use builtin modules as dotted module names)r   r   r#   r$   r)   r*   r/   r   rP   r   	TypeErrorr   r   r   r   )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	|p t H tjjd |d}W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  | |d
dg d S )Npackagez/az/b)r   submodule_search_locationsc                    s    t j| <  S r   r   r   Zpackagenamer   kwargsr  r   r   _importE  s    
zLTestDiscovery.test_discovery_from_dotted_namespace_packages.<locals>._importc                    s     | |f d|  gS )Nz%s/testsr   r   r   r   r   rT   J  s    zPTestDiscovery.test_discovery_from_dotted_namespace_packages.<locals>._find_testsbuiltins.__import__z/a/testsz/b/tests)N)r   r   types
ModuleType__path__SimpleNamespace__spec__rT   rS   rR   mockpatchr   DirsOnSysPathr   test_importlibutiluncacher   r   )r
   r   r  rT   rW   r   )r   r  r   -test_discovery_from_dotted_namespace_packages;  s"    


dz;TestDiscovery.test_discovery_from_dotted_namespace_packagesc                    s   t  }td  fdd}t jd| t  tj	j
d\ | t}|d W d    n1 sr0    Y  | t|jd  W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr  c                    s    t j| <  S r   r  r	  r  r   r   r  ^  s    
z>TestDiscovery.test_discovery_failed_discovery.<locals>._importr  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   r   r   format)r
   r   r  r   r   r  r   test_discovery_failed_discoveryZ  s    

(z-TestDiscovery.test_discovery_failed_discoveryN)r   r   r   r!   rY   r\   r   r   r   r   r   r   r   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__)Zos.pathr#   r   r   r   r  r   r   r   Ztest.test_importlib.utilr   Zunittest.mockZunittest.testr   r   ZTestCaser   r   mainr   r   r   r   <module>   s(         Y