o
    JAfª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 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 )zTests for distutils.dist.é    N)Úmock)ÚDistributionÚfix_help_options)ÚCommand)Úcaptured_stdoutÚcaptured_stderrÚrun_unittest)ÚTESTFN)Ú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   ú0/usr/lib/python3.10/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   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+   r8   z[global]r9   z!command_packages = foo.bar, splat)r,   r2   Zsplat)r1   Úsporkr+   r   r,   rR   )r1   Ú r+   )r    r!   r-   rA   rB   rC   r	   rD   rE   Úcloser*   r.   r/   )r   rL   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^   )	rA   ÚsetattrÚwarningsrY   r   r.   ÚlenrK   Údir)r   rX   Údistr   rW   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.   Úmetadatari   rh   ©r   r`   re   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,   rg   )r,   rj   rk   )r   r.   Zcommand_packagesr/   )r   re   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   re   Ú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.cfgr8   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   )ÚmkdtemprB   r[   rz   ÚjoinrD   ÚwriteÚ
expanduserr   r   r.   rc   )r   Úuser_filenamerL   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*   r0   r6   rQ   rU   rf   rn   ro   rv   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ÚStringIOrl   Úwrite_pkg_fileÚgetvalue)r   re   Ú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)r[   r\   zMetadata-Version: 1.0ú	provides:ú	requires:ú
obsoletes:)r   r‹   ÚassertInrK   Úlower©r   r`   re   Ú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©r[   r\   ZprovidesúMetadata-Version: 1.1r   r   )r   r.   rl   Zget_providesr‹   r‘   rK   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–   ©rr   rs   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)©r[   r\   Úrequiresr—   rŽ   zRequires: otherzRequires: another (==1.0)r   )r   r.   rl   Zget_requiresr‹   r‘   rK   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ž   )r[   r    )Úiterr   r4   rl   r    Úlistrm   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)©r[   r\   Ú	obsoletesr—   rŽ   r   zObsoletes: otherzObsoletes: another (<1.0))r   r.   rl   Zget_obsoletesr‹   r‘   rK   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ž   )r[   r©   )r¤   r   r4   rl   r©   r¥   rm   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©r[   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‰   r4   rl   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©r[   r\   rh   )r   r.   Zget_keywordsrm   r   r   r   Útest_keywords}  ó   ÿ
ÿzMetadataTestCase.test_keywordsc                 C   r³   )Nr¸   r   r¹   rº   r´   rh   )	r   r   r‘   r‰   r4   rl   rh   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©r[   r\   ri   )r   r.   Zget_platformsrm   r   r   r   Útest_platforms  r¼   zMetadataTestCase.test_platformsc                 C   r³   )Nr¸   r   )r¿   rÀ   rÁ   r´   ri   )	r   r   r‘   r‰   r4   rl   ri   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)r[   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   )r[   r\   Úlong_descriptionz	
        Ú
)ÚtextwrapÚdedentr   r‹   Úreplacer‘   )r   Z	long_descr`   re   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 )Nrw   rx   ry   r8   Ú.)ÚlinuxÚdarwinÚHOMEÚwin32ÚUSERPROFILEz%r not found in %r)rB   r[   r}   rz   r~   rD   r   rT   r   r    ÚplatformÚenvironr   r‘   Úremove)r   r   Ztemp_dirrL   re   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 )rS   )Ústrip)Ú.0Úliner   r   r   Ú
<listcomp>ê  s    ÿz3MetadataTestCase.test_show_help.<locals>.<listcomp>rÇ   )rA   r   Zset_thresholdZ_global_logZ	thresholdr   r    r!   ÚhelpZscript_namer   r(   r‰   ÚsplitZ
assertTrue)r   re   Ú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descrZ   zhttp://example.comrj   rk   Zfoo)r[   r\   rÆ   ÚdescriptionrÄ   rh   r    r   ZUNKNOWN)r   rl   r†   r‡   rˆ   ÚseekZread_pkg_filer.   r[   r\   ræ   rÄ   rh   ri   r©   r    )r   r`   re   rl   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__)!r   rB   r†   r    ré   rb   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ÿ  ÿ