o
    KXh                     @   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	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rRe  dS dS )
    N)abspath)support)import_helperc                   @   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	   F/opt/python-3.10.19/usr/lib/python3.10/unittest/test/test_discovery.py__init__      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    d S 1 s)w   Y  d S )N/fooz/foo/bar/baz.pyzbar.bazFz/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                      
    t _d S r   oslistdirr	   original_listdirr	   r   restore_listdir0      
z6TestDiscovery.test_find_tests.<locals>.restore_listdirc                          t j_d S r   r&   pathisfiler	   original_isfiler	   r   restore_isfile3      z5TestDiscovery.test_find_tests.<locals>.restore_isfilec                      r,   r   r&   r.   isdirr	   original_isdirr	   r   restore_isdir6   r3   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                    
     dS Nr   popr.   
path_listsr	   r   <lambda><      
 z/TestDiscovery.test_find_tests.<locals>.<lambda>c                 S   
   |  dS )Ndirendswithr?   r	   r	   r   r5   ?   r+   z,TestDiscovery.test_find_tests.<locals>.isdirc                 S   s   |  d o	d| vS )NrE   r:   rF   r?   r	   r	   r   r/   D   s   z-TestDiscovery.test_find_tests.<locals>.isfilec                 S      | d S Nz moduler	   r?   r	   r	   r   rB   J       c                        | |d}|| d g S Npatternz testsr	   r   rN   baseorig_load_testsr	   r   loadTestsFromModuleL      z:TestDiscovery.test_find_tests.<locals>.loadTestsFromModulec                 S      | S r   r	   thingr	   r	   r   rB   Q       r   test*.pyc                 S   s   g | ]}|d  gqS ) module testsr	   .0r"   r	   r	   r   
<listcomp>Y   s    z1TestDiscovery.test_find_tests.<locals>.<listcomp>)Ztest1Ztest2r9   c                 S   s   g | ]	}d | d gqS )ztest_dir.%srZ   r	   r[   r	   r	   r   r]   [   s    )Ztest3Ztest4r   )r   r   r&   r'   r.   r/   r5   
addCleanup_get_module_from_namerS   
suiteClassr   r   list_find_testsextendr   )r   r!   r*   r2   r8   r5   r/   rS   	top_levelsuiteZexpectedr	   rR   r7   r1   r)   rA   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                      r$   r   r%   r	   r(   r	   r   r*   e   r+   z=TestDiscovery.test_find_tests_socket.<locals>.restore_listdirc                      r,   r   r-   r	   r0   r	   r   r2   h   r3   z<TestDiscovery.test_find_tests_socket.<locals>.restore_isfilec                      r,   r   r4   r	   r6   r	   r   r8   k   r3   z;TestDiscovery.test_find_tests_socket.<locals>.restore_isdirsocketc                    r;   r<   r=   r?   r@   r	   r   rB   o   rC   z6TestDiscovery.test_find_tests_socket.<locals>.<lambda>c                 S      dS NFr	   r?   r	   r	   r   rB   r   rX   c                 S   ri   rj   r	   r?   r	   r	   r   rB   u   rX   c                 S   rH   rI   r	   r?   r	   r	   r   rB   x   rJ   c                    rK   rL   r	   rO   rQ   r	   r   rS   z   rT   zATestDiscovery.test_find_tests_socket.<locals>.loadTestsFromModulec                 S   rU   r   r	   rV   r	   r	   r   rB      rX   r   rY   r   )r   r   r&   r'   r.   r/   r5   r^   r_   rS   r`   r   r   ra   rb   r   )r   r!   r*   r2   r8   rS   rd   re   r	   rf   r   test_find_tests_socket_   s.   




z$TestDiscovery.test_find_tests_socketc                    <  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                      r$   r   r%   r	   r(   r	   r   r*      r+   zCTestDiscovery.test_find_tests_with_package.<locals>.restore_listdirc                      r,   r   r-   r	   r0   r	   r   r2      r3   zBTestDiscovery.test_find_tests_with_package.<locals>.restore_isfilec                      r,   r   r4   r	   r6   r	   r   r8      r3   zATestDiscovery.test_find_tests_with_package.<locals>.restore_isdirZa_directorytest_directoryZtest_directory2c                    r;   r<   r=   r?   r@   r	   r   rB      rC   z<TestDiscovery.test_find_tests_with_package.<locals>.<lambda>c                 S   ri   NTr	   r?   r	   r	   r   rB      rX   c                       t j|  vS r   r&   r.   basenamer?   directoriesr	   r   rB          c                   @   $   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                    <   | _  j| tj |dkr fdd}| _d S d S )Nrn   c                        j | ||f  jd gS N load_testsload_tests_argsappendr.   r!   testsrN   r
   r	   r   
