B
    È S]—J  ã               @   s  d Z ddlZddl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	m
Z
mZ ddlmZ ddlmZmZmZmZ ddlmZ ddlmZ G d	d
„ d
eƒZG dd„ de	ƒZG dd„ dejejejejƒZG dd„ dejejejƒZdd„ Ze dkreeƒ ƒ dS )zTests for distutils.dist.é    N)Úmock)ÚDistributionÚfix_help_optionsÚDistributionMetadata)ÚCommand)ÚTESTFNÚcaptured_stdoutÚcaptured_stderrÚrun_unittest)Úsupport)Úlogc               @   s   e Zd ZdZdgZdd„ ZdS )Ú	test_distz#Sample distutils extension command.)zsample-option=ÚSz	help textc             C   s
   d | _ d S )N)Úsample_option)Úself© r   ú*lib/python3.7/distutils/tests/test_dist.pyÚinitialize_options   s    ztest_dist.initialize_optionsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Zuser_optionsr   r   r   r   r   r      s   r   c               @   s   e Zd ZdZdd„ ZdS )ÚTestDistributionz²Distribution subclasses that avoids the default search for
    configuration files.

    The ._config_files attribute must be set before
    .parse_config_files() is called.
    c             C   s   | j S )N)Ú_config_files)r   r   r   r   Úfind_config_files(   s    z"TestDistribution.find_config_filesN)r   r   r   r   r   r   r   r   r   r       s   r   c                   sz   e Zd Z‡ fdd„Z‡ f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d„ Zdd„ Z‡  ZS )ÚDistributionTestCasec                s4   t t| ƒ ¡  tjtjd d … f| _tjdd …= d S )Né   )Úsuperr   ÚsetUpÚsysÚargv)r   )Ú	__class__r   r   r   1   s    zDistributionTestCase.setUpc                s2   | j d t_ | j d tj d d …< tt| ƒ ¡  d S )Nr   r   )r    r   r   r   ÚtearDown)r   )r!   r   r   r"   6   s    zDistributionTestCase.tearDownr   c             C   s    t ƒ }||_| ¡  | ¡  |S )N)r   r   Zparse_config_filesÚparse_command_line)r   ZconfigfilesÚdr   r   r   Úcreate_distribution;   s
    z(DistributionTestCase.create_distributionc             C   s*   t j d¡ |  ¡ }|  | ¡ dg¡ d S )NÚbuildzdistutils.command)r   r    Úappendr%   ÚassertEqualÚget_command_packages)r   r$   r   r   r   Ú!test_command_packages_unspecifiedB   s    z6DistributionTestCase.test_command_packages_unspecifiedc             C   sf   ddl m} tj ddddg¡ |  ¡ }|  | ¡ ddd	g¡ | d¡}|  	||¡ |  |j
d
¡ d S )Nr   )r   z--command-packageszfoo.bar,distutils.testsr   z
-Ssometextzdistutils.commandzfoo.barzdistutils.testsZsometext)Zdistutils.tests.test_distr   r   r    Úextendr%   r(   r)   Zget_command_objÚassertIsInstancer   )r   r   r$   Úcmdr   r   r   Útest_command_packages_cmdlineG   s    

