
    =eY                         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ej                  Z G d dej                  Zed	k    r ej                     dS dS )
    N)abspath)support)import_helperc                   <    e Zd ZdZdZdxZxZxZZdZ	dZ
dxZZd ZdS )TestableTestProgramNT    c                     d S N )selfs    3/usr/lib/python3.11/unittest/test/test_discovery.py__init__zTestableTestProgram.__init__   s        )__name__
__module____qualname__moduleexitdefaultTestfailfast
catchbreakbuffer	verbosityprogName
testRunner
testLoaderr   r   r   r   r   r      sU        FD377K7(7Z&IH""J    r   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )TestDiscoveryc                     t          j                    }d|_        |                    d          }|                     |d           	 d S )N/fooz/foo/bar/baz.pyzbar.baz)unittest
TestLoader_top_level_dir_get_name_from_pathassertEqualassertRaisesAssertionError)r   loadernames      r   test_get_name_from_pathz%TestDiscovery.test_get_name_from_path   sL    $&& &))*;<<y)))	Fr   c                    t          j                    }t          j        fd}t          j        j        fd}t          j        j        fd}g dddggfdt          _        |                     |           d }|t          j        _        |                     |           d	 }|t          j        _        |                     |           d
 |_        |j	        dfd	}||_	        d |_
        t          j                            d          }||_        t          |                    |d                    }	d dD             }
|
                    d dD                        |                     |	|
           d S )Nc                        t           _        d S r   oslistdiroriginal_listdirs   r   restore_listdirz6TestDiscovery.test_find_tests.<locals>.restore_listdir0       )BJJJr   c                  *     t           j        _        d S r   r/   pathisfileoriginal_isfiles   r   restore_isfilez5TestDiscovery.test_find_tests.<locals>.restore_isfile3       ,BGNNNr   c                  *     t           j        _        d S r   r/   r7   isdiroriginal_isdirs   r   restore_isdirz4TestDiscovery.test_find_tests.<locals>.restore_isdir6       *BGMMMr   )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r7   
path_listss    r   <lambda>z/TestDiscovery.test_find_tests.<locals>.<lambda><       *.."3"3 r   c                 ,    |                      d          S )Ndirendswithr7   s    r   r?   z,TestDiscovery.test_find_tests.<locals>.isdir?   s    =='''r   c                 6    |                      d           od| vS )NrO   rE   rP   rR   s    r   r8   z-TestDiscovery.test_find_tests.<locals>.isfileD   s!    }}U+++IMT4IIr   c                     | dz   S Nz moduler   rR   s    r   rL   z/TestDiscovery.test_find_tests.<locals>.<lambda>J       D94D r   c                 0     | |          }|| dz   gz   S Npatternz testsr   r   rZ   baseorig_load_testss      r   loadTestsFromModulez:TestDiscovery.test_find_tests.<locals>.loadTestsFromModuleL   *    "?67;;;D6H,---r   c                     | S r   r   things    r   rL   z/TestDiscovery.test_find_tests.<locals>.<lambda>Q       % r   r!   test*.pyc                     g | ]}|d z   g	S ) module testsr   .0r*   s     r   
<listcomp>z1TestDiscovery.test_find_tests.<locals>.<listcomp>Y   s,     4 4 4TO+, 4 4 4r   )test1test2rD   c                      g | ]}d |z  dz   gS )ztest_dir.%srf   r   rg   s     r   ri   z1TestDiscovery.test_find_tests.<locals>.<listcomp>[   s1     ( ( (=4/?BC ( ( (r   )test3test4r   )r"   r#   r/   r0   r7   r8   r?   
addCleanup_get_module_from_namer^   
suiteClassr   r$   list_find_testsextendr&   )r   r)   r3   r;   rB   r?   r8   r^   	top_levelsuiteexpectedr]   rA   r:   r2   rK   s              @@@@@r   test_find_testszTestDiscovery.test_find_tests,   s   $&&:	* 	* 	* 	* 	*'.	- 	- 	- 	- 	-	+ 	+ 	+ 	+ 	+J J J!:02
 4333
(((	( 	( 	(&&&	J 	J 	J  ''''D'D$ 4	. 	. 	. 	. 	. 	. &9"//GOOF++	 )V''	:>>??4 424 4 4 ( (&( ( ( 	) 	) 	))))))r   c                   	
 t          j                    }t          j        fd}t          j        j        

