
    7fO                     b   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
mZ d dl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  G d de          ZddZ	 ddZej        dd            Zd Z G d d          Z G d d          Z G d d          Z ej!        Z" G d d          Z#dS )     N)Path)Mockpatch)DistutilsOptionErrorDistutilsFileError)Distribution_Distribution)ConfigHandlerread_configuration)InvalidRequirement)SetuptoolsDeprecationWarning   )DALSc                       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     c/home/feoh/.local/pipx/shared/lib/python3.11/site-packages/setuptools/tests/config/test_setupcfg.pyr   r      s        AANNNr   r   Fc                     |}|                      d          D ]}|                    |          }d }|s*|                    d          }|                    d           ||fS )N/__init__.py )splitmkdirjoinwrite)namebase_dirnsdir_packagedir_name	init_files         r   make_package_dirr(      sr    KJJsOO 2 2!''11I $$]33		!!r   asciifake_packagec                 0   |d}|                      d                              |           |                      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'   s           r   fake_envr8   "   s     <
KK
!!(+++[[%%F
LL!!(++$L777-lFCCKOO	   r   Tc              #      K   |pi }|                                  5  t          |          }d|_        |o|                                 |V  d d d            d S # 1 swxY w Y   d S )Nr,   )as_cwdr   script_nameparse_config_files)r1   kwargs_initialparsedists       r   get_distr@   ;   s      #)rN	  N++%+$))++


                 s   1AA Ac                      t          j        t                    5  t          d i dt	                                } | j         d d d            d S # 1 swxY w Y   d S )NF)pytestraisesNotImplementedErrorr   r   parsers)handlers    r   test_parsers_implementedrG   G   s    	*	+	+  "4UDFF;;                    &AAAc                        e Zd Zd Zd Zd ZdS )TestConfigurationReaderc                     t          |d          \  }}t          d|z            }|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
%smetadataversion10.1.1keywordsonetwooptionsscriptszbin/a.pyzbin/b.py)r8   r   selfr1   _r6   config_dicts        r   
test_basicz"TestConfigurationReader.test_basicN   s    -
 
	6 )77:&y1X====:&z2uenDDDD9%i0Z4LLLLLLLr   c                     t          j        t                    5  t          d|                    d          z             d d d            d S # 1 swxY w Y   d S )NrL   r-   )rB   rC   r   r   r    rV   r1   s     r   test_no_configz&TestConfigurationReader.test_no_config]   s    ]-.. 	@ 	@tfkk+&>&>>???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@rH   c                 F   t          |d          \  }}t          j        t                    5  t	          d|z             d d d            n# 1 swxY w Y   t	          d|z  d          }|d         d         ddgk    sJ d	|d         vsJ |                                 d S )
Nz<[metadata]
version = attr: none.VERSION
keywords = one, two
rL   T)ignore_option_errorsrM   rP   rQ   rR   rN   )r8   rB   rC   ImportErrorr   removerU   s        r   test_ignore_errorsz*TestConfigurationReader.test_ignore_errorsa   s    M
 
	6 ];'' 	. 	.tf}---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. )TRRR:&z2uenDDDDJ 77777s   AAAN)r   r   r   rY   r\   ra   r   r   r   rJ   rJ   M   sG        M M M@ @ @    r   rJ   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )TestMetadatac                    t          |d           |                    d                              d           ddi}t          ||          5 }|j        }|j        dk    s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k    sJ |j        dk    sJ |j        ddgk    sJ |j        dk    sJ |j        dk    sJ 	 d d d            d S # 1 swxY w 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 LicenserO   Some descriptiontext/somethingpackagezpackage.sub	fake_namerQ   rR   http://test.test.com/test/test@test.com)r8   r    r!   r@   rM   rN   descriptionlong_description_content_typelong_descriptionprovidesrg   r"   rP   download_urlmaintainer_email)rV   r1   meta_initialr?   rM   s        r   rY   zTestMetadata.test_basicr   s   