z2DistributionTestCase.test_command_packages_cmdlinec       	      C   sB  t j d¡ |  tjt¡ d}ttdƒ}td 	|¡|d W d Q R X t
jjt ddd}|  tg¡}W d Q R X t|f}|||||||||||||dœ}|  t|j d¡ ¡ ƒt| ¡ ƒ¡ x,|j d¡ ¡ D ]\}}|  ||| ¡ qÎW t
jjt dd	d}|  tg¡}W d Q R X x(| ¡ D ]}|  ||j di ¡¡ qW d S )
NZinstallz/somedirÚwzð[install]
install-base = {0}
install-platbase = {0}
install-lib = {0}
install-platlib = {0}
install-purelib = {0}
install-headers = {0}
install-scripts = {0}
install-data = {0}
prefix = {0}
exec-prefix = {0}
home = {0}
user = {0}
root = {0})Úfilez/a)ÚprefixÚbase_prefix)Zinstall_baseZinstall_platbaseZinstall_libZinstall_platlibZinstall_purelibZinstall_headersZinstall_scriptsZinstall_datar1   Úexec_prefixÚhomeÚuserÚrootz/b)r   r    r'   Ú
addCleanupÚosÚunlinkr   ÚopenÚprintÚformatr   ZpatchZmultipler%   r(   ÚsortedZcommand_optionsÚgetÚkeysÚitemsÚassertNotIn)	r   ZfakepathÚfÚvaluesr$   Zoption_tupleZresult_dictÚkeyÚvaluer   r   r   Útest_venv_install_optionsV   s>    z.DistributionTestCase.test_venv_install_optionsc             C   sØ   t j d¡ |  tjt¡ ttdƒ}ztd|d td|d W d | 	¡  X |  
tg¡}|  | ¡ dddg¡ d	d
dgt jdd …< |  
tg¡}|  | ¡ dd
g¡ d	ddgt jdd …< |  
tg¡}|  | ¡ dg¡ d S )Nr&   r/   z[global])r0   z!command_packages = foo.bar, splatzdistutils.commandzfoo.barZsplatz--command-packagesZsporkr   Ú )r   r    r'   r7   r8   r9   r   r:   r;   Úcloser%   r(   r)   )r   rB   r$   r   r   r   Ú test_command_packages_configfile   s"    




z5DistributionTestCase.test_command_packages_configfilec                sb   g ‰ ‡ fdd„}|   ttdtj¡ |t_tddddi dœd}|  tˆ ƒd¡ |  d	t|ƒ¡ d S )
Nc                s   ˆ   | ¡ d S )N)r'   )Úmsg)Úwarnsr   r   Ú_warn±   s    z6DistributionTestCase.test_empty_options.<locals>._warnÚwarnÚxxxZxxxx)ZauthorÚnameÚversionZurlÚoptions)Úattrsr   rQ   )	r7   ÚsetattrÚwarningsrM   r   r(   ÚlenrA   Údir)r   rL   Údistr   )rK   r   Útest_empty_optionsª   s    z'DistributionTestCase.test_empty_optionsc             C   sˆ   dddœ}t |d}| ¡  |  |jjddg¡ |  |jjddg¡ dddœ}t |d}| ¡  |  |jjdg¡ |  |jjdg¡ d S )Nzone,two)ÚkeywordsÚ	platforms)rR   ÚoneÚtwozfoo bar)r   Zfinalize_optionsr(   ÚmetadatarZ   rY   )r   rR   rW   r   r   r   Útest_finalize_options½   s    

z*DistributionTestCase.test_finalize_optionsc             C   s^   t ƒ }|  |jd ¡ | ¡ }|  |dg¡ |  |jdg¡ d|_| ¡ }|  |dddg¡ d S )Nzdistutils.commandzone,twor[   r\   )r   r(   Zcommand_packagesr)   )r   rW   Zcmdsr   r   r   Útest_get_command_packagesÏ   s    z.DistributionTestCase.test_get_command_packagesc             C   s(   t ƒ }d}ddi}|  t|j||¡ d S )N)ÚokÚlevelZok2)r   ÚassertRaisesÚ
ValueErrorZannounce)r   rW   ÚargsÚkwargsr   r   r   Útest_announceÛ   s    z"DistributionTestCase.test_announcec          	      s¾   |   ¡ ‰ tjdkr"tj ˆ d¡}ntj ˆ d¡}t|dƒ}| d¡ W d Q R X ‡ fdd„}tjj}|tj_z*tƒ }| 	¡ }tdd	gid
}| 	¡ }W d |tj_X |  
t|ƒd t|ƒ¡ d S )NÚposixz.pydistutils.cfgzpydistutils.cfgr/   z[distutils]
c                s   ˆ S )Nr   )Úpath)Ú	temp_homer   r   Ú	_expanderî   s    zFDistributionTestCase.test_find_config_files_disable.<locals>._expanderZscript_argsz--no-user-cfg)rR   r   )Úmkdtempr8   rO   rh   Újoinr:   ÚwriteÚ
expanduserr   r   r(   rU   )r   Úuser_filenamerB   rj   Zold_expanderr$   Z	all_filesÚfilesr   )ri   r   Útest_find_config_files_disableã   s     