fd}t          j        j        		fd}dggfdt          _        |                     |           d t          j        _        |                     |           d t          j        _        |                     |           d |_        |j	        dfd		}||_	        d
 |_
        t          j                            d          }||_        t          |                    |d                    }|                     |g            d S )Nc                        t           _        d S r   r.   r1   s   r   r3   z=TestDiscovery.test_find_tests_socket.<locals>.restore_listdire   r4   r   c                  *     t           j        _        d S r   r6   r9   s   r   r;   z<TestDiscovery.test_find_tests_socket.<locals>.restore_isfileh   r<   r   c                  *     t           j        _        d S r   r>   r@   s   r   rB   z;TestDiscovery.test_find_tests_socket.<locals>.restore_isdirk   rC   r   socketc                 .                         d          S rG   rH   rJ   s    r   rL   z6TestDiscovery.test_find_tests_socket.<locals>.<lambda>o   rM   r   c                     dS NFr   rR   s    r   rL   z6TestDiscovery.test_find_tests_socket.<locals>.<lambda>r   s    U r   c                     dS r   r   rR   s    r   rL   z6TestDiscovery.test_find_tests_socket.<locals>.<lambda>u       e r   c                     | dz   S rU   r   rR   s    r   rL   z6TestDiscovery.test_find_tests_socket.<locals>.<lambda>x   rV   r   c                 0     | |          }|| dz   gz   S rX   r   r[   s      r   r^   zATestDiscovery.test_find_tests_socket.<locals>.loadTestsFromModulez   r_   r   c                     | S r   r   ra   s    r   rL   z6TestDiscovery.test_find_tests_socket.<locals>.<lambda>   rc   r   r!   rd   r   )r"   r#   r/   r0   r7   r8   r?   ro   rp   r^   rq   r   r$   rr   rs   r&   )r   r)   r3   r;   rB   r^   ru   rv   r]   rA   r:   r2   rK   s           @@@@@r   test_find_tests_socketz$TestDiscovery.test_find_tests_socket_   s    $&&:	* 	* 	* 	* 	*'.	- 	- 	- 	- 	-	+ 	+ 	+ 	+ 	+  j\
3333
(((**&&&++''''D'D$ 4	. 	. 	. 	. 	. 	. &9"//GOOF++	 )V''	:>>??#####r   c                 (  	
 t          j                    }t          j        fd}t          j        j        fd}t          j        j        

fd}g dg g g gfdt          _        |                     |           d t          j        _        |                     |           fdt          j        _        |                     |            G d d	t                    fd
|_	        |j
        	d	f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                        t           _        d S r   r.   r1   s   r   r3   zCTestDiscovery.test_find_tests_with_package.<locals>.restore_listdir   r4   r   c                  *     t           j        _        d S r   r6   r9   s   r   r;   zBTestDiscovery.test_find_tests_with_package.<locals>.restore_isfile   r<   r   c                  *     t           j        _        d S r   r>   r@   s   r   rB   zATestDiscovery.test_find_tests_with_package.<locals>.restore_isdir   rC   r   a_directorytest_directorytest_directory2c                 .                         d          S rG   rH   rJ   s    r   rL   z<TestDiscovery.test_find_tests_with_package.<locals>.<lambda>   rM   r   c                     dS NTr   rR   s    r   rL   z<TestDiscovery.test_find_tests_with_package.<locals>.<lambda>       T r   c                 F    t           j                            |           vS r   r/   r7   basenamer7   directoriess    r   rL   z<TestDiscovery.test_find_tests_with_package.<locals>.<lambda>       bg&6&6t&<&<K&O r   c                   "    e Zd Zg Zg Zd Zd ZdS ):TestDiscovery.test_find_tests_with_package.<locals>.Modulec                      | _          j                            |           t          j                             |          dk    r fd}| _        d S d S )Nr   c                 T    j                             | ||f           j        dz   gS N load_testsload_tests_argsappendr7   r)   testsrZ   r   s      r   
load_testszWTestDiscovery.test_find_tests_with_package.<locals>.Module.__init__.<locals>.load_tests   1    ,33VUG4LMMM $	M 9::r   r7   pathsr   r/   r   r   r   r7   r   s   `  r   r   zCTestDiscovery.test_find_tests_with_package.<locals>.Module.__init__   j     	
!!$'''7##D))-===; ; ; ; ; '1DOOO	 >=r   c                 "    | j         |j         k    S r   rR   r   others     r   __eq__zATestDiscovery.test_find_tests_with_package.<locals>.Module.__eq__       yEJ..r   Nr   r   r   r   r   r   r   r   r   r   Moduler      <        E O1 1 1/ / / / /r   r   c                      |           S r   r   r*   r   s    r   rL   z<TestDiscovery.test_find_tests_with_package.<locals>.<lambda>       FF4LL r   c                 :     | |          }|| j         dz   gz   S NrY   rf   rR   r[   s      r   r^   zGTestDiscovery.test_find_tests_with_package.<locals>.loadTestsFromModule   ,    "?67;;;D6;8999r   c                     | S r   r   ra   s    r   rL   z<TestDiscovery.test_find_tests_with_package.<locals>.<lambda>   rc   r   r!   ztest*a_directory module teststest_directory load_teststest_directory module teststest_directory2 module testsr   r"   r#   r/   r0   r7   r8   r?   ro   objectrp   r^   rq   r$   rr   rs   r&   r   r   r   r)   r3   r;   rB   r^   rv   r   r   r]   rA   r:   r2   rK   s          @@@@@@@r   test_find_tests_with_packagez*TestDiscovery.test_find_tests_with_package   s4   $&&:	* 	* 	* 	* 	*'.	- 	- 	- 	- 	-	+ 	+ 	+ 	+ 	+ KJJ!2r2.
3333
((())&&&OOOO'''	/ 	/ 	/ 	/ 	/V 	/ 	/ 	/  (A'@'@'@$ 4	: 	: 	: 	: 	: 	: &9"// & V''8899
 	5668:9:<	= 	= 	= 	MMM	O 	O 	O 	/!2w/0	2 	2 	2 	2 	2r   c                 (  	
 t          j                    }t          j        fd}t          j        j        fd}t          j        j        

fd}g dg g g gfdt          _        |                     |           d t          j        _        |                     |           fdt          j        _        |                     |            G d d	t                    fd
|_	        |j
        	d	f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                        t           _        d S r   r.   r1   s   r   r3   zWTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.restore_listdir   r4   r   c                  *     t           j        _        d S r   r6   r9   s   r   r;   zVTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.restore_isfile   r<   r   c                  *     t           j        _        d S r   r>   r@   s   r   rB   zUTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.restore_isdir   rC   r   r   c                 .                         d          S rG   rH   rJ   s    r   rL   zPTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.<lambda>   rM   r   c                     dS r   r   rR   s    r   rL   zPTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.<lambda>   r   r   c                 F    t           j                            |           vS r   r   r   s    r   rL   zPTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.<lambda>   r   r   c                   "    e Zd Zg Zg Zd Zd ZdS )NTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.Modulec                      | _          j                            |           t          j                             |          dk    r fd}| _        d S d S )Nr   c                 T    j                             | ||f           j        dz   gS r   r   r   s      r   r   zkTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.Module.__init__.<locals>.load_tests   r   r   r   r   s   `  r   r   zWTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.Module.__init__   r   r   c                 "    | j         |j         k    S r   rR   r   s     r   r   zUTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.Module.__eq__   r   r   Nr   r   r   r   r   r      r   r   r   c                      |           S r   r   r   s    r   rL   zPTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.<lambda>   r   r   c                 :     | |          }|| j         dz   gz   S r   rR   r[   s      r   r^   z[TestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.loadTestsFromModule   r   r   c                     | S r   r   ra   s    r   rL   zPTestDiscovery.test_find_tests_default_calls_package_load_tests.<locals>.<lambda>   rc   r   r!   rd   r   r   r   r   r   r   r   s          @@@@@@@r   0test_find_tests_default_calls_package_load_testsz>TestDiscovery.test_find_tests_default_calls_package_load_tests   s4   $&&:	* 	* 	* 	* 	*'.	- 	- 	- 	- 	-	+ 	+ 	+ 	+ 	+ KJJ!2r2.
3333
((())&&&OOOO'''	/ 	/ 	/ 	/ 	/V 	/ 	/ 	/  (A'@'@'@$ 4	: 	: 	: 	: 	: 	: &9"// & V''
;;<<
 	5668:9:<	= 	= 	= 	MMM	O 	O 	O
 	/!2z23	5 	5 	5 	5 	5r   c                   	
 t           j        

fd}|                     |           t           j        j        		fd}|                     |           t           j        j        fd}|                     |           |                     t          j        j        t          d                     t          d          dgt          d          ddgifd	}|t           _        d
 t           j        _        d t           j        _         G d dt                    t          j                    }f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                        t           _        d S r   r.   r1   s   r   r3   zTTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.restore_listdir  r4   r   c                  *     t           j        _        d S r   r6   r9   s   r   r;   zSTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.restore_isfile"  r<   r   c                  *     t           j        _        d S r   r>   r@   s   r   rB   zRTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.restore_isdir&  rC   r   r!   