load_tests      zWTestDiscovery.test_find_tests_with_package.<locals>.Module.__init__.<locals>.load_testsr.   pathsr}   r&   rr   r   r   r.   r   r	   r
   r   r         
zCTestDiscovery.test_find_tests_with_package.<locals>.Module.__init__c                 S      | j |j kS r   r?   r   otherr	   r	   r   __eq__   r3   zATestDiscovery.test_find_tests_with_package.<locals>.Module.__eq__Nr   r   r   r   r|   r   r   r	   r	   r	   r   Module   
    	r   c                        | S r   r	   r"   r   r	   r   rB      rJ   c                        | |d}|| j d g S NrM   rZ   r?   rO   rQ   r	   r   rS         zGTestDiscovery.test_find_tests_with_package.<locals>.loadTestsFromModulec                 S   rU   r   r	   rV   r	   r	   r   rB      rX   r   ztest*a_directory module teststest_directory load_teststest_directory module teststest_directory2 module testsr   r   r   r&   r'   r.   r/   r5   r^   objectr_   rS   r`   r   ra   rb   r   r   r|   r   r!   r*   r2   r8   rS   re   r	   r   rt   rR   r7   r1   r)   rA   r   test_find_tests_with_package   sJ   




z*TestDiscovery.test_find_tests_with_packagec                    rl   )Nc                      r$   r   r%   r	   r(   r	   r   r*      r+   zWTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.restore_listdirc                      r,   r   r-   r	   r0   r	   r   r2      r3   zVTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.restore_isfilec                      r,   r   r4   r	   r6   r	   r   r8      r3   zUTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.restore_isdirrm   c                    r;   r<   r=   r?   r@   r	   r   rB      rC   zPTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.<lambda>c                 S   ri   ro   r	   r?   r	   r	   r   rB      rX   c                    rp   r   rq   r?   rs   r	   r   rB      ru   c                   @   rv   )zNTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.Modulec                    rw   )Nrn   c                    rx   ry   r{   r~   r
   r	   r   r      r   zkTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.Module.__init__.<locals>.load_testsr   r   r	   r
   r   r      r   zWTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.Module.__init__c                 S   r   r   r?   r   r	   r	   r   r      r3   zUTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.Module.__eq__Nr   r	   r	   r	   r   r      r   r   c                    r   r   r	   r   r   r	   r   rB      rJ   c                    r   r   r?   rO   rQ   r	   r   rS      r   z[TestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.loadTestsFromModulec                 S   rU   r   r	   rV   r	   r	   r   rB      rX   r   rY   r   r   r   r   r   r   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                      r$   r   r%   r	   r(   r	   r   r*     r+   zTTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.restore_listdirc                      r,   r   r-   r	   r0   r	   r   r2   "  r3   zSTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.restore_isfilec                      r,   r   r4   r	   r6   r	   r   r8   &  r3   zRTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.restore_isdirr   
my_package/foo/my_package__init__.pytest_module.pyc                       t  |  S r   ra   r?   vfsr	   r   list_dir8  r3   zMTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.list_dirc                 S      |  d S Nz.pyrF   r?   r	   r	   r   rB   ;      zMTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.<lambda>c                 S   rD   r   rF   r?   r	   r	   r   rB   <  rC   c                   @   rv   )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                    rx   ry   r{   r~   r
   r	   r   r   F  r   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_dirrN   rz   )r|   r}   r&   r.   dirnamediscover)r!   r   rN   __file__Zthis_dirZ	pkg_testsr
   r	   r   r   J  s   )r.   r   r}   rG   r   r   r	   r
   r   r   B  s   

	zTTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.Module.__init__c                 S   r   r   r?   r   r	   r	   r   r   U  r3   zRTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.Module.__eq__Nr   r	   r	   r	   r   r   >  s
    r   c                    r   r   r	   r   r   r	   r   rB   Y  rJ   c                 S   rU   r   r	   rV   r	   r	   r   rB   Z  rX   rY   zmy_package load_testsz!my_package.test_module load_testszmy_package.test_module)r&   r'   r^   r.   r/   r5   sysremover   r   r   r   r_   r`   r   ra   rb   r   r   r|   )r   r*   r2   r8   r   r!   re   r	   )r   r7   r1   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 sPw   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                      r,   r   r-   r	   r0   r	   r   r2   u  r3   z3TestDiscovery.test_discover.<locals>.restore_isfilec                 S   ri   rj   r	   r?   r	   r	   r   rB   x  rX   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   ri   ro   r	   r?   r	   r	   r   rB     rX   c                 S   ri   ro   r	   r?   r	   r	   r   rB     rX   c                      r,   r   r4   r	   r6   r	   r   r8     r3   z2TestDiscovery.test_discover.<locals>.restore_isdirc                    s     | |f dgS Nr   r}   r   rN   	namespace_find_tests_argsr	   r   rb     s   z0TestDiscovery.test_discover.<locals>._find_testsz/foo/bar/bazrN   z	['tests']r   )r   r   r&   r.   r/   r5   r^   r   r   normpathr   ImportErrorr   r   r   assertInrb   strr`   )
