a
    åzeˆJ  ã                   @   sþ   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 )é    N)Úmock)ÚDistributionÚfix_help_options)ÚCommand)ÚTESTFNÚcaptured_stdoutÚcaptured_stderrÚrun_unittest)Úsupport)Úlogc                   @   s   e Zd ZdgZdd„ ZdS )Ú	test_dist)zsample-option=ÚSz	help textc                 C   s
   d | _ d S ©N)Úsample_option©Úself© r   ú//usr/lib/python3.9/distutils/tests/test_dist.pyÚinitialize_options   s    ztest_dist.initialize_optionsN)Ú__name__Ú
__module__Ú__qualname__Zuser_optionsr   r   r   r   r   r      s   ÿr   c                   @   s   e Zd Zdd„ ZdS )ÚTestDistributionc                 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       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 )
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)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&   Ú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)   r/   Zsplat)r.   Úsporkr(   r   r)   rO   )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ÚversionÚurlÚoptions©Úattrsr   r[   )	r>   ÚsetattrÚwarningsrV   r   r+   ÚlenrH   Údir)r   rU   Údistr   rT   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Ú	platformsr\   ÚoneÚtwozfoo bar)r   Zfinalize_optionsr+   Úmetadatarf   re   ©r   r]   rb   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)   rd   )r)   rg   rh   )r   r+   Zcommand_packagesr,   )r   rb   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   rb   Ú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-cfgr\   r   )Úmkdtempr?   rX   rw   ÚjoinrA   ÚwriteÚ
expanduserr   r   r+   r`   )r   Úuser_filenamerI   ry   Zold_expanderr&   Z	all_filesÚfilesr   rx   r   Útest_find_config_files_disableã   s     
(
z3DistributionTestCase.test_find_config_files_disable)r   )r   r   r   r   r$   r'   r-   r3   rN   rR   rc   rk   rl   rs   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ÚStringIOri   Úwrite_pkg_fileÚgetvalue)r   rb   Ú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)rX   rY   zMetadata-Version: 1.0ú	provides:ú	requires:ú
obsoletes:)r   rˆ   ÚassertInrH   Úlower©r   r]   rb   Ú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©rX   rY   ZprovidesúMetadata-Version: 1.1rŒ   r   )r   r+   ri   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“   ©ro   rp   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)©rX   rY   Úrequiresr”   r‹   zRequires: otherzRequires: another (==1.0)r   )r   r+   ri   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™   )rX   r›   )Úiterr   r1   ri   r›   Úlistrj   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)©rX   rY   Ú	obsoletesr”   r‹   rŒ   zObsoletes: otherzObsoletes: another (<1.0))r   r+   ri   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™   )rX   r¢   )rž   r   r1   ri   r¢   rŸ   rj   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©rX   rY   Ú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†   r1   ri   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©rX   rY   re   )r   r+   Zget_keywordsrj   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¬   re   )	r   r   rŽ   r†   r1   ri   re   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©rX   rY   rf   )r   r+   Zget_platformsrj   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¬   rf   )	r   r   rŽ   r†   r1   ri   rf   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)rX   rY   Ú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Š   )rX   rY   Úlong_descriptionz	
        Ú
)ÚtextwrapÚdedentr   rˆ   ÚreplacerŽ   )r   Z	long_descr]   rb   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 )Nrt   ru   rv   r5   Ú.)ÚlinuxÚdarwinÚHOMEÚwin32ÚUSERPROFILEz%r not found in %r)r?   rX   rz   rw   r{   rA   r|   rQ   r   r   ÚplatformÚenvironr   rŽ   Úremove)r   r~   Ztemp_dirrI   rb   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 )rP   )Ústrip)Ú.0Úliner   r   r   Ú
<listcomp>é  s   ÿz3MetadataTestCase.test_show_help.<locals>.<listcomp>r½   )r>   r   Zset_thresholdZ_global_logZ	thresholdr   r   r    ÚhelpZscript_namer   r%   r†   ÚsplitZ
assertTrue)r   rb   Ú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descrW   zhttp://example.comrg   rh   Zfoo)rX   rY   r¼   Údescriptionrº   re   r›   r   ZUNKNOWN)r   ri   rƒ   r„   r…   ÚseekZread_pkg_filer+   rX   rY   rÜ   rº   re   rf   r¢   r›   )r   r]   rb   ri   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   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>   s6   ý Tÿ  