B
    18™\—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   ú]/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/distutils/tests/test_dist.pyÚinitialize_options   s    ztest_dist.initialize_optionsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú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   Ú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+   Ú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 )
NÚ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)Úinstall_baseÚinstall_platbaseÚinstall_libZinstall_platlibZinstall_purelibÚinstall_headersÚinstall_scriptsÚinstall_datar5   Úexec_prefixÚhomeÚuserÚrootz/b)r    r!   r)   Ú
addCleanupÚosÚunlinkr   ÚopenÚprintÚformatr   ÚpatchÚmultipler'   r*   ÚsortedÚcommand_optionsÚgetÚkeysÚitemsÚassertNotIn)	r   ZfakepathÚfÚvaluesr&   Ú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(   r3   z[global])r4   z!command_packages = foo.bar, splatzdistutils.commandzfoo.barZsplatz--command-packagesZsporkr   Ú )r    r!   r)   rA   rB   rC   r   rD   rE   Úcloser'   r*   r+   )r   rO   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ÚxxxÚxxxx)ÚauthorÚnameÚversionÚurlÚoptions)Úattrsr   rb   )	rA   ÚsetattrÚwarningsr[   r   r*   ÚlenrN   Údir)r   rZ   Údistr   )rY   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)rc   ÚoneÚtwozfoo bar)r   Úfinalize_optionsr*   Úmetadatark   rj   )r   rc   rh   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,tworl   rm   )r   r*   Úcommand_packagesr+   )r   rh   Ú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Ú
ValueErrorÚannounce)r   rh   Ú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.cfgr3   z[distutils]
c                s   ˆ S )Nr   )Úpath)Ú	temp_homer   r   Ú	_expanderî   s    zFDistributionTestCase.test_find_config_files_disable.<locals>._expanderÚscript_argsz--no-user-cfg)rc   r   )ÚmkdtemprB   r_   r}   ÚjoinrD   ÚwriteÚ
expanduserr   r   r*   rf   )r   Úuser_filenamerO   r   Zold_expanderr&   Z	all_filesÚfilesr   )r~   r   Útest_find_config_files_disableã   s     

