o
    JAfª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 d dl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 dS )é    N)Úmock)ÚDistributionÚfix_help_options)ÚCommand)Úcaptured_stdoutÚcaptured_stderrÚrun_unittest)ÚTESTFN)Ú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   ú0/usr/lib/python3.10/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   2   s   zDistributionTestCase.setUpc                    ó2   | j d t_ | j d tj d d …< tt| ƒ ¡  d S ©Nr   r   )r    r   r   r   ÚtearDownr   r!   r   r   r%   7   ó   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_unspecifiedC   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_cmdlineH   s   
ÿ
z2DistributionTestCase.test_command_packages_cmdlinec           	      C   st  t j d¡ |  tjt¡ d}ttdƒ}td 	|¡|d W d   ƒ n1 s(w   Y  t
jjt ddd}|  tg¡}W d   ƒ n1 sGw   Y  t|f}|||||||||||||dœ}|  t|j d¡ ¡ ƒt| ¡ ƒ¡ |j d¡ ¡ D ]\}}|  ||| ¡ qzt
jjt dd	d}|  tg¡}W d   ƒ n1 s¡w   Y  | ¡ D ]}|  ||j di ¡¡ qª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)Zinstall_baseZinstall_platbaseZinstall_libZinstall_platlibZinstall_purelibZinstall_headersZinstall_scriptsZinstall_datar:   Ú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_optionsW   sL   óÿÿó
þÿÿ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| 	¡  w |  
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*   r7   z[global]r8   z!command_packages = foo.bar, splat)r+   r1   Zsplat)r0   Úsporkr*   r   r+   rQ   )r0   Ú r*   )r   r    r,   r@   rA   rB   r	   rC   rD   Úcloser)   r-   r.   )r   rK   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ÚwarningsrX   r   r-   ÚlenrJ   Údir)r   rW   Údistr   rV   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-   Úmetadatarh   rg   ©r   r_   rd   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+   rf   )r+   ri   rj   )r   r-   Zcommand_packagesr.   )r   rd   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   rd   Ú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 s-w   Y  ‡ fdd„}tjj}|tj_ztƒ }| 	¡ }tdd	gid
}| 	¡ }W |tj_n|tj_w |  
t|ƒd t|ƒ¡ d S )NÚposixú.pydistutils.cfgúpydistutils.cfgr7   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   )ÚmkdtemprA   rZ   ry   ÚjoinrC   ÚwriteÚ
expanduserr   r   r-   rb   )r   Úuser_filenamerK   r{   Zold_expanderr(   Z	all_filesÚfilesr   rz   r   Útest_find_config_files_disableä   s"   
ÿ
z3DistributionTestCase.test_find_config_files_disable)r   )r   r   r   r   r%   r)   r/   r5   rP   rT   re   rm   rn   ru   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                    r#   r$   )r    r   r   r„   r%   r   r!   r   r   r%     r&   zMetadataTestCase.tearDownc                 C   s   t  ¡ }|j |¡ | ¡ S r   )ÚioÚStringIOrk   Úwrite_pkg_fileÚgetvalue)r   rd   Ú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)rZ   r[   zMetadata-Version: 1.0ú	provides:ú	requires:ú
obsoletes:)r   rŠ   ÚassertInrJ   Úlower©r   r_   rd   Ú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©rZ   r[   ZprovidesúMetadata-Version: 1.1rŽ   r   )r   r-   rk   Zget_providesrŠ   r   rJ   r‘   r’   r   r   r   Útest_provides  s   þÿ
ÿ
zMetadataTestCase.test_providesc                 C   ó   |   ttdddgdœ¡ d S )Nr‹   rŒ   úmy.pkg (splat)r•   ©rq   rr   r   r   r   r   r   Útest_provides_illegal)  ó   þÿ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)©rZ   r[   Úrequiresr–   r   zRequires: otherzRequires: another (==1.0)r   )r   r-   rk   Zget_requiresrŠ   r   rJ   r‘   r’   r   r   r   Útest_requires/  s"   þÿ
ÿ
zMetadataTestCase.test_requiresc                 C   r˜   )Nr‹   rŒ   r™   rž   rš   r   r   r   r   Útest_requires_illegal?  rœ   z&MetadataTestCase.test_requires_illegalc                 C   ó,   dt dgƒdœ}t|ƒ}|  |jjt¡ d S )Nr‹   r   )rZ   rŸ   )Úiterr   r3   rk   rŸ   Úlistrl   r   r   r   Útest_requires_to_listE  ó
   ÿ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)©rZ   r[   Ú	obsoletesr–   r   rŽ   zObsoletes: otherzObsoletes: another (<1.0))r   r-   rk   Zget_obsoletesrŠ   r   rJ   r‘   r’   r   r   r   Útest_obsoletesL  s"   þÿ
