B
    v9aÉ:  ã               @   sœ   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G dd„ dejƒZ	G dd„ dej
ƒZeƒ ZG dd„ deƒZG d	d
„ d
ejƒZedkr˜e ¡  dS )é    N)Úsupportc               @   sh   e Zd Zdd„ Zdd„ ZG dd„ dejƒZG dd„ dejƒZ	d	d
„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTest_TestProgramc                sj   t  ¡ }ˆg‰tj tj t jj¡¡‰ dˆ_‡ ‡‡fdd„}||_	| 
d¡}ˆ ˆj¡ ˆ |jˆ¡ d S )NFc                s   dˆ_ ˆ | ˆ ¡ ˆS )NT)ÚwasRunÚassertEqual)Z	start_dirÚpattern)ÚexpectedPathÚselfÚtests© ú"/usr/lib/python3.7/test_program.pyÚ_find_tests   s    zETest_TestProgram.test_discovery_from_dotted_path.<locals>._find_testszunittest.test)ÚunittestÚ
TestLoaderÚosÚpathÚabspathÚdirnameÚtestÚ__file__r   r   ÚdiscoverÚ
assertTruer   Z_tests)r   Úloaderr   Zsuiter
   )r   r   r	   r   Útest_discovery_from_dotted_path   s    
z0Test_TestProgram.test_discovery_from_dotted_pathc                s¨   t ƒ ‰t ƒ }G ‡fdd„dt ƒ}|ƒ }tjj‰ ‡ fdd„}dd„ tj_|  |¡ dd„ }|tj_|  |¡ tj|d	d
d}|  |jˆ¡ |  |j|¡ |  |jd
¡ d S )Nc                   s   e Zd Z‡ fdd„ZdS )z/Test_TestProgram.testNoExit.<locals>.FakeRunnerc                s
   || _ ˆ S )N)r   )r   r   )Úresultr
   r   Úrun#   s    z3Test_TestProgram.testNoExit.<locals>.FakeRunner.runN)Ú__name__Ú
__module__Ú__qualname__r   r
   )r   r
   r   Ú