1	
 	
 	
 	H##$<=== -

 fl++ 	@t}H#x////'+=====9=MMMMM,0HHHHH$M(BBBBB#'======K////$6666(,HHHHH,?????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   BC))C-0C-c                     t          |t          d                     t          |          5 }|j        }|j        dk    sJ |j        dk    sJ |j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nzr
            [metadata]
            name=foo
            version=0.0.1
            license=Apache 2.0
            fooz0.0.1z
Apache 2.0)r8   r   r@   rM   r"   rN   rg   rV   r1   r?   rM   s       r   test_license_cfgzTestMetadata.test_license_cfg   s     
	
 
	
 
	
 f 	4}H=E))))#w....#|33333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   /A**A.1A.c                 <   t          |d           |                    d                              d           |                    d                              d           t          |          5 }|j        j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nz=[metadata]
long_description = file: README.rst, CHANGES.rst

z
README.rstrf   zCHANGES.rstzchangelog contents
and stuffz2readme contents
line2
changelog contents
and stuff)r8   r    r!   r@   rM   rp   rV   r1   r?   s      r   test_file_mixedzTestMetadata.test_file_mixed   s    N	
 	
 	

 	L!!''(@AAAM""(()HIIIf 	=1G    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   0BBBc                    |                     d           |                    dd          }|                     d           t          |d           t          |d          5 }t	          j        t                    5  |                                 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )	Nre   depth1depth2T)dirz1[metadata]
long_description = file: ../../README
Fr>   )ensurer    r8   r@   rB   rC   r   r<   )rV   r1   projectr?   s       r   test_file_sandboxedz TestMetadata.test_file_sandboxed   s8   h++h114   OPPPgU+++ 	*t344 * *'')))* * * * * * * * * * * * * * *	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s6   #B6=BB6B"	"B6%B"	&B66B:=B:c                    t          |d           t          |          5 }|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    sJ 	 d d d            d S # 1 swxY 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
rm   rl   zShort summaryabFramework :: Django%Programming Language :: Python :: 3.5)r8   r@   rM   author_emailurlrn   	platformsclassifiersrw   s       r   test_aliaseszTestMetadata.test_aliases   s   8
	
 
	
 
	
 f 		}H(O;;;;<#?????'?::::%#s3333'%7,     		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		s   AA;;A?A?c                     t          |d           t          |          5 }|j        }|j        ddgk    sJ |j        ddgk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nz[metadata]
name = fake_name
keywords =
  one
  two
classifiers =
  Framework :: Django
  Programming Language :: Python :: 3.5
rQ   rR   r   r   )r8   r@   rM   rP   r   rw   s       r   test_multilinezTestMetadata.test_multiline   s    8
	
 
	
 
	
 f 	}H$6666'%7,     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   &AAAc                     t          |d           t          |          5 }|j        }|j        dddk    sJ 	 d d d            d S # 1 swxY 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)r8   r@   rM   project_urlsrw   s       r   	test_dictzTestMetadata.test_dict   s    6	
 	
 	
 f 	}H(66- -     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA
A
c                    t          |d          \  }}|                    d          }|                    d                              d           |                    d                              d           |                    d          }|                    d                              d           |                    d                              d           t	          |          5 }|j        j        d	k    sJ 	 d d d            n# 1 swxY w Y   |                    d
           t	          |          5 }|j        j        dk    sJ 	 d d d            n# 1 swxY w Y   |                    d           t	          |          5 }|j        j        dk    sJ 	 d d d            n# 1 swxY w Y   |                    d           t	          |          5 }|j        j        dk    sJ 	 d d d            n# 1 swxY w Y   |                    d           t	          |          5 }|j        j        dk    sJ 	 d d d            d S # 1 swxY 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
)r8   r   r    r!   r@   rM   rN   )rV   r1   r7   r6   sub_asub_br?   s          r   test_versionzTestMetadata.test_version   s   &H
 
V !!*--

=!!''+++

8""#=>>>!!*--

=!!''+++

