U
    aÊ¹j‘‚  ã                   @   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   úd/var/www/html/bwave/python/venv/lib/python3.8/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 k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   s@   |pi }|   ¡ �& t|ƒ}d|_|o*| ¡  |V  W 5 Q R X 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   s0   t  t¡� td i dtƒ ƒ} | j W 5 Q R X 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d| ƒ}|d d dks.t‚|d d ddgksFt‚|d	 d
 ddgks^t‚d S )NzX[metadata]
version = 10.1.1
keywords = one, two

[options]
scripts = bin/a.py, bin/b.py
ú%sÚmetadataÚversionú10.1.1ÚkeywordsÚoneÚtwoÚoptionsÚscriptszbin/a.pyzbin/b.py)r3   r   ÚAssertionError©Úselfr,   Ú_r1   Zconfig_dictr   r   r   Ú
test_basicP   s    þ	z"TestConfigurationReader.test_basicc              	   C   s,   t  t¡� td| d¡ ƒ W 5 Q R X d S )Nr@   r(   )r9   r:   r   r   r   ©rK   r,   r   r   r   Útest_no_config_   s    z&TestConfigurationReader.test_no_configc              	   C   st   t |dƒ\}}t t¡� td| ƒ W 5 Q R X td| dd�}|d d ddgksXt‚d	|d ksht‚| ¡  d S )
Nz<[metadata]
version = attr: none.VERSION
keywords = one, two
r@   T)Zignore_option_errorsrA   rD   rE   rF   rB   )r3   r9   r:   ÚImportErrorr   rI   ÚremoverJ   r   r   r   Útest_ignore_errorsc   s    þz*TestConfigurationReader.test_ignore_errorsN)r   r   r   rM   rO   rR   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ejjd)d*�d+d,„ ƒZejjd)d*�d-d.„ ƒZd/S )0ÚTestMetadatac              	   C   sÖ   t |dƒ | d¡ d¡ ddi}t||ƒ� }|j}|jdksBt‚|jdksPt‚|jdks^t‚|j	dkslt‚|j
d	d
gks~t‚|jdksŒt‚|jdksšt‚|jddgks¬t‚|jdksºt‚|jdksÈt‚W 5 Q R X 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 LicenserC   úSome descriptionútext/somethingÚpackagezpackage.subZ	fake_namerE   rF   úhttp://test.test.com/test/útest@test.com)r3   r   r   r8   rA   rB   rI   ÚdescriptionÚlong_description_content_typeÚlong_descriptionÚprovidesrV   r   rD   Údownload_urlÚmaintainer_email)rK   r,   Zmeta_initialr7   rA   r   r   r   rM   t   s(    þ þzTestMetadata.test_basicc              	   C   sV   t |tdƒƒ t|ƒ�6}|j}|jdks,t‚|jdks:t‚|jdksHt‚W 5 Q R X d S )Nzr
            [metadata]
            name=foo
            version=0.0.1
            license=Apache 2.0
            Úfooz0.0.1z
Apache 2.0)r3   r   r8   rA   r   rI   rB   rV   ©rK   r,   r7   rA   r   r   r   Útest_license_cfg™   s    ÿþ
zTestMetadata.test_license_cfgc              	   C   sR   t |dƒ | d¡ d¡ | d¡ d¡ t|ƒ�}|jjdksDt‚W 5 Q R X d S )Nz=[metadata]
long_description = file: README.rst, CHANGES.rst

z
README.rstrU   zCHANGES.rstzchangelog contents
and stuffz2readme contents
line2
changelog contents
and stuff)r3   r   r   r8   rA   r^   rI   ©rK   r,   r7   r   r   r   Útest_file_mixed­   s    þ
ÿzTestMetadata.test_file_mixedc              
   C   sf   |  d¡ | dd¡}|j dd� t|dƒ t|dd��$}t t¡� | ¡  W 5 Q R X W 5 Q R X d S )	NrT   Zdepth1Zdepth2T)Údirz1[metadata]
long_description = file: ../../README
F©r6   )Zensurer   r3   r8   r9   r:   r   r5   )rK   r,   Úprojectr7   r   r   r   Útest_file_sandboxed»   s    

