o
    Zh                     @   s  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Zd dl	m
Z
 d dlmZmZmZ d dlmZmZ d dlmZ dd	lmZ d d
lmZmZ G dd dee Zd!ddZ	d"ddZejd#ddZdd ZG dd dZG dd dZ G dd dZ!ej"Z#G dd  d Z$dS )$    N)Path)Mockpatch)InvalidRequirement)ConfigHandlerTargetread_configuration)Distribution_Distribution)SetuptoolsDeprecationWarning   )DALS)DistutilsFileErrorDistutilsOptionErrorc                   @   s   e Zd ZdZdZdS )ErrConfigHandlerz7Erroneous handler. Fails to implement required methods.z**err**N)__name__
__module____qualname____doc__Zsection_prefix r   r   \/var/www/html/lang_env/lib/python3.10/site-packages/setuptools/tests/config/test_setupcfg.pyr      s    r   Fc                 C   sB   |}|  dD ]}||}qd }|s|d}|d ||fS )N/__init__.py )splitmkdirjoinwrite)namebase_dirnsdir_packagedir_name	init_filer   r   r   make_package_dir   s   

r$   asciifake_packagec                 C   sZ   |d u rd}|  d| |  d}|j||dd t|| \}}|d ||fS )Nz%from setuptools import setup
setup()
setup.py	setup.cfgwb)modezWVERSION = (1, 2, 3)

VERSION_MAJOR = 1
def get_version():
    return [3, 4, 5, "dev"]

)r   r   encoder$   )tmpdir	setup_cfgsetup_pyencodingpackage_pathconfigpackage_dirr#   r   r   r   fake_env$   s   

r3   Tc                 c   sp    |pi }|   % t|}d|_|o"|  |V  W d    d S  |V  W d    d S 1 s1w   Y  d S )Nr'   )Zas_cwdr	   script_nameparse_config_files)r,   Zkwargs_initialparsedistr   r   r   get_dist=   s   
"r8   c                  C   sF   t t td i dt } | j W d    d S 1 sw   Y  d S )NF)pytestraisesNotImplementedErrorr   r   parsers)handlerr   r   r   test_parsers_implementedI   s   "r>   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestConfigurationReaderc                 C   sb   t |d\}}tt|}|d d dksJ |d d ddgks#J |d d	 d
dgks/J d S )NzX[metadata]
version = 10.1.1
keywords = one, two

[options]
scripts = bin/a.py, bin/b.py
metadataversion10.1.1keywordsonetwooptionsscriptszbin/a.pyzbin/b.py)r3   r   strselfr,   _r1   Zconfig_dictr   r   r   
test_basicP   s   	z"TestConfigurationReader.test_basicc                 C   sB   t t tt|d W d    d S 1 sw   Y  d S )Nr(   )r9   r:   r   r   rH   r   rJ   r,   r   r   r   test_no_config_   s   "z&TestConfigurationReader.test_no_configc                 C   s   t |d\}}tt tt| W d    n1 sw   Y  tt|dd}|d d ddgks6J d|d vs>J |  d S )	Nz<[metadata]
version = attr: none.VERSION
keywords = one, two
T)Zignore_option_errorsr@   rC   rD   rE   rA   )r3   r9   r:   ImportErrorr   rH   removerI   r   r   r   test_ignore_errorsc   s   z*TestConfigurationReader.test_ignore_errorsN)r   r   r   rL   rN   rQ   r   r   r   r   r?   O   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-S ).TestMetadatac                 C   s   t |d |dd ddi}t||V}|j}|jdks!J |jdks(J |jdks/J |jdks6J |j	d	d
gks?J |j
dksFJ |jdksMJ |jddgksVJ |jdks]J |jdksdJ W d    d S 1 sow   Y  d S )Na-  [metadata]
version = 10.1.1
description = Some description
long_description_content_type = text/something
long_description = file: README
name = fake_name
keywords = one, two
provides = package, package.sub
license = otherlic
download_url = http://test.test.com/test/
maintainer_email = test@test.com
READMEreadme contents
line2licensezBSD 3-Clause LicenserB   Some descriptiontext/somethingpackagezpackage.subZ	fake_namerD   rE   http://test.test.com/test/test@test.com)r3   r   r   r8   r@   rA   descriptionlong_description_content_typelong_descriptionprovidesrU   r   rC   Zdownload_urlmaintainer_email)rJ   r,   Zmeta_initialr7   r@   r   r   r   rL   t   s(   "zTestMetadata.test_basicc                 C   sl   t |td t|!}|j}|jdksJ |jdksJ |jdks$J W d    d S 1 s/w   Y  d S )Nzr
            [metadata]
            name=foo
            version=0.0.1
            license=Apache 2.0
            fooz0.0.1z
