o
    'Ti                     @   s2  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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 dejv 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DistutilsOptionError__pypy__c                   @   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__section_prefix r   r   Y/home/ubuntu/.local/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   

r5   Tc                 c   sp    |pi }|   % t|}d|_|o"|  |V  W d    d S  |V  W d    d S 1 s1w   Y  d S )Nr)   )as_cwdr	   script_nameparse_config_files)r.   kwargs_initialparsedistr   r   r   get_distA   s   
"r<   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_implementedM   s   "rB   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)r5   r   strselfr.   _r3   config_dictr   r   r   
test_basicT   s   	z"TestConfigurationReader.test_basicc                 C   sB   t t tt|d W d    d S 1 sw   Y  d S )Nr*   )r=   r>   r   r   rL   r   rN   r.   r   r   r   test_no_configc   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)ignore_option_errorsrD   rG   rH   rI   rE   )r5   r=   r>   ImportErrorr   rL   removerM   r   r   r   test_ignore_errorsg   s   z*TestConfigurationReader.test_ignore_errorsN)r   r   r   rQ   rS   rW   r   r   r   r   rC   S   s    rC   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ejd)d*ed+d,d-ifd.ed/d0d1ifgd2d3 Zd4S )5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 LicenserF   zSome descriptiontext/somethingpackagezpackage.sub	fake_namerH   rI   http://test.test.com/test/test@test.com)r5   r   r   r<   rD   rE   descriptionlong_description_content_typelong_descriptionprovidesr[   r    rG   download_urlmaintainer_email)rN   r.   meta_initialr;   rD   r   r   r   rQ   x   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)r5   r   r<   rD   r    rE   r[   rN   r.   r;   rD   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.rstrZ   zCHANGES.rstzchangelog contents
and stuffz2readme contents
line2
changelog contents
and stuff)r5   r   r   r<   rD   rc   rN   r.   r;   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 )	NrY   depth1depth2T)dirz1[metadata]
long_description = file: ../../README
Fr:   )ensurer   r5   r<   r=   r>   r   r8   )rN   r.   projectr;   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
r`   r_   zShort summaryabFramework :: Django%Programming Language :: Python :: 3.5)r5   r<   rD   author_emailurlra   	platformsclassifiersri   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
rH   rI   rv   rw   )r5   r<   rD   rG   r{   ri   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)r5   r<   rD   project_urlsri   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
subpkg_ar   r   zmod.pyzVERSION = (2016, 11, 26)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
)r5   r   r   r   r<   rD   rE   )rN   r.   r4   r3   sub_asub_br;   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
r   z1.2.3
4.5.6
)	r5   r   r   r<   rD   rE   r=   r>   r   rk   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r2   r   r5   r<   rD   rE   rk   r   r   r   $test_version_with_package_dir_simple2     

"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
fake_dirr   r   r   rk   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   r   r   rk   r   r   r   %test_version_with_package_dir_complexN  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
Frp   )r5   r<   r8   rk   r   r   r   test_unknown_meta_item\  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
Frp   r5   r<   r=   r>   r   r8   rk   r   r   r   test_usupported_sectiona     

"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)rv   z#Programming Language :: Python :: 3rw   z+[metadata]
classifiers = file: classifiers
r{   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
)setr5   r   r   r<   rD   r{   )rN   r.   expectedrO   r3   r;   r   r   r   test_classifiersg  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
)r5   r=   r>   configparserInterpolationMissingOptionErrorr<   rR   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r1   r5   r<   rR   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   rR   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
   éàïôñ)r5   r<   rD   ra   rk   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)r5   r=   r>   UnicodeDecodeErrorr<   rR   r   r   r   test_not_utf8  s   
"zTestMetadata.test_not_utf8)	error_msgr3   invalidzCInvalid dash-separated key 'author-email' in 'metadata' (setup.cfg)z
                    [metadata]
                    author-email = test@test.com
                    maintainer_email = foo@foo.com
                    zauthor-emailr`   z6Invalid uppercase key 'Name' in 'metadata' (setup.cfg)z
                    [metadata]
                    Name = foo
                    description = Some description
                    Namerh   c           	      C   s   t || tjtt|d t| }W d    n1 s w   Y  |d	  |
 D ]\}}|dd }t|j||ksFJ q0d S )Nmatchr*   -rO   )r5   r=   warnsr   reescaper<   	__enter__r   rV   itemsreplacelowergetattrrD   )	rN   r.   r   r3   r   r;   fieldvalueattrr   r   r   *test_invalid_options_previously_deprecated  s   
