
#þî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 Gd d „  d e e ƒ Z d d d „ Z d d d d d „ Z e j d d d d „ ƒ Z d d „  Z Gd d „  d ƒ Z  Gd d „  d ƒ Z! Gd d „  d ƒ Z" e j# Z$ Gd 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   úK/tmp/pip-build-zijwfla7/setuptools/setuptools/tests/config/test_setupcfg.pyr      s   r   Fc             C   sa   | } x& |  j  d ƒ D] } | j | ƒ } q Wd  } | sW | j d ƒ } | j d ƒ | | f S)Nú/z__init__.pyÚ )ÚsplitÚmkdirÚjoinÚwrite)ÚnameÚbase_dirÚnsÚdir_packageZdir_nameÚ	init_filer   r   r   Úmake_package_dir   s    r"   ÚasciiÚfake_packagec             C   s   | d  k r d } |  j  d ƒ j | ƒ |  j  d ƒ } | j | j | ƒ d d ƒt | |  ƒ \ } } | j d ƒ | | f S)Nz%from setuptools import setup
setup()
zsetup.pyz	setup.cfgÚmodeÚwbzWVERSION = (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    	r/   Tc          	   c   sN   | p	 i  } |  j  ƒ  �/ t | ƒ } d | _ | o= | j ƒ  | VWd  QRXd  S)Nzsetup.py)Zas_cwdr	   Úscript_nameÚparse_config_files)r(   Zkwargs_initialÚparseÚdistr   r   r   Úget_dist>   s    	r4   c              C   s:   t  j t ƒ �$ t d  i  d t ƒ  ƒ }  |  j Wd  QRXd  S)NF)ÚpytestÚraisesÚNotImplementedErrorr   r   Úparsers)Úhandlerr   r   r   Útest_parsers_implementedJ   s    r:   c               @   s4   e  Z d  Z d d „  Z d d „  Z d d „  Z d S)ÚTestConfigurationReaderc             C   s…   t  | d ƒ \ } } t t | ƒ ƒ } | d d d k sA t ‚ | d d d d g k sa t ‚ | 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
ÚmetadataÚversionz10.1.1ÚkeywordsÚoneÚtwoÚoptionsÚscriptszbin/a.pyzbin/b.py)r/   r   ÚstrÚAssertionError)Úselfr(   Ú_r-   Úconfig_dictr   r   r   Ú
test_basicQ   s     z"TestConfigurationReader.test_basicc             C   s4   t  j t ƒ � t t | j d ƒ ƒ ƒ Wd  QRXd  S)Nz	setup.cfg)r5   r6   r   r   rC   r   )rE   r(   r   r   r   Útest_no_config`   s    z&TestConfigurationReader.test_no_configc             C   s˜   t  | d ƒ \ } } t j t ƒ � t t | ƒ ƒ Wd  QRXt t | ƒ d d ƒ} | d d d d g k st t ‚ d | d k sŠ t ‚ | j ƒ  d  S)	Nz<[metadata]
version = attr: none.VERSION
keywords = one, two
Zignore_option_errorsTr<   r>   r?   r@   r=   )r/   r5   r6   ÚImportErrorr   rC   rD   Úremove)rE   r(   rF   r-   rG   r   r   r   Útest_ignore_errorsd   s     z*TestConfigurationReader.test_ignore_errorsN)r   r   r   rH   rI   rL   r   r   r   r   r;   P   s   r;   c               @   sQ  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 d7 d, e d- ƒ d. d/ i f d0 e d1 ƒ d2 d3 i f g ƒ d4 d5 „  ƒ Z d6 S)8ÚTestMetadatac          
   C   s3  t  | d ƒ | j d ƒ j d ƒ d d i } t | | ƒ �î } | j } | j d k s_ t ‚ | j d k st 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 ‚ | j d d g k sþ t ‚ | j d k st ‚ | j d k s(t ‚ Wd  QRXd  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
ÚREADMEzreadme contents
line2ÚlicensezBSD 3-Clause Licensez10.1.1zSome descriptionztext/somethingÚpackagezpackage.subZ	fake_namer?   r@   zhttp://test.test.com/test/ztest@test.com)r/   r   r   r4   r<   r=   rD   ÚdescriptionÚlong_description_content_typeÚlong_descriptionÚprovidesrO   r   r>   Údownload_urlÚmaintainer_email)rE   r(   Zmeta_initialr3   r<   r   r   r   rH   u   s"    	zTestMetadata.test_basicc          	   C   su   t  | t d ƒ ƒ t | ƒ �O } | j } | j d k s@ t ‚ | j d k sU t ‚ | j d k sj t ‚ Wd  QRXd  S)Nzr
            [metadata]
            name=foo
            version=0.0.1
            license=Apache 2.0
            Úfooz0.0.1z
Apache 2.0)r/   r   r4   r<   r   rD   r=   rO   )rE   r(   r3   r<   r   r   r   Útest_license_cfgš   s    
	zTestMetadata.test_license_cfgc          	   C   sk   t  | d ƒ | j d ƒ j d ƒ | j d ƒ j d ƒ t | ƒ � } | j j d k s` t ‚ Wd  QRXd  S)Nz=[metadata]
long_description = file: README.rst, CHANGES.rst

z
README.rstzreadme contents
line2zCHANGES.rstzchangelog contents
and stuffz2readme contents
line2
changelog contents
and stuff)r/   r   r   r4   r<   rS   rD   )rE   r(   r3   r   r   r   Útest_file_mixed®   s    	zTestMetadata.test_file_mixedc             C   s}   | j  d ƒ | j d d ƒ } | j  d d ƒ t | d ƒ t | d d ƒ�( } t j t ƒ � | j ƒ  Wd  QRXWd  QRXd  S)	NrN   Zdepth1Zdepth2ÚdirTz1[metadata]
long_description = file: ../../README
r2   F)Zensurer   r/   r4   r5   r6   r   r1   )rE   r(   Úprojectr3   r   r   r   Útest_file_sandboxed¼   s    z TestMetadata.test_file_sandboxedc          
   C   s¥   t  | d ƒ t | ƒ �… } | j } | j d k s: t ‚ | j d k sO t ‚ | j d k sd t ‚ | j d d g k s t ‚ | j d d g k sš t ‚ Wd  QRXd  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
ztest@test.comzhttp://test.test.com/test/zShort summaryÚaÚbzFramework :: Djangoz%Programming Language :: Python :: 3.5)	r/   r4   r<   Úauthor_emailrD   ÚurlrQ   Ú	platformsÚclassifiers)rE   r(   r3   r<   r   r   r   Útest_aliasesÆ   s    
	zTestMetadata.test_aliasesc          
   C   sf   t  | d ƒ t | ƒ �F } | j } | j d d g k s@ t ‚ | j d d g k s[ t ‚ Wd  QRXd  S)Nz[metadata]
name = fake_name
keywords =
  one
  two
classifiers =
  Framework :: Django
  Programming Language :: Python :: 3.5
r?   r@   zFramework :: Djangoz%Programming Language :: Python :: 3.5)r/   r4   r<   r>   rD   rb   )rE   r(   r3   r<   r   r   r   Útest_multilineÞ   s    		zTestMetadata.test_multilinec             C   sQ   t  | d ƒ t | ƒ �1 } | j } | j d d d d i k sF t ‚ Wd  QRXd  S)Nzf[metadata]
project_urls =
  Link One = https://example.com/one/
  Link Two = https://example.com/two/
zLink Onezhttps://example.com/one/zLink Twozhttps://example.com/two/)r/   r4   r<   Úproject_urlsrD   )rE   r(   r3   r<   r   r   r   Ú	test_dictò   s    	zTestMetadata.test_dictc          %   C   s©  t  | d ƒ \ } } | j d ƒ } | j d ƒ j d ƒ | j d ƒ j d ƒ | j d ƒ } | j d ƒ j d ƒ | j d ƒ j d ƒ t | ƒ � } | j j d	 k s² t ‚ Wd  QRX| j d
 ƒ t | ƒ � } | j j d k sí t ‚ Wd  QRX| j d ƒ t | ƒ � } | j j d k s(t ‚ Wd  QRX| j d ƒ t | ƒ � } | j j d k sct ‚ Wd  QRX| j d ƒ t | ƒ � } | j j d k sžt ‚ Wd  QRXd  S)Nz0[metadata]
version = attr: fake_package.VERSION
Zsubpkg_az__init__.pyr   zmod.pyzVERSION = (2016, 11, 26)Zsubpkg_bz2import third_party_module
VERSION = (2016, 11, 26)z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
)r/   r   r   r   r4   r<   r=   rD   )rE   r(   r.   r-   Zsub_aZsub_br3   r   r   r   Útest_version  s.    zTestMetadata.test_versionc             C   s¨   t  | d ƒ | j d d ƒ j d ƒ t | ƒ � } | j j d k sM t ‚ Wd  QRX| j d d ƒ j d ƒ t j t	 ƒ �% t | ƒ � } | j j Wd  QRXWd  QRXd  S)Nz4[metadata]
version = file: fake_package/version.txt
r$   zversion.txtz1.2.3
z1.2.3z1.2.3
4.5.6
)
r/   r   r   r4   r<   r=   rD   r5   r6   r   )rE   r(   r3   r   r   r   Útest_version_file#  s    zTestMetadata.test_version_filec          	   C   sE   t  | d d d ƒt | ƒ � } | j j d k s: t ‚ Wd  QRXd  S)NzY[metadata]
version = attr: fake_package_simple.VERSION
[options]
package_dir =
    = src
r,   zsrc/fake_package_simplez1.2.3)r/   r4   r<   r=   rD   )rE   r(   r3   r   r   r   Ú$test_version_with_package_dir_simple/  s    z1TestMetadata.test_version_with_package_dir_simplec          	   C   sE   t  | d d d ƒt | ƒ � } | j j d k s: t ‚ Wd  QRXd  S)Nzr[metadata]
version = attr: fake_package_rename.VERSION
[options]
package_dir =
    fake_package_rename = fake_dir
r,   Zfake_dirz1.2.3)r/   r4   r<   r=   rD   )rE   r(   r3   r   r   r   Ú$test_version_with_package_dir_rename=  s    z1TestMetadata.test_version_with_package_dir_renamec          	   C   sE   t  | d d d ƒt | ƒ � } | j j d k s: t ‚ Wd  QRXd  S)Nzx[metadata]
version = attr: fake_package_complex.VERSION
[options]
package_dir =
    fake_package_complex = src/fake_dir
r,   zsrc/fake_dirz1.2.3)r/   r4   r<   r=   rD   )rE   r(   r3   r   r   r   Ú%test_version_with_package_dir_complexK  s    z2TestMetadata.test_version_with_package_dir_complexc          	   C   s7   t  | d ƒ t | d d ƒ� } | j ƒ  Wd  QRXd  S)Nz+[metadata]
name = fake_name
unknown = some
r2   F)r/   r4   r1   )rE   r(   r3   r   r   r   Útest_unknown_meta_itemY  s    z#TestMetadata.test_unknown_meta_itemc             C   sN   t  | d ƒ t | d d ƒ�( } t j t ƒ � | j ƒ  Wd  QRXWd  QRXd  S)Nz[metadata.some]
key = val
r2   F)r/   r4   r5   r6   r   r1   )rE   r(   r3   r   r   r   Útest_usupported_section^  s    z$TestMetadata.test_usupported_sectionc             C   s¹   t  d d d g ƒ } t | d ƒ \ } } | j d ƒ j d ƒ t | ƒ �% } t  | j j ƒ | k sm t ‚ Wd  QRX| j d ƒ t | ƒ �% } t  | j j ƒ | k s® t ‚ Wd  QRXd  S)NzFramework :: Djangoz#Programming Language :: Python :: 3z%Programming Language :: Python :: 3.5z+[metadata]
classifiers = file: classifiers
rb   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
)Úsetr/   r   r   r4   r<   rb   rD   )rE   r(   ÚexpectedrF   r-   r3   r   r   r   Útest_classifiersd  s    %zTestMetadata.test_classifiersc             C   s?   t  | d ƒ t j t j ƒ � t | ƒ � Wd  QRXWd  QRXd  S)Nz%[metadata]
description = %(message)s
)r/   r5   r6   ÚconfigparserÚInterpolationMissingOptionErrorr4   )rE   r(   r   r   r   Útest_interpolation‚  s    zTestMetadata.test_interpolationc          	   C   s+   t  | d d d ƒt | ƒ � Wd  QRXd  S)Nu$   [metadata]
description = Ã©Ã Ã¯Ã´Ã±
r+   zutf-8)r/   r4   )rE   r(   r   r   r   Útest_non_ascii_1ˆ  s    zTestMetadata.test_non_ascii_1c          	   C   s%   t  | d ƒ t | ƒ � Wd  QRXd  S)Nz
# -*- coding: invalid
)r/   r4   )rE   r(   r   r   r   Útest_non_ascii_3�  s    zTestMetadata.test_non_ascii_3c          	   C   sE   t  | d d d ƒt | ƒ � } | j j d k s: t ‚ Wd  QRXd  S)Nu8   # -*- coding: utf-8
[metadata]
description = Ã©Ã Ã¯Ã´Ã±
r+   zutf-8u
   Ã©Ã Ã¯Ã´Ã±)r/   r4   r<   rQ   rD   )rE   r(   r3   r   r   r   Útest_non_ascii_4’  s    zTestMetadata.test_non_ascii_4c             C   sB   t  | d d d ƒt j t ƒ � t | ƒ � Wd QRXWd QRXd S)z=
        Config files encoded not in UTF-8 will fail
        uJ   # vim: set fileencoding=iso-8859-15 :
[metadata]
description = Ã©Ã Ã¯Ã´Ã±
r+   ziso-8859-15N)r/   r5   r6   ÚUnicodeDecodeErrorr4   )rE   r(   r   r   r   Útest_not_utf8›  s    zTestMetadata.test_not_utf8Ú	error_msgr-   ÚinvalidzCInvalid dash-separated key 'author-email' in 'metadata' (setup.cfg)z˜
                    [metadata]
                    author-email = test@test.com
                    maintainer_email = foo@foo.com
                    zauthor-emailztest@test.comz6Invalid uppercase key 'Name' in 'metadata' (setup.cfg)z†
                    [metadata]
                    Name = foo
                    description = Some description
                    ÚNamerW   c       	      C   s¯   t  | | ƒ t j t d t j | ƒ ƒ� t | ƒ j ƒ  } Wd  QRX| j d ƒ j	 ƒ  xP | j
 ƒ  D]B \ } } | j d d ƒ j ƒ  } t | j | ƒ | k se t ‚ qe Wd  S)NÚmatchz	setup.cfgú-rF   )r/   r5   Úwarnsr   ÚreÚescaper4   Ú	__enter__r   rK   ÚitemsÚreplaceÚlowerÚgetattrr<   rD   )	rE   r(   rz   r-   r{   r3   ÚfieldÚvalueÚattrr   r   r   Ú*test_invalid_options_previously_deprecated¨  s    !z7TestMetadata.test_invalid_options_previously_deprecatedN)z	error_msgzconfigzinvalid)r   r   r   rH   rX   rY   r\   rc   rd   rf   rh   ri   rj   rk   rl   rm   rn   rq   rt   ru   rv   rw   ry   r5   ÚmarkÚparametrizer   rŠ   r   r   r   r   rM   t   s<   %
"		rM   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 j d d d d d d d d d g ƒ d d „  ƒ Z e j j d d d d d g ƒ d  d! „  ƒ Z e j j d d" d# d$ d% d& d' d( d) d* d+ g
 ƒ e j j d, ƒ d- d. „  ƒ ƒ Z d/ d0 „  Z d1 d2 „  Z d3 d4 „  Z d5 d6 „  Z d7 d8 „  Z d9 d: „  Z d; d< „  Z d= d> „  Z d? d@ „  Z dA dB „  Z dC S)DÚTestOptionsc             C   sa  t  | d ƒ t j t d d ƒ} | �2t | ƒ �} | j sG t ‚ | j sV t ‚ | j d d d d i k sw t ‚ | j	 d d	 g k s’ t ‚ | j
 d
 d g k s­ t ‚ | 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 s4t ‚ | j d d g k sOt ‚ Wd  QRXWd  QRXd  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
r}   Únamespace_packagesr   Úsrcr^   ÚcÚpack_azpack_b.subpackÚpack1Úpack2z
bin/one.pyz
bin/two.pyzhttp://some.com/here/1zhttp://some.com/there/2zdocutils>=0.3zpack==1.1,==1.3Úheyzspack ==1.1, ==1.3Útherez>=1.0, !=2.8Zmodule1Zmodule2)r/   r5   r   r   r4   Zzip_saferD   Zinclude_package_datar.   ÚpackagesrŽ   rB   Údependency_linksÚinstall_requiresÚsetup_requiresZpython_requiresÚ
py_modules)rE   r(   Údeprecr3   r   r   r   rH   Õ  s0    !zTestOptions.test_basicc             C   s  t  | d ƒ t j t d d ƒ} | �ä t | ƒ �Ð } | j d d d d i k sY t ‚ | j d d	 g k st t ‚ | j d
 d g k s� t ‚ | 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 ‚ Wd  QRXWd  QRXd  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‘   zpack_b.subpackr’   r“   z
bin/one.pyz
bin/two.pyzhttp://some.com/here/1zhttp://some.com/there/2zdocutils>=0.3zpack==1.1,==1.3r”   zspack ==1.1, ==1.3r•   )r/   r5   r   r   r4   r.   rD   r–   rŽ   rB   r—   r˜   r™   )rE   r(   r›   r3   r   r   r   rd      s(    !zTestOptions.test_multilinec             C   sN   t  | d ƒ t | d d ƒ�( } t j t ƒ � | j ƒ  Wd  QRXWd  QRXd  S)Nz[options]
package_dir = a b
r2   F)r/   r4   r5   r6   r   r1   )rE   r(   r3   r   r   r   Útest_package_dir_fail4  s    z!TestOptions.test_package_dir_failc             C   s{   t  | d ƒ t | ƒ �[ } | j d d d g d d g i k sF t ‚ | j d d d g d d	 g i k sp t ‚ Wd  QRXd  S)
Nz}[options.package_data]
* = *.txt, *.rst
hello = *.msg

[options.exclude_package_data]
* = fake1.txt, fake2.txt
hello = *.dat
r   z*.txtz*.rstZhelloz*.msgz	fake1.txtz	fake2.txtz*.dat)r/   r4   Úpackage_datarD   Zexclude_package_data)rE   r(   r3   r   r   r   Útest_package_data:  s    	zTestOptions.test_package_datac          	   C   s?   t  | d ƒ t | ƒ � } | j d g k s4 t ‚ Wd  QRXd  S)Nz[options]
packages = find:
r$   )r/   r4   r–   rD   )rE   r(   r3   r   r   r   Útest_packagesP  s    zTestOptions.test_packagesc             C   sø   t  | d ƒ \ } } t d | ƒ t d | ƒ t | ƒ �1 } t | j ƒ t d d d g ƒ k sh t ‚ Wd  QRX| j d ƒ t | ƒ � } | j d g k s£ t ‚ Wd  QRX| j d ƒ t | ƒ �. } t | j ƒ t d d g ƒ k sí t ‚ Wd  QRXd  S)	Nz[options]
packages = find:
Úsub_oneÚsub_twor$   zfake_package.sub_twoz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
)r/   r"   r4   ro   r–   rD   r   )rE   r(   r    r-   r3   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 ƒ d d d h k sh t ‚ Wd  QRX| j d	 ƒ t | ƒ � } | j d g k s£ t ‚ Wd  QRX| j d
 ƒ t | ƒ �( } t | j ƒ d d h k sç t ‚ Wd  QRXd  S)Nz%[options]
packages = find_namespace:
r    r¡   r   Tr$   zfake_package.sub_twozfake_package.sub_onezs[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"   r4   ro   r–   rD   r   )rE   r(   r    r-   r3   r   r   r   Útest_find_namespace_directive{  s"    	z)TestOptions.test_find_namespace_directivec             C   sx   t  | d ƒ t | ƒ �X } | j d d d g d d d g i k sI t ‚ t | j j ƒ d d h k sm t ‚ Wd  QRXd  S)Nz_[options.extras_require]
pdf = ReportLab>=1.2; RXP
rest = 
  docutils>=0.3
  pack ==1.1, ==1.3
ZpdfzReportLab>=1.2ZRXPÚrestzdocutils>=0.3zpack==1.1,==1.3)r/   r4   Úextras_requirerD   ro   r<   Zprovides_extras)rE   r(   r3   r   r   r   Útest_extras_require¢  s    zTestOptions.test_extras_requirer-   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   sJ   t  | | ƒ d } t j t d | ƒ� t | ƒ � } Wd  QRXWd  QRXd  S)NzoOne of the parsed requirements in `(install_requires|extras_require.+)` looks like a valid environment marker.*r}   )r/   r5   r6   r   r4   )rE   r-   r(   r}   rF   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   sJ   t  | | ƒ d } t j t d | ƒ� t | ƒ � } Wd  QRXWd  QRXd  S)NzoOne of the parsed requirements in `(install_requires|extras_require.+)` looks like a valid environment marker.*r}   )r/   r5   r   r   r4   )rE   r-   r(   r}   rF   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   sK   t  | | ƒ t | ƒ } t | ƒ � } Wd  QRXt | ƒ | k sG t ‚ d  S)N)r/   Úlenr4   rD   )rE   r-   r(   ZrecwarnZnum_warningsrF   r   r   r   Ú+test_nowarn_accidental_env_marker_misconfigÝ  s
    z7TestOptions.test_nowarn_accidental_env_marker_misconfigc             C   sN   t  | d ƒ t | ƒ �. } | j d d g d d g i k sC t ‚ Wd  QRXd  S)Nz2[options.extras_require]
foo-a = foo
foo_b = test
zfoo-arW   Zfoo_bÚtest)r/   r4   r¥   rD   )rE   r(   r3   r   r   r   Ú"test_dash_preserved_extras_requireõ  s    z.TestOptions.test_dash_preserved_extras_requirec             C   s­   t  | d ƒ \ } } t | ƒ �1 } | j d d d g d d g i k sN t ‚ Wd  QRXd } | j d ƒ j | ƒ | j d	 ƒ t | ƒ � } | j | k s¢ t ‚ Wd  QRXd  S)
Nz‡[options.entry_points]
group1 = point1 = pack.module:func, .point2 = pack.module2:func_rest [rest]
group2 = point3 = pack.module:func2
Zgroup1zpoint1 = pack.module:funcz'.point2 = pack.module2:func_rest [rest]Úgroup2zpoint3 = pack.module:func2zN[blogtool.parsers]
.rst = some.nested.module:SomeClass.some_classmethod[reST]
Úentry_pointsz,[options]
entry_points = file: entry_points
)r/   r4   r®   rD   r   r   )rE   r(   rF   r-   r3   rp   r   r   r   Útest_entry_pointsû  s    zTestOptions.test_entry_pointsc             C   sQ   t  | d ƒ t | ƒ �1 } | j d d d g d d g i k sF t ‚ Wd  QRXd  S)Nz‡[options.entry_points]
GROUP1 = point1 = pack.module:func, .point2 = pack.module2:func_rest [rest]
group2 = point3 = pack.module:func2
ZGROUP1zpoint1 = pack.module:funcz'.point2 = pack.module2:func_rest [rest]r­   zpoint3 = pack.module:func2)r/   r4   r®   rD   )rE   r(   r3   r   r   r   Ú test_case_sensitive_entry_points  s    z,TestOptions.test_case_sensitive_entry_pointsc             C   sl   t  | d ƒ t | ƒ �L } d d d g f d d d g f g } t | j ƒ t | ƒ k sa t ‚ Wd  QRXd  S)NzQ[options.data_files]
cfg =
      a/b.conf
      c/d.conf
data = e/f.dat, g/h.dat
Úcfgza/b.confzc/d.confÚdataze/f.datzg/h.dat)r/   r4   ÚsortedÚ
data_filesrD   )rE   r(   r3   rp   r   r   r   Útest_data_files,  s    zTestOptions.test_data_filesc             C   sY  t  | d ƒ | j d ƒ j d ƒ | j d ƒ j d ƒ | j d ƒ j d ƒ | j d ƒ j d ƒ | j d ƒ j d ƒ | j d ƒ j d ƒ | j d	 ƒ j d ƒ | j d
 ƒ j d ƒ | j d ƒ j d ƒ t | ƒ �s } 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 sNt ‚ Wd  QRXd  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±   za/b.confzc/d.confr²   ZiconsÚaudio)r/   r   r   r4   r³   r´   rD   )rE   r(   r3   rp   r   r   r   Útest_data_files_globby=  s$    z"TestOptions.test_data_files_globbyc          	   C   s7   t  | t d ƒ ƒ t | ƒ � } | j ƒ  Wd  QRXd  S)NzE
            [options]
            python_requires=>=2.7
            )r/   r   r4   r1   )rE   r(   r3   r   r   r   Útest_python_requires_simple`  s    