Apache 2.0)r3   r   r8   r@   r   rA   rU   rJ   r,   r7   r@   r   r   r   test_license_cfg   s   
"zTestMetadata.test_license_cfgc                 C   sh   t |d |dd |dd t|}|jjdks"J W d    d S 1 s-w   Y  d S )Nz=[metadata]
long_description = file: README.rst, CHANGES.rst

z
README.rstrT   zCHANGES.rstzchangelog contents
and stuffz2readme contents
line2
changelog contents
and stuff)r3   r   r   r8   r@   r]   rJ   r,   r7   r   r   r   test_file_mixed   s   

"zTestMetadata.test_file_mixedc              	   C   s   | d |dd}|j dd t|d t|dd*}tt |  W d    n1 s1w   Y  W d    d S W d    d S 1 sIw   Y  d S )	NrS   Zdepth1Zdepth2T)dirz1[metadata]
long_description = file: ../../README
Fr6   )Zensurer   r3   r8   r9   r:   r   r5   )rJ   r,   projectr7   r   r   r   test_file_sandboxed   s   


"z TestMetadata.test_file_sandboxedc                 C   s   t |d t|3}|j}|jdksJ |jdksJ |jdks"J |jddgks+J |jddgks4J W d    d S 1 s?w   Y  d S )	Nz[metadata]
author_email = test@test.com
home_page = http://test.test.com/test/
summary = Short summary
platform = a, b
classifier =
  Framework :: Django
  Programming Language :: Python :: 3.5
rZ   rY   zShort summaryabFramework :: Django%Programming Language :: Python :: 3.5)r3   r8   r@   author_emailurlr[   	platformsclassifiersra   r   r   r   test_aliases   s   
"zTestMetadata.test_aliasesc                 C   sb   t |d t|}|j}|jddgksJ |jddgksJ W d    d S 1 s*w   Y  d S )Nz[metadata]
name = fake_name
keywords =
  one
  two
classifiers =
  Framework :: Django
  Programming Language :: Python :: 3.5
rD   rE   rk   rl   )r3   r8   r@   rC   rp   ra   r   r   r   test_multiline   s   
"zTestMetadata.test_multilinec                 C   sR   t |d t|}|j}|jdddksJ W d    d S 1 s"w   Y  d S )Nzf[metadata]
project_urls =
  Link One = https://example.com/one/
  Link Two = https://example.com/two/
https://example.com/one/https://example.com/two/zLink OnezLink Two)r3   r8   r@   project_urlsra   r   r   r   	test_dict   s   
"zTestMetadata.test_dictc                 C   s  t |d\}}|d}|dd |dd |d}|dd |dd t|}|jjd	ks>J W d    n1 sHw   Y  |d
 t|}|jjdks_J W d    n1 siw   Y  |d t|}|jjdksJ W d    n1 sw   Y  |d t|}|jjdksJ W d    n1 sw   Y  |d t|}|jjdksJ W d    d S 1 sw   Y  d S )Nz0[metadata]