z TestMetadata.test_file_sandboxedc              	   C   sv   t |dƒ t|ƒ�Z}|j}|jdks(t‚|jdks6t‚|jdksDt‚|jddgksVt‚|jddgksht‚W 5 Q R X 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[   rZ   zShort summaryÚaÚbúFramework :: Djangoú%Programming Language :: Python :: 3.5)	r3   r8   rA   Úauthor_emailrI   Úurlr\   Ú	platformsÚclassifiersrc   r   r   r   Útest_aliasesÅ   s    þ
þzTestMetadata.test_aliasesc              	   C   sL   t |dƒ t|ƒ�0}|j}|jddgks,t‚|jddgks>t‚W 5 Q R X d S )Nz[metadata]
name = fake_name
keywords =
  one
  two
classifiers =
  Framework :: Django
  Programming Language :: Python :: 3.5
rE   rF   rm   rn   )r3   r8   rA   rD   rI   rr   rc   r   r   r   Útest_multilineÝ   s    þ
þzTestMetadata.test_multilinec              	   C   s<   t |dƒ t|ƒ� }|j}|jdddœks.t‚W 5 Q R X 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   rA   Úproject_urlsrI   rc   r   r   r   Ú	test_dictñ   s    þ
þzTestMetadata.test_dictc              	   C   sF  t |dƒ\}}| d¡}| d¡ d¡ | d¡ d¡ | d¡}| d¡ d¡ | d¡ d¡ t|ƒ�}|jjd	ks|t‚W 5 Q R X | d
¡ t|ƒ�}|jjdksªt‚W 5 Q R X | d¡ t|ƒ�}|jjdksØt‚W 5 Q R X | d¡ t|ƒ�}|jjdk�st‚W 5 Q R X | d¡ t|ƒ�}|jjdk�s8t‚W 5 Q R X 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   rA   rB   rI   )rK   r,   r2   r1   Zsub_aZsub_br7   r   r   r   Útest_version   s4     ÿ


ÿ








zTestMetadata.test_versionc              
   C   sŒ   t |dƒ\}}| dd¡ d¡ t|ƒ�}|jjdks:t‚W 5 Q R X | dd¡ d¡ t t	¡�" t|ƒ�}|jj W 5 Q R X W 5 Q R X d S )Nz4[metadata]
version = file: fake_package/version.txt
r&   zversion.txtz1.2.3
rz   z1.2.3
4.5.6
)
r3   r   r   r8   rA   rB   rI   r9   r:   r   ©rK   r,   rL   r1   r7   r   r   r   Útest_version_file"  s     ÿ

zTestMetadata.test_version_filec              	   C   s:   t |ddd�\}}t|ƒ�}|jjdks,t‚W 5 Q R X d S )NzY[metadata]
version = attr: fake_package_simple.VERSION
[options]
package_dir =
    = src
zsrc/fake_package_simple©r0   rz   ©r3   r8   rA   rB   rI   r}   r   r   r   Ú$test_version_with_package_dir_simple0  s    ù


z1TestMetadata.test_version_with_package_dir_simplec              	   C   s:   t |ddd�\}}t|ƒ�}|jjdks,t‚W 5 Q R X d S )Nzr[metadata]
version = attr: fake_package_rename.VERSION
[options]
package_dir =
    fake_package_rename = fake_dir
Zfake_dirr   rz   r€   r}   r   r   r   Ú$test_version_with_package_dir_rename>  s    ù


z1TestMetadata.test_version_with_package_dir_renamec              	   C   s:   t |ddd�\}}t|ƒ�}|jjdks,t‚W 5 Q R X d S )Nzx[metadata]
version = attr: fake_package_complex.VERSION
[options]
package_dir =
    fake_package_complex = src/fake_dir
zsrc/fake_dirr   rz   r€   r}   r   r   r   Ú%test_version_with_package_dir_complexL  s    ù


z2TestMetadata.test_version_with_package_dir_complexc              	   C   s.   t |dƒ t|dd��}| ¡  W 5 Q R X d S )Nz+[metadata]
name = fake_name
unknown = some
Frh   )r3   r8   r5   re   r   r   r   Útest_unknown_meta_itemZ  s    
z#TestMetadata.test_unknown_meta_itemc              
   C   sD   t |dƒ t|dd��$}t t¡� | ¡  W 5 Q R X W 5 Q R X d S )Nz[metadata.some]