my_package/foo/my_package__init__.pytest_module.pyc                 .    t          |                    S r   rr   r7   vfss    r   list_dirzMTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.list_dir8      D	??"r   c                 .    |                      d           S Nz.pyrP   rR   s    r   rL   zMTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.<lambda>;      u)=)=%= r   c                 ,    |                      d          S r   rP   rR   s    r   rL   zMTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.<lambda><      dmmE&:&: r   c                   "    e Zd Zg Zg Zd Zd ZdS )KTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.Modulec                      | _          j                            |           |                    d          r fd}n fd}| _        d S )Ntest_modulec                 T    j                             | ||f           j        dz   gS r   r   r   s      r   r   zhTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.Module.__init__.<locals>.load_testsF  r   r   c                     j                             | ||f           d}t          j                            |          }|                     ||          }j        dz   |g|z   S )Nz/foo/my_package/__init__.py	start_dirrZ   r   )r   r   r/   r7   dirnamediscover)r)   r   rZ   __file__this_dir	pkg_testsr   s         r   r   zhTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.Module.__init__.<locals>.load_testsJ  sv    ,33VUG4LMMM#@#%7??8#<#<$*OO&. %4 %A %A	 $	M 95   ) * *r   )r7   r   r   rQ   r   r   s   `  r   r   zTTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.Module.__init__B  sx     	
!!$'''==// *; ; ; ; ; ;* * * * * #-r   c                 "    | j         |j         k    S r   rR   r   s     r   r   zRTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.Module.__eq__U  r   r   Nr   r   r   r   r   r   >  s<        E O- - -&/ / / / /r   r   c                      |           S r   r   r   s    r   rL   zMTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.<lambda>Y  r   r   c                     | S r   r   ra   s    r   rL   zMTestDiscovery.test_find_tests_customize_via_package_pattern.<locals>.<lambda>Z  rc   r   rd   zmy_package load_testsz!my_package.test_module load_testszmy_package.test_module)r/   r0   ro   r7   r8   r?   sysremover   r   r"   r#   rp   rq   r$   rr   rs   r&   r   r   )r   r3   r;   rB   r   r)   rv   r   rA   r:   r2   r   s          @@@@@r   -test_find_tests_customize_via_package_patternz;TestDiscovery.test_find_tests_customize_via_package_pattern  sP   
 :	* 	* 	* 	* 	*((('.	- 	- 	- 	- 	-'''	+ 	+ 	+ 	+ 	+&&&999 v())M;K+LN	# 	# 	# 	# 	#
