o
    5‘ðiiI  ã                   @   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ZddlZddl	m
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 ddlZddlZdejdk d	 ZG d
d„ deƒZG dd„ deƒZejdd„ ƒZejej  d¡ej  d¡G dd„ dej!ƒƒƒƒZ"ej  d¡ej  d¡G dd„ dej!ƒƒƒZ#dS )zTests for distutils.dist.é    N)ÚCommand)ÚDistributionÚfix_help_options)Úsupport)ÚClassVarÚ.Úposixzpydistutils.cfgc                   @   s:   e Zd ZU dZdgZeeeeeef   e	d< dd„ Z
dS )Ú	test_distz#Sample distutils extension command.)zsample-option=ÚSz	help textÚuser_optionsc                 C   s
   d | _ d S ©N)Úsample_option©Úself© r   úd/root/parts/websockify/install/lib/python3.10/site-packages/setuptools/_distutils/tests/test_dist.pyÚinitialize_options   s   
ztest_dist.initialize_optionsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚlistÚtupleÚstrÚ__annotations__r   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                   C   s   t jdd …= d S )Né   )ÚsysÚargvr   r   r   r   Ú
clear_argv/   s   r!   Úsave_envÚ	save_argvc                   @   s–   e Zd Zd dd„Zdd„ Zdd„ Zejjde	j
jvd	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ejjddd
�dd„ ƒZdS )!ÚTestDistributionBehaviorr   c                 C   s    t ƒ }||_| ¡  | ¡  |S r   )r   r   Úparse_config_filesÚparse_command_line)r   ÚconfigfilesÚdr   r   r   Úcreate_distribution8   s
   z,TestDistributionBehavior.create_distributionc                 C   s*   t j d¡ |  ¡ }| ¡ dgksJ ‚d S )NÚbuildúdistutils.command)r   r    Úappendr)   Úget_command_packages)r   r!   r(   r   r   r   Ú!test_command_packages_unspecified?   s   z:TestDistributionBehavior.test_command_packages_unspecifiedc                 C   sb   ddl m} tj g d¢¡ |  ¡ }| ¡ g d¢ksJ ‚| d¡}t||ƒs(J ‚|j	dks/J ‚d S )Nr   )r	   )ú--command-packageszfoo.bar,distutils.testsr	   z
-Ssometext)r+   úfoo.barzdistutils.testsr	   Úsometext)
Údistutils.tests.test_distr	   r   r    Úextendr)   r-   Úget_command_objÚ
isinstancer   )r   r!   r	   r(   Úcmdr   r   r   Útest_command_packages_cmdlineD   s   
z6TestDistributionBehavior.test_command_packages_cmdlineÚ	distutilsz;Cannot test when virtualenv has monkey-patched Distribution)Úreasonc           
      C   s–  t j d¡ t|d ƒ}d}tj |d|› d|› d|› d|› d|› d	|› d
|› d|› d|› d|› d|› d|› d|› d�i¡ tjj	t ddd�� |  
|g¡}W d   ƒ n1 sXw   Y  ||f}|||||||||||||dœ}t|j d¡ ¡ ƒt| ¡ ƒksƒJ ‚|j d¡ ¡ D ]\}}	|	|| ks—J ‚q‹tjj	t ddd�� |  
|g¡}W d   ƒ n1 s²w   Y  | ¡ D ]}||j di ¡vsÈJ ‚q»d S )NÚinstallÚfilez/somedirzB
                    [install]
                    install-base = z(
                    install-platbase = z#
                    install-lib = z'
                    install-platlib = z'
                    install-purelib = z'
                    install-headers = z'
                    install-scripts = z$
                    install-data = z
                    prefix = z#
                    exec-prefix = z
                    home = z
                    user = z
                    root = z
                    z/a)ÚprefixÚbase_prefix)Úinstall_baseÚinstall_platbaseÚinstall_libÚinstall_platlibÚinstall_purelibÚinstall_headersÚinstall_scriptsÚinstall_datar<   Úexec_prefixÚhomeÚuserÚrootz/b)r   r    r,   r   ÚjaracoÚpathr*   ÚmockÚpatchÚmultipler)   ÚsortedÚcommand_optionsÚgetÚkeysÚitems)