z3DistributionTestCase.test_find_config_files_disable)r   )r   r   r   r   r"   r%   r*   r.   rF   rI   rX   r^   r_   rf   rq   Ú__classcell__r   r   )r!   r   r   ,   s   
:r   c                   sØ   e Zd Z‡ fdd„Z‡ f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‡  ZS )1ÚMetadataTestCasec                s(   t t| ƒ ¡  tjtjd d … f| _d S )N)r   rs   r   r   r    )r   )r!   r   r   r     s    zMetadataTestCase.setUpc                s2   | j d t_ | j d tj d d …< tt| ƒ ¡  d S )Nr   r   )r    r   r   rs   r"   )r   )r!   r   r   r"     s    zMetadataTestCase.tearDownc             C   s   t  ¡ }|j |¡ | ¡ S )N)ÚioÚStringIOr]   Úwrite_pkg_fileÚgetvalue)r   rW   Zsior   r   r   Úformat_metadata  s    z MetadataTestCase.format_metadatac             C   s\   dddœ}t |ƒ}|  |¡}|  d|¡ |  d| ¡ ¡ |  d| ¡ ¡ |  d| ¡ ¡ d S )NÚpackagez1.0)rO   rP   zMetadata-Version: 1.0z	provides:z	requires:z
obsoletes:)r   rx   ÚassertInrA   Úlower)r   rR   rW   Úmetar   r   r   Útest_simple_metadata  s    
z%MetadataTestCase.test_simple_metadatac             C   s|   ddddgdœ}t |ƒ}|  |j ¡ ddg¡ |  | ¡ ddg¡ |  |¡}|  d|¡ |  d| ¡ ¡ |  d| ¡ ¡ d S )Nry   z1.0zpackage.sub)rO   rP   ÚprovideszMetadata-Version: 1.1z	requires:z
obsoletes:)r   r(   r]   Zget_providesrx   rz   rA   r{   )r   rR   rW   r|   r   r   r   Útest_provides  s    



zMetadataTestCase.test_providesc             C   s   |   ttdddgdœ¡ d S )Nry   z1.0zmy.pkg (splat))rO   rP   r~   )rb   rc   r   )r   r   r   r   Útest_provides_illegal(  s    z&MetadataTestCase.test_provides_illegalc             C   s”   ddddgdœ}t |ƒ}|  |j ¡ ddg¡ |  | ¡ ddg¡ |  |¡}|  d|¡ |  d| ¡ ¡ |  d|¡ |  d	|¡ |  d
| ¡ ¡ d S )Nry   z1.0Úotherzanother (==1.0))rO   rP   ÚrequireszMetadata-Version: 1.1z	provides:zRequires: otherzRequires: another (==1.0)z
obsoletes:)r   r(   r]   Zget_requiresrx   rz   rA   r{   )r   rR   rW   r|   r   r   r   Útest_requires.  s    



zMetadataTestCase.test_requiresc             C   s   |   ttdddgdœ¡ d S )Nry   z1.0zmy.pkg (splat))rO   rP   r‚   )rb   rc   r   )r   r   r   r   Útest_requires_illegal>  s    z&MetadataTestCase.test_requires_illegalc             C   s,   dt dgƒdœ}t|ƒ}|  |jjt¡ d S )Nry   r   )rO   r‚   )Úiterr   r,   r]   r‚   Úlist)r   rR   rW   r   r   r   Útest_requires_to_listD  s    z&MetadataTestCase.test_requires_to_listc             C   s”   ddddgdœ}t |ƒ}|  |j ¡ ddg¡ |  | ¡ ddg¡ |  |¡}|  d|¡ |  d| ¡ ¡ |  d| ¡ ¡ |  d	|¡ |  d
|¡ d S )Nry   z1.0r   zanother (<1.0))rO   rP   Ú	obsoleteszMetadata-Version: 1.1z	provides:z	requires:zObsoletes: otherzObsoletes: another (<1.0))r   r(   r]   Zget_obsoletesrx   rz   rA   r{   )r   rR   rW   r|   r   r   r   Útest_obsoletesK  s    