version = attr: fake_package.VERSION
Zsubpkg_ar   r   zmod.pyzVERSION = (2016, 11, 26)Zsubpkg_bz2import third_party_module
VERSION = (2016, 11, 26)1.2.3z4[metadata]
version = attr: fake_package.get_version
z	3.4.5.devz6[metadata]
version = attr: fake_package.VERSION_MAJOR
1z=[metadata]
version = attr: fake_package.subpkg_a.mod.VERSION
z
2016.11.26z=[metadata]
version = attr: fake_package.subpkg_b.mod.VERSION
)r3   r   r   r   r8   r@   rA   )rJ   r,   r2   r1   Zsub_aZsub_br7   r   r   r   test_version   s<   











"zTestMetadata.test_versionc              	   C   s   t |d |ddd t|}|jjdksJ W d    n1 s%w   Y  |ddd tt) t|}|jj W d    n1 sLw   Y  W d    d S W d    d S 1 sdw   Y  d S )Nz4[metadata]
version = file: fake_package/version.txt
r&   zversion.txtz1.2.3
rx   z1.2.3
4.5.6
)	r3   r   r   r8   r@   rA   r9   r:   r   rc   r   r   r   test_version_file"  s   



"zTestMetadata.test_version_filec                 C   L   t |ddd t|}|jjdksJ W d    d S 1 sw   Y  d S )NzY[metadata]
version = attr: fake_package_simple.VERSION
[options]
package_dir =
    = src
zsrc/fake_package_simpler0   rx   r3   r8   r@   rA   rc   r   r   r   $test_version_with_package_dir_simple.     

"z1TestMetadata.test_version_with_package_dir_simplec                 C   r|   )Nzr[metadata]
version = attr: fake_package_rename.VERSION
[options]
package_dir =
    fake_package_rename = fake_dir
Zfake_dirr}   rx   r~   rc   r   r   r   $test_version_with_package_dir_rename<  r   z1TestMetadata.test_version_with_package_dir_renamec                 C   r|   )Nzx[metadata]
version = attr: fake_package_complex.VERSION
[options]
package_dir =
    fake_package_complex = src/fake_dir
zsrc/fake_dirr}   rx   r~   rc   r   r   r   %test_version_with_package_dir_complexJ  r   z2TestMetadata.test_version_with_package_dir_complexc                 C   sD   t |d t|dd}|  W d    d S 1 sw   Y  d S )Nz+[metadata]
name = fake_name
unknown = some
Frf   )r3   r8   r5   rc   r   r   r   test_unknown_meta_itemX  s   

"z#TestMetadata.test_unknown_meta_itemc              	   C   ~   t |d t|dd*}tt |  W d    n1 s w   Y  W d    d S W d    d S 1 s8w   Y  d S )Nz[metadata.some]
key = val
Frf   r3   r8   r9   r:   r   r5   rc   r   r   r   test_usupported_section]     

"z$TestMetadata.test_usupported_sectionc                 C   s   t g d}t|d\}}|dd t|}t |jj|ks$J W d    n1 s.w   Y  |d t|}t |jj|ksGJ W d    d S 1 sRw   Y  d S )N)rk   z#Programming Language :: Python :: 3rl   z+[metadata]
classifiers = file: classifiers
rp   z^Framework :: Django
Programming Language :: Python :: 3
Programming Language :: Python :: 3.5
z[metadata]
classifiers =
    Framework :: Django
    Programming Language :: Python :: 3
    Programming Language :: Python :: 3.5
)setr3   r   r   r8   r@   rp   )rJ   r,   expectedrK   r1   r7   r   r   r   test_classifiersc  s   


"zTestMetadata.test_classifiersc              	   C   st   t |d ttj% t| W d    n1 sw   Y  W d    d S W d    d S 1 s3w   Y  d S )Nz%[metadata]
description = %(message)s
)r3   r9   r:   configparserInterpolationMissingOptionErrorr8   rM   r   r   r   test_interpolation  s   

"zTestMetadata.test_interpolationc                 C   s<   t |ddd t|	 W d    d S 1 sw   Y  d S )Nu$   [metadata]
description = éàïôñ
utf-8r/   r3   r8   rM   r   r   r   test_non_ascii_1  s   
"zTestMetadata.test_non_ascii_1c                 C   s8   t |d t|	 W d    d S 1 sw   Y  d S )Nz
# -*- coding: invalid
r   rM   r   r   r   test_non_ascii_3  s   

