o
    LK&h                     @   s   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 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__section_prefix r   r   X/var/www/html/venv/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   

r4   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_dist>   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_implementedJ   s   "rA   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)r4   r   strselfr-   _r2   config_dictr   r   r   
test_basicQ   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   rK   r   rM   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)ignore_option_errorsrC   rF   rG   rH   rD   )r4   r<   r=   ImportErrorr   rK   removerL   r   r   r   test_ignore_errorsd   s   z*TestConfigurationReader.test_ignore_errorsN)r   r   r   rP   rR   rV   r   r   r   r   rB   P   s    rB   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 LicenserE   zSome descriptiontext/somethingpackagezpackage.sub	fake_namerG   rH   http://test.test.com/test/test@test.com)r4   r   r   r;   rC   rD   descriptionlong_description_content_typelong_descriptionprovidesrZ   r   rF   download_urlmaintainer_email)rM   r-   meta_initialr:   rC   r   r   r   rP   u   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)r4   r   r;   rC   r   rD   rZ   rM   r-   r:   rC   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.rstrY   zCHANGES.rstzchangelog contents
and stuffz2readme contents
line2
changelog contents
and stuff)r4   r   r   r;   rC   rb   rM   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 )	NrX   depth1depth2T)dirz1[metadata]
long_description = file: ../../README
Fr9   )ensurer   r4   r;   r<   r=   r   r7   )rM   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)r4   r;   rC   author_emailurlr`   	platformsclassifiersrh   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
rG   rH   ru   rv   )r4   r;   rC   rF   rz   rh   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)r4   r;   rC   project_urlsrh   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
)r4   r   r   r   r;   rC   rD   )rM   r-   r3   r2   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
)	r4   r   r   r;   rC   rD   r<   r=   r   rj   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r1   r   r4   r;   rC   rD   rj   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
fake_dirr   r   r   rj   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   rj   r   r   r   %test_version_with_package_dir_complexK  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
Fro   )r4   r;   r7   rj   r   r   r   test_unknown_meta_itemY  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
Fro   r4   r;   r<   r=   r   r7   rj   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)ru   z#Programming Language :: Python :: 3rv   z+[metadata]
classifiers = file: classifiers
rz   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
)setr4   r   r   r;   rC   rz   )rM   r-   expectedrN   r2   r:   r   r   r   test_classifiersd  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
)r4   r<   r=   configparserInterpolationMissingOptionErrorr;   rQ   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r0   r4   r;   rQ   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   rQ   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
   éàïôñ)r4   r;   rC   r`   rj   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)r4   r<   r=   UnicodeDecodeErrorr;   rQ   r   r   r   test_not_utf8  s   
"zTestMetadata.test_not_utf8)	error_msgr2   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
                    Namerg   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)   -rN   )r4   r<   warnsr   reescaper;   	__enter__r   rU   itemsreplacelowergetattrrC   )	rM   r-   r   r2   r   r:   fieldvalueattrr   r   r   *test_invalid_options_previously_deprecated  s   
!z7TestMetadata.test_invalid_options_previously_deprecatedN)r   r   r   rP   ri   rk   rr   r{   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r<   markparametrizer   r   r   r   r   r   rW   t   sL    %
"	rW   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   rt   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)r4   r<   r   r   r;   zip_safeinclude_package_datar3   packagesr   rJ   dependency_linksinstall_requiressetup_requirespython_requires
py_modulesrM   r-   deprecr:   r   r   r   rP     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   )r4   r<   r   r   r;   r3   r   r   rJ   r   r   r   r   r   r   r   r|      s"   
PzTestOptions.test_multilinec              	   C   r   )Nz[options]
package_dir = a b
Fro   r   rj   r   r   r   test_package_dir_fail4  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)r4   r;   package_dataexclude_package_datarj   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'   )r4   r;   r   rj   r   r   r   test_packagesP  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   r4   r%   r;   r   r   r   rM   r-   r"   r2   r:   r   r   r   test_find_directiveV  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   )r4   r;   extras_requirer   rC   provides_extrasrj   r   r   r   test_extras_require  s   
	"zTestOptions.test_extras_requirer2   )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   )r4   r<   r=   r   r;   rM   r2   r-   r   rN   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   )r4   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)r4   lenr;   )rM   r2   r-   recwarnnum_warningsrN   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
rg   test)zfoo-afoo_b)r4   r;   r   rj   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
)r4   r;   r   r   r   )rM   r-   rN   r2   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   )r4   r;   r   rj   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)r4   r;   sorted
data_filesrM   r-   r:   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  icons)r  r  r  audio)r  r  r  )r4   r   r   r;   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
            r4   r   r;   r7   rj   r   r   r   test_python_requires_simple`     
	
"z'TestOptions.test_python_requires_simplec                 C   r  )NzM
            [options]
            python_requires=>=2.7,!=3.0.*
            r  rj   r   r   r   test_python_requires_compoundm  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
            )r4   r   r<   r=   	Exceptionr;   r7   rj   r   r   r   test_python_requires_invalidz  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_textr4   inspectcleandocr;   cmdclassr   r   samefilegetfile)rM   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)r4   r   r   r   r;   r   r   rj   r   r   r   test_requirements_file  s   
"z"TestOptions.test_requirements_fileN)r   r   r   rP   r|   r   r   r   r   r   r   r<   r   r   r   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 )Nr[   r}   r~   r   )saved_dist_initrC   ra   r   )rM   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)r1  r[   r}   r~   r   )r2  side_effectr	   rC   ra   r   )rM   mock_parent_initr-   r:   r   r   r   test_external_setters  s   z)TestExternalSetters.test_external_settersN)r   r   r   r2  r   objectr
   r9  r   r   r   r   r/    s    
r/  )F)Nr&   r'   )NT)&r   
contextlibr$  r   pathlibr   unittest.mockr   r   r<   packaging.requirementsr   setuptools.config.setupcfgr   r   r   setuptools.distr	   r
   setuptools.warningsr   textwrapr   distutils.errorsr   r   r   r%   r4   contextmanagerr;   rA   rB   rW   r   r3  r0  r/  r   r   r   r   <module>   s<    

$  b   a