8""A	
 	
 	
 f 	4=(G33333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	MNNNf 	8=(K77777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	OPPPf 	0=(C/////	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	VWWWf 	9=(L88888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	VWWWf 	9=(L88888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9sZ   -DDD<EE #E F++F/2F/G::G>G>)I

IIc                    t          |d          \  }}|                    dd                              d           t          |          5 }|j        j        dk    sJ 	 d d d            n# 1 swxY w Y   |                    dd                              d           t          j        t                    5  t          |          5 }|j        j         d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w 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
)	r8   r    r!   r@   rM   rN   rB   rC   r   rV   r1   rW   r6   r?   s        r   test_version_filezTestMetadata.test_version_file   s   L
 
	6 	NM2288CCCf 	4=(G33333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	NM22889IJJJ]/00 	& 	&&!! &T%%& & & & & & & & & & & & & & &	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&sH   A,,A03A09C:	C"C:"C&	&C:)C&	*C::C>C>c                     t          |dd          \  }}t          |          5 }|j        j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )NzY[metadata]
version = attr: fake_package_simple.VERSION
[options]
package_dir =
    = src
zsrc/fake_package_simpler5   r   r8   r@   rM   rN   r   s        r   $test_version_with_package_dir_simplez1TestMetadata.test_version_with_package_dir_simple.  s    
 3
 
 
	6 f 	4=(G33333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4   AA
A
c                     t          |dd          \  }}t          |          5 }|j        j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nzr[metadata]
version = attr: fake_package_rename.VERSION
[options]
package_dir =
    fake_package_rename = fake_dir
fake_dirr   r   r   r   s        r   $test_version_with_package_dir_renamez1TestMetadata.test_version_with_package_dir_rename<  s    3
 $
 
 
	6 f 	4=(G33333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4r   c                     t          |dd          \  }}t          |          5 }|j        j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nzx[metadata]
version = attr: fake_package_complex.VERSION
[options]
package_dir =
    fake_package_complex = src/fake_dir
zsrc/fake_dirr   r   r   r   s        r   %test_version_with_package_dir_complexz2TestMetadata.test_version_with_package_dir_complexJ  s    8
 (
 
 
	6 f 	4=(G33333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4r   c                     t          |d           t          |d          5 }|                                 d d d            d S # 1 swxY w Y   d S )Nz+[metadata]
name = fake_name
unknown = some
Fr   )r8   r@   r<   rz   s      r   test_unknown_meta_itemz#TestMetadata.test_unknown_meta_itemX  s    IJJJfE*** 	&d##%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   AAAc                    t          |d           t          |d          5 }t          j        t                    5  |                                 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nz[metadata.some]
key = val
Fr   r8   r@   rB   rC   r   r<   rz   s      r   test_usupported_sectionz$TestMetadata.test_usupported_section]  s    7888fE*** 	*d344 * *'')))* * * * * * * * * * * * * * *	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*4   A5AA5A!	!A5$A!	%A55A9<A9c                    t          g d          }t          |d          \  }}|                    d                              d           t	          |          5 }t          |j        j                  |k    sJ 	 d d d            n# 1 swxY w Y   |                    d           t	          |          5 }t          |j        j                  |k    sJ 	 d d d            d S # 1 swxY w Y   d S )N)r   z#Programming Language :: Python :: 3r   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
)setr8   r    r!   r@   rM   r   )rV   r1   expectedrW   r6   r?   s         r   test_classifierszTestMetadata.test_classifiersc  s    
 
 
   V%TUU	6M""((6	
 	
 	
 f 	>t}011X=====	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	:	
 	
 	
 f 	>t}011X=====	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s$    B		BB8 C&&C*-C*c                     t          |d           t          j        t          j                  5  t          |          5  	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nz%[metadata]