"zTestMetadata.test_non_ascii_3c                 C   r|   )Nu8   # -*- coding: utf-8
[metadata]
description = éàïôñ
r   r   u
   éàïôñ)r3   r8   r@   r[   rc   r   r   r   test_non_ascii_4  s   
"zTestMetadata.test_non_ascii_4c              	   C   sv   t |ddd tt% t| W d   n1 sw   Y  W d   dS W d   dS 1 s4w   Y  dS )z=
        Config files encoded not in UTF-8 will fail
        uJ   # vim: set fileencoding=iso-8859-15 :
[metadata]
description = éàïôñ
ziso-8859-15r   N)r3   r9   r:   UnicodeDecodeErrorr8   rM   r   r   r   test_not_utf8  s   
"zTestMetadata.test_not_utf8c              	   C      t |d d}tjt|d t|}|j}W d    n1 s!w   Y  W d    n1 s0w   Y  |jdks<J |jdksCJ d S )NzG[metadata]
author-email = test@test.com
maintainer_email = foo@foo.com
z<Usage of dash-separated 'author-email' will not be supportedmatchrZ   zfoo@foo.com)r3   r9   warnsr   r8   r@   rm   r_   rJ   r,   msgr7   r@   r   r   r   test_warn_dash_deprecation  s   
z'TestMetadata.test_warn_dash_deprecationc              	   C   r   )Nz5[metadata]
Name = foo
description = Some description
zAUsage of uppercase key 'Name' in 'metadata' will not be supportedr   r`   rV   )r3   r9   r   r   r8   r@   r   r[   r   r   r   r   test_make_option_lowercase  s   

z'TestMetadata.test_make_option_lowercaseN)r   r   r   rL   rb   rd   rh   rq   rr   rw   rz   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rR   s   s.    %
"	rR   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
ejdg ddd Zejdg ddd Zejdg dej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d.d/ Zd0S )1TestOptionsc              	   C   s.  t |d tjtdd}| t|b}|jsJ |jsJ |jdddks(J |jddgks1J |j	d	d
gks:J |j
ddgksCJ |jddgksLJ |jg dksUJ |jg dks^J |jdkseJ |jddgksnJ W d    n1 sxw   Y  W d    d S W d    d S 1 sw   Y  d S )Na  [options]
zip_safe = True
include_package_data = yes
package_dir = b=c, =src
packages = pack_a, pack_b.subpack
namespace_packages = pack1, pack2
scripts = bin/one.py, bin/two.py
eager_resources = bin/one.py, bin/two.py
install_requires = docutils>=0.3; pack ==1.1, ==1.3; hey
setup_requires = docutils>=0.3; spack ==1.1, ==1.3; there
dependency_links = http://some.com/here/1, http://some.com/there/2
python_requires = >=1.0, !=2.8
py_modules = module1, module2
namespace_packagesr   srccr   rj   pack_apack_b.subpackpack1pack2
bin/one.py
bin/two.pyhttp://some.com/here/1http://some.com/there/2docutils>=0.3pack==1.1,==1.3Zheyr   zspack ==1.1, ==1.3Ztherez>=1.0, !=2.8Zmodule1Zmodule2)r3   r9   r   r   r8   Zzip_safeZinclude_package_datar2   packagesr   rG   dependency_linksinstall_requiressetup_requiresZpython_requiresZ
py_modulesrJ   r,   Zdeprecr7   r   r   r   rL     s*   


PzTestOptions.test_basicc              	   C   s   t |d tjtdd}|e t|H}|jdddksJ |jddgks'J |jd	d
gks0J |jddgks9J |j	ddgksBJ |j
g dksKJ |jg dksTJ W d    n1 s^w   Y  W d    d S W d    d S 1 svw   Y  d S )Na  [options]
package_dir = 
  b=c
  =src
packages = 
  pack_a
  pack_b.subpack
namespace_packages = 
  pack1
  pack2
scripts = 
  bin/one.py
  bin/two.py
eager_resources = 
  bin/one.py
  bin/two.py
install_requires = 
  docutils>=0.3
  pack ==1.1, ==1.3
  hey
setup_requires = 
  docutils>=0.3
  spack ==1.1, ==1.3
  there
dependency_links = 
  http://some.com/here/1
  http://some.com/there/2
r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r3   r9   r   r   r8   r2   r   r   rG   r   r   r   r   r   r   r   rr     s"   
PzTestOptions.test_multilinec              	   C   r   )Nz[options]
package_dir = a b
Frf   r   rc   r   r   r   test_package_dir_fail%  r   z!TestOptions.test_package_dir_failc                 C   sl   t |d t|#}|jddgdgdksJ |jddgdgdks$J W d    d S 1 s/w   Y  d S )	Nz}[options.package_data]
* = *.txt, *.rst
hello = *.msg

[options.exclude_package_data]
* = fake1.txt, fake2.txt
hello = *.dat
z*.txtz*.rstz*.msg)r   Zhelloz	fake1.txtz	fake2.txtz*.dat)r3   r8   package_dataZexclude_package_datarc   r   r   r   test_package_data+  s   
"zTestOptions.test_package_datac                 C   sH   t |d t|}|jdgksJ W d    d S 1 sw   Y  d S )N[options]
packages = find:
r&   )r3   r8   r   rc   r   r   r   test_packagesA  s   

"zTestOptions.test_packagesc                 C   s   t |d\}}td| td| t|}t|jtg dks#J W d    n1 s-w   Y  |d t|}|jdgksDJ W d    n1 sNw   Y  |d t|}t|jtdd	gksjJ W d    d S 1 suw   Y  d S )
Nr   sub_onesub_two)r&   fake_package.sub_twofake_package.sub_onezi[options]
packages = find:

[options.packages.find]
where = .
include =
    fake_package.sub_one
    two
r   zW[options]
packages = find:

[options.packages.find]
exclude =
    fake_package.sub_one
r&   r   r3   r$   r8   r   r   r   rJ   r,   r!   r1   r7   r   r   r   test_find_directiveG  s$   





"zTestOptions.test_find_directivec                 C   s   t |d\}}td| td|dd t|}t|jh dks#J W d    n1 s-w   Y  |d t|}|jdgksDJ W d    n1 sNw   Y  |d	 t|}t|jd
dhkshJ W d    d S 1 ssw   Y  d S )Nz%[options]
packages = find_namespace:
r   r   T)r    >   r&   r   r   zs[options]
packages = find_namespace:

[options.packages.find]
where = .
include =
    fake_package.sub_one
    two
r   za[options]
packages = find_namespace:

[options.packages.find]
exclude =
    fake_package.sub_one
r&   r   r   r   r   r   r   test_find_namespace_directivel  s(   




"z)TestOptions.test_find_namespace_directivec                 C   sl   t |d t|#}|jddgddgdksJ t|jjddhks$J W d    d S 1 s/w   Y  d S )	Nz_[options.extras_require]
pdf = ReportLab>=1.2; RXP
rest = 
  docutils>=0.3
  pack ==1.1, ==1.3
zReportLab>=1.2ZRXPr   r   )pdfrestr   r   )r3   r8   extras_requirer   r@   Zprovides_extrasrc   r   r   r   test_extras_require  s   
	"zTestOptions.test_extras_requirer1   )z5[options.extras_require]
foo = bar;python_version<'3'z3[options.extras_require]
foo = bar;os_name=='linux'z6[options.extras_require]
foo = bar;python_version<'3'
z4[options.extras_require]
foo = bar;os_name=='linux'
z3[options]
install_requires = bar;python_version<'3'z1[options]
install_requires = bar;os_name=='linux'z4[options]
install_requires = bar;python_version<'3'
z2[options]
install_requires = bar;os_name=='linux'
c              	   C   z   t || d}tjt|d% t|}W d    n1 sw   Y  W d    d S W d    d S 1 s6w   Y  d S NzoOne of the parsed requirements in `(install_requires|extras_require.+)` looks like a valid environment marker.*r   )r3   r9   r:   r   r8   rJ   r1   r,   r   rK   r   r   r   +test_raises_accidental_env_marker_misconfig  s   

"z7TestOptions.test_raises_accidental_env_marker_misconfig)z3[options.extras_require]
foo = bar;python_version<3z4[options.extras_require]
foo = bar;python_version<3
z1[options]
install_requires = bar;python_version<3z2[options]
install_requires = bar;python_version<3
c              	   C   r   r   )r3   r9   r   r   r8   r   r   r   r   )test_warn_accidental_env_marker_misconfig  s   


"z5TestOptions.test_warn_accidental_env_marker_misconfig)
z9[options.extras_require]
foo =
    bar;python_version<'3'z4[options.extras_require]
foo = bar;baz
boo = xxx;yyyz:[options.extras_require]
foo =
    bar;python_version<'3'
z5[options.extras_require]
foo = bar;baz
boo = xxx;yyy
z<[options.extras_require]
foo =
    bar
    python_version<3
z7[options]
install_requires =
    bar;python_version<'3'z2[options]
install_requires = bar;baz
boo = xxx;yyyz8[options]
install_requires =
    bar;python_version<'3'
z3[options]
install_requires = bar;baz
boo = xxx;yyy
z:[options]
install_requires =
    bar
    python_version<3
z.error::setuptools.SetuptoolsDeprecationWarningc                 C   sN   t || t|}t|}W d    n1 sw   Y  t||ks%J d S )N)r3   lenr8   )rJ   r1   r,   ZrecwarnZnum_warningsrK   r   r   r   +test_nowarn_accidental_env_marker_misconfig  s   

z7TestOptions.test_nowarn_accidental_env_marker_misconfigc                 C   sP   t |d t|}|jdgdgdksJ W d    d S 1 s!w   Y  d S )Nz2[options.extras_require]
foo-a = foo
foo_b = test
r`   test)zfoo-aZfoo_b)r3   r8   r   rc   r   r   r   "test_dash_preserved_extras_require  s   

