
    7fF                        d Z ddlZddlZddlZddlZddlZ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Z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 ddlZddlmZ ddlmZ ddlmZ ddlmc m Z! dd	lm"Z" dd
l#m$Z$ ddl%m&Z&m'Z' dd
l%m$Z( ddl)m*Z*m+Z+ ddl,m-Z- ddl%Z%ddl.m/Z/ ddl0m1Z1  ej2        d          d             Z3 G d d          Z4 e1d          Z5 G d d          Z6ej7        8                    d           G d d                      Z9ej2        d             Z:ej7        ;                    d          ej7        ;                    d           G d d                                   Z<ej2        d!             Z=ej2        d"             Z> G d# d$          Z? G d% d&          Z@ G d' d(          ZAd) ZBd* ZCd+ ZDd, ZEd-d.eBddd/fd0ZFej7        G                    ejH        I                    d1          o e!jJ        ejK                  d23           G d4 d5                      ZL G d6 d7          ZM G d8 d9          ZN G d: d;e          ZOd< ZPd= ZQdS )>zEasy install Tests    N)
NamedTuple)Path)mockpath)sandbox	run_setup)PthDistributions)Distribution)normalize_pathworking_set)
MockServerpath_to_url)fail_on_ascii   )contexts)DALST)autousec                 2    |                      dd           dS )z
    Important: Disable the default index for pip to avoid
    querying packages in the index and potentially resolving
    and installing packages there.
    PIP_NO_INDEXtrueN)setenv)monkeypatchs    `/home/feoh/.local/pipx/shared/lib/python3.11/site-packages/setuptools/tests/test_easy_install.pypip_disable_indexr   )   s      ~v.....    c                       e Zd Zd Zd ZdS )FakeDistc                     |dk    ri S ddiS )Nconsole_scriptsnameep )selfgroups     r   get_entry_mapzFakeDist.get_entry_map4   s    %%%I~r   c                     dS )Nspecr$   r%   s    r   as_requirementzFakeDist.as_requirement9   s    vr   N)__name__
__module____qualname__r'   r+   r$   r   r   r   r   3   s2          
    r   r   z3
    from setuptools import setup

    setup()
    c                   4   e Zd Zd Zd Zd Zd Zd Zej	        d             Z
ed             Zej	        d             Zed	             Zej	        d
             Zej                            ej                            d           d          d             ZdS )TestEasyInstallTestc                    t           j                                                                                                        }t                      }t          t           j                            |                    }t          j
        |d          \  }}|                    |          sJ d|v sJ d|v sJ d|v sJ t          j        d|t          j                  sJ d S )N   z'spec'z'console_scripts'z'name'z^# EASY-INSTALL-ENTRY-SCRIPT)flags)eiCommandSpecbestfrom_environment	as_headerr   nextScriptWriterget_args	itertoolsislice
startswithresearch	MULTILINE)r%   headerdistargsr"   scripts         r   test_get_script_argsz(TestEasyInstallTest.test_get_script_argsG   s    $$&&7799CCEEzzBO,,T2233 'a00f  (((((6!!!!"f,,,,6!!!!y7r|TTTTTTTTr   c                    t                      }t          j        |          }d |_        d|_        ddg|_        t          j                            t          j
                    d          |_        dg|_        |                                 |j        j        i k    sJ t          j        |          }d |_        ddg|_        t          j                            t          j
                    d          |_        dg|_        |                                 t!          |j        j                                                  }|ddgk    sJ d S )Nc                      dS NTr$   r$   r   r   <lambda>z8TestEasyInstallTest.test_no_find_links.<locals>.<lambda>W       4 r   Tlink1link2okc                      dS rI   r$   r$   r   r   rJ   z8TestEasyInstallTest.test_no_find_links.<locals>.<lambda>a   rK   r   )r   r4   easy_installcheck_pth_processingno_find_links
find_linksosr   jointempfilemkdtempinstall_dirrD   ensure_finalizedpackage_indexscanned_urlssortedkeys)r%   rC   cmdr]   s       r   test_no_find_linksz&TestEasyInstallTest.test_no_find_linksR   s)    ~~od###/<  !7+',,x'7'9'94@@6 -3333 od###/< !7+',,x'7'9'94@@6c'499;;<<)))))))r   c                    t                      }t          j        |          }t          j                    |_        t          j        t          j	        j
                  5  |                                 ddd           dS # 1 swxY w Y   dS )zS
        Test that `cant_write_to_target` is rendered as a DistutilsError.
        N)r   r4   rP   rT   getcwdrX   pytestraises	distutilserrorsDistutilsErrorcant_write_to_target)r%   rC   r^   s      r   test_write_exceptionz(TestEasyInstallTest.test_write_exceptioni   s     ~~od##)++]9+:;; 	' 	'$$&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   B  BBc                     t          d          fd}|                    t          d|d           t          j                    v sJ dS )zh
        get_site_dirs should always return site dirs reported by
        site.getsitepackages.
        z/setuptools/test/site-packagesc                  
     gS Nr$   r   s   r   mock_gspz8TestEasyInstallTest.test_all_site_dirs.<locals>.mock_gspz   s
    6Mr   getsitepackagesFraisingN)r   setattrsiter4   get_site_dirs)r%   r   rl   r   s      @r   test_all_site_dirsz&TestEasyInstallTest.test_all_site_dirss   sl    
 >??	 	 	 	 	 	D"3XuMMMr'))))))))r   c                 j    |                     t          dd           t          j                    sJ d S )Nrm   Frn   )delattrrq   r4   rr   )r%   r   s     r   0test_all_site_dirs_works_without_getsitepackageszDTestEasyInstallTest.test_all_site_dirs_works_without_getsitepackages   s9    D"3UCCC!!!!!!!r   c                     dt          d          fddg}d}||z  }t          j        t          |          d          }|D ]\  }}|                    ||           |                                 t          |          S )Nsetup.pya5  
                    import setuptools
                    setuptools.setup(
                        name="setuptools-test-unicode",
                        version="1.0",
                        packages=["mypkg"],
                        include_package_data=True,
                    )
                    zmypkg/__init__.py )u   mypkg/☃.txtrz   zsetuptools-test-unicode-1.0.zipw)r   zipfileZipFilestrwritestrcloser%   tmpdirfiles
sdist_namesdist	sdist_zipfilenamecontents           r   sdist_unicodez!TestEasyInstallTest.sdist_unicode   s     
 
'
0 7
# OCJJ44	!& 	2 	2Hgx11115zzr   c                 P   t          ddgi          }|dz                                  }t          j        |t	          |          dg          }|                    t          j        dt	          |                     |                                 |                    |           dS )zq
        The install command should execute correctly even if
        the package has unicode filenames.
        script_argsrP   targetxrX   rD   
PYTHONPATHN	r   
ensure_dirr4   rP   r~   setitemrT   environrY   )r%   r   r   r   rC   r   r^   s          r   test_unicode_filename_in_sdistz2TestEasyInstallTest.test_unicode_filename_in_sdist   s     ]^,<=>>8#//11oF
 
 

 	BJc&kkBBB'''''r   c                 B   dt          d          fddt          d          fg}d}||z  }t          j        t          |          d          }|D ].\  }}|                    ||                    d                     /|                                 t          |          S )	Nrx   ar  
                    import setuptools
                    setuptools.setup(
                        name="setuptools-test-unicode",
                        version="1.0",
                        packages=["mypkg"],
                        include_package_data=True,
                        scripts=['mypkg/unicode_in_script'],
                    )
                    ry   zmypkg/unicode_in_scriptu   
                    #!/bin/sh
                    # á

                    non_python_fn() {
                    }
                z&setuptools-test-unicode-script-1.0.zipr{   utf-8)r   r|   r}   r~   r   encoder   r   s           r   sdist_unicode_in_scriptz+TestEasyInstallTest.sdist_unicode_in_script   s     	  &) #
< >
# OCJJ44	!& 	B 	BHgx)@)@AAAA5zzr   c                 P   t          ddgi          }|dz                                  }t          j        |t	          |          dg          }|                    t          j        dt	          |                     |                                 |                    |           dS )zr
        The install command should execute correctly even if
        the package has unicode in scripts.
        r   rP   r   r   r   r   Nr   )r%   r   r   r   rC   r   r^   s          r   test_unicode_content_in_sdistz1TestEasyInstallTest.test_unicode_content_in_sdist   s     ]^,<=>>8#//11odF3%HHHBJc&kkBBB011111r   c                     dt          d          fdt          d          fg}d}t          ||z            }t          ||           |S )Nrx   a  
                    import setuptools
                    setuptools.setup(
                        name="setuptools-test-script",
                        version="1.0",
                        scripts=["mypkg_script"],
                    )
                    mypkg_scriptzg
                     #/usr/bin/python
                     print('mypkg_script')
                     zsetuptools-test-script-1.0.zip)r   r~   
make_sdist)r%   r   r   r   r   s        r   sdist_scriptz TestEasyInstallTest.sdist_script   so     	 	  
0 6
FZ'((5%   r   linuxzTest can only be run on Linuxreasonc                    t          ddgi          }|dz                                  }t          j        |t	          |          dg          }|                    t          j        dt	          |                     |                                 |                    |           |dz  	                                sJ dS )	z.
        Check scripts are installed.
        r   rP   r   r   r   r   r   N)
r   r   r4   rP   r~   r   rT   r   rY   exists)r%   r   r   r   rC   r   r^   s          r   test_script_installz'TestEasyInstallTest.test_script_install  s     ]^,<=>>8#//11oF
 
 

 	BJc&kkBBB&&&'//1111111r   N)r,   r-   r.   rF   r_   rh   rs   rv   rb   fixturer   r   r   r   r   r   markskipifsysplatformr>   r   r$   r   r   r0   r0   F   s?       	U 	U 	U* * *.' ' '* * *" " " ^! ! ^!F ( ( ](  ^' ' ^'R 2 2 ]2 ^  ^< [L##G,,,5T   2 2 2 2 2r   r0   zignore:Unbuilt eggc                        e Zd Zd Zd Zd ZdS )TestPTHFileWriterc                     t          dt          j                    g          }|j        rJ |                    t          t          j                                         |j        sJ dS )zba pth file manager should set dirty
        if a distribution is in site but also the cwd
        does-not_existN)r   rT   ra   dirtyaddPRDistribution)r%   pths     r   !test_add_from_cwd_site_sets_dirtyz3TestPTHFileWriter.test_add_from_cwd_site_sets_dirty'  s^     /")++??9ry{{++,,,yr   c                     d}t          j        |          }t          d|g          }|j        rJ |                    t          |                     |j        rJ d S )Nz%/test/location/does-not-have-to-existr   )pkg_resourcesr   r   r   r   r   )r%   locationr   s      r   test_add_from_site_is_ignoredz/TestPTHFileWriter.test_add_from_site_is_ignored0  so    : /99
 
 9x(()))9r   c                    |                     d          }|                                 t          |                     d                    }t          |          }t          |          }|j        |j        cxk    rg k    sn J d            |                     d          }|                                 t          |          }|j                            |           |                                 |j        s
J d            ||j        vs
J d            |                                 ||j        v s
J d            |j        d         |k    s
J d	            t          |          j        |j        k    s
J d
            dS )z
        If the pth file is modified under the hood, then PthDistribution
        will refresh its content before saving, merging contents when
        necessary.
        
pth_subdirz	file1.pthz6unless there would be some default added at some point
src_subdirzEthe new_src_path added must still be present/valid in pth1 after savez:right before we save the entry should still not be presentzJthe new_src_path entry should have been added by pth2 with its save() callzVand it should match exactly on the last entry actually given we append to it in save()zXand we should have the exact same list at the end with a fresh PthDistributions instanceN)rU   mkdirr~   r   pathsappendsave)r%   r   r   pth_pathpth1pth2new_src_pathnew_src_path_strs           r   *test_many_pth_distributions_merge_togetherz<TestPTHFileWriter.test_many_pth_distributions_merge_together>  s    [[..
z{3344))))J$**********C +** {{<00|,,
*+++		J	S 	SR	S 	S 	S
 DJ...G /..		
***W +**z"~---. .--
  ))/4:===5 >====r   N)r,   r-   r.   r   r   r   r$   r   r   r   r   %  sA            )
 )
 )
 )
 )
r   r   c              #     K   | dz                       dd          5 }|                    t                     d d d            n# 1 swxY w Y   |                                 5  | V  d d d            d S # 1 swxY w Y   d S )Nrx   r{   r   encoding)openwriteSETUP_PYas_cwd)r   fs     r   setup_contextr   j  s     
:
	#	#C'	#	:	: a	              	                   s#   AAA#A55A9<A9user_overrider   c                      e Zd Z ej        d ej                              Z ej        dej                   ej        dd          ed                                     Z	 ej        dd          ed                         Z
ed             Zd	 Z ej                    d
             Z ej                    d             Zd Zej        d             Zd ZdS )TestUserInstallTestz;setuptools.command.easy_install.easy_install.check_site_dirz(setuptools.command.easy_install.__file__site.ENABLE_USER_SITETc                 .    |                                   d S rk   assert_not_user_siter*   s    r   /test_user_install_not_implied_user_site_enabledzCTestUserInstallTest.test_user_install_not_implied_user_site_enabled~  s     	!!#####r   Fc                 .    |                                   d S rk   r   r*   s    r   0test_user_install_not_implied_user_site_disabledzDTestUserInstallTest.test_user_install_not_implied_user_site_disabled  s     	!!#####r   c                      t                      } d| _        t          j        |           }dg|_        |                                 |j        r
J d            d S )Nrx   pyzuser should not be implied)r   script_namer4   rP   rD   rY   user)rC   r^   s     r   r   z(TestUserInstallTest.assert_not_user_site  s\     ~~%od##6899999999r   c                     t          j        d           t          j        d          }t          j        t          j        t          j                   |                    d           d S )Nmultiprocessingtest_easy_install)levelstreamzthis should not break)	rb   importorskiplogging	getLoggerbasicConfigINFOr   stderrinfo)r%   logs     r   test_multiproc_atexitz)TestUserInstallTest.test_multiproc_atexit  sX    -... 344',szBBBB()))))r   c                     |dz  }|                     d          5 }|                    d           d d d            n# 1 swxY w Y   t          |          S )Nzfoo-1.0.egg-infor{   z
Name: foo
)r   r   r~   )r%   r   egg_filer   s       r   foo_packagezTestUserInstallTest.foo_package  s    ..]]3 	#1GGM"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#6{{s   =AAc              #     K   t          |          }t          j        dt          j        |gz             5  t
          j        j                            t          j                  }t          j                            t
          j	        |          5  |V  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sys.pathr   )
r~   r   patchr   r   rT   pathseprU   dictr   )r%   r   r   python_paths       r   install_targetz"TestUserInstallTest.install_target  s!     VZ
CHx$788 	 	'/..sx88KDD                	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s6   AB8B B8 B$	$B8'B$	(B88B<?B<c                    t                      }d|_        t          j        |          }||_        dg|_        |                                 |j                            |g           |                    d          }t          j
                            t          j
                            |j                            }t          j
                            t          j
                            |                    }||k    sJ dS )zd
        The local index must be used when easy_install locates installed
        packages.
        rx   fooN)r   r   r4   rP   rX   rD   rY   local_indexscanrT   r   normcaserealpathr   )r%   r   r   rC   r^   resactualexpecteds           r   test_local_indexz$TestUserInstallTest.test_local_index  s    
 ~~%od##(7k]+++u%%!!"'"2"23<"@"@AA7##BG$4$4[$A$ABB!!!!!!r   c              /      K    | j         |i |5  ddlmc m} t          j        |_        dV  ddd           dS # 1 swxY w Y   dS )zw
        Wrap sandbox.setup_context to patch easy_install in that context to
        appear as user-installed.
        r   N)orig_contextsetuptools.command.easy_installcommandrP   rq   	USER_SITE__file__)r%   rD   kwargsr4   s       r   user_install_setup_contextz.TestUserInstallTest.user_install_setup_context  s       T/// 	 	888888888.BKEEE		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   <A A c                 X    t           j        | _        t          j        d| j                  S )Nz setuptools.sandbox.setup_context)r   r   r   r   r   r  r*   s    r   patched_setup_contextz)TestUserInstallTest.patched_setup_context  s*    #1z.+
 
 	
r   N)r,   r-   r.   r   r   Mockprev_sp_writerq   r  r   r   staticmethodr   r   rb   r   r   r   r   
contextlibcontextmanagerr  r  r$   r   r   r   r   r  sq        DJE	 M TZ:DNKKTZ'..$ $ ] /. LK$ TZ'//$ $ ] 0/$ : : \:* * * V^   V^  " " "" 	 	 	
 
 
 
 
r   r   c               #   6  K   t                               dd          } t          j        t          j                  5  t          ddd          5 }|                    |            d d d            n# 1 swxY w Y   d V  d d d            d S # 1 swxY w Y   d S )Nzfrom setuptools import setupz from distutils.core import setup)cdrx   r{   r   r   )r   replacer   tempdirrT   chdirr   r   )distutils_setup_pyr   s     r   distutils_packager    s!     !))&*  
	RX	&	&	&  *cG444 	(GG&'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(                 s5   BA2&B2A6	6B9A6	:BBBc                      t                      } | j        dk    rt          j        d           |                                  | S )Nr   zcould not find a valid port)r   server_portrb   skipstart)p_indexs    r   
mock_indexr    s@     llGa 	1222MMOOONr   c                       e Zd Zd ZdS )TestDistutilsPackagec                 (    t          ddg           d S )Nrx   	bdist_eggr	   )r%   r  s     r   )test_bdist_egg_available_on_distutils_pkgz>TestDistutilsPackage.test_bdist_egg_available_on_distutils_pkg  s    *{m,,,,,r   N)r,   r-   r.   r  r$   r   r   r  r    s#        - - - - -r   r  c                       e Zd Zd Zd ZdS )TestInstallRequiresc                 ^   |dz  }|                     d           |dz  }|                     d           |                     |           t          j        ddddt	          |          dt	          |          d	t	          |          d
t	          |          dt	          |          dt	          |          dt	          |          g}i t
          j        d|j        i}t          j	        |t	          |          |t          j
        t          j        dd          }|j        dk    sJ 	 dd |j        D             v sJ t          d |j                                        D                       sJ dS # t"          $ r3 d|j        v r(t%          j        t          j         d|j                     w xY w)z~
        When ``python setup.py install`` is called directly, it will use easy_install
        to fetch dependencies.
        projectT)exist_okinstall-c __import__("setuptools").setup()z--install-basez--install-libz--install-headersz--install-scriptsz--install-dataz--install-purelibz--install-platlib__EASYINSTALL_INDEXr   )cwdenvstdoutr   textr   r   /does-not-exist/c                     h | ]	}|j         
S r$   r   .0rs     r   	<setcomp>zOTestInstallRequires.test_setup_install_includes_dependencies.<locals>.<setcomp>  s    )N)N)NQ!&)N)N)Nr   c              3   *   K   | ]}d |v rd|v 
|V  dS )z"not find suitable distribution forzdoes-not-existNr$   )r/  lines     r   	<genexpr>zOTestInstallRequires.test_setup_install_includes_dependencies.<locals>.<genexpr>  sF        74??$,,  -,,,	 r   zfailed to get random numbersz failure - N)r   create_projectr   
executabler~   rT   r   url
subprocessrunPIPESTDOUT
returncoderequestsr9   r*  
splitlines	Exceptionrb   xfailr   )r%   tmp_pathr  project_rootinstall_rootr^   r)  cps           r   (test_setup_install_includes_dependenciesz<TestInstallRequires.test_setup_install_includes_dependencies  s     )+D))))+D)))L)))N.%
( DC2JNCC^L!!?$
 
 
 }!!!!	%)N)N*:M)N)N)NNNNN  I0022           	 	 	-::DDDDEEE	s   &AE/ /=F,c                     d}|dz                       t          |          d           |dz                                   d S )Nz
        [metadata]
        name = project
        version = 42

        [options]
        install_requires = does-not-exist
        py_modules = mod
        	setup.cfgr   r   zmod.py)
write_textr   touch)r%   rootconfigs      r   r5  z"TestInstallRequires.create_project%  sK     
	''Vw'GGG	!!!!!r   N)r,   r-   r.   rE  r5  r$   r   r   r   r     s3        6 6 6p" " " " "r   r   c                      e Zd Zd Zeej        d                         ZdZe	j
                            de          d             Ze	j
                            de          d             Ze	j
                            de          d             Zd Zd	 Zd
 Zd Ze	j
                            dd          d             Zd Zd ZdS )TestSetupRequiresc                    |                     dd           |                     dd           |                     dd           t          j                    5  t                                          5 }t          j                    5 }t          j        |          5  t          j        ddd	d
|j	        dd||g
}t          j        |                                           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   d |j        D             dgk    sJ dS )z
        When easy_install installs a source distribution which specifies
        setup_requires, it should honor the fetch parameters (such as
        index-url, and find-links).
        PIP_RETRIES0PIP_TIMEOUTr   falser   r%  r&  rP   z--index-urlz--exclude-scriptsz--install-dirNc                     g | ]	}|j         
S r$   r   r.  s     r   
<listcomp>zMTestSetupRequires.test_setup_requires_honors_fetch_params.<locals>.<listcomp>P  s    4441444r   r,  )r   r   quietrM  create_sdistr  environmentr   r6  r7  r8  Popenwaitr=  )r%   r  r   	dist_filetemp_install_dirr^   s         r   'test_setup_requires_honors_fetch_paramsz9TestSetupRequires.test_setup_requires_honors_fetch_params4  sO    	=#...=#...>7333^ 	5 	5"//11 5Y%'' 5+;!-9IJJJ 5 5N >*)&N/+,% #(--224445 5 5 5 5 5 5 5 5 5 5 5 5 5 55 5 5 5 5 5 5 5 5 5 5 5 5 5 55 5 5 5 5 5 5 5 5 5 5 5 5 5 5	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5& 54
 34449K8LLLLLLLs   D-0DC?AC(	C?(C,,C?/C,0C?3D?DDDD
D-D	D-D	D--D14D1c               #      K   t          j                    5 } t          j                            | d          }t          |dt          d          fdg           |V  ddd           dS # 1 swxY w Y   dS )zl
        Return an sdist with a setup_requires dependency (of something that
        doesn't exist)
        z"setuptools-test-fetcher-1.0.tar.gzrx   a  
                    import setuptools
                    setuptools.setup(
                        name="setuptools-test-fetcher",
                        version="1.0",
                        setup_requires = ['does-not-exist'],
                    )
                rG  rz   N)r   r  rT   r   rU   r   r   )dir	dist_paths     r   rV  zTestSetupRequires.create_sdistR  s        	3S*NOOI #	 	 &  & OOO+	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA))A-0A-)r$   dependency_linkssetup_requires)rb  rd  use_setup_cfgc                 t   t          ddd          }t          j        |           t          j                    5  t          j                    5 }t          ||          }t          j        	                    |d          }t          j
                    5 \  }}t          |dg           ddd           n# 1 swxY w Y   |                                }t          |          d	k    sJ |d
                                         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 )a<  
        Regression test for distribution issue 323:
        https://bitbucket.org/tarek/distribute/issues/323

        Ensures that a distribution's setup_requires requirements can still be
        installed and used locally even if a conflicting version of that
        requirement is already on the path.
        zdoes-not-matterfoobar0.0project_nameversionre  rx   --nameNr   r   test_pkg)r   r   r   r   save_pkg_resources_stater  create_setup_requires_packagerT   r   rU   rU  r
   	readlineslenstrip)	r%   re  	fake_disttemp_dirrn  test_setup_pyr*  r   liness	            r   .test_setup_requires_overrides_version_conflictz@TestSetupRequires.test_setup_requires_overrides_version_conflictw  s    #He
 
 
	 		""".00 	7 	7!## 7x8M   !#Xz B B^%% 9)9&& mhZ8889 9 9 9 9 9 9 9 9 9 9 9 9 9 9
 ((**5zzA~~~~Ry((J666667 7 7 7 7 7 7 7 7 7 7 7 7 7 7	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s[   D-ADB4(D4B88D;B8<AD	D-D	D-D	D--D14D1c           
         t          j                    5  t          j                    5 }t          j                            |d          }t          |dd           t          j                            |d          }t          j        |           t          j	        |          5 }d |_
        |                    |           ddd           n# 1 swxY w Y   t          j                            d|           t          |dd          }t          j        |           t#          d	          }t%          |dd
t          ||          }t          j                            |d          }	t          j                    5 \  }
}	 t)          |	dg           n*# t*          j        $ r |                     d           Y nw xY wddd           n# 1 swxY w Y   d|
                                vsJ |
                                }t5          |          dk    sJ |d                                         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 )z
        Like ``test_setup_requires_overrides_version_conflict`` but where the
        ``setup_requires`` package is part of a namespace package that has
        *already* been imported.
        zfoo.bar-0.1.tar.gzzfoo.bar0.1zfoo.bar-0.1c                     | S rk   r$   )memberr   s     r   rJ   zFTestSetupRequires.test_setup_requires_override_nspkg.<locals>.<lambda>  s     r   Nr   ri  a                      import foo  # Even with foo imported first the
                                # setup_requires package should override
                    import setuptools
                    setuptools.setup(**%r)

                    if not (hasattr(foo, '__path__') and
                            len(foo.__path__) == 2):
                        print('FAIL')

                    if 'foo.bar-0.2' not in foo.__path__[0]:
                        print('FAIL')
                z0.2rl  rx   rm  z9Installing setup.py requirements caused a VersionConflictFAILr   r   rn  )r   ro  r  rT   r   rU   make_nspkg_sdistr   tarfiler   extraction_filter
extractallr   insertr   r   r   r   rp  rU  r
   r   VersionConflictfailgetvaluerq  rr  rs  )r%   re  ru  foobar_1_archivefoobar_1_dirtfrC   templatern  rv  r*  r   rw  s                r   "test_setup_requires_override_nspkgz4TestSetupRequires.test_setup_requires_override_nspkg  si    .00 ;	7 ;	7!## :7x#%7<<:N#O#O  !19eDDD  "w||HmDD&&&\"233 0r+F+FB(MM,///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 <000% y%   %%%   9$"/   !#Xz B B^%% 	)9&& "-(<<<<(8   		7    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 V__%6%66666((**5zzA~~~~Ry((J66666u:7 :7 :7 :7 :7 :7 :7 :7 :7 :7 :7 :7 :7 :7 :7;	7 ;	7 ;	7 ;	7 ;	7 ;	7 ;	7 ;	7 ;	7 ;	7 ;	7 ;	7 ;	7 ;	7 ;	7 ;	7 ;	7 ;	7s   IA:H?"C H?CH?CB%H?9G>FG$F7	4G6F7	7G:H?G

H?G
A$H?3I?I	II	IIIc           	      T   d }t          j                    5  t          j                    5 }t          |t	          d          ||dz             }t
          j                            |d          }t          j                    5 \  }}t          |dg           d d d            n# 1 swxY w Y   |
                                }t          |          dk    sJ |d                                         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 )
Nc                     dt          d                    ||                    f|dz   t          d          fg}t          | |           d S )Nrx   z
                    import setuptools
                    setuptools.setup(
                        name={name!r},
                        version={version!r},
                        py_modules=[{name!r}],
                    )
                    )r"   rk  z.pyz6
                    version = 42
                    )r   formatr   )r`  distnamerk  r   s       r   make_dependency_sdistzVTestSetupRequires.test_setup_requires_with_attr_version.<locals>.make_dependency_sdist  sq      Hg>>	 	 u$ E. y%(((((r   zattr: foobar.version)rk  )setup_attrsmake_packagere  rx   	--versionr   r   42)r   ro  r  rp  r   rT   r   rU   rU  r
   rq  rr  rs  )	r%   re  r  ru  rn  rv  r*  r   rw  s	            r   %test_setup_requires_with_attr_versionz7TestSetupRequires.test_setup_requires_with_attr_version  s   	) 	) 	)4 .00 	1 	1!## 1x8 $-C D D D!6"/,">	   !#Xz B B^%% <)9&&mk];;;< < < < < < < < < < < < < < <((**5zzA~~~~Ry((D000001 1 1 1 1 1 1 1 1 1 1 1 1 1 1	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1sZ   DADB$D$B((D+B(,AD9DD			DD		DD!$D!c           
         |                     dd           |                     dd           |                     dd           |                     d|j                   t          j                    5  t          j                    5 }t          |ddt          g 	          
          }t          j        	                    |d          }t          |dd          5 }|                    t          d                     d d d            n# 1 swxY w Y   t          j        	                    |d          }t          j        t          j        j                  5  t%          |dg           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t'          |j                  dk    sJ |j        d         j        dk    sJ d S )NrO  rP  rQ  r   rR  PIP_INDEX_URLpython-xlib0.19ra  r  rG  r{   r   r   z}
                        [easy_install]
                        index_url = https://pypi.org/legacy/
                        rx   r  r   r   z/python-xlib/)r   r7  r   ro  r  rp  r   rT   r   rU   r   r   r   rb   rc   rd   re   rf   r
   rr  r=  )r%   r  r   ru  rn  test_setup_cfgfprv  s           r   "test_setup_requires_honors_pip_envz4TestSetupRequires.test_setup_requires_honors_pip_env  s   =#...=#...>7333?JN;;;.00 	< 	<!## <x8! $b 9 9 9	   "$h!D!D.#@@@ BHH                  !#Xz B B]9#3#BCC < <mk];;;< < < < < < < < < < < < < < <%< < < < < < < < < < < < < < <	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<* :&''1,,,,"1%*o======s   1F"AF#D<FDFDAFE4(F4E88F;E8<F?F"F	F"F	F""F&)F&c                    |                     dd           |                     dd           |                     d|j                   t          j                    5  t          j                    5 }t
          j                            |d          }t          |dd           t          |d	          }t          |d