FakeRunner"   s   r   c                  s   ˆ t j_d S )N)r   ÚTestProgramÚ	parseArgsr
   )ÚoldParseArgsr
   r   ÚrestoreParseArgs*   s    z5Test_TestProgram.testNoExit.<locals>.restoreParseArgsc              W   s   d S )Nr
   )Úargsr
   r
   r   Ú<lambda>,   ó    z-Test_TestProgram.testNoExit.<locals>.<lambda>c               S   s
   t j`d S )N)r   r   r   r
   r
   r
   r   Ú
removeTest/   s    z/Test_TestProgram.testNoExit.<locals>.removeTestFé   )Ú
testRunnerÚexitÚ	verbosity)	Úobjectr   r   r    Ú
addCleanupr   r   r   r*   )r   r   r   Úrunnerr"   r&   Úprogramr
   )r!   r   r   Ú
testNoExit   s    

zTest_TestProgram.testNoExitc               @   s   e Zd Zdd„ Zdd„ ZdS )zTest_TestProgram.FooBarc             C   s   d S )Nr
   )r   r
   r
   r   ÚtestPass;   s    z Test_TestProgram.FooBar.testPassc             C   s   d S )Nr
   )r   r
   r
   r   ÚtestFail=   s    z Test_TestProgram.FooBar.testFailN)r   r   r   r0   r1   r
   r
   r
   r   ÚFooBar:   s   r2   c               @   s   e Zd Zdd„ Zdd„ ZdS )zTest_TestProgram.FooBarLoaderc             C   s   |   |  tj¡g¡S )N)Ú
suiteClassÚloadTestsFromTestCaser   r2   )r   Úmoduler
   r
   r   ÚloadTestsFromModuleB   s    z1Test_TestProgram.FooBarLoader.loadTestsFromModulec             C   s   |   |  tj¡g¡S )N)r3   r4   r   r2   )r   Únamesr5   r
   r
   r   ÚloadTestsFromNamesF   s    z0Test_TestProgram.FooBarLoader.loadTestsFromNamesN)r   r   r   r6   r8   r
   r
   r
   r   ÚFooBarLoader@   s   r9   c             C   sR   G dd„ dt ƒ}tj}dgt_|ƒ }tj|dd|  ¡ d}|t_|  d|j¡ d S )Nc               @   s   e Zd Zdd„ ZdS )zATest_TestProgram.test_defaultTest_with_string.<locals>.FakeRunnerc             S   s
   || _ dS )NT)r   )r   r   r
   r
   r   r   L   s    zETest_TestProgram.test_defaultTest_with_string.<locals>.FakeRunner.runN)r   r   r   r   r
   r
   r
   r   r   K   s   r   ÚfaketestFzunittest.test)r(   r)   ÚdefaultTestÚ
testLoader)zunittest.test)r+   ÚsysÚargvr   r   r9   r   Ú	testNames)r   r   Úold_argvr-   r.   r
   r
   r   Útest_defaultTest_with_stringJ   s    z-Test_TestProgram.test_defaultTest_with_stringc             C   sZ   G dd„ dt ƒ}tj}dgt_|ƒ }tj|dddg|  ¡ d}|t_|  ddg|j¡ d S )Nc               @   s   e Zd Zdd„ ZdS )zCTest_TestProgram.test_defaultTest_with_iterable.<locals>.FakeRunnerc             S   s
   || _ dS )NT)r   )r   r   r
   r
   r   r   [   s    zGTest_TestProgram.test_defaultTest_with_iterable.<locals>.FakeRunner.runN)r   r   r   r   r
   r
   r
   r   r   Z   s   r   r:   Fzunittest.testzunittest.test2)r(   r)   r;   r<   )r+   r=   r>   r   r   r9   r   r?   )r   r   r@   r-   r.   r
   r
   r   Útest_defaultTest_with_iterableY   s    
z/Test_TestProgram.test_defaultTest_with_iterablec             C   s8   t jddgt jt ¡ d|  ¡ d}|  t|dƒ¡ d S )NFÚfoobar)Ústream)r)   r>   r(   r<   r   )r   ÚmainÚTextTestRunnerÚioÚStringIOr9   r   Úhasattr)r   r.   r
   r
   r   Útest_NonExitj   s
    zTest_TestProgram.test_NonExitc             C   s.   | j ttjdgtjt ¡ dd|  ¡ d d S )NrC   )rD   T)r>   r(   r)   r<   )ÚassertRaisesÚ
SystemExitr   rE   rF   rG   rH   r9   )r   r
   r
   r   Ú	test_Exitr   s    zTest_TestProgram.test_Exitc             C   s,   | j ttjdgtjt ¡ d|  ¡ d d S )NrC   )rD   )r>   r(   r<   )rK   rL   r   rE   rF   rG   rH   r9   )r   r
   r
   r   Útest_ExitAsDefault|   s    z#Test_TestProgram.test_ExitAsDefaultN)r   r   r   r   r/   r   ÚTestCaser2   r   r9   rA   rB   rJ   rM   rN   r
   r
   r
   r   r      s   

r   c               @   s>   e Zd ZdZdZdZdZdZdZe	j
ZdZdZdZdd„ ZdS )ÚInitialisableProgramFNé   Ú__main__r   c             G   s   d S )Nr
   )r   r#   r
   r
   r   Ú__init__   s    zInitialisableProgram.__init__)r   r   r   r)   r   r*   r;   Ú	tb_localsr(   r   ZdefaultTestLoaderr<   r5   ZprogNamer   rS   r
   r
   r
   r   rP   …   s   rP   c               @   s(   e Zd ZdZdZdZdd„ Zdd„ ZdS )r   Nr   c             K   s"   |t _t jrt  jd8  _t‚d S )NrQ   )r   ÚinitArgsÚ
raiseErrorÚ	TypeError)r   Úkwargsr
   r
   r   rS   š   s    zFakeRunner.__init__c             C   s
   |t _tS )N)r   r   ÚRESULT)r   r   r
   r
   r   r       s    zFakeRunner.run)r   r   r   rU   r   rV   rS   r   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d„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$S )&ÚTestCommandLineArgsc             C   s*   t ƒ | _dd„ | j_d t_d t_dt_d S )Nc               S   s   d S )Nr
   r
   r
   r
   r   r$   ©   r%   z+TestCommandLineArgs.setUp.<locals>.<lambda>r   )rP   r.   ÚcreateTestsr   rU   r   rV   )r   r
   r
   r   ÚsetUp§   s
    zTestCommandLineArgs.setUpc             C   sj   | j }x.dD ]&}d|_| d |g¡ |  |jd¡ qW x.dD ]&}d|_| d |g¡ |  |jd¡ q<W d S )N)z-qz--quietrQ   r   )z-vz	--verboser'   )r.   r*   r    r   )r   r.   Úoptr
   r
   r   ÚtestVerbosity®   s    

z!TestCommandLineArgs.testVerbosityc             C   s°  | j }x¢dD ]˜\}}|dkr&ts&qt||d ƒ | d g¡ |  t||ƒd¡ g }t|||ƒ | d g¡ |  t||ƒ|¡ dg}t|||ƒ | d g¡ |  t||ƒ|¡ d|d  }d| }xä||fD ]Ø}t||d ƒ | d |g¡ |  t||ƒd¡ t||dƒ t ¡ *}	|  t	¡}
| d |g¡ W d Q R X W d Q R X |  
|
jjd	¡ t||dƒ t ¡ *}	|  t	¡}
| d |g¡ W d Q R X W d Q R X |  
|
jjd	¡ qÌW qW d S )
N))Úbufferr_   )Úfailfastr`   )ÚcatchÚ
catchbreakra   Fé*   z-%sr   z--%sT)r'   )r.   ZhasInstallHandlerÚsetattrr    ÚassertIsÚgetattrr   Zcaptured_stderrrK   rL   r   Z	exceptionr#   )r   r.   ÚargÚattrZfalseÚtrueZ	short_optZlong_optr]   ÚstderrÚcmr
   r
   r   ÚtestBufferCatchFailfast»   s>    
