a
    Tÿdˆ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
 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)Ú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.9/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 r   )Ú_config_filesr   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Úargvr   ©Ú	__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   ÚtearDownr   r"   r   r   r%   6   s    zDistributionTestCase.tearDownr   c                 C   s    t ƒ }||_| ¡  | ¡  |S r   )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Úbuildú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   s`   ddl m} tj g d¢¡ |  ¡ }|  | ¡ g d¢¡ | d¡}|  	||¡ |  |j
d¡ d S )Nr   )r   )ú--command-packageszfoo.bar,distutils.testsr   z
-Ssometext)r*   úfoo.barzdistutils.testsr   Z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   sx  t j d¡ |  tjt¡ d}ttdƒ"}td 	|¡|d W d   ƒ n1 sP0    Y  t
jjt ddd}|  tg¡}W d   ƒ n1 sŽ0    Y  t|f}|||||||||||||dœ}|  t|j d¡ ¡ ƒt| ¡ ƒ¡ |j d¡ ¡ D ]\}}|  ||| ¡ qôt
jjt dd	d}|  tg¡}W d   ƒ n1 sD0    Y  | ¡ D ]}|  ||j di ¡¡ qVd 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_datar8   Ú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   sH    óó$*ó
þ,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 | 	¡  n
| 	¡  0 |  
tg¡}|  | ¡ g d¢¡ g d¢t jdd …< |  
tg¡}|  | ¡ d	d
g¡ g d¢t jdd …< |  
tg¡}|  | ¡ d	g¡ d S )Nr)   r5   z[global]r6   z!command_packages = foo.bar, splat)r*   r0   Zsplat)r/   Úsporkr)   r   r*   rN   )r/   Ú r)   )r    r!   r+   r>   r?   r@   r   rA   rB   Úcloser(   r,   r-   )r   rI   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 r   )r+   )Úmsg©Zwarnsr   r   Ú_warn±   s    z6DistributionTestCase.test_empty_options.<locals>._warnÚwarnÚxxxZxxxx)ZauthorÚnameÚversionZurlÚoptions©Úattrsr   rY   )	r>   ÚsetattrÚwarningsrU   r   r,   ÚlenrH   Údir)r   rT   Údistr   rS   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 )Núone,two)ÚkeywordsÚ	platformsrZ   ÚoneÚtwozfoo bar)r   Zfinalize_optionsr,   Úmetadatard   rc   ©r   r[   r`   r   r   r   Útest_finalize_options½   s    ÿ
ÿ
z*DistributionTestCase.test_finalize_optionsc                 C   s\   t ƒ }|  |jd ¡ | ¡ }|  |dg¡ |  |jdg¡ d|_| ¡ }|  |g d¢¡ d S )Nr*   rb   )r*   re   rf   )r   r,   Zcommand_packagesr-   )r   r`   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   r`   Ú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   ƒ n1 sZ0    Y  ‡ fdd„}tjj}|tj_z2tƒ }| 	¡ }tdd	gid
}| 	¡ }W |tj_n
|tj_0 |  
t|ƒd t|ƒ¡ d S )NÚposixú.pydistutils.cfgúpydistutils.cfgr5   z[distutils]
c                    s   ˆ S r   r   )Úpath©Z	temp_homer   r   Ú	_expanderî   s    zFDistributionTestCase.test_find_config_files_disable.<locals>._expanderZscript_argsz--no-user-cfgrZ   r   )Úmkdtempr?   rW   ru   ÚjoinrA   ÚwriteÚ
expanduserr   r   r,   r^   )r   Úuser_filenamerI   rw   Zold_expanderr'   Z	all_filesÚfilesr   rv   r   Útest_find_config_files_disableã   s     
(
z3DistributionTestCase.test_find_config_files_disable)r   )r   r   r   r   r%   r(   r.   r4   rM   rQ   ra   ri   rj   rq   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 r   )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 r$   )r!   r    r   r€   r%   r   r"   r   r   r%     s    zMetadataTestCase.tearDownc                 C   s   t  ¡ }|j |¡ | ¡ S r   )ÚioÚStringIOrg   Úwrite_pkg_fileÚgetvalue)r   r`   Zsior   r   r   Úformat_metadata  s    z MetadataTestCase.format_metadatac                 C   s\   dddœ}t |ƒ}|  |¡}|  d|¡ |  d| ¡ ¡ |  d| ¡ ¡ |  d| ¡ ¡ d S )NÚpackageú1.0)rW   rX   zMetadata-Version: 1.0ú	provides:ú	requires:ú
obsoletes:)r   r…   ÚassertInrH   Úlower©r   r[   r`   Ú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†   r‡   zpackage.sub©rW   rX   ZprovidesúMetadata-Version: 1.1r‰   rŠ   )r   r,   rg   Zget_providesr…   r‹   rH   rŒ   r   r   r   r   Útest_provides  s    þÿ
ÿ
zMetadataTestCase.test_providesc                 C   s   |   ttdddgdœ¡ d S )Nr†   r‡   úmy.pkg (splat)r   ©rm   rn   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†   r‡   Úotherzanother (==1.0)©rW   rX   Úrequiresr‘   rˆ   zRequires: otherzRequires: another (==1.0)rŠ   )r   r,   rg   Zget_requiresr…   r‹   rH   rŒ   r   r   r   r   Útest_requires.  s"    þÿ
ÿ
zMetadataTestCase.test_requiresc                 C   s   |   ttdddgdœ¡ d S )Nr†   r‡   r“   r—   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–   )rW   r˜   )Úiterr   r2   rg   r˜   Úlistrh   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†   r‡   r–   zanother (<1.0)©rW   rX   Ú	obsoletesr‘   rˆ   r‰   zObsoletes: otherzObsoletes: another (<1.0))r   r,   rg   Zget_obsoletesr…   r‹   rH   rŒ   r   r   r   r   Útest_obsoletesK  s"    þÿ
ÿ
zMetadataTestCase.test_obsoletesc                 C   s   |   ttdddgdœ¡ d S )Nr†   r‡   r“   rž   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–   )rW   rŸ   )r›   r   r2   rg   rŸ   rœ   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ÚBoaú3.0ú#Programming Language :: Python :: 3©rW   rX   Úclassifiersr‘   )r   r,   Zget_classifiersr…   r‹   r   r   r   r   Útest_classifierg  s    ÿ
ÿ
z MetadataTestCase.test_classifierc                 C   sv   ddddœ}t ƒ }t|ƒ}W d   ƒ n1 s00    Y  |  d| ¡ ¡ |  |jjt¡ |  |jjt|d ƒ¡ d S )Nr£   r¤   )r¥   r¦   úshould be a listr§   )	r   r   r‹   r„   r2   rg   r§   rœ   r,   ©r   r[   Úerrorr'   r   r   r   Útest_classifier_invalid_typep  s    ÿ&

ÿz-MetadataTestCase.test_classifier_invalid_typec                 C   s0   ddg d¢dœ}t |ƒ}|  | ¡ g d¢¡ d S )NÚMontyr‡   ©ZspamZeggszlife of brian©rW   rX   rc   )r   r,   Zget_keywordsrh   r   r   r   Útest_keywords|  s    ÿ
ÿzMetadataTestCase.test_keywordsc                 C   sv   ddddœ}t ƒ }t|ƒ}W d   ƒ n1 s00    Y  |  d| ¡ ¡ |  |jjt¡ |  |jjt|d ƒ¡ d S )Nr­   r‡   r®   r¯   r©   rc   )	r   r   r‹   r„   r2   rg   rc   rœ   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­   r‡   ú	GNU/LinuxúSome Evil Platform©rW   rX   rd   )r   r,   Zget_platformsrh   r   r   r   Útest_platformsŽ  s    ÿ
ÿzMetadataTestCase.test_platformsc                 C   sv   ddddœ}t ƒ }t|ƒ}W d   ƒ n1 s00    Y  |  d| ¡ ¡ |  |jjt¡ |  |jjt|d ƒ¡ d S )Nr­   r‡   )r²   r³   r´   r©   rd   )	r   r   r‹   r„   r2   rg   rd   rœ   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£   r¤   zhttp://example.org/boa)rW   rX   Údownload_urlr‘   )r   r…   r‹   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†   r‡   )rW   rX   Úlong_descriptionz	
        Ú
)ÚtextwrapÚdedentr   r…   Úreplacer‹   )r   Z	long_descr[   r`   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 | ¡  n
| ¡  0 zntƒ }t	j
dv r†|t jd< | ¡ }|  ||¡ t	j
dkr¸|t jd	< | ¡ }|  ||d
||f ¡ W t  |¡ nt  |¡ 0 d S )Nrr   rs   rt   r5   Ú.)ZlinuxÚdarwinÚHOMEZwin32ZUSERPROFILEz%r not found in %r)r?   rW   rx   ru   ry   rA   rz   rP   r   r    ÚplatformÚenvironr   r‹   Úremove)r   r|   Ztemp_dirrI   r`   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   s~   |   tjtjj¡ tƒ }g t_d|_d|_	t
ƒ }| ¡  W d   ƒ n1 sN0    Y  dd„ | ¡  d¡D ƒ}|  |¡ d S )Nr   zsetup.pyc                 S   s   g | ]}|  ¡ d kr|‘qS )rO   )Ústrip)Ú.0Úliner   r   r   Ú
<listcomp>é  s   ÿz3MetadataTestCase.test_show_help.<locals>.<listcomp>rº   )r>   r   Zset_thresholdZ_global_logZ	thresholdr   r    r!   ÚhelpÚscript_namer   r&   r„   ÚsplitZ
assertTrue)r   r`   Ú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†   r‡   ZdescrV   zhttp://example.comre   rf   Zfoo)rW   rX   r¹   Údescriptionr·   rc   r˜   r   ZUNKNOWN)r   rg   r   r‚   rƒ   ÚseekZread_pkg_filer,   rW   rX   r×   r·   rc   rd   rŸ   r˜   )r   r[   r`   rg   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 r   )ÚunittestZ	TestSuiteZaddTestZ	makeSuiter   r€   )Zsuiter   r   r   Ú
test_suite	  s    rÛ   Ú__main__) r   r?   r   r    rÚ   r]   r»   r   Zdistutils.distr   r   Zdistutils.cmdr   Ztest.supportr   r   r   r	   Zdistutils.testsr
   Z	distutilsr   r   r   ZLoggingSilencerZTempdirManagerZEnvironGuardZTestCaser   r€   rÛ   r   r   r   r   r   Ú<module>   s8   ý Tÿ  