dt          d|z                      }t
          j                            |d          }t          |dg           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          |j                  dk    sJ d S )NrO  rP  rQ  r  z
dep.tar.gz
dependencyr  	localhost)	authorityr  r  zdependency @ %src  r  rx   r  r   )r   r7  r   ro  r  rT   r   rU   make_trivial_sdistr   rp  r   r
   rr  r=  )r%   r  r   ru  	dep_sdistdep_urlrn  rv  s           r   #test_setup_requires_with_pep508_urlz5TestSetupRequires.test_setup_requires_with_pep508_url#  s   =#...=#...?JN;;;.00 	8 	8!## 8xGLL<@@	"9lDAAA%i;GGG8! $4E4O P P P   !#Xz B B-+7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 :&''1,,,,,,s7   D*/BDD*D	D*D	D**D.1D.c           	      2   dt          d          t          d          di}t          j                    5  t          j                    5 }t	          j        ||           t          t          j        |dd                    }t          j
        t          j        j                  5  t          |dg           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   t          |j                  d	k    sJ dS )
z2The `allow-hosts` option in not supported anymore.rn  z~
                    from setuptools import setup
                    setup(setup_requires='python-xlib')
                    z\
                    [easy_install]
                    allow_hosts = *
                    rx   rG  prefixrx   r  Nr   )r   r   ro  r  r   buildr~   pathlibr   rb   rc   rd   re   rf   r
   rr  r=  )r%   r  r   ru  setup_pys        r   $test_setup_requires_with_allow_hostsz6TestSetupRequires.test_setup_requires_with_allow_hosts7  s       "  
  .00 	7 	7!## 7x