"z.TestOptions.test_dash_preserved_extras_requirec                 C   s   t |d\}}t|}|jddgdgdksJ W d    n1 s#w   Y  d}|d| |d t|}|j|ksCJ W d    d S 1 sNw   Y  d S )	Nz[options.entry_points]
group1 = point1 = pack.module:func, .point2 = pack.module2:func_rest [rest]
group2 = point3 = pack.module:func2
point1 = pack.module:func'.point2 = pack.module2:func_rest [rest]point3 = pack.module:func2)Zgroup1group2zN[blogtool.parsers]
.rst = some.nested.module:SomeClass.some_classmethod[reST]
entry_pointsz,[options]
entry_points = file: entry_points
)r3   r8   r   r   r   )rJ   r,   rK   r1   r7   r   r   r   r   test_entry_points  s&   



"zTestOptions.test_entry_pointsc                 C   sR   t |d t|}|jddgdgdksJ W d    d S 1 s"w   Y  d S )Nz[options.entry_points]
GROUP1 = point1 = pack.module:func, .point2 = pack.module2:func_rest [rest]
group2 = point3 = pack.module:func2
r   r   r   )ZGROUP1r   )r3   r8   r   rc   r   r   r    test_case_sensitive_entry_points  s   
"z,TestOptions.test_case_sensitive_entry_pointsc                 C   sf   t |d t| }dddgfdddgfg}t|jt|ks!J W d    d S 1 s,w   Y  d S )NzQ[options.data_files]
cfg =
      a/b.conf
      c/d.conf