zMetadataTestCase.test_obsoletesc             C   s   |   ttdddgdœ¡ d S )Nry   z1.0zmy.pkg (splat))rO   rP   rˆ   )rb   rc   r   )r   r   r   r   Útest_obsoletes_illegal[  s    z'MetadataTestCase.test_obsoletes_illegalc             C   s,   dt dgƒdœ}t|ƒ}|  |jjt¡ d S )Nry   r   )rO   rˆ   )r…   r   r,   r]   rˆ   r†   )r   rR   rW   r   r   r   Útest_obsoletes_to_lista  s    z'MetadataTestCase.test_obsoletes_to_listc             C   sB   dddgdœ}t |ƒ}|  | ¡ dg¡ |  |¡}|  d|¡ d S )NÚBoaz3.0z#Programming Language :: Python :: 3)rO   rP   ÚclassifierszMetadata-Version: 1.1)r   r(   Zget_classifiersrx   rz   )r   rR   rW   r|   r   r   r   Útest_classifierg  s    


z MetadataTestCase.test_classifierc          	   C   sb   ddddœ}t ƒ }t|ƒ}W d Q R X |  d| ¡ ¡ |  |jjt¡ |  |jjt|d ƒ¡ d S )NrŒ   z3.0)z#Programming Language :: Python :: 3)rO   rP   r   zshould be a listr   )	r	   r   rz   rw   r,   r]   r   r†   r(   )r   rR   Úerrorr$   r   r   r   Útest_classifier_invalid_typep  s    
z-MetadataTestCase.test_classifier_invalid_typec             C   s4   dddddgdœ}t |ƒ}|  | ¡ dddg¡ d S )NÚMontyz1.0ÚspamÚeggszlife of brian)rO   rP   rY   )r   r(   Zget_keywords)r   rR   rW   r   r   r   Útest_keywords|  s
    
zMetadataTestCase.test_keywordsc          	   C   sb   ddddœ}t ƒ }t|ƒ}W d Q R X |  d| ¡ ¡ |  |jjt¡ |  |jjt|d ƒ¡ d S )Nr‘   z1.0)r’   r“   zlife of brian)rO   rP   rY   zshould be a listrY   )	r	   r   rz   rw   r,   r]   rY   r†   r(   )r   rR   r   r$   r   r   r   Útest_keywords_invalid_typeƒ  s    z+MetadataTestCase.test_keywords_invalid_typec             C   s0   ddddgdœ}t |ƒ}|  | ¡ ddg¡ d S )Nr‘   z1.0z	GNU/LinuxzSome Evil Platform)rO   rP   rZ   )r   r(   Zget_platforms)r   rR   rW   r   r   r   Útest_platformsŽ  s
    
zMetadataTestCase.test_platformsc          	   C   sb   ddddœ}t ƒ }t|ƒ}W d Q R X |  d| ¡ ¡ |  |jjt¡ |  |jjt|d ƒ¡ d S )Nr‘   z1.0)z	GNU/LinuxzSome Evil Platform)rO   rP   rZ   zshould be a listrZ   )	r	   r   rz   rw   r,   r]   rZ   r†   r(   )r   rR   r   r$   r   r   r   Útest_platforms_invalid_types•  s    z-MetadataTestCase.test_platforms_invalid_typesc             C   s.   ddddœ}t |ƒ}|  |¡}|  d|¡ d S )NrŒ   z3.0zhttp://example.org/boa)rO   rP   Údownload_urlzMetadata-Version: 1.1)r   rx   rz   )r   rR   rW   r|   r   r   r   Útest_download_url   s
    