52222w|Hj*MMNN]9#3#BCC 7 7h6667 7 7 7 7 7 7 7 7 7 7 7 7 7 77 7 7 7 7 7 7 7 7 7 7 7 7 7 7	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 :&''1,,,,,,sZ   C2	AC&C8CCCCCC2C	C2"C	#C22C69C6c                    |                     dd           |                     dd           |                     dd           |                     dd           d}t          t          ||z                      }d}t          t          ||z            d	d
|           d}t          t          ||z                      }dd                    t          t          t          j        dd                             z   dz   }t          t          ||z            d	d|           |dz  }	|	                    t          d          
                    ||||||          d           t          t          |	                    }
t          j                    5  t          t          |          ddt          d	|
g                    }t          j                            |d          }t#          |dg           ddd           n# 1 swxY w Y   t%          t          t          t'          j        t          j                            |d                                        }|dgk    sJ dS )z#Check `python_requires` is honored.rO  rP  rQ  r   1PIP_VERBOSEzdep-1.0.tar.gzz>=2.7dep1.0zdep-2.0.tar.gzz!=.Nr2   z.*z2.0z
index.htmla  
            <!DOCTYPE html>
            <html><head><title>Links for dep</title></head>
            <body>
                <h1>Links for dep</h1>
                <a href="{dep_1_0_url}"data-requires-python="{dep_1_0_python_requires}">{dep_1_0_sdist}</a><br/>
                <a href="{dep_2_0_url}"data-requires-python="{dep_2_0_python_requires}">{dep_2_0_sdist}</a><br/>
            </body>
            </html>
            )dep_1_0_urldep_1_0_sdistdep_1_0_python_requiresdep_2_0_urldep_2_0_sdistdep_2_0_python_requiresr   r  r  )rd  rb  r  rx   r  z.eggszdep 1.0)r   r   r~   make_python_requires_sdistrU   mapr   version_inforH  r   r  r   ro  rp  r   rT   r   r
   listr   find_distributions)r%   r   r   r  r  r  r  r  r  index	index_urlrn  rv  eggss                 r   (test_setup_requires_with_python_requiresz:TestSetupRequires.test_setup_requires_with_python_requiresQ  s   =#...=#...>3///=#...(!#f}&<"="=>>")"&''7N	
 	
 	
 )!#f}&<"="=>>"&#c3;KBQB;O2P2P)Q)Q"QTX"X"&''7N	
 	
 	
 %  f'+(?'+(?    -	
 	
 	
0  E

++	.00 	4 	44F TTT	  H GLL:>>Mmk]333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 ]5bgll8W6U6UVVWW
 
 	{""""""s   A"G??HH!with_dependency_links_in_setup_py)FTc                 ~   |                     dd           |                     dd           t          j                    5  t          j                    5 }t	          t
          j                            |d          dd           t
          j                            |d          }t
          j                            |d          }t
          j                            |d	          }t          j        |           t          |d