r   r!   r2   r   	full_pathr8   rb   re   r   r   r	   )r   r   r7   r1   r   test_discoverp  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                    r   r   r   r?   r   r	   r   r     r3   z[TestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.list_dirr'   r/   c                 S   rD   r   rF   r?   r	   r	   r   rB     rC   z[TestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.<lambda>r5   c                 S   r   r   rF   r?   r	   r	   r   rB     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   r?   )r   r.   r	   r	   r   r     r+   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!   r   rN   r	   r	   r   r     r3   zdTestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.Module.load_testsc                 S   r   r   r?   r   r	   r	   r   r     r3   z`TestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.Module.__eq__N)r   r   r   r   r|   r   r   r   r	   r	   r	   r   r     s    r   c                    r   r   r	   r   r   r	   r   rB     rJ   c                 S   rU   r   r	   rV   r	   r	   r   rB     rX   r   zload_tests called startdir)r   r^   setattrr&   r'   r.   r/   r5   r   r   r   r   r   r_   r`   r   r   )r   r   r!   re   r	   )r   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   rB         z8TestDiscovery.setup_import_issue_tests.<locals>.<lambda>c                 S   ri   ro   r	   r   r	   r	   r   rB     rX   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   r^   )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/   r5   c                    r   r   r   r?   r   r	   r   r     r3   z@TestDiscovery.setup_import_issue_package_tests.<locals>.list_dirc                 S   r   r   rF   r?   r	   r	   r   rB     r   z@TestDiscovery.setup_import_issue_package_tests.<locals>.<lambda>c                 S   rD   r   rF   r?   r	   r	   r   rB     rC   )r^   r   r&   r'   r.   r/   r5   r   __setitem__slicera   )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    d S 1 s]w   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
assertTruera   r   r   Ztest_this_does_not_exist)r   r!   re   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
|v d|  tt|d	 d	 }| t |  W d    n1 svw   Y  | 	 dg ttjd D ]}tt|| qd S )Nr   r   r   r   r   c                    s     |  td)NzCannot import Name)r}   r   r   Z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_packager   )r   r   r   r   r_   r   r   r   r.   r   r   r   r   r   r   ra   r   r   r   rangepickleHIGHEST_PROTOCOLloadsdumps)r   r   r_   r!   re   r   r   protor	   r   r   3test_discover_with_init_modules_that_fail_to_import  s4   



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NZ	skipperoo)r   SkipTestr   r	   r	   r   r_     r+   zeTestDiscovery.test_discover_with_module_that_raises_SkipTest_on_import.<locals>._get_module_from_nameztest_skip_dummy.pyr   r   )r   BaseTestSuite_cleanupr   r   r_   r   r   r   r   
TestResultrunr   skippedr   r   r   r   r   )r   r!   r_   re   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|| qid S )
Nr   r   r   r   r   r   c                    s     |  tdr   )r}   r   r   r   r   r	   r   r_   3  s   

zjTestDiscovery.test_discover_with_init_module_that_raises_SkipTest_on_import.<locals>._get_module_from_namer   )r   r   r   r   r   r   r   r_   r   r   r   r.   r   r   r   r   r   r   ZtestsRunr   r   r   r   r   )r   r   r_   r!   re   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   r}   _do_discovery	parseArgsr   r   programargsr	   r	   r   $test_command_line_handling_parseArgsF  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   r}   r   r   r   r   ZassertIsr   r   r   r   r	   r	   r   .test_command_line_handling_discover_by_defaultR  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 $}| t}|g d W d    n1 s"w   Y  W d    n1 s1w   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_argumentsk  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                   @      e Zd Zg Zdd ZdS )zYTestDiscovery.test_command_line_handling_do_discovery_uses_default_loader.<locals>.Loaderc                 S      | j |||f dS r   r   r}   r   r   rN   r   r	   r	   r   r   }     zbTestDiscovery.test_command_line_handling_do_discovery_uses_default_loader.<locals>.Loader.discoverNr   r   r   r   r   r	   r	   r	   r   Loader{      r  r   r   rY   N)	r   __new__r   TestProgramZ_initArgParsersr   r   r   r   r   r   r  r	   r	   r   ;test_command_line_handling_do_discovery_uses_default_loaderw  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                   @   r  )zRTestDiscovery.test_command_line_handling_do_discovery_calls_loader.<locals>.Loaderc                 S   r  r   r  r  r	   r	   r   r     r  z[TestDiscovery.test_command_line_handling_do_discovery_calls_loader.<locals>.Loader.discoverNr  r	   r	   r	   r   r    r  r  r   )r  r   r   r	  z	--verbosefish)r  rY   Neggs)r  r  N)r  r  Zham-sz-t)r   rY   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rSt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   r     s    r   r   c                      sD   t _t j_t j_t j_tjd=  tjv r tj  d S d S )Nr   )	r&   r'   r.   r/   r5   realpathr   modulesr   r	   r   r7   r1   r)   original_realpathr	   r   cleanup  s   
z1TestDiscovery.setup_module_clash.<locals>.cleanupc                 S      dgS Nfoo.pyr	   r   r	   r	   r   r'     s   z1TestDiscovery.setup_module_clash.<locals>.listdirc                 S   ri   ro   r	   r   r	   r	   r   r/     r   z0TestDiscovery.setup_module_clash.<locals>.isfilec                 S   ri   ro   r	   r   r	   r	   r   r5     r   z/TestDiscovery.setup_module_clash.<locals>.isdirnt)r   r   r  r&   r.   r   r'   r/   r5   r  r^   r"   )r   r   r  r'   r/   r5   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                      r,   r   )r&   r.   r  r	   )r  r	   r   r    r3   z5TestDiscovery.test_module_symlink_ok.<locals>.cleanupc                    s$   | t jdkrt j dS | S r  )r&   r.   joinr?   )r   r  r	   r   r    s   z6TestDiscovery.test_module_symlink_ok.<locals>.realpathr  r   )	r  r&   r.   r  r   r^   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 ro   )wasRunr   r   ZexpectedPathr   r   r	   r   rb     s   zBTestDiscovery.test_discovery_from_dotted_path.<locals>._find_testszunittest.testr   )r   r   r&   r.   r   r   r   r   r%  rb   r   r   r   Z_tests)r   r!   rb   re   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 sDw   Y  | t|jd d S )Nc                 S   r  )Nr   r	   r   r	   r	   r   rB   *  r   zOTestDiscovery.test_discovery_from_dotted_path_builtin_modules.<locals>.<lambda>c                 S   ri   rj   r	   r   r	   r	   r   rB   -  rX   c                      s(   t j_ t j_t _tjd d < d S r   )r&   r.   r/   r5   r'   r   r	   r5   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/   r5   r   r^   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	|8 t $ tjjd |d}W d    n1 sQw   Y  W d    n1 s`w   Y  W d    n1 sow   Y  | |d
dg d S )Npackagez/az/b)r!   submodule_search_locationsc                        t j| <  S r   r   r  Zpackagenamer   kwargsr+  r	   r   _importF     
zLTestDiscovery.test_discovery_from_dotted_namespace_packages.<locals>._importc                    s     | |f d|  gS )Nz%s/testsr   r   r   r	   r   rb   K  s   
zPTestDiscovery.test_discovery_from_dotted_namespace_packages.<locals>._find_testsbuiltins.__import__z/a/testsz/b/testsr   )r   r   types
ModuleType__path__SimpleNamespace__spec__rb   ra   r`   mockpatchr   DirsOnSysPathr   test_importlibutiluncacher   r   )r   r!   r2  rb   re   r	   )r   r+  r   -test_discovery_from_dotted_namespace_packages<  s,   


z;TestDiscovery.test_discovery_from_dotted_namespace_packagesc                    s  t  }td  fdd}t jd|b t E tj	j
d. | t}|d W d    n1 s9w   Y  | t|jd  W d    n1 sTw   Y  W d    n1 scw   Y  W d    d S W d    d S 1 s{w   Y  d S )Nr+  c                    r-  r   r.  r/  r1  r	   r   r2  _  r3  z>TestDiscovery.test_discovery_failed_discovery.<locals>._importr4  z$don't know how to discover from {!r})r   r   r5  r6  r:  r;  r   r<  r   r=  r>  r?  r   r)  r   r   r   r   format)r   r!   r2  r   r	   r1  r   test_discovery_failed_discovery[  s&   

"z-TestDiscovery.test_discovery_failed_discoveryN)r   r   r   r#   rg   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r"  r$  r'  r*  r@  rB  r	   r	   r	   r   r      s8    3(JGX.-J#r   __main__)Zos.pathr&   r   r  r   r5  r   r   r   Ztest.supportr   Ztest.test_importlib.utilr   Zunittest.mockZunittest.testr  r   ZTestCaser   r   mainr	   r	   r	   r   <module>   s.          Y