"
"z+TestCommandLineArgs.testBufferCatchFailfastc          
   C   s    G dd„ dt jƒ}tjd d … }zjg tjd d …< |  |ƒ jd¡ |  |ddjd¡ dgtjd d …< |  |ƒ jd ¡ |  |ddjd¡ W d |tjd d …< X d S )Nc               @   s   e Zd Zdd„ Zdd„ ZdS )z/TestCommandLineArgs.testWarning.<locals>.FakeTPc             _   s   d S )Nr
   )r   r#   Úkwr
   r
   r   r    ç   r%   z9TestCommandLineArgs.testWarning.<locals>.FakeTP.parseArgsc             _   s   d S )Nr
   )r   r#   rm   r
   r
   r   ÚrunTestsè   r%   z8TestCommandLineArgs.testWarning.<locals>.FakeTP.runTestsN)r   r   r   r    rn   r
   r
   r
   r   ÚFakeTPæ   s   ro   ÚdefaultÚignore)ÚwarningsZ	somevalue)r   r   r=   Úwarnoptionsr   rr   )r   ro   rs   r
   r
   r   ÚtestWarningã   s    zTestCommandLineArgs.testWarningc          	   C   sf   | j }t|_d|_d|_d|_d|_| ¡  |  tj	ddddddœ¡ |  tj
d¡ |  |jt¡ d S )Nr*   r`   r_   rr   F)r*   r`   r_   rT   rr   r   )r.   r   r(   r*   r`   r_   rr   rn   r   rU   r   re   r   rY   )r   r.   r
   r
   r   ÚtestRunTestsRunnerClassø   s    

z+TestCommandLineArgs.testRunTestsRunnerClassc             C   sH   | j }tƒ |_d t_| ¡  |  tj¡ |  tjd¡ |  |j	t
¡ d S )Nr   )r.   r   r(   rU   rn   ZassertIsNoner   r   re   r   rY   )r   r.   r
   r
   r   ÚtestRunTestsRunnerInstance  s    z.TestCommandLineArgs.testRunTestsRunnerInstancec          	   C   sN   | j }t|_| d dg¡ |  d|j¡ | ¡  |  tjddddd dœ¡ d S )Nz--localsTFrQ   )r_   r`   rT   r*   rr   )r.   r   r(   r    r   rT   rn   rU   )r   r.   r
   r
   r   Útest_locals  s    