d          5 }|r"t
          j                            |d          g}ng }|
                    t          d                              |                     d d d            n# 1 swxY w Y   t          |d
d          5 }|
                    t          d                              t
          j                            |d          |                     d d d            n# 1 swxY w Y   t          |dg           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 )NrO  rP  rQ  zpython-xlib-42.tar.gzr  r  rn  rx   rG  r{   r   r   linksz
                        from setuptools import installer, setup
                        setup(setup_requires='python-xlib==42',
                        dependency_links={dependency_links!r})
                        ra  z
                        [easy_install]
                        index_url = {index_url}
                        find_links = {find_links}
                        r  )r  rS   r  )r   r   ro  r  r  rT   r   rU   r   r   r   r   r  r
   )	r%   r   r  ru  rn  rv  r  r  rb  s	            r   0test_setup_requires_with_find_links_in_setup_cfgzBTestSetupRequires.test_setup_requires_with_find_links_in_setup_cfg  s    	=#...=#....00 $	8 $	8!## #8x"GLL+BCC]TX   7<<*== "Xz B B!#h!D!D"""-w??? 28 .,.GLL7,K,K+L((+-(HH  !&2B&CC                 .#@@@ BHH  !&&(gll8W&E&E'/ !                   -+777G#8 #8 #8 #8 #8 #8 #8 #8 #8 #8 #8 #8 #8 #8 #8$	8 $	8 $	8 $	8 $	8 $	8 $	8 $	8 $	8 $	8 $	8 $	8 $	8 $	8 $	8 $	8 $	8 $	8s    H2B6H