==::	/ 	/ 	/ 	/ 	/V 	/ 	/ 	/4 $&&'@'@'@'@$// ' V''DDEE
 	2B>?A B	C 	C 	C 	&(@A	C 	C 	C 	/!2z2!2z24	5 	5 	5 	5 	5r   c                   
 t          j                    }t          j        j        t          j        j        fd}d t          j        _        |                     |           t          j        d d          fd}|                     |           t          j                            t          j        	                    d                    }| 
                    t                    5  |                    dd           d d d            n# 1 swxY w Y   |                     |j        |           |                     |t          j                   d t          j        _        d t          j        _        fd	}|                     |           g 

fd
}||_        t"          |_        |                    ddd          }t          j                            d          }t          j                            d          }	|                     |d           |                     |j        |           |                     
|	dfg           |                     |t          j                   d S )Nc                  *     t           j        _        d S r   r6   r9   s   r   r;   z3TestDiscovery.test_discover.<locals>.restore_isfileu  r<   r   c                     dS r   r   rR   s    r   rL   z-TestDiscovery.test_discover.<locals>.<lambda>x  r   r   c                  *     t           j        d d <   d S r   )r   r7   )orig_sys_paths   r   restore_pathz1TestDiscovery.test_discover.<locals>.restore_path|  s    'CHQQQKKKr   r!   z/foo/bartop_level_dirc                     dS r   r   rR   s    r   rL   z-TestDiscovery.test_discover.<locals>.<lambda>  s    d r   c                     dS r   r   rR   s    r   rL   z-TestDiscovery.test_discover.<locals>.<lambda>  r   r   c                  *     t           j        _        d S r   r>   r@   s   r   rB   z2TestDiscovery.test_discover.<locals>.restore_isdir  rC   r   c                 8                         | |f           dgS Nr   )r   )r   rZ   _find_tests_argss     r   rs   z0TestDiscovery.test_discover.<locals>._find_tests  s$    ##Y$89999r   z/foo/bar/bazrZ   z	['tests'])r"   r#   r/   r7   r8   r?   ro   r   r   normpathr'   ImportErrorr   r&   r$   assertInrs   strrq   )r   r)   r;   r   	full_pathrB   rs   rv   r   r   r  r   rA   r:   s             @@@@r   test_discoverzTestDiscovery.test_discoverp  s   $&&'.	- 	- 	- 	- 	- ,+'''	( 	( 	( 	( 	(%%%GOOBG$4$4V$<$<==	{++ 	> 	>OOJfO===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	.	:::i*****))	+ 	+ 	+ 	+ 	+&&&	 	 	 	 	 )	:FF
33GOON33	,,,.>>>)Y	,B+CDDDmSX.....s   *DDDc                    t          d          dgt          d          dgifd}|                     t          t          dt          j                   |t          _        |                     t          t          j        dt          j        j                   d t          j        _        |                     t          t          j        d	t          j        j                   d
 t          j        _        |                     t          j        j	        t          d                      G d dt                    t          j                    }fd|_        d |_        |                    dd          }|                     |dgg           d S )Nz	/toplevelstartdirz/toplevel/startdirr   c                 .    t          |                    S r   r   r   s    r   r   z[TestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.list_dir  r   r   r0   r8   c                 ,    |                      d          S r   rP   rR   s    r   rL   z[TestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.<lambda>  r   r   r?   c                 .    |                      d           S r   rP   rR   s    r   rL   z[TestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.<lambda>  r   r   c                   (    e Zd Zg Zg Zd Zd Zd ZdS )YTestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.Modulec                     || _         d S r   rR   )r   r7   s     r   r   zbTestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.Module.__init__  s     			r   c                     d| j         z   gS )Nzload_tests called rR   )r   r)   r   rZ   s       r   r   zdTestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.Module.load_tests  s    ,ty899r   c                 "    | j         |j         k    S r   rR   r   s     r   r   z`TestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.Module.__eq__  r   r   N)r   r   r   r   r   r   r   r   r   r   r   r   r    sK        E O! ! !: : :/ / / / /r   r   c                      |           S r   r   r   s    r   rL   z[TestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.<lambda>  r   r   c                     | S r   r   ra   s    r   rL   z[TestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests.<locals>.<lambda>  rc   r   r   zload_tests called startdir)r   ro   setattrr/   r0   r7   r8   r?   r   r   r   r"   r#   rp   rq   r   r&   )r   r   r)   rv   r   r   s       @@r   ;test_discover_start_dir_is_package_calls_package_load_testszITestDiscovery.test_discover_start_dir_is_package_calls_package_load_tests  su    {##j\+,,}o?	# 	# 	# 	# 	#Y