data = e/f.dat, g/h.dat
cfga/b.confc/d.confdataze/f.datzg/h.dat)r3   r8   sorted
data_filesrJ   r,   r7   r   r   r   r   test_data_files  s   
	

"zTestOptions.test_data_filesc                 C   s
  t |d |dd |dd |dd |dd |dd |dd |d	d |d
d |dd t|*}dddgfdg dfdg dfdg dfg}t|jt|kssJ W d    d S 1 s~w   Y  d S )Nz[options.data_files]
cfg =
      a/b.conf
      c/d.conf
data = *.dat
icons = 
      *.ico
audio = 
      *.wav
      sounds.db
a.datr   b.datc.data.icob.icoc.icobeep.wavboop.wav	sounds.dbr   r   r   r   )r   r   r   Zicons)r   r   r   Zaudio)r   r   r   )r3   r   r   r8   r   r   r   r   r   r   test_data_files_globby.  s*   




"z"TestOptions.test_data_files_globbyc                 C   D   t |td t|}|  W d    d S 1 sw   Y  d S )NzE
            [options]
            python_requires=>=2.7
            r3   r   r8   r5   rc   r   r   r   test_python_requires_simpleQ     
	
"z'TestOptions.test_python_requires_simplec                 C   r   )NzM
            [options]
            python_requires=>=2.7,!=3.0.*
            r   rc   r   r   r   test_python_requires_compound^  r   z)TestOptions.test_python_requires_compoundc              	   C   s~   t |td tt) t|}|  W d    n1 s w   Y  W d    d S W d    d S 1 s8w   Y  d S )NzG
            [options]
            python_requires=invalid
            )r3   r   r9   r:   	Exceptionr8   r5   rc   r   r   r   test_python_requires_invalidk  s   	