description = %(message)s
)r8   rB   rC   configparserInterpolationMissingOptionErrorr@   r[   s     r   test_interpolationzTestMetadata.test_interpolation  s    BCCC]<GHH 	 	&!!                	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s4   A%AA%A	A%A	A%%A),A)c                 |    t          |dd           t          |          5  	 d d d            d S # 1 swxY w Y   d S )Nu$   [metadata]
description = éàïôñ
utf-8r4   r8   r@   r[   s     r   test_non_ascii_1zTestMetadata.test_non_ascii_1  s    AGTTTTf 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   155c                 x    t          |d           t          |          5  	 d d d            d S # 1 swxY w Y   d S )Nz
# -*- coding: invalid
r   r[   s     r   test_non_ascii_3zTestMetadata.test_non_ascii_3  s    4555f 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   /33c                     t          |dd           t          |          5 }|j        j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nu8   # -*- coding: utf-8
[metadata]
description = éàïôñ
r   r   u
   éàïôñ)r8   r@   rM   rn   rz   s      r   test_non_ascii_4zTestMetadata.test_non_ascii_4  s    I	
 	
 	
 	

 f 	==,<<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   AA
Ac                     t          |dd           t          j        t                    5  t	          |          5  	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w 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)r8   rB   rC   UnicodeDecodeErrorr@   r[   s     r   test_not_utf8zTestMetadata.test_not_utf8  s    	) #	
 	
 	
 	
 ]-.. 	 	&!!                	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s3   A"A
A"
A	A"A	A""A&)A&c                     t          |d           d}t          j        t          |          5  t	          |          5 }|j        }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |j        dk    sJ |j        dk    sJ 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matchrm   zfoo@foo.com)r8   rB   warnsr   r@   rM   r   rs   rV   r1   msgr?   rM   s        r   test_warn_dash_deprecationz'TestMetadata.test_warn_dash_deprecation  s(    	/	
 	
 	
 M\6cBBB 	) 	)&!! )T=) ) ) ) ) ) ) ) ) ) ) ) ) ) )	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) $7777(M9999994   A)AA)A	A)A	A))A-0A-c                     t          |d           d}t          j        t          |          5  t	          |          5 }|j        }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |j        dk    sJ |j        dk    sJ d S )Nz5[metadata]
Name = foo
description = Some description
zAUsage of uppercase key 'Name' in 'metadata' will not be supportedr   rv   rh   )r8   rB   r   r   r@   rM   r"   rn   r   s        r   test_make_option_lowercasez'TestMetadata.test_make_option_lowercase  s    	STTTQ\6cBBB 	) 	)&!! )T=) ) ) ) ) ) ) ) ) ) ) ) ) ) )	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) }%%%%#'9999999r   N)r   r   r   rY   rx   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rc   rc   q   sc       #@ #@ #@J4 4 4(  * * *  0  (   9  9  9D& & &4 4 44 4 44 4 4& & &
* * *> > ><    
  
= = =  : : :"
: 
: 
: 
: 
:r   rc   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ej                            d	g d
          d             Zej                            d	g d          d             Zej                            d	g d          ej                            d          d                         Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )TestOptionsc                    t          |d           t          j        t          d          }|5  t	          |          5 }|j        sJ |j        sJ |j        dddk    sJ |j        ddgk    sJ |j	        d	d
gk    sJ |j
        ddgk    sJ |j        ddgk    sJ |j        g dk    sJ |j        g dk    sJ |j        dk    sJ |j        ddgk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY 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   r   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)r8   rB   r   r   r@   zip_safeinclude_package_datar7   packagesr   rT   dependency_linksinstall_requiressetup_requirespython_requires
py_modulesrV   r1   deprecr?   s       r   rY   zTestOptions.test_basic  s,   .	
 	
 	
" :BVWWW 	= 	=Xf%% 	==   ,,,,#E'<'<<<<<=X/?$@@@@@*w.@@@@@<L,#?????(().     ( . . .    
 & , , ,    
 '>9999?y)&<<<<<<-	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s5   C<BC$C<$C(	(C<+C(	,C<<D D c                    t          |d           t          j        t          d          }|5  t	          |          5 }|j        dddk    sJ |j        ddgk    sJ |j        d	d