AE3'H3E77H:E7;HAG2&H2G66H9G6:HH2H	H2!H	"H22H69H6c                 x   t          j                    5  t          j                    5 }t          t          j                            |d          dd           t          j                            |d          }t	          j        |           t          j        t          d          dd|           t          t          j                            |d	          d
g           t          j        |           t          j                            |d          }t          j                            |d	          }t	          j        |           t          |dd          5 }|                    t          d                     ddd           n# 1 swxY w Y   |                    dt!          |                     |                    dd           |                    dd           |                    dd           t          |dg           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
        Use case: installing a package with a build dependency on
        an already installed `dep[extra]`, which in turn depends
        on `extra_dep` (whose is not already installed).
        extra_dep-1.0.tar.gz	extra_depr  r  a  
                          import setuptools
                          setuptools.setup(
                              name='dep', version='2.0',
                              extras_require={'extra': ['extra_dep']},
                          )
                         rz   r  r  rx   	dist_inforn  r{   r   r   
                        from setuptools import installer, setup
                        setup(setup_requires='dep[extra]')
                        NPIP_FIND_LINKSr   r  rO  rP  rQ  r  )r   ro  r  r  rT   r   rU   r   r  r   r
   r   	add_entryr   r   r   r~   r%   r   ru  dep_pkgrn  rv  r  s          r   4test_setup_requires_with_transitive_extra_dependencyzFTestSetupRequires.test_setup_requires_with_transitive_extra_dependency  s    .00 -	8 -	8!## ,8x"GLL+ABBKQV   ',,x77!!!