z3DistributionTestCase.test_find_config_files_disable)r   )r   r   r   r   r#   r'   r,   r1   rT   rW   ri   rp   rs   r{   r‡   Ú__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   r‰   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   r‰   r#   )r   )r"   r   r   r#     s    zMetadataTestCase.tearDownc             C   s   t  ¡ }|j |¡ | ¡ S )N)ÚioÚStringIOro   Úwrite_pkg_fileÚgetvalue)r   rh   Ú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)r_   r`   zMetadata-Version: 1.0z	provides:z	requires:z
obsoletes:)r   r   ÚassertInrN   Úlower)r   rc   rh   Ú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 )Nr   z1.0zpackage.sub)r_   r`   ÚprovideszMetadata-Version: 1.1z	requires:z
obsoletes:)r   r*   ro   Úget_providesr   r‘   rN   r’   )r   rc   rh   r“   r   r   r   Útest_provides  s    



zMetadataTestCase.test_providesc             C   s   |   ttdddgdœ¡ d S )Nr   z1.0zmy.pkg (splat))r_   r`   r•   )rv   rw   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 )Nr   z1.0Úotherzanother (==1.0))r_   r`   ÚrequireszMetadata-Version: 1.1z	provides:zRequires: otherzRequires: another (==1.0)z
obsoletes:)r   r*   ro   Úget_requiresr   r‘   rN   r’   )r   rc   rh   r“   r   r   r   Útest_requires.  s    



zMetadataTestCase.test_requiresc             C   s   |   ttdddgdœ¡ d S )Nr   z1.0zmy.pkg (splat))r_   r`   rš   )rv   rw   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 )Nr   r™   )r_   rš   )Úiterr   r/   ro   rš   Úlist)r   rc   rh   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 )Nr   z1.0r™   zanother (<1.0))r_   r`   Ú	obsoleteszMetadata-Version: 1.1z	provides:z	requires:zObsoletes: otherzObsoletes: another (<1.0))r   r*   ro   Úget_obsoletesr   r‘   rN   r’   )r   rc   rh   r“   r   r   r   Útest_obsoletesK  s    



zMetadataTestCase.test_obsoletesc             C   s   |   ttdddgdœ¡ d S )Nr   z1.0zmy.pkg (splat))r_   r`   r¡   )rv   rw   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 )Nr   r™   )r_   r¡   )rž   r   r/   ro   r¡   rŸ   )r   rc   rh   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)r_   r`   ÚclassifierszMetadata-Version: 1.1)r   r*   Úget_classifiersr   r‘   )r   rc   rh   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)r_   r`   r§   zshould be a listr§   )	r	   r   r‘   r   r/   ro   r§   rŸ   r*   )r   rc   Ú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)r_   r`   rj   )r   r*   Úget_keywords)r   rc   rh   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)r_   r`   rj   zshould be a listrj   )	r	   r   r‘   r   r/   ro   rj   rŸ   r*   )r   rc   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)r_   r`   rk   )r   r*   Úget_platforms)r   rc   rh   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)r_   r`   rk   zshould be a listrk   )	r	   r   r‘   r   r/   ro   rk   rŸ   r*   )r   rc   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)r_   r`   Údownload_urlzMetadata-Version: 1.1)r   r   r‘   )r   rc   rh   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.r   z1.0)r_   r`   Úlong_descriptionz	
        Ú
)ÚtextwrapÚdedentr   r   Úreplacer‘   )r   Ú	long_descrc   rh   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 )
Nr|   z.pydistutils.cfgzpydistutils.cfgr3   Ú.)ÚlinuxÚdarwinÚHOMEÚwin32z%r not found in %r)rB   r_   r   r}   r‚   rD   rƒ   rV   r   r    ÚplatformÚenvironr   r‘   Úremove)r   r…   Útemp_dirrO   rh   r†   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 )rU   )Ústrip)Ú.0Úliner   r   r   ú
<listcomp>é  s    z3MetadataTestCase.test_show_help.<locals>.<listcomp>r¸   )rA   r   Úset_thresholdÚ_global_logÚ	thresholdr   r    r!   ÚhelpÚscript_namer   r%   r   ÚsplitÚ
assertTrue)r   rh   Ú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 )Nr   z1.0Údescr\   zhttp://example.comrl   rm   Úfoo)r_   r`   r·   Údescriptionrµ   rj   rš   r   ÚUNKNOWN)r   ro   rŠ   r‹   rŒ   ÚseekÚread_pkg_filer*   r_   r`   rß   rµ   rj   rk   r¡   rš   )r   rc   rh   ro   ZPKG_INFOr   r   r   Útest_read_metadataî  s*    



z#MetadataTestCase.test_read_metadata)r   r   r   r   r#   r   r”   r—   r˜   rœ   r   r    r£   r¤   r¥   r©   r«   r°   r±   r³   r´   r¶   r½   rÇ   rÎ   rÜ   rã   rˆ   r   r   )r"   r   r‰   ÿ   s0   
	#r‰   c              C   s,   t  ¡ } |  t  t¡¡ |  t  t¡¡ | S )N)ÚunittestÚ	TestSuiteÚaddTestÚ	makeSuiter   r‰   )Úsuiter   r   r   Ú
test_suite	  s    ré   Ú__main__)!r   rB   rŠ   r    rä   re   r¹   r   Údistutils.distr   r   r   Údistutils.cmdr   Ztest.supportr   r   r	   r
   Údistutils.testsr   Ú	distutilsr   r   r   ÚLoggingSilencerÚTempdirManagerÚEnvironGuardÚTestCaser   r‰   ré   r   r   r   r   r   Ú<module>   s4    Q  