key = val
Frh   ©r3   r8   r9   r:   r   r5   re   r   r   r   Útest_usupported_section_  s    
z$TestMetadata.test_usupported_sectionc              	   C   sŠ   t dddgƒ}t|dƒ\}}| d¡ d¡ t|ƒ�}t |jjƒ|ksJt‚W 5 Q R X | d¡ t|ƒ�}t |jjƒ|ks|t‚W 5 Q R X d S )Nrm   z#Programming Language :: Python :: 3rn   z+[metadata]
classifiers = file: classifiers
rr   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   rA   rr   rI   )rK   r,   ÚexpectedrL   r1   r7   r   r   r   Útest_classifierse  s     ý
ÿ
ÿ
zTestMetadata.test_classifiersc              
   C   s:   t |dƒ t tj¡� t|ƒ� W 5 Q R X W 5 Q R X d S )Nz%[metadata]
description = %(message)s
)r3   r9   r:   ÚconfigparserÚInterpolationMissingOptionErrorr8   rN   r   r   r   Útest_interpolationƒ  s    

zTestMetadata.test_interpolationc              	   C   s&   t |ddd� t|ƒ� W 5 Q R X d S )Nu$   [metadata]
description = Ã©Ã Ã¯Ã´Ã±
úutf-8©r/   ©r3   r8   rN   r   r   r   Útest_non_ascii_1‰  s    
zTestMetadata.test_non_ascii_1c              	   C   s"   t |dƒ t|ƒ� W 5 Q R X d S )Nz
# -*- coding: invalid
r�   rN   r   r   r   Útest_non_ascii_3Ž  s    

zTestMetadata.test_non_ascii_3c              	   C   s6   t |ddd� t|ƒ�}|jjdks(t‚W 5 Q R X d S )Nu8   # -*- coding: utf-8
[metadata]
description = Ã©Ã Ã¯Ã´Ã±
r�   rŽ   u
   Ã©Ã Ã¯Ã´Ã±)r3   r8   rA   r\   rI   re   r   r   r   Útest_non_ascii_4“  s    ý
zTestMetadata.test_non_ascii_4c              
   C   s<   t |ddd� t t¡� t|ƒ� W 5 Q R X W 5 Q R X 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   rN   r   r   r   Útest_not_utf8œ  s    ý
zTestMetadata.test_not_utf8z#4864)Úreasonc              
   C   sb   t |dƒ d}tjt|d��  t|ƒ�}|j}W 5 Q R X W 5 Q R X |jdksPt‚|jdks^t‚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©Úmatchr[   zfoo@foo.com)	r3   r9   Úwarnsr   r8   rA   ro   rI   ra   ©rK   r,   Úmsgr7   rA   r   r   r   Útest_warn_dash_deprecation©  s    þ
z'TestMetadata.test_warn_dash_deprecationc              
   C   sb   t |dƒ d}tjt|d��  t|ƒ�}|j}W 5 Q R X W 5 Q R X |jdksPt‚|jdks^t‚d S )Nz5[metadata]
Name = foo
description = Some description
zAUsage of uppercase key 'Name' in 'metadata' will not be supportedr–   rb   rW   )	r3   r9   r˜   r   r8   rA   r   rI   r\   r™   r   r   r   Útest_make_option_lowercase»  s    

z'TestMetadata.test_make_option_lowercaseN)r   r   r   rM   rd   rf   rj   rs   rt   ry   r|   r~   r�   r‚   rƒ   r„   r†   r‰   rŒ   r�   r‘   r’   r”   r9   ÚmarkZxfailr›   rœ   r   r   r   r   rS   s   s0   %
"	
rS   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ddddddddg¡dd„ ƒZej dddddg¡d d!„ ƒZej dd"d#d$d%d&d'd(d)d*d+g
¡ej d,¡d-d.„ ƒƒZd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Zd=d>„ Zd?d@„ ZdAdB„ ZdCS )DÚTestOptionsc              
   C   sø   t |dƒ tjtdd�}|�Ò t|ƒ�¾}|js2t‚|js<t‚|jdddœksPt‚|j	ddgksbt‚|j
d	d
gkstt‚|jddgks†t‚|jddgks˜t‚|jdddgks¬t‚|jdddgksÀt‚|jdksÎt‚|jddgksàt‚W 5 Q R X W 5 Q R X 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   rl   Ú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úspack ==1.1, ==1.3Útherez>=1.0, !=2.8Zmodule1Zmodule2)r3   r9   r˜   r   r8   Zzip_saferI   Zinclude_package_datar2   ÚpackagesrŸ   rH   Údependency_linksÚinstall_requiresÚsetup_requiresZpython_requiresÚ
py_modules©rK   r,   Zdeprecr7   r   r   r   rM   Ê  s8    þ

