U
    aÊ¹jH  ã                   @   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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Ú.Úposixzpydistutils.cfgc                   @   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   úd/var/www/html/bwave/python/venv/lib/python3.8/site-packages/setuptools/_distutils/tests/test_dist.pyÚinitialize_options   s    ztest_dist.initialize_optionsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú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                   C   s   t jdd …= d S )Né   )ÚsysÚargvr   r   r   r   Ú
clear_argv.   s    r   Z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kd	d
�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   ZconfigfilesÚdr   r   r   Úcreate_distribution7   s
    z,TestDistributionBehavior.create_distributionc                 C   s*   t j d¡ |  ¡ }| ¡ dgks&t‚d S )NÚbuildúdistutils.command)r   r   Úappendr"   Úget_command_packagesÚAssertionError)r   r   r!   r   r   r   Ú!test_command_packages_unspecified>   s    z:TestDistributionBehavior.test_command_packages_unspecifiedc                 C   sh   ddl m} tj ddddg¡ |  ¡ }| ¡ ddd	gks>t‚| d¡}t	||ƒsVt‚|j
d
ksdt‚d S )Nr   )r   ú--command-packageszfoo.bar,distutils.testsr   z
-Ssometextr$   úfoo.barzdistutils.testsZsometext)Zdistutils.tests.test_distr   r   r   Úextendr"   r&   r'   Úget_command_objÚ
isinstancer   )r   r   r   r!   Úcmdr   r   r   Útest_command_packages_cmdlineC   s     üý

z6TestDistributionBehavior.test_command_packages_cmdlineÚ	distutilsz;Cannot test when virtualenv has monkey-patched Distribution)Úreasonc           
      C   sv  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 5 Q R X ||f}|||||||||||||dœ}t|j d¡ ¡ ƒt| ¡ ƒksòt‚|j d¡ ¡ D ]\}}	|	|| k�st‚�qtjj	t ddd�� |  
|g¡}W 5 Q R X | ¡ D ]}||j di ¡k�sRt‚�qRd 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_datar4   Úexec_prefixÚhomeÚuserÚrootz/b)r   r   r%   ÚstrÚjaracoÚpathr#   ÚmockÚpatchZmultipler"   ÚsortedÚcommand_optionsÚgetÚkeysr'   Úitems)
r   Útmp_pathr   r3   Zfakepathr!   Úoption_tupleZresult_dictÚkeyÚvaluer   r   r   Útest_venv_install_optionsW   sv     þþþþþþþþþþþþþÿóÿ
z2TestDistributionBehavior.test_venv_install_optionsc                 C   s´   t j d¡ t|d ƒ}tj |di¡ |  |g¡}| ¡ dddgksJt	‚dddgt jd	d …< |  |g¡}| ¡ ddgks~t	‚dd
dgt jd	d …< |  |g¡}| ¡ dgks°t	‚d S )Nr#   r3   zh
                    [global]
                    command_packages = foo.bar, splat
                    r$   r*   Zsplatr)   Zsporkr   Ú )
r   r   r%   rB   rC   rD   r#   r"   r&   r'   )r   rL   r   r3   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sTt‚d	t	|ƒksdt‚d S )
Nc                    s   ˆ   | ¡ d S r
   )r%   )Úmsg©Zwarnsr   r   Ú_warn·   s    z:TestDistributionBehavior.test_empty_options.<locals>._warnÚwarnÚxxxZxxxx)ÚauthorÚnameÚversionÚurlÚoptions©Úattrsr   r\   )
ZaddfinalizerÚ	functoolsÚpartialÚsetattrÚwarningsrV   r   Úlenr'   Údir)r   ÚrequestrU   Údistr   rT   r   Útest_empty_options°   s     ÿûÿ
z+TestDistributionBehavior.test_empty_optionsc                 C   sˆ   dddœ}t |d�}| ¡  |jjddgks0t‚|jjddgksDt‚dddœ}t |d�}| ¡  |jjdgksrt‚|jjdgks„t‚d S )Núone,two)ÚkeywordsÚ	platformsr]   ÚoneÚtwozfoo bar)r   Úfinalize_optionsÚmetadatarj   r'   ri   ©r   r^   rf   r   r   r   Útest_finalize_optionsË   s    