$(% % &(  #     "',,w
;;k]KKK%g...7<<*== "Xz B B"""-w??? 2HH                  ""#3S]]CCC"">3777""=#666""=#666-+777Y,8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,8-	8 -	8 -	8 -	8 -	8 -	8 -	8 -	8 -	8 -	8 -	8 -	8 -	8 -	8 -	8 -	8 -	8 -	8sZ   H/D3H#F
>H
FHFA9HH/H	H/H	H//H36H3c           	         t          j                    5  t          j                    5 }t          t          j                            |d          dt          d          fddg           t          j                            |d          }t	          j        |           t          j	        t          d          dt          d	          d
|           t          t          j                            |d          dg           t          j        |           t          j                            |d          }t          j                            |d          }t	          j        |           t          |dd          5 }|                    t          d                     ddd           n# 1 swxY w Y   |                    dt!          |                     |                    dd           |                    dd           |                    dd           t          |dg           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 )zk
        Use case: ensure build requirements' extras
        are properly installed and activated.
        r  rx   a$  
                          import setuptools
                          setuptools.setup(
                              name='extra_dep',
                              version='1.0',
                              py_modules=['extra_dep'],
                          )
                          r^  )zextra_dep.pyrz   epdepa(  
                          import setuptools
                          setuptools.setup(
                              name='dep', version='2.0',
                              py_modules=['epcmd'],
                              extras_require={'extra': ['extra_dep']},
                              entry_points='''
                                           [distutils.commands]
                                           epcmd = epcmd:epcmd [extra]
                                           ''',
                          )
                         rz   a  
                                     from distutils.command.build_py import build_py

                                     import extra_dep

                                     class epcmd(build_py):
                                         pass
                                     )rx   rG  zepcmd.pyr  r  rn  r{   r   r   r  Nr  r   r  rO  rP  rQ  epcmd)r   ro  r  r   rT   r   rU   r   r   r  r
   r   r  r   r   r   r~   r  s          r   .test_setup_requires_with_distutils_command_depz@TestSetupRequires.test_setup_requires_with_distutils_command_dep  s5   
 .00 M	4 M	4!## L4xGLL+ABB ' !	 	 *,  * ',,x99!!!