þ
ý
ý
zTestOptions.test_basicc              
   C   sÄ   t |dƒ tjtdd�}|�ž t|ƒ�Š}|jdddœks<t‚|jddgksNt‚|jd	d
gks`t‚|j	ddgksrt‚|j
ddgks„t‚|jdddgks˜t‚|jdddgks¬t‚W 5 Q R X W 5 Q R X 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¬   r­   r®   r¯   )r3   r9   r˜   r   r8   r2   rI   r°   rŸ   rH   r±   r²   r³   rµ   r   r   r   rt   õ  s0    þþ
ý
ýzTestOptions.test_multilinec              
   C   sD   t |dƒ t|dd��$}t t¡� | ¡  W 5 Q R X W 5 Q R X d S )Nz[options]
package_dir = a b
Frh   r…   re   r   r   r   Útest_package_dir_fail)  s    
z!TestOptions.test_package_dir_failc              	   C   sV   t |dƒ t|ƒ�:}|jddgdgdœks.t‚|jddgdgdœksHt‚W 5 Q R X 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_datarI   Zexclude_package_datare   r   r   r   Útest_package_data/  s    þ
þþzTestOptions.test_package_datac              	   C   s2   t |dƒ t|ƒ�}|jdgks$t‚W 5 Q R X d S )Nú[options]
packages = find:
r&   )r3   r8   r°   rI   re   r   r   r   Útest_packagesE  s    

zTestOptions.test_packagesc              	   C   sÄ   t |dƒ\}}td|ƒ\}}td|ƒ\}}t|ƒ�"}t|jƒtdddgƒksPt‚W 5 Q R X | d¡ t|ƒ�}|jdgks~t‚W 5 Q R X | d¡ t|ƒ� }t|jƒtddgƒks¶t‚W 5 Q R X d S )	Nr¹   Úsub_oneÚsub_twor&   úfake_package.sub_twoúfake_package.sub_onezi[options]
packages = find:

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

[options.packages.find]
exclude =
    fake_package.sub_one
©r3   r$   r8   r‡   r°   rI   r   ©rK   r,   r!   r1   Zdir_sub_onerL   Zdir_sub_twor7   r   r   r   Útest_find_directiveK  s&    

ýÿ

ÿ
zTestOptions.test_find_directivec              	   C   sÀ   t |dƒ\}}td|ƒ\}}td|dd�\}}t|ƒ�}t|jƒdddhksPt‚W 5 Q R X | d	¡ t|ƒ�}|jdgks~t‚W 5 Q R X | d
¡ t|ƒ�}t|jƒddhks²t‚W 5 Q R X 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
za[options]
packages = find_namespace:

[options.packages.find]
exclude =
    fake_package.sub_one
r¿   rÀ   r   r   r   Útest_find_namespace_directivep  s,     ÿ
ýÿ

ÿ
z)TestOptions.test_find_namespace_directivec              	   C   sV   t |dƒ t|ƒ�:}|jddgddgdœks0t‚t|jjƒddhksHt‚W 5 Q R X 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_requirerI   r‡   rA   Zprovides_extrasre   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   s@   t ||ƒ d}tjt|d�� t|ƒ�}W 5 Q R X W 5 Q R X d S ©NzoOne of the parsed requirements in `(install_requires|extras_require.+)` looks like a valid environment marker.*r–   )r3   r9   r:   r   r8   ©rK   r1   r,   r—   rL   r   r   r   Ú+test_raises_accidental_env_marker_misconfig¨  s    
ÿ
z7TestOptions.test_raises_accidental_env_marker_misconfigz3[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   s@   t ||ƒ d}tjt|d�� t|ƒ�}W 5 Q R X W 5 Q R X d S rÇ   )r3   r9   r˜   r   r8   rÈ   r   r   r   Ú)test_warn_accidental_env_marker_misconfig¿  s    

ÿ
z5TestOptions.test_warn_accidental_env_marker_misconfigz9[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   s:   t ||ƒ t|ƒ}t|ƒ�}W 5 Q R X t|ƒ|ks6t‚d S )N)r3   Úlenr8   rI   )rK   r1   r,   ZrecwarnZnum_warningsrL   r   r   r   Ú+test_nowarn_accidental_env_marker_misconfigÒ  s
    


z7TestOptions.test_nowarn_accidental_env_marker_misconfigc              	   C   s:   t |dƒ t|ƒ�}|jdgdgdœks,t‚W 5 Q R X d S )Nz2[options.extras_require]
foo-a = foo
foo_b = test
rb   Útest)zfoo-aZfoo_b)r3   r8   rÅ   rI   re   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s2t‚W 5 Q R X d}| d¡ |¡ | d¡ t|ƒ�}|j|ksrt‚W 5 Q R X 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Ó   rI   r   r   )rK   r,   rL   r1   r7   rˆ   r   r   r   Útest_entry_pointsð  s"    þ
þû	ÿ

zTestOptions.test_entry_pointsc              	   C   s@   t |dƒ\}}t|ƒ� }|jddgdgdœks2t‚W 5 Q R X 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Ó   rI   r}   r   r   r   Ú test_case_sensitive_entry_points  s    þ
þûz,TestOptions.test_case_sensitive_entry_pointsc              	   C   sP   t |dƒ t|ƒ�4}dddgfdddgfg}t|jƒt|ƒksBt‚W 5 Q R X 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_filesrI   ©rK   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|ƒ�N}dddgfddddgfddddgfdd	d
dgfg}t|jƒt|ƒksìt‚W 5 Q R X d S )Nz€[options.data_files]
cfg =
      a/b.conf
      c/d.conf
data = *.dat
icons = 
      *.ico
audio = 
      *.wav
      sounds.db
za.datr   zb.datzc.datza.icozb.icozc.icozbeep.wavzboop.wavz	sounds.dbrÖ   r×   rØ   rÙ   ZiconsZaudio)r3   r   r   r8   rÚ   rÛ   rI   rÜ   r   r   r   Útest_data_files_globby2  s(    þ

üz"TestOptions.test_data_files_globbyc              	   C   s.   t |tdƒƒ t|ƒ�}| ¡  W 5 Q R X d S )NzE
            [options]
            python_requires=>=2.7
            ©r3   r   r8   r5   re   r   r   r   Útest_python_requires_simpleU  s    ÿþ	
z'TestOptions.test_python_requires_simplec              	   C   s.   t |tdƒƒ t|ƒ�}| ¡  W 5 Q R X d S )NzM
            [options]
            python_requires=>=2.7,!=3.0.*
            rß   re   r   r   r   Útest_python_requires_compoundb  s    ÿþ	
z)TestOptions.test_python_requires_compoundc              
   C   sD   t |tdƒƒ t t¡�" t|ƒ�}| ¡  W 5 Q R X W 5 Q R X d S )NzG
            [options]
            python_requires=invalid
            )r3   r   r9   r:   Ú	Exceptionr8   r5   re   r   r   r   Útest_python_requires_invalido  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^t
‚|jd
kslt
‚| t |¡¡s€t
‚W 5 Q R X 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   rI   r   ÚsamefileÚgetfile)rK   r,   Úmodule_pathr-   r7   rê   r   r   r   Útest_cmdclass}  s    
þ

zTestOptions.test_cmdclassc              	   C   sj   t |tdƒƒ | d¡ d¡ | d¡ d¡ t|ƒ�*}|jdgksHt‚|jddgiks\t‚W 5 Q R X 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²   rI   rÅ   re   r   r   r   Útest_requirements_file’  s    ÿþ
z"TestOptions.test_requirements_fileN)r   r   r   rM   rt   r¶   r¸   rº   rÁ   rÂ   rÆ   r9   r�   ZparametrizerÉ   rÊ   ÚfilterwarningsrÌ   rÎ   rÔ   rÕ   rÝ   rÞ   rà   rá   rã   rî   rð   r   r   r   r   rž   É  sp   +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 )NrX   ru   rv   rw   )Úsaved_dist_initrA   r]   rx   )rK   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*t‚|jjdddœks@t‚d S )	Nrx   Zwill_beZignored)rô   rX   ru   rv   rw   )rõ   Zside_effectr	   rA   r]   rI   rx   )rK   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   Údistutils.errorsr   r   r   r$   r3   Úcontextmanagerr8   r>   r?   rS   rž   rö   ró   rò   r   r   r   r   Ú<module>   s<   
     ÿ
$  X   a