;;;
(BGNCCC::'27=AAA==)=)=>>>	/ 	/ 	/ 	/ 	/V 	/ 	/ 	/ $&&'@'@'@'@$// 4KPP 	789	; 	; 	; 	; 	;r   c                     t           j        fdt           _        t           j        j        d t           j        _        t          j        d d          fd}|                     |           d S )Nc                 
    gS r   r   )_fakefiles    r   rL   z8TestDiscovery.setup_import_issue_tests.<locals>.<lambda>  s	    z r   c                     dS r   r   r  s    r   rL   z8TestDiscovery.setup_import_issue_tests.<locals>.<lambda>  s    4 r   c                  d     t           j        _        t           _        t          j        d d <   d S r   )r/   r7   r8   r0   r   )r8   r0   r   s   r   restorez7TestDiscovery.setup_import_issue_tests.<locals>.restore  s&    #BGN BJ'CHQQQKKKr   )r/   r0   r7   r8   r   ro   )r   r  r   r8   r0   r   s    ` @@@r   setup_import_issue_testsz&TestDiscovery.setup_import_issue_tests  s}    *))))
'	( 	( 	( 	( 	( 	( 	( 	     r   c                 6   |                      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}|t          _        d t          j        _        d t          j        _        d S )Nr0   r8   r?   c                 .    t          |                    S r   r   r   s    r   r   z@TestDiscovery.setup_import_issue_package_tests.<locals>.list_dir  r   r   c                 .    |                      d           S r   rP   rR   s    r   rL   z@TestDiscovery.setup_import_issue_package_tests.<locals>.<lambda>  r   r   c                 ,    |                      d          S r   rP   rR   s    r   rL   z@TestDiscovery.setup_import_issue_package_tests.<locals>.<lambda>  r   r   )ro   r  r/   r0   r7   r8   r?   r   __setitem__slicerr   )r   r   r   s    ` r    setup_import_issue_package_testsz.TestDiscovery.setup_import_issue_package_tests  s    Y
;;;(BGNCCC'27=AAA,eDkk4>>JJJ	# 	# 	# 	# 	#
==::r   c                    t          j                    }|                     d           |                    d          }|                     t          j                    t          j                   | 	                    |
                                d           |                     g |j                   | 	                    dt          |j                             |j        d         }|                     d|v d|z             t          t          |          d                   d         }|                     t"                    5   |j                     d d d            d S # 1 swxY 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   r7   r&   countTestCasesassertNotEqualerrorslen
assertTruerr   r'   r  test_this_does_not_exist)r   r)   rv   errortests        r   .test_discover_with_modules_that_fail_to_importz<TestDiscovery.test_discover_with_modules_that_fail_to_import  s   $&&%%&CDDD$$bikk38,,,--//333B...C..///a DM(50	2 	2 	2 DKKN##A&{++ 	, 	,)D)+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   E!!E%(E%c                 
   t          d          dgt          d          ddgi}|                     |           g fd}t          j                    }||_        |                    t          d                    }|                     t          d          t          j                   | 	                    |
                                d           |                     g |j                   | 	                    dt          |j                             |j        d         }|                     d	|v d
|z             t          t          |          d                   d         }|                     t"                    5   |j                     d d d            n# 1 swxY w Y   | 	                    dg           t'          t(          j        dz             D ])}t)          j        t)          j        ||                     *d S )Nr!   r   r   r   r   c                 L                         |            t          d          )NzCannot import Name)r   r  r*   import_callss    r   rp   z`TestDiscovery.test_discover_with_init_modules_that_fail_to_import.<locals>._get_module_from_name  s&    %%%2333r   r   r   z(Failed to import test module: my_packager,  )r   r(  r"   r#   rp   r   r  r   r7   r&   r.  r/  r0  r1  r2  rr   r'   r  r   rangepickleHIGHEST_PROTOCOLloadsdumps)	r   r   rp   r)   rv   r4  r5  protor:  s	           @r   3test_discover_with_init_modules_that_fail_to_importzATestDiscovery.test_discover_with_init_modules_that_fail_to_import  s.   v())M;K+LN--c222	4 	4 	4 	4 	4 $&&'<$00gfoosx000--//333B...C..///a 6%?(50	2 	2 	2 DKKN##A&{++ 	 	DO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	~666 62Q677 	4 	4ELdE223333	4 	4s   ?FF"Fc                 Z   t           j        j        st          j        d          t          j                    }d }||_        |                     d           |                    d          }|                     |	                                d           t          j
                    }|                    |           |                     t          |j                  d           t          t          j        dz             D ])}t          j        t          j        ||                     *d S )NSuite cleanup is disabledc                 *    t          j        d          N	skipperoo)r"   SkipTest)r*   s    r   rp   zeTestDiscovery.test_discover_with_module_that_raises_SkipTest_on_import.<locals>._get_module_from_name  s    #K000r   ztest_skip_dummy.pyr+  r   )r"   BaseTestSuite_cleanuprG  r#   rp   r!  r   r&   r.  