$(% % &($()	% 	%! 6 #9   > "',,w
;;k]KKK%g...7<<*== "Xz B B"""-w??? 2HH                  ""#3S]]CCC"">3777""=#666""=#666-'333YL4 L4 L4 L4 L4 L4 L4 L4 L4 L4 L4 L4 L4 L4 L4M	4 M	4 M	4 M	4 M	4 M	4 M	4 M	4 M	4 M	4 M	4 M	4 M	4 M	4 M	4 M	4 M	4 M	4sZ   IEH6:#F)H6)F--H60F-1A9H6*I6H:	:I=H:	>IIIN)r,   r-   r.   r\  r
  r  r  rV  re  rb   r   parametrizerx  r  r  r  r  r  r  r  r  r  r$   r   r   rM  rM  3  sw       M M M<    \8M [_m<<7 7 =<7< [_m<<B7 B7 =<B7H [_m<<(1 (1 =<(1T> > >:- - -(- - -48# 8# 8#t [@-PP)8 )8 QP)8V38 38 38jR4 R4 R4 R4 R4r   rM  c                 V    t          | dt          d|d|d          fdg           dS )z\
    Create a simple sdist tarball at dist_path, containing just a simple
    setup.py.
    rx   zT             import setuptools
             setuptools.setup(
                 name=z,
                 version=z
             )
         r^  N)r   r   )r`  r  rk  s      r   r  r  A  sZ        xx*	 	 	
    r   c                   
 |                     d          

d         }
fdt          dt          
          dz             D             }t          d|d|d|d|d		          }d
}d|ft          j                            |d          |fg}|dd         D ]C}t	          j        j        |                     d          dgz    }	|                    |	df           Dt          | |           dS )z
    Make an sdist tarball with distname and version which also contains one
    package with the same name as distname.  The top-level package is
    designated a namespace package).
    r  r   c                 J    g | ]}d                      d|                    S )r  N)rU   )r/  idxpartss     r   rT  z$make_nspkg_sdist.<locals>.<listcomp>f  s-    JJJ#tt%%JJJr   r   zE        import setuptools
        setuptools.setup(
            name=z,
            version=z,
            packages=z",
            namespace_packages=[z]
        )
    z7__import__('pkg_resources').declare_namespace(__name__)rx   z__init__.pyNrz   )	splitrangerr  r   rT   r   rU   r   r   )r`  r  rk  	nspackagepackagesr  initr   packager   r  s             @r   r~  r~  \  s    NN3EaIJJJJq#e**q.1I1IJJJHt 88WWWhhh					3 H ED(#bgll9m&L&Ld%STEABB< % %7<'--"4"4"FHh^$$$$y%     r   c           	      t    t          | dt          d                              |||          fdg           d S )Nrx   z                import setuptools
                setuptools.setup(
                  name={name!r},
                  version={version!r},
                  python_requires={python_requires!r},
                )
                )r"   rk  python_requiresr^  )r   r   r  )r`  r  rk  r  s       r   r  r    sd     	 	 &!7O    !	
    r   c                    t          |          dk    sJ t          j        | d          5 }|D ]\  }}t          j        |                    d                    }t          j        |          }t          |                                          |_        t          t          j
                              |_        |                    ||           	 ddd           dS # 1 swxY w Y   dS )z
    Create a simple sdist tarball at dist_path, containing the files
    listed in ``files`` as ``(filename, content)`` tuples.
    r   zw:gzr   r"   )fileobjN)rr  r  r   ioBytesIOr   TarInfor  sizeinttimemtimeaddfile)r`  r   rC   r   r   
file_bytes	file_infos          r   r   r     s    u::>>>>	i	(	( 8D!& 	8 	8HgGNN7$;$;<<JX666I !4!4!6!677IN!$)++..IOLLJL7777	88 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s   B'C  C$'C$rg  rz  r$   c                    dd|d|gt           j                            |           gd}|r|                    |           t           j                            | d          }t          j        |           |rg }	g }
|D ]}}|                    |          }|d                                v r|
}n|	}t          |t          t          f          rd                    |          }|                    |d|           ~t          d                              d	                    |	          d	                    |
          
          }nd}t          t           j                            |d          dd          5 }|                    |           ddd           n# 1 swxY w Y   |t          d          }t          t           j                            |d          dd          5 }|                    ||z             ddd           n# 1 swxY w Y   t           j                            | |d|d          } ||||           |S )a  Creates a source tree under path for a trivial test package that has a
    single requirement in setup_requires--a tarball for that requirement is
    also created and added to the dependency_links argument.

    ``distname`` and ``version`` refer to the name/version of the package that
    the test package requires via ``setup_requires``.  The name of the test
    package itself is just 'test_pkg'.
    rn  rh  z==)r"   rk  rd  rb  zname version;z: zg
            [metadata]
            {metadata}
            [options]
            {options}
            
)optionsmetadatarz   rG  r{   r   r   NzI            import setuptools
            setuptools.setup(**%r)
        rx   -z.tar.gz)rT   r   abspathupdaterU   r   popr  
isinstancetupler  r   r   r  r   r   )r   r  rk  r  setup_py_templater  re  test_setup_attrsrn  r  r  r"   valuesectiontest_setup_cfg_contentsr   foobar_paths                    r   rp  rp    s   & '/xx9:W__T223	   -,,,w||D*--HHX  %! 	5 	5D$((..E~++----"!%%// (NNtttUU34444"&#
 #
 &IIg&&YYx((  
 
 	  #%	bgll8[113	I	I	I )Q	'((() ) ) ) ) ) ) ) ) ) ) ) ) ) )   
 
 
bgll8Z00#	H	H	H 6A	!$445556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ',,txxx%IJJKLh000Os$   :FF #F (HHHjavaz0Test cannot run under java when executable is shr   c                   .    e Zd ZdZdZd Zd Zd Zd ZdS )TestScriptHeaderu   /Users/José/bin/pythonz$C:\Program Files\Python36\python.exec                     dt          j        t          j                            t
          j                            z  }t           j                            d          }||k    sJ d S )Nz#!%s
z#!/usr/local/bin/python	r4   nt_quote_argrT   r   normpathr   r6  r:   
get_headerr%   r   r   s      r   test_get_script_headerz'TestScriptHeader.test_get_script_header  sU    bobg.>.>s~.N.NOOO++,EFF!!!!!!r   c                     dt          j        t          j                            t
          j                            z  }t           j                            d          }||k    sJ d S )N#!%s -x
z#!/usr/bin/python -xr  r  s      r   test_get_script_header_argsz,TestScriptHeader.test_get_script_header_args  sU    1A1A#.1Q1Q!R!RR++,BCC!!!!!!r   c                 v    t           j                            d| j                  }d| j        z  }||k    sJ d S )N#!/usr/bin/pythonr6  r  )r4   r:   r  non_ascii_exer%   r   r   s      r   $test_get_script_header_non_ascii_exez5TestScriptHeader.test_get_script_header_non_ascii_exe  sL    ++D,> , 
 
 !33!!!!!!r   c                     t           j                            dd| j        z   dz             }d| j        z  }||k    sJ d S )Nr  "r  z#!"%s"
)r4   r:   r  exe_with_spacesr  s      r   &test_get_script_header_exe_with_spacesz7TestScriptHeader.test_get_script_header_exe_with_spaces  sV    ++C$2F,F,L , 
 
  44!!!!!!r   N)	r,   r-   r.   r  r  r	  r  r  r  r$   r   r   r  r    s\        
 .M=O" " "
" " "
" " "" " " " "r   r  c                       e Zd Zd Zd Z ej        dej                  ej        	                    e
j                  d                         Zd ZdS )TestCommandSpecc                 f    t          j        ddg          }|                                dk    sJ dS )zx
        Show how a custom CommandSpec could be used to specify a #! executable
        which takes parameters.
        z/usr/bin/envpython3z#!/usr/bin/env python3
N)r4   r5   r8   r%   r^   s     r   test_custom_launch_commandz*TestCommandSpec.test_custom_launch_command  s8    
 nni899}}"<<<<<<<r   c                 z    t          j        dg          }t           j                            |          }||u sJ dS )zG
        from_param should return an instance of a CommandSpec
        pythonN)r4   r5   