!z7TestMetadata.test_invalid_options_previously_deprecatedN)r   r   r   rQ   rj   rl   rs   r|   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r=   markparametrizer   r   r   r   r   r   rX   w   sL    %
"	rX   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ejjedddd Zejdg dejjed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/d0 Zd1d2 Zd3S )4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   ru   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.3heyr   zspack ==1.1, ==1.3therez>=1.0, !=2.8module1module2)r5   r=   r   r   r<   zip_safeinclude_package_datar4   packagesr   rK   dependency_linksinstall_requiressetup_requirespython_requires
py_modulesrN   r.   deprecr;   r   r   r   rQ     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   )r5   r=   r   r   r<   r4   r   r   rK   r   r   r   r   r   r   r   r}     s"   
PzTestOptions.test_multilinec              	   C   r   )Nz[options]
package_dir = a b
Frp   r   rk   r   r   r   test_package_dir_fail7  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   helloz	fake1.txtz	fake2.txtz*.dat)r5   r<   package_dataexclude_package_datark   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(   )r5   r<   r   rk   r   r   r   test_packagesS  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   r5   r&   r<   r   r   r   rN   r.   r#   r3   r;   r   r   r   test_find_directiveY  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_directive~  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.2RXPr   r   )pdfrestr   r   )r5   r<   extras_requirer   rD   provides_extrasrk   r   r   r   test_extras_require  s   
	"zTestOptions.test_extras_requirer3   )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'
zExceptions missing on PyPy)reasonc              	   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   )r5   r=   r>   r   r<   rN   r3   r.   r   rO   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
z&Warnings missing on PyPy (minor issue)c              	   C   r   r   )r5   r=   r   r   r<   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)r5   lenr<   )rN   r3   r.   recwarnnum_warningsrO   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
rh   test)zfoo-afoo_b)r5   r<   r   rk   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)group1group2zN[blogtool.parsers]
.rst = some.nested.module:SomeClass.some_classmethod[reST]
entry_pointsz,[options]
entry_points = file: entry_points
)r5   r<   r   r   r   )rN   r.   rO   r3   r;   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   )GROUP1r   )r5   r<   r   rk   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)r5   r<   sorted
data_filesrN   r.   r;   r   r   r   r   test_data_files3  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  icons)r  r  r  audio)r  r  r  )r5   r   r   r<   r  r	  r
  r   r   r   test_data_files_globbyD  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
            r5   r   r<   r8   rk   r   r   r   test_python_requires_simpleg     
	
"z'TestOptions.test_python_requires_simplec                 C   r  )NzM
            [options]
            python_requires=>=2.7,!=3.0.*
            r  rk   r   r   r   test_python_requires_compoundt  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
            )r5   r   r=   r>   	Exceptionr<   r8   rk   r   r   r   test_python_requires_invalid  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
        	customcmd	CustomCmdcustom_build)r   parentr   
write_textr5   inspectcleandocr<   cmdclassr   r   samefilegetfile)rN   r.   module_pathr/   r;   r(  r   r   r   test_cmdclass  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.txtcoloramar   colors)r5   r   r   r   r<   r   r   rk   r   r   r   test_requirements_file  s   
"z"TestOptions.test_requirements_fileN)r   r   r   rQ   r}   r   r   r   r   r   r   r=   r   r   xfailIS_PYPYr   r   filterwarningsr   r   r  r  r  r  r  r  r  r,  r/  r   r   r   r   r     sJ    +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 )Nr\   r~   r   r   )saved_dist_initrD   rb   r   )rN   r;   attrsr   r   r   _fake_distribution_init  s
   
z+TestExternalSetters._fake_distribution_init__init__T)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 )	Nr   will_beignored)r5  r\   r~   r   r   )r6  side_effectr	   rD   rb   r   )rN   mock_parent_initr.   r;   r   r   r   test_external_setters  s   z)TestExternalSetters.test_external_settersN)r   r   r   r6  r   objectr
   r=  r   r   r   r   r3    s    
r3  )F)Nr'   r(   )NT))r   
contextlibr&  r   syspathlibr   unittest.mockr   r   r=   packaging.requirementsr   setuptools.config.setupcfgr   r   r   setuptools.distr	   r
   setuptools.warningsr   textwrapr   distutils.errorsr   r   builtin_module_namesr1  r   r&   r5   contextmanagerr<   rB   rC   rX   r   r7  r4  r3  r   r   r   r   <module>   s@    


$  b   e