TestResultrunr1  skippedr;  r<  r=  r>  r?  )r   r)   rp   rv   resultr@  s         r   8test_discover_with_module_that_raises_SkipTest_on_importzFTestDiscovery.test_discover_with_module_that_raises_SkipTest_on_import  s   %. 	A#$?@@@$&&	1 	1 	1'<$%%&:;;;$$--//333$&&		&V^,,a000 62Q677 	5 	5ELeU334444	5 	5r   c                    t           j        j        st          j        d          t	          d          dgt	          d          ddgi}|                     |           g fd}t          j                    }||_        |                    t	          d                    }| 	                    t	          d          t          j                   |                     |                                d           t          j                    }|                    |           |                     t!          |j                  d           |                     |j        d           |                     dg           t'          t(          j        dz             D ])}t)          j        t)          j        ||                     *d S )	NrC  r!   r   r   r   r   c                 V                         |            t          j        d          rE  )r   r"   rG  r9  s    r   rp   zjTestDiscovery.test_discover_with_init_module_that_raises_SkipTest_on_import.<locals>._get_module_from_name3  s(    %%%#K000r   r   )r"   rH  rI  rG  r   r(  r#   rp   r   r  r   r7   r&   r.  rJ  rK  r1  rL  testsRunr;  r<  r=  r>  r?  )r   r   rp   r)   rv   rM  r@  r:  s          @r   =test_discover_with_init_module_that_raises_SkipTest_on_importzKTestDiscovery.test_discover_with_init_module_that_raises_SkipTest_on_import+  s   %. 	A#$?@@@v())M;K+LN--c222	1 	1 	1 	1 	1 $&&'<$00gfoosx000--//333$&&		&V^,,a000!,,,~666 62Q677 	5 	5ELeU334444	5 	5r   c                    t                      }g }|j        |_        |                    ddg           |                     |g g           g |d d <   |                    g d           |                     |ddgg           d S )N	somethingr   )rT  r   foobarrU  rV  )r   r   _do_discovery	parseArgsr&   r   programargss      r   $test_command_line_handling_parseArgsz2TestDiscovery.test_command_line_handling_parseArgsF  s    %'' $;
3444t$$$QQQAAABBB/00000r   c                 p   t                      }g }|j        |_        |                    dg           |                     |g g           |                     |j        d           |                     |j        d           |                     |j        d           |                     |j	        d           d S )NrT  r   F
r   r   rW  rX  r&   r   assertIsr   r   r   rY  s      r   .test_command_line_handling_discover_by_defaultz<TestDiscovery.test_command_line_handling_discover_by_defaultR  s    %'' $;-(((t$$$*A...gne,,,g(%000g&.....r   c                 r   t                      }g }|j        |_        |                    g d           |                     |g g           |                     |j        d           |                     |j        d           |                     |j        d           |                     |j	        d           d S )N)rT  -vz-brb  -c-f   Tr^  rY  s      r   ;test_command_line_handling_discover_by_default_with_optionszITestDiscovery.test_command_line_handling_discover_by_default_with_options^  s    %'' $EEEFFFt$$$*A...gnd+++g($///g&-----r   c                    t                      }d |_        t          j                    5 }|                     t
                    5 }|                    g d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |j        j	        d           | 
                    d|                                           d S )N)onetwothreefour)re  zusage:)r   r   r   captured_stderrr'   