from_param)r%   r^   cmd_news      r   .test_from_param_for_CommandSpec_is_passthroughz>TestCommandSpec.test_from_param_for_CommandSpec_is_passthrough  s;     nhZ((.++C00g~~~~~~r   zsys.executablec                     t           j                            dd            t          j                                        }t          |          dk    sJ |                                                    d          sJ d S )N__PYVENV_LAUNCHER__r   z#!")	rT   r   r  r4   r5   r7   rr  r8   r>   r  s     r   /test_from_environment_with_spaces_in_executablez?TestCommandSpec.test_from_environment_with_spaces_in_executable&  si     	
,d333n--//3xx1}}}}}}))%0000000r   c                     t           j                            d          }t          |          dk    sJ d|                                vsJ dS )z
        In order to support `executable = /usr/bin/env my-python`, make sure
        from_param invokes shlex on that input.
        z/usr/bin/env my-pythonr2   r  N)r4   r5   r  rr  r8   r  s     r   "test_from_simple_string_uses_shlexz2TestCommandSpec.test_from_simple_string_uses_shlex.  sL    
 n''(@AA3xx1}}}}#--//))))))r   N)r,   r-   r.   r  r!  r   r   r  r  r   rT   r   r$  r&  r$   r   r   r  r    s        = = =   TZ "2"BCC	Z__RZ  1 1 !  DC1* * * * *r   r  c                       e Zd Zd ZdS )TestWindowsScriptWriterc                 "   t           j                            d          }|                    d          sJ |                    d          sJ |                    d          }|                    d          }|                    d          rJ d S )Nrz   z#!r  z\")r4   WindowsScriptWriterr  r>   endswithlstriprstrip)r%   hdrs     r   test_headerz#TestWindowsScriptWriter.test_header9  s    $//33~~d#####||D!!!!!jjjj>>%(((((((r   N)r,   r-   r.   r/  r$   r   r   r(  r(  8  s#        ) ) ) ) )r   r(  c                   B    e Zd ZU eed<   eed<   eed<   eed<   eed<   dS )VersionStubmajorminormicroreleaselevelserialN)r,   r-   r.   r  __annotations__r~   r$   r   r   r1  r1  C  s@         JJJJJJJJJKKKKKr   r1  c           	      D   t                      }|                    d          }dg|_        d|_        d|_        t          |           |_        d |_        |                    d          }t          |           |_        d |_        |                                5 }t          j
                    5  t          j        d           d}t          dd	d
dd          }|                    dd           |                    d|           |                    d|           |                    |dt          j                               |                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t#          t$          d          rdnd}	|j                                        }
t+          j        |	dz   |
          rt+          j        |	dz   |
          sJ |j        d         dk    sJ |j        d         dk    sJ |j        d         dk    sJ d S )NrP   rN   r   Tr$  ignorez:3.10.1 (main, Dec 21 2021, 09:17:12) [GCC 10.2.1 20210110]   
   r   finalr   zsys.versionzsys.version_infocreate_home_pathpypy_version_infopypyr  z3\.?1z3\.?1\d
py_versionz3.10.1py_version_shortz3.10py_version_nodot310)r   get_command_objrD   optimizer   r~   install_userbaseinstall_usersitecontextwarningscatch_warningssimplefilterr1  rp   r   r  finalize_optionshasattrr   rX   lowerr?   r@   config_vars)r   
tmpdir_cwdr   rC   r^   install_cmdr   rk  r   r"   rX   s              r   &test_use_correct_python_version_stringrR  K  s    >>D


~
.
.CvCHCLCHv;;CC&&y11K#&v;;K #'K 					 %)@)B)B  h'''N1b!Wa00-t444mW---($///c-ty{{;;;                              S"566D66HD/''))K 
y+.. 9y
*K88888
 ?<(H4444?-.&8888?-.%777777s7   E8-B(E!E8!E%	%E8(E%	)E88E<?E<c                    |                     dd           |                    dt          |dz                       |                    dt          |dz                       |                    dt          |dz                       |                     dd           |                     d	d           t          t	          j                              }|                    d
d
           |dz  }|                    d
d
           |                     dt          |                     d}|dz                      |d           t          |	                    d                    g k    sJ t          |	                    d                    g k    sJ t          dddg           t          |	                    d                    g k    sJ d |	                    d          D             }|dhz
  }|dhk    sJ dS )zC`setup.py develop` should honor `--user` even under build isolationr   FHOMEz.homeUSERPROFILEAPPDATAzsite.USER_BASENzsite.USER_SITET)parentsr#  z.sys_prefixz
sys.prefixzF__import__('setuptools').setup(name='aproj', version=42, packages=[])
rx   r   r   *developz--userc                     h | ]	}|j         
S r$   r  )r/  r   s     r   r1  z9test_editable_user_and_build_isolation.<locals>.<setcomp>  s    555A555r   zeasy-install.pthzaproj.egg-link)rp   r   r~   r   rq   getusersitepackagesr   rH  r  globr
   )r   r   rA  	user_site
sys_prefixsetup_script	installeds          r   &test_editable_user_and_build_isolationra  y  s    /777( vs8g#566777}c(W*<&=&=>>>y#h&8"9"9:::($///($///T-//00IOOD4O000M)JTD111c*oo666 	R  
&&|g&FFF 
$$%%++++	s##$$**** j9h/000 
$$%%++++55!4!4555I/00I)*******r   )R__doc__r   rT   rV   rq   r  r  r   r<   distutils.errorsrd   r  typingr   r|   r  r?   r8  r  rI  r   unittestr   rb   jaracor   
setuptoolsr   setuptools.sandboxr
   r   r  rP   r4   r   setuptools.distr   r   r   r   r   setuptools.tests.serverr   r   setuptools.testsr   rz   r   textwrapr   r   r   r   r   r0   r   filterwarningsr   r   usefixturesr   r  r  r  r   rM  r  r~  r  r   rp  r   r   r>   is_shr6  r  r  r(  r1  rR  ra  r$   r   r   <module>rp     s     



 				                 				         				                                ( ( ( ( ( ( , , , , , , , , , < < < < < < ( ( ( ( ( ( 5 5 5 5 5 5 5 5 8 8 8 8 8 8 ; ; ; ; ; ; ; ; * * * * * *                 / / /        4 \2 \2 \2 \2 \2 \2 \2 \2~ 011A
 A
 A
 A
 A
 A
 A
 21A
H    ))))X
 X
 X
 X
 X
 X
 X
 *) *)X
v      - - - - - - - -
D" D" D" D" D" D" D" D"NK4 K4 K4 K4 K4 K4 K4 K4\  6 !  !  !F  08 8 8& #I I I IX LF##@(@(@=   " " " " " " "	 ": *  *  *  *  *  *  *  *F) ) ) ) ) ) ) )    *   +8 +8 +8\9+ 9+ 9+ 9+ 9+r   