gk    sJ |j        ddgk    sJ |j	        ddgk    sJ |j
        g dk    sJ |j        g dk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w 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   )r8   rB   r   r   r@   r7   r   r   rT   r   r   r   r   s       r   r   zTestOptions.test_multiline  s   *	
 	
 	
< :BVWWW 	 	Xf%% 	#E'<'<<<<<=X/?$@@@@@*w.@@@@@<L,#?????(().     ( . . .    
 & , , ,     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s5   CA+B6*C6B:	:C=B:	>CCCc                    t          |d           t          |d          5 }t          j        t                    5  |                                 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nz[options]
package_dir = a b
Fr   r   rz   s      r   test_package_dir_failz!TestOptions.test_package_dir_fail'  s    9:::fE*** 	*d344 * *'')))* * * * * * * * * * * * * * *	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*r   c                     t          |d           t          |          5 }|j        ddgdgdk    sJ |j        ddgdgdk    sJ 	 d d d            d S # 1 swxY 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)r8   r@   package_dataexclude_package_datarz   s      r   test_package_datazTestOptions.test_package_data-  s    		
 		
 		
 f 	$g&!) )     , +.!1 1     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   'AAAc                     t          |d           t          |          5 }|j        dgk    sJ 	 d d d            d S # 1 swxY w Y   d S )N[options]
packages = find:
r*   )r8   r@   r   rz   s      r   test_packageszTestOptions.test_packagesC  s    8999f 	5=^$444444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   =AAc                 ~   t          |d          \  }}t          d|          \  }}t          d|          \  }}t          |          5 }t          |j                  t          g d          k    sJ 	 d d d            n# 1 swxY w Y   |                    d           t          |          5 }|j        dgk    sJ 	 d d d            n# 1 swxY w Y   |                    d           t          |          5 }t          |j                  t          dd	g          k    sJ 	 d d d            d S # 1 swxY w 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   r8   r(   r@   r   r   r!   rV   r1   r%   r6   dir_sub_onerW   dir_sub_twor?   s           r   test_find_directivezTestOptions.test_find_directiveI  sD   &v/NOOV))[AAQ))[AAQf 	t}%% . . . * *     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 			
 		
 		
 f 	==%;$<<<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	)	
 	
 	
 f 	Wt}%%n>T-U)V)VVVVVV	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	Ws6   	*B  BB/CCC:*D22D69D6c                 N   t          |d          \  }}t          d|          \  }}t          d|d          \  }}t          |          5 }t          |j                  h dk    sJ 	 d d d            n# 1 swxY w Y   |                    d           t          |          5 }|j        dgk    sJ 	 d d d            n# 1 swxY w Y   |                    d	           t          |          5 }t          |j                  d
dhk    sJ 	 d d d            d S # 1 swxY w 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  s           r   test_find_namespace_directivez)TestOptions.test_find_namespace_directiven  s<   &=
 