z.TestDistributionBehavior.test_finalize_optionsc                 C   s^   t ƒ }|jd kst‚| ¡ }|dgks*t‚|jdgks:t‚d|_| ¡ }|dddgksZt‚d S )Nr$   rh   rk   rl   )r   Úcommand_packagesr'   r&   )r   rf   Zcmdsr   r   r   Útest_get_command_packagesÛ   s    z2TestDistributionBehavior.test_get_command_packagesc              	   C   s.   t ƒ }t t¡� |jddd� W 5 Q R X d S )NÚokZok2)Úlevel)r   ÚpytestÚraisesÚ	TypeErrorÚannounce)r   rf   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sPt‚d S )Nz[distutils]
Úscript_argsz--no-user-cfgr]   r   )rC   rD   r#   Úpydistutils_cfgr   r   rc   r'   )r   Ú	temp_homer!   Ú	all_filesÚfilesr   r   r   Útest_find_config_files_disableì   s    z7TestDistributionBehavior.test_find_config_files_disablez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.
        rQ   zutf-8)Úencodingr   N)Újoinpathr{   Ú
write_textÚchmodr   r   )r   Z	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(   r/   ru   ÚmarkZskipifr   r   rP   rR   rg   rp   rr   ry   r   r„   r   r   r   r   r   3   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ÚStringIOrn   Úwrite_pkg_fileÚgetvalue)r   rf   Úsior   r   r   Úformat_metadata	  s    zTestMetadata.format_metadatac                 C   s\   dddœ}t |ƒ}|  |¡}d|ks(t‚d| ¡ ks8t‚d| ¡ ksHt‚d| ¡ ksXt‚d S )NÚpackageú1.0)rY   rZ   zMetadata-Version: 1.0ú	provides:ú	requires:ú
obsoletes:)r   rŒ   r'   Úlower©r   r^   rf   Ú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.t‚| ¡ ddgksBt‚|  |¡}d|ksXt‚d| ¡ ksht‚d| ¡ ksxt‚d S )Nr�   rŽ   zpackage.sub©rY   rZ   ÚprovidesúMetadata-Version: 1.1r�   r‘   )r   rn   Úget_providesr'   rŒ   r’   r“   r   r   r   Útest_provides  s    ý
zTestMetadata.test_providesc              	   C   s,   t  t¡� tdddgdœƒ W 5 Q R X d S )Nr�   rŽ   úmy.pkg (splat)r–   ©ru   rv   Ú
ValueErrorr   r   r   r   r   Útest_provides_illegal%  s    ÿz"TestMetadata.test_provides_illegalc                 C   s”   ddddgdœ}t |ƒ}|j ¡ ddgks.t‚| ¡ ddgksBt‚|  |¡}d|ksXt‚d| ¡ ksht‚d|kstt‚d	|ks€t‚d
| ¡ ks�t‚d S )Nr�   rŽ   Úotherzanother (==1.0)©rY   rZ   Úrequiresr˜   r�   zRequires: otherzRequires: another (==1.0)r‘   )r   rn   Úget_requiresr'   rŒ   r’   r“   r   r   r   Útest_requires+  s    ý
zTestMetadata.test_requiresc              	   C   s,   t  t¡� tdddgdœƒ W 5 Q R X d S )Nr�   rŽ   r›   r    rœ   r   r   r   r   Útest_requires_illegal;  s    ÿz"TestMetadata.test_requires_illegalc                 C   s.   dt dgƒdœ}t|ƒ}t|jjtƒs*t‚d S )Nr�   rŸ   )rY   r¡   )Úiterr   r-   rn   r¡   Úlistr'   ro   r   r   r   Útest_requires_to_listA  s    z"TestMetadata.test_requires_to_listc                 C   s”   ddddgdœ}t |ƒ}|j ¡ ddgks.t‚| ¡ ddgksBt‚|  |¡}d|ksXt‚d| ¡ ksht‚d| ¡ ksxt‚d	|ks„t‚d
|ks�t‚d S )Nr�   rŽ   rŸ   zanother (<1.0)©rY   rZ   Ú	obsoletesr˜   r�   r�   zObsoletes: otherzObsoletes: another (<1.0))r   rn   Úget_obsoletesr'   rŒ   r’   r“   r   r   r   Útest_obsoletesF  s    ý
zTestMetadata.test_obsoletesc              	   C   s,   t  t¡� tdddgdœƒ W 5 Q R X d S )Nr�   rŽ   r›   r¨   rœ   r   r   r   r   Útest_obsoletes_illegalV  s    ÿz#TestMetadata.test_obsoletes_illegalc                 C   s.   dt dgƒdœ}t|ƒ}t|jjtƒs*t‚d S )Nr�   rŸ   )rY   r©   )r¥   r   r-   rn   r©   r¦   r'   ro   r   r   r   Útest_obsoletes_to_list\  s    z#TestMetadata.test_obsoletes_to_listc                 C   sB   dddgdœ}t |ƒ}| ¡ dgks(t‚|  |¡}d|ks>t‚d S )NÚBoaú3.0ú#Programming Language :: Python :: 3©rY   rZ   Úclassifiersr˜   )r   Úget_classifiersr'   rŒ   r“   r   r   r   Útest_classifiera  s    ý
zTestMetadata.test_classifierc                 C   sT   ddddœ}t |ƒ}d|jd ks&t‚t|jjtƒs8t‚|jjt|d ƒksPt‚d S )Nr®   r¯   )r°   r±   úshould be a listr   r²   )r   Úmessagesr'   r-   rn   r²   r¦   ©r   Zcaplogr^   r!   r   r   r   Útest_classifier_invalid_typel  s    ýz)TestMetadata.test_classifier_invalid_typec                 C   s4   dddddgdœ}t |ƒ}| ¡ dddgks0t‚d S )NÚMontyrŽ   ÚspamÚeggsúlife of brian©rY   rZ   ri   )r   Úget_keywordsr'   ro   r   r   r   Útest_keywordsy  s    ýzTestMetadata.test_keywordsc                 C   sT   ddddœ}t |ƒ}d|jd ks&t‚t|jjtƒs8t‚|jjt|d ƒksPt‚d S )Nr¹   rŽ   )rº   r»   r¼   r½   rµ   r   ri   )r   r¶   r'   r-   rn   ri   r¦   r·   r   r   r   Útest_keywords_invalid_type‚  s    ýz'TestMetadata.test_keywords_invalid_typec                 C   s0   ddddgdœ}t |ƒ}| ¡ ddgks,t‚d S )Nr¹   rŽ   ú	GNU/LinuxúSome Evil Platform©rY   rZ   rj   )r   Úget_platformsr'   ro   r   r   r   Útest_platforms�  s    ýzTestMetadata.test_platformsc                 C   sT   ddddœ}t |ƒ}d|jd ks&t‚t|jjtƒs8t‚|jjt|d ƒksPt‚d S )Nr¹   rŽ   )rÁ   rÂ   rÃ   rµ   r   rj   )r   r¶   r'   r-   rn   rj   r¦   r·   r   r   r   Útest_platforms_invalid_types˜  s    ýz)TestMetadata.test_platforms_invalid_typesc                 C   s.   ddddœ}t |ƒ}|  |¡}d|ks*t‚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TestMetadata.test_download_urlc                 C   sD   t  d¡}dd|dœ}t|ƒ}|  |¡}| dd¡}||ks@t‚d S )Nzc        example::
              We start here
            and continue here
          and end here.r�   rŽ   ©rY   rZ   Úlong_descriptionz	
        Ú
)ÚtextwrapÚdedentr   rŒ   Úreplacer'   )r   Ú	long_descr^   rf   r”   r   r   r   Útest_long_description¯  s    ÿ
z"TestMetadata.test_long_descriptionc                 C   s4   t j tdi|¡ |t }t|ƒtƒ  ¡ ks0t‚dS )z*
        pydistutils.cfg is found
        rQ   N)rC   rD   r#   r{   rB   r   r   r'   )r   r|   Z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ƒ  ¡ ks@t‚d S )Nzoverrides.cfgrQ   ZDIST_EXTRA_CONFIG)rC   rD   r#   ZsetenvrB   r   r   r'   )r   ZmonkeypatchrL   Úfilenamer   r   r   Útest_extra_pydistutilsÇ  s    z#TestMetadata.test_extra_pydistutilsc                 C   s4   ddg}t |ƒ}|d dks t‚|d dks0t‚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"TestMetadata.test_fix_help_optionsc                 C   sF   t ƒ }g t_d|_d|_| ¡  dd„ | ¡ j d¡D ƒ}|sBt	‚d S )NTzsetup.pyc                 S   s   g | ]}|  ¡ d kr|‘qS )rQ   )Ústrip)Ú.0Úliner   r   r   Ú
