o
    LK&hiI                     @   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   X/var/www/html/venv/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!   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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)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