V *)[AAQ))[TJJJQf 	t}%% * * *     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 			
 		
 		
 f 	==%;$<<<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	)	
 	
 	
 f 	Rt}%%.:P)QQQQQQ	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	Rs6   A55A9<A9$C  CC/DD!Dc                     t          |d           t          |          5 }|j        ddgddgdk    sJ |j        j        t          ddg          k    sJ 	 d d d            d S # 1 swxY 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
  )r8   r@   extras_requirerM   provides_extrasr   rz   s      r   test_extras_requirezTestOptions.test_extras_require  s    $	
 	
 	
 f 	I&(%0(*;<+ +     =0C4H4HHHHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Is   6A$$A(+A(r6   )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                     t          ||           d}t          j        t          |          5  t	          |          5 }	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S NzoOne of the parsed requirements in `(install_requires|extras_require.+)` looks like a valid environment marker.*r   )r8   rB   rC   r   r@   rV   r6   r1   r   rW   s        r   +test_raises_accidental_env_marker_misconfigz7TestOptions.test_raises_accidental_env_marker_misconfig  s     	   6 	 ]-U;;; 	 	&!! Q              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	4   A$A A$A	A$A	A$$A(+A()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                     t          ||           d}t          j        t          |          5  t	          |          5 }	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S r  )r8   rB   r   r   r@   r  s        r   )test_warn_accidental_env_marker_misconfigz5TestOptions.test_warn_accidental_env_marker_misconfig  s     	   6 	 \6eDDD 	 	&!! Q              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r  )
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                     t          ||           t          |          }t          |          5 }	 d d d            n# 1 swxY w Y   t          |          |k    sJ d S )N)r8   lenr@   )rV   r6   r1   recwarnnum_warningsrW   s         r   +test_nowarn_accidental_env_marker_misconfigz7TestOptions.test_nowarn_accidental_env_marker_misconfig  s    " 	   7||f 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 7|||++++++s   =AAc                     t          |d           t          |          5 }|j        dgdgdk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nz2[options.extras_require]
foo-a = foo
foo_b = test
rv   test)zfoo-afoo_b)r8   r@   r  rz   s      r   "test_dash_preserved_extras_requirez.TestOptions.test_dash_preserved_extras_require  s    PQQQf 	P&UGvh*O*OOOOOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Ps   AAAc                    t          |d          \  }}t          |          5 }|j        ddgdgdk    sJ 	 d d d            n# 1 swxY w Y   d}|                    d                              |           |                    d           t          |          5 }|j        |k    sJ 	 d d d            d S # 1 swxY w 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
)r8   r@   r$  r    r!   )rV   r1   rW   r6   r?   r   s         r   test_entry_pointszTestOptions.test_entry_points  s   4
 
	6 f 	$/= 88) )     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	K 	
 	N##))(333 	EFFFf 	1$00000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s#   AAAB99B= B=c                     t          |d          \  }}t          |          5 }|j        ddgdgdk    sJ 	 d d d            d S # 1 swxY 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#  )r8   r@   r$  r   s        r    test_case_sensitive_entry_pointsz,TestOptions.test_case_sensitive_entry_points  s    4
 
	6 f 	$/= 88) )     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA	A	c                     t          |d           t          |          5 }dddgfdddgfg}t          |j                  t          |          k    sJ 	 d d d            d S # 1 swxY 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)r8   r@   sorted
