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Zdd„ Zdd„ ZdS )zTest_TestProgram.FooBarLoaderz3Test loader that returns a suite containing FooBar.c             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   Ú__doc__r6   r8   r
   r
   r
   r   ÚFooBarLoader@   s   r:   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   r:   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   r:   r   r@   )r   r   rA   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ÚStringIOr:   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 )NrD   )rE   T)r?   r(   r)   r=   )ÚassertRaisesÚ
SystemExitr   rF   rG   rH   rI   r:   )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 )NrD   )rE   )r?   r(   r=   )rL   rM   r   rF   rG   rH   rI   r:   )r   r
   r
   r   Útest_ExitAsDefault|   s    z#Test_TestProgram.test_ExitAsDefaultN)r   r   r   r   r/   r   ÚTestCaser2   r   r:   rB   rC   rK   rN   rO   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   rT   r
   r
   r
   r   rQ   …   s   rQ   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 )NrR   )r   ÚinitArgsÚ
raiseErrorÚ	TypeError)r   Úkwargsr
   r
   r   rT   š   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   rV   r   rW   rT   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   )rQ   r.   ÚcreateTestsr   rV   r   rW   )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--quietrR   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`   )Úfailfastra   )ÚcatchÚ
catchbreakrb   Fé*   z-%sr   z--%sT)r'   )r.   ZhasInstallHandlerÚsetattrr    ÚassertIsÚgetattrr   Zcaptured_stderrrL   rM   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 )zTest the warnings argumentc               @   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#   rn   r
   r
   r   ÚrunTestsè   r%   z8TestCommandLineArgs.testWarning.<locals>.FakeTP.runTestsN)r   r   r   r    ro   r
   r
   r
   r   ÚFakeTPæ   s   rp   NÚdefaultÚignore)ÚwarningsZ	somevalue)r   r   r>   Úwarnoptionsr   rs   )r   rp   rt   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*   ra   r`   rs   F)r*   ra   r`   rU   rs   r   )r.   r   r(   r*   ra   r`   rs   ro   r   rV   r   rf   r   rZ   )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(   rV   ro   ZassertIsNoner   r   rf   r   rZ   )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--localsTFrR   )r`   ra   rU   r*   rs   )r.   r   r(   r    r   rU   ro   rV   )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*   ra   r`   r   )r.   r   rW   r(   r*   ra   r`   r   ro   r   rV   rf   r   rZ   )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>   Úmodulesrz   r,   r}   r.   rc   r   r(   ro   r   )r   r|   r~   r.   r
   )r5   r{   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
   )r{   r
   r   r|   S  s    z2TestCommandLineArgs._patch_isfile.<locals>.restore)r   r   r   r,   )r   r7   Úexistsr   r|   r
   )r7   r{   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>rR   )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>rR   )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   )Ústdoutrk   Úcwd)Ú
subprocessÚPopenr>   Ú
executableZDEVNULLÚPIPEr   r   r   r   ZcommunicateÚdecode)r#   ÚpÚ_rk   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_   rm   ru   rv   rw   rx   ry   r€   rƒ   rˆ   r‰   rŠ   r   r‘   r’   rŸ   r
   r
   r
   r   r[   ¥   s"   (


	r[   rS   )rH   r   r>   r•   r   r   r   Zunittest.testrP   r   r   rQ   r+   rZ   r   r[   r   rF   r
   r
   r
   r   Ú<module>   s   z  