ÿ
zMetadataTestCase.test_obsoletesc                 C   r˜   )Nr‹   rŒ   r™   r§   rš   r   r   r   r   Útest_obsoletes_illegal\  rœ   z'MetadataTestCase.test_obsoletes_illegalc                 C   r¢   )Nr‹   r   )rZ   r¨   )r£   r   r3   rk   r¨   r¤   rl   r   r   r   Útest_obsoletes_to_listb  r¦   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©rZ   r[   Úclassifiersr–   )r   r-   Zget_classifiersrŠ   r   r’   r   r   r   Útest_classifierh  s   ÿ
ÿ
z MetadataTestCase.test_classifierc                 C   óv   ddddœ}t ƒ }t|ƒ}W d   ƒ n1 sw   Y  |  d| ¡ ¡ |  |jjt¡ |  |jjt|d ƒ¡ d S )Nr¬   r­   )r®   r¯   úshould be a listr°   )	r   r   r   rˆ   r3   rk   r°   r¤   r-   ©r   r_   Úerrorr(   r   r   r   Útest_classifier_invalid_typeq  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©rZ   r[   rg   )r   r-   Zget_keywordsrl   r   r   r   Útest_keywords}  ó   ÿ
ÿzMetadataTestCase.test_keywordsc                 C   r²   )Nr·   rŒ   r¸   r¹   r³   rg   )	r   r   r   rˆ   r3   rk   rg   r¤   r-   r´   r   r   r   Útest_keywords_invalid_type„  ó   ÿ
ÿ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©rZ   r[   rh   )r   r-   Zget_platformsrl   r   r   r   Útest_platforms  r»   zMetadataTestCase.test_platformsc                 C   r²   )Nr·   rŒ   )r¾   r¿   rÀ   r³   rh   )	r   r   r   rˆ   r3   rk   rh   r¤   r-   r´   r   r   r   Útest_platforms_invalid_types–  r½   z-MetadataTestCase.test_platforms_invalid_typesc                 C   s.   ddddœ}t |ƒ}|  |¡}|  d|¡ d S )Nr¬   r­   zhttp://example.org/boa)rZ   r[   Ú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Œ   )rZ   r[   Úlong_descriptionz	
        Ú
)ÚtextwrapÚdedentr   rŠ   Úreplacer   )r   Z	long_descr_   rd   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| ¡  w z@tƒ }t	j
dv rC|t jd< | ¡ }|  ||¡ t	j
dkrd|t jd	< | ¡ }|  ||d
||f ¡ W t  |¡ d S W t  |¡ d S t  |¡ w )Nrv   rw   rx   r7   Ú.)ÚlinuxÚdarwinÚHOMEÚwin32ÚUSERPROFILEz%r not found in %r)rA   rZ   r|   ry   r}   rC   r~   rS   r   r   ÚplatformÚenvironr   r   Úremove)r   r€   Ztemp_dirrK   rd   r   r   r   r   Útest_custom_pydistutils·  s0   






ÿù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 s'w   Y  dd„ | ¡  d¡D ƒ}|  |¡ d S )Nr   zsetup.pyc                 S   s   g | ]
}|  ¡ d kr|‘qS )rR   )Ú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   rd   Ú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descrY   zhttp://example.comri   rj   Zfoo)rZ   r[   rÅ   ÚdescriptionrÃ   rg   rŸ   r   ZUNKNOWN)r   rk   r…   r†   r‡   ÚseekZread_pkg_filer-   rZ   r[   rå   rÃ   rg   rh   r¨   rŸ   )r   r_   rd   rk   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„      s2    
	#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__) rA   r…   r   rè   ra   rÇ   r   Zdistutils.distr   r   Zdistutils.cmdr   Ztest.supportr   r   r   Ztest.support.os_helperr	   Zdistutils.testsr
   Z	distutilsr   r   r   ZLoggingSilencerZTempdirManagerZEnvironGuardZTestCaser   r„   ré   r   r   r   r   r   Ú<module>   s>    ý Tÿ  ÿ