<listcomp>Û  s     z/TestMetadata.test_show_help.<locals>.<listcomp>rË   )
r   r   r   ÚhelpÚscript_namer    Z
readouterrÚoutÚsplitr'   )r   re   Zcapsysrf   Ú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\t‚|j	dksjt‚|j
dksxt‚|jdks†t‚|jddgks˜t‚|jd ks¦t‚|jd ks´t‚|jdgksÄt‚d S )Nr�   rŽ   ÚdescrW   zhttp://example.comrk   rl   Zfoo)rY   rZ   rÊ   ÚdescriptionrÇ   ri   r¡   r   )r   rn   r‡   rˆ   r‰   ÚseekÚread_pkg_filerY   r'   rZ   ræ   rÇ   ri   rj   r©   r¡   )r   r^   rf   rn   ÚPKG_INFOr   r   r   Útest_read_metadataà  s,    ù



zTestMetadata.test_read_metadatac              	   C   sÊ   ddddœ}t |ƒ}|j}t ¡ �}| |¡ | ¡ }W 5 Q R X t |¡}tjj	dddd�}t ¡ �0}tj
j||d	� |¡ | d¡ t |¡}W 5 Q R X t|d
  ¡ ƒ}	t|d
  ¡ ƒ}
|
|	ksÆt‚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É   TFr   )Úutf8Úmangle_from_Úmax_line_length)ÚpolicyÚDescriptionN)r   rn   r‡   rˆ   r‰   rŠ   ÚemailÚmessage_from_stringrî   ZEmailPolicyÚ	generatorÚ	GeneratorÚflattenrç   Úmessage_from_fileÚsetÚ
splitlinesr'   )r   r^   rf   rn   ÚbufferrS   Úorigrî   ZregenZ	orig_descZ
regen_descr   r   r   Ú'test_round_trip_through_email_generatorý  s,    ý


ý

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†     s0   			
	r†   )"r   rð   Úemail.generatorÚemail.policyr_   r‡   Úosr   rÌ   Zunittest.mockrE   rb   Údistutils.cmdr   Údistutils.distr   r   Zdistutils.testsr   Zjaraco.pathrC   ru   rY   r{   r   r   Zfixturer   Zcombine_markersr…   ZusefixturesZTempdirManagerr   r†   r   r   r   r   Ú<module>   s8   


 Q