z'TestOptions.test_python_requires_simplec          	   C   s7   t  | t d ƒ ƒ t | ƒ � } | j ƒ  Wd  QRXd  S)NzM
            [options]
            python_requires=>=2.7,!=3.0.*
            )r/   r   r4   r1   )rE   r(   r3   r   r   r   Útest_python_requires_compoundm  s    
z)TestOptions.test_python_requires_compoundc             C   sN   t  | t d ƒ ƒ t j t ƒ �% t | ƒ � } | j ƒ  Wd  QRXWd  QRXd  S)NzG
            [options]
            python_requires=invalid
            )r/   r   r5   r6   Ú	Exceptionr4   r1   )rE   r(   r3   r   r   r   Útest_python_requires_invalidz  s    
z(TestOptions.test_python_requires_invalidc          
   C   sÆ   t  | d ƒ } | j j d d d d ƒ | j d d d ƒd } t | t j | ƒ ƒ t | ƒ �\ } | j d	 } | j	 d
 k sˆ t
 ‚ | j d k s� t
 ‚ | j t j | ƒ ƒ s» t
 ‚ Wd  QRXd  S)Nzsrc/custom_build.pyÚparentsTÚexist_okzBfrom distutils.core import Command
class CustomCmd(Command): pass
r+   zutf-8zi
            [options]
            cmdclass =
                customcmd = custom_build.CustomCmd
        Z	customcmdZ	CustomCmdZcustom_build)r   Úparentr   Z