zTestCommandLineArgs.test_localsc             C   s`   | j }dt_t|_d|_d|_d|_d|_| ¡  |  	tj
i ¡ |  	tjd¡ |  |jt¡ d S )Nr'   r*   r`   r_   r   )r.   r   rV   r(   r*   r`   r_   r   rn   r   rU   re   r   rY   )r   r.   r
   r
   r   ÚtestRunTestsOldRunnerClass&  s    z.TestCommandLineArgs.testRunTestsOldRunnerClassc                sj   t jd ‰ ˆ j‰‡ ‡fdd„}ˆ |¡ dˆ_‡fdd„}|ˆ _ˆj}d|_t|_| 	¡  ˆ 
ˆj¡ d S )Nzunittest.mainc                  s
   ˆˆ _ d S )N)ÚinstallHandlerr
   )r5   Úoriginalr
   r   Úrestore=  s    zBTestCommandLineArgs.testCatchBreakInstallsHandler.<locals>.restoreFc                  s
   dˆ _ d S )NT)Ú	installedr
   )r   r
   r   ÚfakeInstallHandlerB  s    zMTestCommandLineArgs.testCatchBreakInstallsHandler.<locals>.fakeInstallHandlerT)r=   Úmodulesry   r,   r|   r.   rb   r   r(   rn   r   )r   r{   r}   r.   r
   )r5   rz   r   r   ÚtestCatchBreakInstallsHandler:  s    

z1TestCommandLineArgs.testCatchBreakInstallsHandlerTc                s6   ‡ fdd„}t jj‰|t j_‡fdd„}|  |¡ d S )Nc                s   | ˆ kS )Nr
   )r   )r7   r
   r   ÚisfileO  s    z1TestCommandLineArgs._patch_isfile.<locals>.isfilec                  s   ˆ t j_d S )N)r   r   r€   r
   )rz   r
   r   r{   S  s    z2TestCommandLineArgs._patch_isfile.<locals>.restore)r   r   r€   r,   )r   r7   Úexistsr€   r{   r
   )r7   rz   r   Ú_patch_isfileN  s
    z!TestCommandLineArgs._patch_isfilec             C   sP   | j }dddddg}|  |¡ dd„ |_| |¡ dd	d
dg}|  |j|¡ d S )NÚprognamezfoo.pyzbar.Pyzbaz.PYzwing.txtc               S   s   d S )Nr
   r
   r
   r
   r   r$   ^  r%   z<TestCommandLineArgs.testParseArgsFileNames.<locals>.<lambda>ÚfooÚbarZbaz)r.   r‚   r[   r    r   r?   )r   r.   r>   Úexpectedr
   r
   r   ÚtestParseArgsFileNamesX  s    


z*TestCommandLineArgs.testParseArgsFileNamesc             C   sH   | j }dddg}|  |¡ dd„ |_| |¡ ddg}|  |j|¡ d S )Nrƒ   zfoo/bar/baz.pyzgreen\red.pyc               S   s   d S )Nr
   r
   r
   r
   r   r$   l  r%   z<TestCommandLineArgs.testParseArgsFilePaths.<locals>.<lambda>zfoo.bar.bazz	green.red)r.   r‚   r[   r    r   r?   )r   r.   r>   r†   r
   r
   r   ÚtestParseArgsFilePathsg  s    



z*TestCommandLineArgs.testParseArgsFilePathsc             C   sH   | j }dddg}|  g ¡ dd„ |_| |¡ |  |j|dd … ¡ d S )Nrƒ   zfoo/bar/baz.pyzgreen\red.pyc               S   s   d S )Nr
   r
   r
   r
   r   r$   x  r%   zCTestCommandLineArgs.testParseArgsNonExistentFiles.<locals>.<lambda>rQ   )r.   r‚   r[   r    r   r?   )r   r.   r>   r
   r
   r   ÚtestParseArgsNonExistentFiless  s    



z1TestCommandLineArgs.testParseArgsNonExistentFilesc                sd   t  ¡ ‰ | j}‡ fdd„}d|dƒ|dƒg}|  |¡ dd„ |_| |¡ dd	g}|  |j|¡ d S )
Nc                s   t j ˆ | ¡S )N)r   r   Újoin)Úname)Úcur_dirr
   r   Ú_join€  s    zOTestCommandLineArgs.testParseArgsAbsolutePathsThatCanBeConverted.<locals>._joinrƒ   zfoo/bar/baz.pyzgreen\red.pyc               S   s   d S )Nr
   r
   r
   r
   r   r$   …  r%   zRTestCommandLineArgs.testParseArgsAbsolutePathsThatCanBeConverted.<locals>.<lambda>zfoo.bar.bazz	green.red)r   Úgetcwdr.   r‚   r[   r    r   r?   )r   r.   r   r>   r†   r
   )rŒ   r   Ú,testParseArgsAbsolutePathsThatCanBeConverted}  s    


z@TestCommandLineArgs.testParseArgsAbsolutePathsThatCanBeConvertedc             C   sH   | j }dddg}|  |¡ dd„ |_| |¡ |  |j|dd … ¡ d S )Nrƒ   z/foo/bar/baz.pyz/green/red.pyc               S   s   d S )Nr
   r
   r
   r
   r   r$   ‘  r%   zUTestCommandLineArgs.testParseArgsAbsolutePathsThatCannotBeConverted.<locals>.<lambda>rQ   )r.   r‚   r[   r    r   r?   )r   r.   r>   r
   r
   r   Ú/testParseArgsAbsolutePathsThatCannotBeConverted‹  s    



zCTestCommandLineArgs.testParseArgsAbsolutePathsThatCannotBeConvertedc             C   sD   | j }dddddddg}dd„ |_| |¡ |  |jdd	dg¡ d S )
Nrƒ   z-kr„   r…   z*pat*c               S   s   d S )Nr
   r
   r
   r
   r   r$   ¡  r%   zDTestCommandLineArgs.testParseArgsSelectedTestNames.<locals>.<lambda>z*foo*z*bar*)r.   r[   r    r   ZtestNamePatterns)r   r.   r>   r
   r
   r   ÚtestParseArgsSelectedTestNames  s
    

z2TestCommandLineArgs.testParseArgsSelectedTestNamesc          	   C   sÀ   dd„ }d}|   d||gƒ¡ |   d|dd|gƒ¡ |   d|ddd	ddgƒ¡ |   d
|dd|gƒ¡ |   d|dd|gƒ¡ |   d|dd|gƒ¡ |   d|dd|gƒ¡ |   d|dd|gƒ¡ d S )Nc          	   S   sN   t jtjddg|  t jt jtj t	¡d}| | 
¡ \}}W d Q R X | ¡ S )Nz-mr   )Ústdoutrj   Úcwd)Ú
subprocessÚPopenr=   Ú
executableZDEVNULLÚPIPEr   r   r   r   ZcommunicateÚdecode)r#   ÚpÚ_rj   r
   r
   r   Úrun_unittest§  s
    zMTestCommandLineArgs.testSelectedTestNamesFunctionalTest.<locals>.run_unittestZ_test_warningszRan 7 testsz-kZTestWarningsr   z-pz*_test*zRan 2 testsÚfÚtzRan 3 testsz*tz*test_warnings.*Warning*z
Ran 1 testz*test_warnings.*warning*)ZassertIn)r   r›   r   r
   r
   r   Ú#testSelectedTestNamesFunctionalTest¦  s    z7TestCommandLineArgs.testSelectedTestNamesFunctionalTestN)T)r   r   r   r\   r^   rl   rt   ru   rv   rw   rx   r   r‚   r‡   rˆ   r‰   r   r   r‘   rž   r
   r
   r
   r   rZ   ¥   s"   (


	rZ   rR   )rG   r   r=   r”   r   r   r   Zunittest.testrO   r   r   rP   r+   rY   r   rZ   r   rE   r
   r
   r
   r   Ú<module>   s   z  