data_filesrV   r1   r?   r   s       r   test_data_fileszTestOptions.test_data_files  s    (	
 	
 	
 f 	?Z01)Y/0H $/**fX.>.>>>>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   4A""A&)A&c                    t          |d           |                    d                              d           |                    d                              d           |                    d                              d           |                    d                              d           |                    d                              d           |                    d                              d           |                    d	                              d           |                    d
                              d           |                    d                              d           t          |          5 }dddgfdg dfdg dfdg dfg}t	          |j                  t	          |          k    sJ 	 d d d            d S # 1 swxY 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-  )r3  r4  r5  icons)r6  r7  r8  audio)r9  r:  r;  )r8   r    r!   r@   r.  r/  r0  s       r   test_data_files_globbyz"TestOptions.test_data_files_globby0  s   	 	
 	
 	
 	G""2&&&G""2&&&G""2&&&G""2&&&G""2&&&G""2&&&J%%b)))J%%b)))K  &&r***f 	?Z0144455556???@	H $/**fX.>.>>>>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   >GGGc                     t          |t          d                     t          |          5 }|                                 d d d            d S # 1 swxY w Y   d S )NzE
            [options]
            python_requires=>=2.7
            r8   r   r@   r<   rz   s      r   test_python_requires_simplez'TestOptions.test_python_requires_simpleS       	
 	
 	
 f 	&##%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&   AAAc                     t          |t          d                     t          |          5 }|                                 d d d            d S # 1 swxY w Y   d S )NzM
            [options]
            python_requires=>=2.7,!=3.0.*
            r@  rz   s      r   test_python_requires_compoundz)TestOptions.test_python_requires_compound`  rB  rC  c                    t          |t          d                     t          j        t                    5  t          |          5 }|                                 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NzG
            [options]
            python_requires=invalid
            )r8   r   rB   rC   	Exceptionr@   r<   rz   s      r   test_python_requires_invalidz(TestOptions.test_python_requires_invalidm  s    	
 	
 	
 ]9%% 	* 	*&!! *T'')))* * * * * * * * * * * * * * *	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s5   B A(B (A,	,B /A,	0B  BBc                    t          |d          }|j                            dd           |                    dd           d}t	          |t          j        |                     t          |          5 }|j        d         }|j	        d	k    sJ |j
        d
k    sJ |                    t          j        |                    sJ 	 d d d            d S # 1 swxY w 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_textr8   inspectcleandocr@   cmdclassr   r   samefilegetfile)rV   r1   module_pathr2   r?   rS  s         r   test_cmdclasszTestOptions.test_cmdclass{  sR   6#899   ===R 	 	
 	
 	

	
 	))44555f 	C}[1H$3333&.8888''(A(ABBBBBB		C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   7ACCCc                 n   t          |t          d                     |                    d                              d           |                    d                              d           t	          |          5 }|j        dgk    sJ |j        ddgik    sJ 	 d d d            d S # 1 swxY w 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)r8   r   r    r!   r@   r   r  rz   s      r   test_requirements_filez"TestOptions.test_requirements_file  s%    
	
 
	
 
	
 	&''--.CDDD,--33J???f 	C(_,=====&8j\*BBBBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   =B**B.1B.N)r   r   r   rY   r   r   r   r   r  r  r  rB   markparametrizer  r  filterwarningsr  r  r%  r(  r1  r>  rA  rE  rH  rW  r[  r   r   r   r   r     s        )= )= )=V2 2 2h* * *  ,5 5 5#W #W #WJ%R %R %RNI I I" [		
 		
 		
    [	
 	
 	
    [	
 	
 	
  [ PQQ, , RQ  ,P P P1 1 1>  $? ? ?"!? !? !?F& & && & &* * *C C C*C C C C Cr   r   c                   L    e Zd Zd Z ej        edd          d             ZdS )TestExternalSettersc                 \    t          ||           d|j        _        ddd|j        _        d S )Nri   r   r   r   )saved_dist_initrM   ro   r   )rV   r?   attrss      r   _fake_distribution_initz+TestExternalSetters._fake_distribution_init  s;    e$$$6F3 32&
 &
"""r   __init__T)autospecc                     | j         |_        t          dddii          }|j        j        dk    sJ |j        j        dddk    sJ d S )	Nr   will_beignored)rc  ri   r   r   r   )rd  side_effectr   rM   ro   r   )rV   mock_parent_initr1   r?   s       r   test_external_settersz)TestExternalSetters.test_external_setters  su    '+'C$>Iy3I"JKKK}:>NNNNN})22.
 .
 
 
 
 
 
 
r   N)r   r   r   rd  r   objectr	   rl  r   r   r   r`  r`    sR        
 
 
 U\-d;;;	
 	
 <;	
 	
 	
r   r`  )F)Nr)   r*   )NT)$r   
contextlibrQ  pathlibr   unittest.mockr   r   rB   distutils.errorsr   r   setuptools.distr   r	   setuptools.config.setupcfgr
   r   packaging.requirementsr   setuptools.warningsr   textwrapr   r   r(   r8   contextmanagerr@   rG   rJ   rc   r   re  rb  r`  r   r   r   <module>rx     s2                  % % % % % % % %  E E E E E E E E 7 7 7 7 7 7 7 7 H H H H H H H H 5 5 5 5 5 5 < < < < < <          }   " " " " FT   2      ! ! ! ! ! ! ! !HS: S: S: S: S: S: S: S:l
[C [C [C [C [C [C [C [C|  (
 
 
 
 
 
 
 
 
 
r   