write_textr/   ÚinspectÚcleandocr4   Úcmdclassr   rD   r   ÚsamefileZgetfile)rE   r(   Úmodule_pathr)   r3   rÁ   r   r   r   Útest_cmdclassˆ  s    zTestOptions.test_cmdclassc          
   C   s�   t  | t d ƒ ƒ | j d ƒ j d ƒ | j d ƒ j d ƒ t | ƒ �= } | j d g k sf t ‚ | j d d g i k s„ t ‚ Wd  QRXd  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Úcoloramazdocutils>=0.3Úcolors)r/   r   r   r   r4   r˜   rD   r¥   )rE   r(   r3   r   r   r   Útest_requirements_file�  s    
z"TestOptions.test_requirements_fileN)r   r   r   rH   rd   rœ   rž   rŸ   r¢   r£   r¦   r5   r‹   rŒ   r§   r¨   Úfilterwarningsrª   r¬   r¯   r°   rµ   r·   r¸   r¹   r»   rÄ   rÇ   r   r   r   r   r�   Ô  s^   +4%'				!	#r�   c               @   s@   e  Z d  Z d d „  Z e j e d d d ƒd d „  ƒ Z d S)	ÚTestExternalSettersc             C   s5   t  | | ƒ d | j _ d d d d i | j _ d  S)Nztext/somethingzLink Onezhttps://example.com/one/zLink Twozhttps://example.com/two/)Úsaved_dist_initr<   rR   re   )rE   r3   Úattrsr   r   r   Ú_fake_distribution_initÀ  s    z+TestExternalSetters._fake_distribution_initÚ__init__ZautospecTc             C   sg   |  j  | _ t d d d d i i ƒ } | j j d k s? t ‚ | j j d d d d	 i k sc t ‚ d  S)
NrË   re   Zwill_beZignoredztext/somethingzLink Onezhttps://example.com/one/zLink Twozhttps://example.com/two/)rÌ   Zside_effectr	   r<   rR   rD   re   )rE   Zmock_parent_initr(   r3   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É   )&rr   Ú
contextlibr¿   r€   Zpathlibr   Zunittest.mockr   r   r5   Úpackaging.requirementsr   Zsetuptools.config.setupcfgr   r   r   Zsetuptools.distr	   r
   Zsetuptools.warningsr   Útextwrapr   Zdistutils.errorsr   r   r   r"   r/   Úcontextmanagerr4   r:   r;   rM   r�   rÍ   rÊ   rÉ   r   r   r   r   Ú<module>   s2   $ÿ aÿ ß	