"z(TestOptions.test_python_requires_invalidc                 C   s   t |d}|jjddd |jddd d}t|t| t|&}|jd }|j	d	ks/J |j
d
ks6J |t|s@J W d    d S 1 sKw   Y  d S )Nzsrc/custom_build.pyT)parentsexist_okzBfrom distutils.core import Command
class CustomCmd(Command): pass
r   r   zi
            [options]
            cmdclass =
                customcmd = custom_build.CustomCmd
        Z	customcmdZ	CustomCmdZcustom_build)r   parentr   
write_textr3   inspectcleandocr8   cmdclassr   r   samefilegetfile)rJ   r,   module_pathr-   r7   r   r   r   r   test_cmdclassy  s   


"zTestOptions.test_cmdclassc                 C   s   t |td |dd |dd t|}|jdgks$J |jddgiks.J W d    d S 1 s9w   Y  d S )Nz
            [options]
            install_requires = file:requirements.txt
            [options.extras_require]
            colors = file:requirements-extra.txt
            zrequirements.txtz
docutils>=0.3

zrequirements-extra.txtZcoloramar   colors)r3   r   r   r   r8   r   r   rc   r   r   r   test_requirements_file  s   
"z"TestOptions.test_requirements_fileN)r   r   r   rL   rr   r   r   r   r   r   r   r9   markZparametrizer   r   filterwarningsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     sF    +4%'


	

#r   c                   @   s,   e Zd Zdd Zejeddddd ZdS )	TestExternalSettersc                 C   s$   t || d|j_ddd|j_d S )NrW   rs   rt   ru   )saved_dist_initr@   r\   rv   )rJ   r7   attrsr   r   r   _fake_distribution_init  s
   
z+TestExternalSetters._fake_distribution_init__init__T)Zautospecc                 C   sD   | j |_tdddiid}|jjdksJ |jjdddks J d S )	Nrv   Zwill_beZignored)r   rW   rs   rt   ru   )r   Zside_effectr	   r@   r\   rv   )rJ   Zmock_parent_initr,   r7   r   r   r   test_external_setters  s   z)TestExternalSetters.test_external_settersN)r   r   r   r   r   objectr
   r  r   r   r   r   r     s    
r   )F)Nr%   r&   )NT)%r   
contextlibr   pathlibr   Zunittest.mockr   r   r9   Zpackaging.requirementsr   Zsetuptools.config.setupcfgr   r   r   Zsetuptools.distr	   r
   Zsetuptools.warningsr   textwrapr   Zdistutils.errorsr   r   r   r$   r3   contextmanagerr8   r>   r?   rR   r   r  r   r   r   r   r   r   <module>   s:    

$  T   a