SystemExitrW  r&   	exceptionr[  r  getvalue)r   rZ  stderrcms       r   :test_command_line_handling_do_discovery_too_many_argumentszHTestDiscovery.test_command_line_handling_do_discovery_too_many_argumentsk  sY   %''!$&& 	C&z**	C.0!!"A"A"ABBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	*D111h 1 122222s5   A?A(A?(A,	,A?/A,	0A??BBc                    t                               t          j                  }|                                  G d dt                     } |            |_        |                    dg           |                     |j        dg           d S )Nc                       e Zd Zg Zd ZdS )YTestDiscovery.test_command_line_handling_do_discovery_uses_default_loader.<locals>.Loaderc                 @    | j                             |||f           dS r  r[  r   r   r   rZ   r   s       r   r   zbTestDiscovery.test_command_line_handling_do_discovery_uses_default_loader.<locals>.Loader.discover}  $    	  )Wm!DEEEwr   Nr   r   r   r[  r   r   r   r   Loaderru  {  (        D    r   r{  rb  r+  rd   N)	r   __new__r"   TestProgram_initArgParsersr   rW  r&   r[  r   rZ  r{  s      r   ;test_command_line_handling_do_discovery_uses_default_loaderzITestDiscovery.test_command_line_handling_do_discovery_uses_default_loaderw  s    ..!566!!!	 	 	 	 	V 	 	 	 $VXXtf%%%'>&?@@@@@r   c                 4	   t                      } G d dt                    }|                    dg|           |                     |j        d           |                     |j        d           |                     |j        dg           g |_        t                      }|                    dg|           |                     |j        d           |                     |j        dg           g |_        t                      }|                    g |           |                     |j        d           |                     |j        dg           g |_        t                      }|                    d	g|           |                     |j        d           |                     |j        d
g           g |_        t                      }|                    d	dg|           |                     |j        d           |                     |j        dg           g |_        t                      }|                    g d|           |                     |j        d           |                     |j        dg           g |_        t                      }|                    dd	g|           |                     |j        d           |                     |j        d
g           g |_        t                      }|                    dd	g|           |                     |j        d           |                     |j        dg           g |_        t                      }|                    dd	g|           |                     |j        d           |                     |j        dg           |                     |j                   |                     |j	                   g |_        t                      }|                    g d|           |                     |j        d           |                     |j        dg           |                     |j        d           | 
                    |j                   | 
                    |j	                   d S )Nc                       e Zd Zg Zd ZdS )RTestDiscovery.test_command_line_handling_do_discovery_calls_loader.<locals>.Loaderc                 @    | j                             |||f           dS r  rw  rx  s       r   r   z[TestDiscovery.test_command_line_handling_do_discovery_calls_loader.<locals>.Loader.discover  ry  r   Nrz  r   r   r   r{  r    r|  r   r{  rb  )r{  re  r   r}  z	--verbosefish)r  rd   Neggs)r  r  N)r  r  ham-sz-t)r+  rd   r  -p)r+  r  N)r  r  r  r  rb  rd  rc  )r   r   rW  r&   r   r5  r[  assertFalser   r   r2  r  s      r   4test_command_line_handling_do_discovery_calls_loaderzBTestDiscovery.test_command_line_handling_do_discovery_calls_loader  s   %''	 	 	 	 	V 	 	 	 	tfV444*A...w///'>&?@@@%''{mF;;;w///'>&?@@@%''b000w///'>&?@@@%''vhv666w///'A&BCCC%''vv.v>>>w///'=&>???%''555fEEEw///'>&?@@@%''tVnV<<<w///'A&BCCC%''tVnV<<<w///'@&ABBB%''tVnV<<<w///':&;<<<)***+,,,%''LLL%+ 	 	- 	- 	-w///'=&>???*A...()))*+++++r   c                   	
  G 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 }|t          _        |t          j        _        |t          j        _        t          j        dk    r t          j        j        t          j        _	        S )	Nc                       e Zd ZdZdS )0TestDiscovery.setup_module_clash.<locals>.Modulez
bar/foo.pyN)r   r   r   r   r   r   r   r   r    s        #HHHr   r   rU  c                      t           _        t           j        _        t           j        _        t           j        _        t          j        d=  t          j        v r!t          j                                        d S d S )NrU  )	r/   r0   r7   r8   r?   realpathr   modulesr   )r	  rA   r:   r2   original_realpaths   r   cleanupz1TestDiscovery.setup_module_clash.<locals>.cleanup  s_    )BJ,BGN*BGM0BGE"CH$$	***** %$r   c                     dgS Nfoo.pyr   r  s    r   r0   z1TestDiscovery.setup_module_clash.<locals>.listdir  s
    :r   c                     dS r   r   r  s    r   r8   z0TestDiscovery.setup_module_clash.<locals>.isfile      4r   c                     dS r   r   r  s    r   r?   z/TestDiscovery.setup_module_clash.<locals>.isdir  r  r   nt)r   r   r  r/   r7   r   r0   r8   r?   r  ro   r*   )r   r   r  r0   r8   r?   r	  rA   r:   r2   r  s         @@@@@r   setup_module_clashz TestDiscovery.setup_module_clash  s   	$ 	$ 	$ 	$ 	$V 	$ 	$ 	$#EGOOE**	:'.G,	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	   	 	 		 	 		 	 	
7d??  "wBGr   c                    |                                  }t          j                    }t          j                            d          }t          j                            d          }t          j        d|d|d          }|                     t          d|z  |j
        dd           |                     t          j        d	         |           d S )