r   Útmp_pathr!   r;   Úfakepathr(   Úoption_tupleÚresult_dictÚkeyÚvaluer   r   r   Útest_venv_install_optionsX   sz   þýüûúùø	÷
öõôóòÿÿó
ÿÿÿz2TestDistributionBehavior.test_venv_install_optionsc                 C   s®   t j d¡ t|d ƒ}tj |di¡ |  |g¡}| ¡ g d¢ks$J ‚g d¢t jdd …< |  |g¡}| ¡ ddgks=J ‚g d	¢t jdd …< |  |g¡}| ¡ dgksUJ ‚d S )
Nr*   r;   zh
                    [global]
                    command_packages = foo.bar, splat
                    )r+   r0   Úsplat)r/   Úsporkr*   r   r+   r\   )r/   Ú r*   )	r   r    r,   r   rJ   rK   r*   r)   r-   )r   rT   r!   r;   r(   r   r   r   Ú test_command_packages_configfile™   s   ÿz9TestDistributionBehavior.test_command_packages_configfilec                    sh   g ‰ ‡ fdd„}|  t ttdtj¡¡ |t_tddddi dœd�}tˆ ƒdks*J ‚d	t|ƒvs2J ‚d S )
Nc                    s   ˆ   | ¡ d S r   )r,   )Úmsg©Úwarnsr   r   Ú_warn¸   s   z:TestDistributionBehavior.test_empty_options.<locals>._warnÚwarnÚxxxÚxxxx)ÚauthorÚnameÚversionÚurlÚoptions©Úattrsr   rj   )	ÚaddfinalizerÚ	functoolsÚpartialÚsetattrÚwarningsrc   r   ÚlenÚdir)r   Úrequestrb   Údistr   r`   r   Útest_empty_options±   s    ÿûÿ
z+TestDistributionBehavior.test_empty_optionsc                 C   sˆ   dddœ}t |d�}| ¡  |jjddgksJ ‚|jjddgks"J ‚dddœ}t |d�}| ¡  |jjdgks9J ‚|jjdgksBJ ‚d S )Núone,two)ÚkeywordsÚ	platformsrk   ÚoneÚtwozfoo bar)r   Úfinalize_optionsÚmetadatary   rx   ©r   rl   ru   r   r   r   Útest_finalize_optionsÌ   s   



z.TestDistributionBehavior.test_finalize_optionsc                 C   s\   t ƒ }|jd u s
J ‚| ¡ }|dgksJ ‚|jdgksJ ‚d|_| ¡ }|g d¢ks,J ‚d S )Nr+   rw   )r+   rz   r{   )r   Úcommand_packagesr-   )r   ru   Úcmdsr   r   r   Útest_get_command_packagesÜ   s   z2TestDistributionBehavior.test_get_command_packagesc                 C   sD   t ƒ }t t¡� |jddd� W d   ƒ d S 1 sw   Y  d S )NÚokÚok2)Úlevel)r   ÚpytestÚraisesÚ	TypeErrorÚannounce)r   ru   r   r   r   Útest_announceç   s   "ÿz&TestDistributionBehavior.test_announcec                 C   sT   t j tdi|¡ tƒ }| ¡ }tddgid�}| ¡ }t|ƒd t|ƒks(J ‚d S )Nz[distutils]
Úscript_argsú--no-user-cfgrk   r   )rJ   rK   r*   Úpydistutils_cfgr   r   rr   )r   Ú	temp_homer(   Ú	all_filesÚfilesr   r   r   Útest_find_config_files_disableí   s   z7TestDistributionBehavior.test_find_config_files_disablec                 C   s$   t ddid�}|jddgksJ ‚d S )Nr‹   )r*   rŒ   rk   r*   rŒ   )r   r‹   )r   r(   r   r   r   Útest_script_args_list_coercionú   s   z7TestDistributionBehavior.test_script_args_list_coercionzplatform.system() == "Windows"z Windows does not honor chmod 000c                 C   s,   |  t¡jddd� | d¡ tƒ  ¡  dS )zV
        Finding config files should not fail when directory is inaccessible.
        r]   zutf-8)Úencodingr   N)Újoinpathr�   Ú
write_textÚchmodr   r   )r   Ú	fake_homer   r   r   Ú'test_find_config_files_permission_error   s   
z@TestDistributionBehavior.test_find_config_files_permission_errorN)r   )r   r   r   r)   r.   r7   r†   ÚmarkÚskipifr   r%   rZ   r^   rv   r   r‚   rŠ   r‘   r’   r˜   r   r   r   r   r$   4   s*    

þ
=þr$   c                   @   sÌ   e Z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+d,„ Zd-d.„ Zd/d0„ Zd1S )2ÚTestMetadatac                 C   s   t  ¡ }|j |¡ | ¡ S r   )ÚioÚStringIOr}   Úwrite_pkg_fileÚgetvalue)r   ru   Úsior   r   r   Úformat_metadata  s   zTestMetadata.format_metadatac                 C   s\   dddœ}t |ƒ}|  |¡}d|v sJ ‚d| ¡ vsJ ‚d| ¡ vs$J ‚d| ¡ vs,J ‚d S )NÚpackageú1.0)rg   rh   zMetadata-Version: 1.0ú	provides:ú	requires:ú
obsoletes:)r   r¡   Úlower©r   rl   ru   Úmetar   r   r   Útest_simple_metadata  s   

z!TestMetadata.test_simple_metadatac                 C   s|   ddddgdœ}t |ƒ}|j ¡ ddgksJ ‚| ¡ ddgks!J ‚|  |¡}d|v s,J ‚d| ¡ vs4J ‚d| ¡ vs<J ‚d S )Nr¢   r£   zpackage.sub©rg   rh   ÚprovidesúMetadata-Version: 1.1r¥   r¦   )r   r}   Úget_providesr¡   r§   r¨   r   r   r   Útest_provides  s   ý
zTestMetadata.test_providesc                 C   óB   t  t¡� tdddgdœƒ W d   ƒ d S 1 sw   Y  d S )Nr¢   r£   úmy.pkg (splat)r«   ©r†   r‡   Ú
ValueErrorr   r   r   r   r   Útest_provides_illegal,  ó
   ÿ"ÿz"TestMetadata.test_provides_illegalc                 C   s”   ddddgdœ}t |ƒ}|j ¡ ddgksJ ‚| ¡ ddgks!J ‚|  |¡}d|v s,J ‚d| ¡ vs4J ‚d|v s:J ‚d	|v s@J ‚d
| ¡ vsHJ ‚d S )Nr¢   r£   Úotherzanother (==1.0)©rg   rh   Úrequiresr­   r¤   zRequires: otherzRequires: another (==1.0)r¦   )r   r}   Úget_requiresr¡   r§   r¨   r   r   r   Útest_requires2  s   ý
zTestMetadata.test_requiresc                 C   r°   )Nr¢   r£   r±   r·   r²   r   r   r   r   Útest_requires_illegalB  rµ   z"TestMetadata.test_requires_illegalc                 C   ó.   dt dgƒdœ}t|ƒ}t|jjtƒsJ ‚d S )Nr¢   r¶   )rg   r¸   )Úiterr   r5   r}   r¸   r   r~   r   r   r   Útest_requires_to_listH  ó   z"TestMetadata.test_requires_to_listc                 C   s”   ddddgdœ}t |ƒ}|j ¡ ddgksJ ‚| ¡ ddgks!J ‚|  |¡}d|v s,J ‚d| ¡ vs4J ‚d| ¡ vs<J ‚d	|v sBJ ‚d
|v sHJ ‚d S )Nr¢   r£   r¶   zanother (<1.0)©rg   rh   Ú	obsoletesr­   r¤   r¥   zObsoletes: otherzObsoletes: another (<1.0))r   r}   Úget_obsoletesr¡   r§   r¨   r   r   r   Útest_obsoletesM  s   ý
zTestMetadata.test_obsoletesc                 C   r°   )Nr¢   r£   r±   rÀ   r²   r   r   r   r   Útest_obsoletes_illegal]  rµ   z#TestMetadata.test_obsoletes_illegalc                 C   r¼   )Nr¢   r¶   )rg   rÁ   )r½   r   r5   r}   rÁ   r   r~   r   r   r   Útest_obsoletes_to_listc  r¿   z#TestMetadata.test_obsoletes_to_listc                 C   sB   dddgdœ}t |ƒ}| ¡ dgksJ ‚|  |¡}d|v sJ ‚d S )NÚBoaú3.0ú#Programming Language :: Python :: 3©rg   rh   Úclassifiersr­   )r   Úget_classifiersr¡   r¨   r   r   r   Útest_classifierh  s   ý
zTestMetadata.test_classifierc                 C   óT   ddddœ}t |ƒ}d|jd v sJ ‚t|jjtƒsJ ‚|jjt|d ƒks(J ‚d S )NrÆ   rÇ   )rÈ   rÉ   úshould be a listr   rÊ   )r   Úmessagesr5   r}   rÊ   r   ©r   Úcaplogrl   r(   r   r   r   Útest_classifier_invalid_types  ó   ýz)TestMetadata.test_classifier_invalid_typec                 C   s0   ddg d¢dœ}t |ƒ}| ¡ g d¢ksJ ‚d S )NÚMontyr£   ©ÚspamÚeggszlife of brian©rg   rh   rx   )r   Úget_keywordsr~   r   r   r   Útest_keywords€  ó   ýzTestMetadata.test_keywordsc                 C   rÍ   )NrÔ   r£   rÕ   rØ   rÎ   r   rx   )r   rÏ   r5   r}   rx   r   rÐ   r   r   r   Útest_keywords_invalid_type‰  rÓ   z'TestMetadata.test_keywords_invalid_typec                 C   s0   ddddgdœ}t |ƒ}| ¡ ddgksJ ‚d S )NrÔ   r£   ú	GNU/LinuxúSome Evil Platform©rg   rh   ry   )r   Úget_platformsr~   r   r   r   Útest_platforms–  rÛ   zTestMetadata.test_platformsc                 C   rÍ   )NrÔ   r£   )rÝ   rÞ   rß   rÎ   r   ry   )r   rÏ   r5   r}   ry   r   rÐ   r   r   r   Útest_platforms_invalid_typesŸ  rÓ   z)TestMetadata.test_platforms_invalid_typesc                 C   s.   ddddœ}t |ƒ}|  |¡}d|v sJ ‚d S )NrÆ   rÇ   zhttp://example.org/boa)rg   rh   Údownload_urlr­   )r   r¡   r¨   r   r   r   Útest_download_url¬  s   ý
zTestMetadata.test_download_urlc                 C   sD   t  d¡}dd|dœ}t|ƒ}|  |¡}| dd¡}||v s J ‚d S )Nzc        example::
              We start here
            and continue here
          and end here.r¢   r£   ©rg   rh   Úlong_descriptionz	
        Ú
)ÚtextwrapÚdedentr   r¡   Úreplace)r   Ú	long_descrl   ru   r©   r   r   r   Útest_long_description¶  s   ÿ
z"TestMetadata.test_long_descriptionc                 C   s4   t j tdi|¡ |t }t|ƒtƒ  ¡ v sJ ‚dS )z*
        pydistutils.cfg is found
        r]   N)rJ   rK   r*   r�   r   r   r   )r   rŽ   Úconfig_pathr   r   r   Útest_custom_pydistutilsÅ  s   z$TestMetadata.test_custom_pydistutilsc                 C   sD   t j ddi|¡ |d }| dt|ƒ¡ t|ƒtƒ  ¡ v s J ‚d S )Nzoverrides.cfgr]   ÚDIST_EXTRA_CONFIG)rJ   rK   r*   Úsetenvr   r   r   )r   ÚmonkeypatchrT   Úfilenamer   r   r   Útest_extra_pydistutilsÎ  s   z#TestMetadata.test_extra_pydistutilsc                 C   s4   ddg}t |ƒ}|d dksJ ‚|d dksJ ‚d S )N)ÚaÚbÚcr(   )r   é   é   é   r   )rô   rõ   rö   r   )r   r÷   rø   )r   )r   Úhelp_tuplesÚfancy_optionsr   r   r   Útest_fix_help_optionsÔ  s   z"TestMetadata.test_fix_help_optionsc                 C   sF   t ƒ }g t_d|_d|_| ¡  dd„ | ¡ j d¡D ƒ}|s!J ‚d S )NTzsetup.pyc                 S   s   g | ]
}|  ¡ d kr|‘qS )r]   )Ústrip)Ú.0Úliner   r   r   Ú
<listcomp>â  s    z/TestMetadata.test_show_help.<locals>.<listcomp>rç   )	r   r   r    ÚhelpÚscript_namer&   Ú
readouterrÚoutÚsplit)r   rt   Úcapsysru   Úoutputr   r   r   Útest_show_helpÚ  s   ÿzTestMetadata.test_show_helpc                 C   sÈ   dddddddgdgd	œ}t |ƒ}|j}t ¡ }| |¡ | d
¡ | |¡ |jdks.J ‚|jdks5J ‚|j	dks<J ‚|j
dksCJ ‚|jddgksLJ ‚|jd u sSJ ‚|jd u sZJ ‚|jdgksbJ ‚d S )Nr¢   r£   Údescrd   zhttp://example.comrz   r{   Úfoo)rg   rh   ræ   Údescriptionrã   rx   r¸   r   )r   r}   rœ   r�   rž   ÚseekÚread_pkg_filerg   rh   r  rã   rx   ry   rÁ   r¸   )r   rl   ru   r}   ÚPKG_INFOr   r   r   Útest_read_metadataç  s,   ù



zTestMetadata.test_read_metadatac                 C   sò   ddddœ}t |ƒ}|j}t ¡ �}| |¡ | ¡ }W d  ƒ n1 s%w   Y  t |¡}tjj	dddd	�}t ¡ �}tj
j||d
� |¡ | d¡ t |¡}W d  ƒ n1 s\w   Y  t|d  ¡ ƒ}	t|d  ¡ ƒ}
|
|	kswJ ‚dS )z½
        In pypa/setuptools#4033, it was shown that once PKG-INFO is
        re-generated using ``email.generator.Generator``, some control
        characters might cause problems.
        r¢   r£   zhello
world
rå   NTFr   )Úutf8Úmangle_from_Úmax_line_length)ÚpolicyÚDescription)r   r}   rœ   r�   rž   rŸ   ÚemailÚmessage_from_stringr  ÚEmailPolicyÚ	generatorÚ	GeneratorÚflattenr  Úmessage_from_fileÚsetÚ
splitlines)r   rl   ru   r}   Úbufferr_   Úorigr  ÚregenÚ	orig_descÚ
regen_descr   r   r   Ú'test_round_trip_through_email_generator  s0   ý


þ
ý

üz4TestMetadata.test_round_trip_through_email_generatorN)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›   )$r   r  Úemail.generatorÚemail.policyrn   rœ   Úosr   rè   Úunittest.mockrL   rq   Údistutils.cmdr   Údistutils.distr   r   Údistutils.testsr   Útypingr   Újaraco.pathrJ   r†   rg   r�   r	   r   Úfixturer!   Úcombine_markersr™   ÚusefixturesÚTempdirManagerr$   r›   r   r   r   r   Ú<module>   s<    


 
W
