o
    °ó®gª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   úO/Users/admin/.pyenv/versions/3.10.0/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 )
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_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)   Z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,   r2   Zsplat)r1   Úsporkr+   r   r,   rP   )r1   Ú 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ÚwarningsrW   r   r.   ÚlenrJ   Údir)r   rV   Údistr   rU   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.   Úmetadatarg   rf   ©r   r^   rc   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,   re   )r,   rh   ri   )r   r.   Zcommand_packagesr/   )r   rc   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   rc   Ú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   rY   rx   ÚjoinrC   ÚwriteÚ
expanduserr   r   r.   ra   )r   Úuser_filenamerK   rz   Zold_expanderr)   Z	all_filesÚfilesr   ry   r   Útest_find_config_files_disableä   s"   
ÿ
z3DistributionTestCase.test_find_config_files_disable)r   )r   r   r   r   r&   r*   r0   r6   rO   rS   rd   rl   rm   rt   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ÚStringIOrj   Úwrite_pkg_fileÚgetvalue)r   rc   Ú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)rY   rZ   zMetadata-Version: 1.0ú	provides:ú	requires:ú
obsoletes:)r   r‰   ÚassertInrJ   Úlower©r   r^   rc   Ú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©rY   rZ   ZprovidesúMetadata-Version: 1.1r   rŽ   )r   r.   rj   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”   ©rp   rq   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)©rY   rZ   Úrequiresr•   rŒ   zRequires: otherzRequires: another (==1.0)rŽ   )r   r.   rj   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œ   )rY   rž   )Úiterr   r4   rj   rž   Úlistrk   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)©rY   rZ   Ú	obsoletesr•   rŒ   r   zObsoletes: otherzObsoletes: another (<1.0))r   r.   rj   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œ   )rY   r§   )r¢   r   r4   rj   r§   r£   rk   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©rY   rZ   Ú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   rj   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©rY   rZ   rf   )r   r.   Zget_keywordsrk   r   r   r   Útest_keywords}  ó   ÿ
ÿzMetadataTestCase.test_keywordsc                 C   r±   )Nr¶   r‹   r·   r¸   r²   rf   )	r   r   r   r‡   r4   rj   rf   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©rY   rZ   rg   )r   r.   Zget_platformsrk   r   r   r   Útest_platforms  rº   zMetadataTestCase.test_platformsc                 C   r±   )Nr¶   r‹   )r½   r¾   r¿   r²   rg   )	r   r   r   r‡   r4   rj   rg   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)rY   rZ   Ú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‹   )rY   rZ   Úlong_descriptionz	
        Ú
)ÚtextwrapÚdedentr   r‰   Úreplacer   )r   Z	long_descr^   rc   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 )Nru   rv   rw   r7   Ú.)ÚlinuxÚdarwinÚHOMEÚwin32ÚUSERPROFILEz%r not found in %r)rA   rY   r{   rx   r|   rC   r}   rR   r   r    ÚplatformÚenvironr   r   Úremove)r   r   Ztemp_dirrK   rc   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 )rQ   )Ú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   rc   Ú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descrX   zhttp://example.comrh   ri   Zfoo)rY   rZ   rÄ   ÚdescriptionrÂ   rf   rž   r   ZUNKNOWN)r   rj   r„   r…   r†   ÚseekZread_pkg_filer.   rY   rZ   rå   rÂ   rf   rg   r§   rž   )r   r^   rc   rj   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   rA   r„   r    rè   r`   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ÿ  ÿ