NrV  rU  z''foo' module incorrectly imported from z. Expected z$. Is this module globally installed?z^%s$r  r   r   )r  r"   r#   r/   r7   r   reescapeassertRaisesRegexr  r   r&   r   )r   r	  r)   mod_direxpected_dirmsgs         r   test_detect_module_clashz&TestDiscovery.test_detect_module_clash  s    ++--	$&&'//%((wu--ii8?O P P#vX 	 	
 	
 	
 	!i00000r   c                    |                                  }t          j        j        t          j                            d          t          j                            d          fd}|                     |           fd}|t          j        _        t          j                    }|                    dd           d S )NrV  rU  c                  *     t           j        _        d S r   )r/   r7   r  )r  s   r   r  z5TestDiscovery.test_module_symlink_ok.<locals>.cleanup  s    0BGr   c                     | t           j                            d          k    r t           j                            d          S | S r  )r/   r7   join)r7   r  r  s    r   r  z6TestDiscovery.test_module_symlink_ok.<locals>.realpath  s9    rw||GX6666w||L(;;;Kr   r  r   )	r  r/   r7   r  r   ro   r"   r#   r   )r   r	  r  r  r)   r  r  r  s        @@@r   test_module_symlink_okz$TestDiscovery.test_module_symlink_ok   s    ++--	G,'//%((wu--	1 	1 	1 	1 	1   	 	 	 	 	 	 $$&&%:::::r   c                     t          j                    } gt          j                            t          j                            t           j        j                            d _         fd}||_	        |
                    d          }                      j                                        |j                   d S )NFc                 B    d_                             |            S r   )wasRunr&   )r   rZ   expectedPathr   r   s     r   rs   zBTestDiscovery.test_discovery_from_dotted_path.<locals>._find_tests  s%    DKY555Lr   zunittest.test)r"   r#   r/   r7   r   r   r5  r   r  rs   r   r2  r&   _tests)r   r)   rs   rv   r  r   s   `   @@r   test_discovery_from_dotted_pathz-TestDiscovery.test_discovery_from_dotted_path  s    $&&wrwx}7M'N'NOO	 	 	 	 	 	 	 )00$$$u-----r   c                    t          j                    }t          j        d t          _        t          j        j        t          j        j        d t          j        _        t          j        d d          fd}|                     |           | 	                    t                    5 }|                    d           d d d            n# 1 swxY w Y   |                     t          |j                  d           d S )Nc                     dgS )Nr*  r   r  s    r   rL   zOTestDiscovery.test_discovery_from_dotted_path_builtin_modules.<locals>.<lambda>*  s
     => r   c                     dS r   r   r  s    r   rL   zOTestDiscovery.test_discovery_from_dotted_path_builtin_modules.<locals>.<lambda>-  s    % r   c                      t           j        _         t           j        _        t           _        t
          j        d d <   d S r   )r/   r7   r8   r?   r0   r   )r?   r8   r0   r   s   r   r   zNTestDiscovery.test_discovery_from_dotted_path_builtin_modules.<locals>.restore/  s/    #BGN!BGM BJ'CHQQQKKKr   r   z2Can not use builtin modules as dotted module names)r"   r#   r/   r0   r7   r8   r?   r   ro   r'   	TypeErrorr   r&   r  rn  )r   r)   r   rq  r?   r8   r0   r   s       @@@@r   /test_discovery_from_dotted_path_builtin_modulesz=TestDiscovery.test_discovery_from_dotted_path_builtin_modules%  s8   $&&*>>
'	( 	( 	( 	( 	( 	( 	( 	(
 	   y)) 	#ROOE"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#R\**2	3 	3 	3 	3 	3s   0CCCc           	         t          j                    }t          j        d          fd}t           j                            d|          5  t          j                    5  t          j	        j
                            d          5  |                     t                    5 }|                    d           d d d            n# 1 swxY w Y   |                     t!          |j                  d                                         d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Npackagec                 &    t           j        | <   S r   )r   r  )packagenamer[  kwargsr  s      r   _importz>TestDiscovery.test_discovery_failed_discovery.<locals>._import@  s    '.CK$Nr   zbuiltins.__import__z$don't know how to discover from {!r})r"   r#   types
ModuleTypemockpatchr   DirsOnSysPathr5  test_importlibutiluncacher'   r  r   r&   r  rn  format)r   r)   r  rq  r  s       @r   test_discovery_failed_discoveryz-TestDiscovery.test_discovery_failed_discovery<  s6   $&&"9--	 	 	 	 	 ]  !6@@ 		7 		7,.. 7 7(-55i@@ 7 7**955 3	2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3$$S%6%6%L&,fWoo7 7 77 7 7 7 7 7 7 7 7 7 7 7 7 7 77 7 7 7 7 7 7 7 7 7 7 7 7 7 7		7 		7 		7 		7 		7 		7 		7 		7 		7 		7 		7 		7 		7 		7 		7 		7 		7 		7s~   E"%D-D"C	8DCDC>D
D-DD-DD-!E-D1	1E4D1	5EE	E	N)r   r   r   r+   rx   r   r   r   r   r
  r  r!  r(  r6  rA  rN  rR  r\  r`  rf  rr  r  r  r  r  r  r  r  r  r   r   r   r   r      s       6 6 61* 1* 1*f&$ &$ &$PH2 H2 H2TE5 E5 E5NV5 V5 V5p,/ ,/ ,/\+; +; +;Z
! 
! 
!	; 	; 	;, , ,(4 4 4<5 5 5.5 5 56
1 
1 
1
/ 
/ 
/
. 
. 
.	3 	3 	3A A AH, H, H,T! ! !F1 1 1; ; ;(. . ."3 3 3.7 7 7 7 7r   r   __main__)os.pathr/   r   r  r   r  r<  r5  r   test.supportr   test.test_importlib.utilr"   unittest.mockunittest.testr  r   TestCaser   r   mainr   r   r   <module>r     s          				 



         & & & & & &             	 	 	 	 	(. 	 	 	q7 q7 q7 q7 q7H% q7 q7 q7h zHMOOOOO r   