o
    5‘ði°ƒ  ã                   @   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   úd/root/parts/websockify/install/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s€J ‚W d   ƒ n1 sŠw   Y  | d¡ t|ƒ�}|jjdks¡J ‚W d   ƒ n1 s«w   Y  | d¡ t|ƒ�}|jjdksÂJ ‚W d   ƒ d S 1 sÍw   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 s�w   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*   þ


þPêz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"   þ
þPòz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