o
    ZhiI                     @   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   \/var/www/html/lang_env/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 )TestDistributionzDistribution 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_envZ	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   Z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	   Zsometext)
Zdistutils.tests.test_distr	   r   r    extendr&   r*   Z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sJ |jd D ]\}}	|	|| ksJ qtjj	t ddd | 
|g}W d    n1 sw   Y  | D ]}||jdi vsJ qd 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)Zinstall_baseZinstall_platbaseZinstall_libZinstall_platlibZinstall_purelibZinstall_headersZinstall_scriptsZinstall_datar6   exec_prefixhomeuserrootz/b)r   r    r)   r   jaracopathr'   mockpatchZmultipler&   sortedZcommand_optionsgetkeysitems)
r   tmp_pathr!   r5   Zfakepathr%   option_tupleZ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'   r5   zh
                    [global]
                    command_packages = foo.bar, splat
                    )r(   r-   Zsplat)r,   sporkr'   r   r(   rI   )r,    r'   )	r   r    r)   r   r<   r=   r'   r&   r*   )r   rD   r!   r5   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Zwarnsr   r   _warn   s   z:TestDistributionBehavior.test_empty_options.<locals>._warnwarnxxxZxxxx)Zauthornameversionurloptionsattrsr   rT   )	Zaddfinalizer	functoolspartialsetattrwarningsrO   r   lendir)r   requestrN   distr   rM   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	platformsrU   onetwozfoo bar)r   finalize_optionsmetadatarb   ra   r   rV   r^   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(   r`   )r(   rc   rd   )r   Zcommand_packagesr*   )r   r^   Z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okZok2)level)r   pytestraises	TypeErrorZannounce)r   r^   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-cfgrU   r   )r<   r=   r'   pydistutils_cfgr   r   r[   )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 )Nrp   )r'   rq   rU   r'   rq   )r   rp   )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.
        rJ   zutf-8)encodingr   N)joinpathrr   
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+   r1   rl   markZskipifr   r#   rH   rK   r_   rh   ri   ro   rv   rw   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StringIOrf   write_pkg_filegetvalue)r   r^   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)rQ   rR   zMetadata-Version: 1.0	provides:	requires:
obsoletes:)r   r   lowerr   rV   r^   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rQ   rR   providesMetadata-Version: 1.1r   r   )r   rf   Z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   rl   rm   
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)rQ   rR   requiresr   r   zRequires: otherzRequires: another (==1.0)r   )r   rf   Z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   )rQ   r   )iterr   r/   rf   r   r   rg   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)rQ   rR   	obsoletesr   r   r   zObsoletes: otherzObsoletes: another (<1.0))r   rf   Z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   )rQ   r   )r   r   r/   rf   r   r   rg   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rQ   rR   classifiersr   )r   Z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   messagesr/   rf   r   r   r   ZcaplogrV   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   Zspameggszlife of brianrQ   rR   ra   )r   Zget_keywordsrg   r   r   r   test_keywords     zTestMetadata.test_keywordsc                 C   r   )Nr   r   r   r   r   r   ra   )r   r   r/   rf   ra   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rQ   rR   rb   )r   Zget_platformsrg   r   r   r   test_platforms  r   zTestMetadata.test_platformsc                 C   r   )Nr   r   )r   r   r   r   r   rb   )r   r   r/   rf   rb   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)rQ   rR   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   rQ   rR   long_descriptionz	
        
)textwrapdedentr   r   replace)r   Z	long_descrV   r^   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
        rJ   N)r<   r=   r'   rr   r   r   r   )r   rs   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  v s J d S )Nzoverrides.cfgrJ   ZDIST_EXTRA_CONFIG)r<   r=   r'   Zsetenvr   r   r   )r   ZmonkeypatchrD   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   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 }|s!J d S )NTzsetup.pyc                 S   s   g | ]
}|  d kr|qS )rJ   )strip).0liner   r   r   
<listcomp>  s    z/TestMetadata.test_show_help.<locals>.<listcomp>r   )	r   r   r    helpscript_namer$   Z
readouterroutsplit)r   r]   Zcapsysr^   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   ZdescrP   zhttp://example.comrc   rd   Zfoo)rQ   rR   r   descriptionr   ra   r   r   )r   rf   r   r   r   seekZread_pkg_filerQ   rR   r   r   ra   rb   r   r   )r   rV   r^   rf   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   rf   r   r   r   r   emailmessage_from_stringr   ZEmailPolicy	generator	Generatorflattenr   message_from_fileset
splitlines)r   rV   r^   rf   bufferrL   origr   ZregenZ	orig_descZ
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.policyrW   r   osr   r   Zunittest.mockr>   rZ   Zdistutils.cmdr   distutils.distr   r   Zdistutils.testsr   typingr   Zjaraco.pathr<   rl   rQ   rr   r	   r   Zfixturer!   Zcombine_markersr}   ZusefixturesZTempdirManagerr"   r~   r   r   r   r   <module>   s<    


 
W