z"MetadataTestCase.test_download_urlc             C   sD   t  d¡}dd|dœ}t|ƒ}|  |¡}| dd¡}|  ||¡ d S )Nzc        example::
              We start here
            and continue here
          and end here.ry   z1.0)rO   rP   Úlong_descriptionz	
        Ú
)ÚtextwrapÚdedentr   rx   Úreplacerz   )r   Z	long_descrR   rW   r|   r   r   r   Útest_long_description§  s    
z&MetadataTestCase.test_long_descriptionc          	   C   sÄ   t jdkrd}nd}|  ¡ }t j ||¡}t|dƒ}z| d¡ W d | ¡  X zdtƒ }t	j
dkr~|t jd< | ¡ }|  ||¡ t	j
dkr°|t jd< | ¡ }|  ||d	||f ¡ W d t  |¡ X d S )
Nrg   z.pydistutils.cfgzpydistutils.cfgr/   Ú.)ZlinuxÚdarwinÚHOMEZwin32z%r not found in %r)r8   rO   rk   rh   rl   r:   rm   rH   r   r   ÚplatformÚenvironr   rz   Úremove)r   ro   Ztemp_dirrB   rW   rp   r   r   r   Útest_custom_pydistutils¶  s*    






z(MetadataTestCase.test_custom_pydistutilsc             C   s4   ddg}t |ƒ}|  |d d¡ |  |d d¡ d S )N)ÚaÚbÚcr$   )r   é   é   é   r   )r§   r¨   r©   r   )r   rª   r«   )r   r(   )r   Zhelp_tuplesZfancy_optionsr   r   r   Útest_fix_help_optionsÙ  s    z&MetadataTestCase.test_fix_help_optionsc          	   C   sj   |   tjtjj¡ tƒ }g t_d|_d|_	t
ƒ }| ¡  W d Q R X dd„ | ¡  d¡D ƒ}|  |¡ d S )Nr   zsetup.pyc             S   s   g | ]}|  ¡ d kr|‘qS )rG   )Ústrip)Ú.0Úliner   r   r   ú
<listcomp>é  s    z3MetadataTestCase.test_show_help.<locals>.<listcomp>r›   )r7   r   Zset_thresholdZ_global_logZ	thresholdr   r   r    ÚhelpÚscript_namer   r#   rw   ÚsplitZ
assertTrue)r   rW   ÚsÚoutputr   r   r   Útest_show_helpß  s    zMetadataTestCase.test_show_helpc             C   sÊ   dddddddgdgd	œ}t |ƒ}|j}t ¡ }| |¡ | d
¡ | |¡ |  |jd¡ |  |j	d¡ |  |j
d¡ |  |jd¡ |  |jddg¡ |  |jdg¡ |  |jd ¡ |  |jdg¡ d S )Nry   z1.0ZdescrN   zhttp://example.comr[   r\   Zfoo)rO   rP   rš   Údescriptionr˜   rY   r‚   r   ZUNKNOWN)r   r]   rt   ru   rv   ÚseekZread_pkg_filer(   rO   rP   r¸   r˜   rY   rZ   rˆ   r‚   )r   rR   rW   r]   ZPKG_INFOr   r   r   Útest_read_metadataî  s*    



z#MetadataTestCase.test_read_metadata)r   r   r   r   r"   rx   r}   r   r€   rƒ   r„   r‡   r‰   rŠ   r‹   rŽ   r   r”   r•   r–   r—   r™   rŸ   r¦   r­   r·   rº   rr   r   r   )r!   r   rs   ÿ   s0   
	#rs   c              C   s,   t  ¡ } |  t  t¡¡ |  t  t¡¡ | S )N)ÚunittestZ	TestSuiteZaddTestZ	makeSuiter   rs   )Zsuiter   r   r   Ú
test_suite	  s    r¼   Ú__main__)!r   r8   rt   r   r»   rT   rœ   r   Zdistutils.distr   r   r   Zdistutils.cmdr   Ztest.supportr   r   r	   r
   Zdistutils.testsr   Z	distutilsr   r   r   ZLoggingSilencerZTempdirManagerZEnvironGuardZTestCaser   rs   r¼   r   r   r   r   r   Ú<module>   s4    Q  
