
    :ji                     V   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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mZ ddlZddlmZ ddlZddlmc mZ ddlmZmZm Z  ddl!m"Z" dd	l#m$Z$ dd
lm%Z% ddl&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l0m1Z1 ddl2Z3 ej4        d          d             Z5 G d d          Z6 e1d          Z7 G d d          Z8ej9        :                    d           G d d                      Z;ej4        d             Z<ej9        =                    d          ej9        =                    d           G d  d!                                  Z>ej4        d"             Z?ej9        =                    d#           G d$ d%                      Z@ej4        d&             ZA G d' d(          ZB G d) d*          ZCd+ ZDd, ZEd- ZFd. ZGd/d0eDddd1fd2ZHej9        I                    e
jJ        K                    d3          o ejL        e
jM                  d45           G d6 d7                      ZN G d8 d9          ZO G d: d;          ZP G d< d=e          ZQd> ZRej9        S                    e
jJ        d?k    d@5          dA             ZTdS )BzEasy install Tests    N)Path)
NamedTuple)mockpath)Distributionnormalize_pathworking_set)sandbox)
safer_name)PthDistributions)r   	run_setup)fail_on_ascii)
MockServerpath_to_url   )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    \/root/voice-cloning/.venv/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_map5   s    %%%I~r   c                     dS )Nspecr%   r&   s    r   as_requirementzFakeDist.as_requirement:   s    vr   N)__name__
__module____qualname__r(   r,   r%   r   r   r    r    4   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args_namescripts         r   test_get_script_argsz(TestEasyInstallTest.test_get_script_argsH   s    $$&&7799CCEEzzBO,,T2233!(q11v  (((((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>X       4 r   Tlink1link2okc                      dS rK   r%   r%   r   r   rL   z8TestEasyInstallTest.test_no_find_links.<locals>.<lambda>b   rM   r   )r   r5   easy_installcheck_pth_processingno_find_links
find_linksosr   jointempfilemkdtempinstall_dirrE   ensure_finalizedpackage_indexscanned_urlssortedkeys)r&   rD   cmdr_   s       r   test_no_find_linksz&TestEasyInstallTest.test_no_find_linksS   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   r5   rR   rV   getcwdrZ   pytestraises	distutilserrorsDistutilsErrorcant_write_to_target)r&   rD   r`   s      r   test_write_exceptionz(TestEasyInstallTest.test_write_exceptionj   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_gsp{   s
    6Mr   getsitepackagesFraisingN)r	   setattrsiter5   get_site_dirs)r&   r   rn   r   s      @r   test_all_site_dirsz&TestEasyInstallTest.test_all_site_dirst   sl    
 >??	 	 	 	 	 	D"3XuMMMr'))))))))r   c                 j    |                     t          dd           t          j                    sJ d S )Nro   Frp   )delattrrs   r5   rt   )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/☃.txtr|   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_argsrR   targetxrZ   rE   
PYTHONPATHN	r   
ensure_dirr5   rR   r   setitemrV   environr[   )r&   r   r   r   rD   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 )	Nrz   ar  
                    import setuptools
                    setuptools.setup(
                        name="setuptools-test-unicode",
                        version="1.0",
                        packages=["mypkg"],
                        include_package_data=True,
                        scripts=['mypkg/unicode_in_script'],
                    )
                    r{   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   rR   r   r   r   r   Nr   )r&   r   r   r   rD   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 )Nrz   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   rR   r   r   r   r   r   N)
r   r   r5   rR   r   r   rV   r   r[   exists)r&   r   r   r   rD   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/   rH   ra   rj   ru   rx   rd   fixturer   r   r   r   r   r   markskipifsysplatformr?   r   r%   r   r   r1   r1   G   s?       	U 	U 	U* * *.' ' '* * *" " " ^! ! ^!F ( ( ](  ^' ' ^'R 2 2 ]2 ^  ^< [L##G,,,5T   2 2 2 2 2r   r1   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   rV   rc   dirtyaddPRDistribution)r&   pths     r   !test_add_from_cwd_site_sets_dirtyz3TestPTHFileWriter.test_add_from_cwd_site_sets_dirty(  s\     /")++??9}ry{{++,,,y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_ignored1  sm    : /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)rW   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))))zTZ----2-----D .--
 {{<00|,,
*+++		z 	
 	
S	
 	
z  tz111H 211 			4:---X .-- 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 )Nrz   r}   r   encoding)openwriteSETUP_PYas_cwd)r   fs     r   setup_contextr   k  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 rm   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 rm   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 )Nrz   pyzuser should not be implied)r   script_namer5   rR   rE   r[   user)rD   r`   s     r   r   z(TestUserInstallTest.assert_not_user_site  s[     ~~%od##68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)	rd   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   rV   pathseprW   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.
        rz   fooN)r   r   r5   rR   rZ   rE   r[   local_indexscanrV   r   normcaserealpathr   )r&   r   r   rD   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commandrR   rs   	USER_SITE__file__)r&   rE   kwargsr5   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_writers   r  r   r   staticmethodr   r   rd   r   r   r   r   
contextlibcontextmanagerr  r	  r%   r   r   r   r   s  s_        DJE	 M TZ:DNKKTZ'..$ $ ] /. LK$ TZ'//$ $ ] 0/$ : : \:* * * ^  ^ ^  ^" " "" 	 	 	
 
 
 
 
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)cdrz   r}   r   r   )r   replacer   tempdirrV   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r  c                       e Zd Zd ZdS )TestDistutilsPackagec                 (    t          ddg           d S )Nrz   	bdist_eggr   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                      t                      } | j        dk    rt          j        d           |                                  | S )Nr   zcould not find a valid port)r   server_portrd   skipstart)p_indexs    r   
mock_indexr     s@     llGa 	1222MMOOONr   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%   )r1  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   rV   r   url
subprocessrunPIPESTDOUT
returncoderequestsr:   r,  
splitlines	Exceptionrd   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   r7  z"TestInstallRequires.create_project'  sK     
	''Vw'GGG	!!!!!r   N)r-   r.   r/   rG  r7  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(  rR   z--index-urlz--exclude-scriptsz--install-dirNc                     g | ]	}|j         
S r%   r   r0  s     r   
<listcomp>zMTestSetupRequires.test_setup_requires_honors_fetch_params.<locals>.<listcomp>R  s    4441444r   r.  )r   r   quietrO  create_sdistr  environmentr   r8  r9  r:  Popenwaitr?  )r&   r   r   	dist_filetemp_install_dirr`   s         r   'test_setup_requires_honors_fetch_paramsz9TestSetupRequires.test_setup_requires_honors_fetch_params6  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.gzrz   a  
                    import setuptools
                    setuptools.setup(
                        name="setuptools-test-fetcher",
                        version="1.0",
                        setup_requires = ['does-not-exist'],
                    )
                rI  r|   N)r   r  rV   r   rW   r   r   )dir	dist_paths     r   rX  zTestSetupRequires.create_sdistT  s        	3S*NOOI #	 	 &  & OOO+	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA))A-0A-)r%   dependency_linkssetup_requires)rd  rf  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rg  rz   --nameNr   r   test_pkg)r   r
   r   r   save_pkg_resources_stater  create_setup_requires_packagerV   r   rW   rW  r   	readlineslenstrip)	r&   rg  	fake_disttemp_dirrp  test_setup_pyr,  _stderrliness	            r   .test_setup_requires_overrides_version_conflictz@TestSetupRequires.test_setup_requires_overrides_version_conflicty  s    #He
 
 
	 		""".00 	7 	7!## 7x8M   !#Xz B B^%% 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 t/          j        d           Y nw xY wddd           n# 1 swxY w Y   d|
                                vsJ |
                                }t7          |          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 rm   r%   )memberr   s     r   rL   zFTestSetupRequires.test_setup_requires_override_nspkg.<locals>.<lambda>  s     r   Nr   rk  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.2rn  rz   ro  z9Installing setup.py requirements caused a VersionConflictFAILr   r   rp  )r   rq  r  rV   r   rW   make_nspkg_sdistr   tarfiler   extraction_filter
extractallr   insertr   r
   r   r   rr  rW  r   r   VersionConflictrd   failgetvaluers  rt  ru  )r&   rg  rw  foobar_1_archivefoobar_1_dirtfrD   templaterp  rx  r,  ry  rz  s                r   "test_setup_requires_override_nspkgz4TestSetupRequires.test_setup_requires_override_nspkg  se    .00 :	7 :	7!## 9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^%% ):&' "-(<<<<(8   W                   V__%6%66666((**5zzA~~~~Ry((J66666s97 97 97 97 97 97 97 97 97 97 97 97 97 97 9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#F6	3G5F6	6G9H>G		H>G	A$H>2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|d|d|d          f|dz   t          d          fg}t          | |           d S )Nrz   zj
                    import setuptools
                    setuptools.setup(
                        name=z",
                        version=z&,
                        py_modules=[z-],
                    )
                    z.pyz6
                    version = 42
                    )r   r   )rb  distnamerm  r   s       r   make_dependency_sdistzVTestSetupRequires.test_setup_requires_with_attr_version.<locals>.make_dependency_sdist  s      '  ")	 
 &.  	 	 u$ E. y%(((((r   zattr: foobar.version)rm  )setup_attrsmake_packagerg  rz   	--versionr   r   42)r   rq  r  rr  r   rV   r   rW   rW  r   rs  rt  ru  )	r&   rg  r  rw  rp  rx  r,  ry  rz  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^%% <):&'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 )NrQ  rR  rS  r   rT  PIP_INDEX_URLpython-xlib0.19rc  r  rI  r}   r   r   z}
                        [easy_install]
                        index_url = https://pypi.org/legacy/
                        rz   r  r   r   z/python-xlib/)r   r9  r   rq  r  rr  r   rV   r   rW   r   r   r   rd   re   rf   rg   rh   r   rt  r?  )r&   r   r   rw  rp  test_setup_cfgfprx  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|                     }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 )NrQ  rR  rS  r  z
dep.tar.gz
dependencyr  	localhost)	authorityr  r  zdependency @ re  r  rz   r  r   )r   r9  r   rq  r  rV   r   rW   make_trivial_sdistr   rr  r   r   rt  r?  )r&   r   r   rw  	dep_sdistdep_urlrp  rx  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! $4MG4M4M N N N   !#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.rp  z~
                    from setuptools import setup
                    setup(setup_requires='python-xlib')
                    z\
                    [easy_install]
                    allow_hosts = *
                    rz   rI  prefixrz   r  Nr   )r   r   rq  r  r   buildr   pathlibr   rd   re   rf   rg   rh   r   rt  r?  )r&   r   r   rw  setup_pys        r   $test_setup_requires_with_allow_hostsz6TestSetupRequires.test_setup_requires_with_allow_hosts8  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t          j        j         dt          j        j         d}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.rQ  rR  rS  r   1PIP_VERBOSEzdep-1.0.tar.gzz>=2.7dep1.0zdep-2.0.tar.gzz!=.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  )rf  rd  r  rz   r  Nz.eggszdep 1.0)r   r   r   make_python_requires_sdistr   version_infomajorminorrJ  r   formatr   rq  rr  r   rV   r   rW   r   listmapr   find_distributions)r&   r   r   r  r  r  r  r  r  index	index_urlrp  rx  eggss                 r   (test_setup_requires_with_python_requiresz:TestSetupRequires.test_setup_requires_with_python_requiresR  s   =#...=#...>3///=#...(!#f}&<"="=>>")"&''7N	
 	
 	
 )!#f}&<"="=>>D!'DD#*:*@DDD 	  	#&''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   8A"G&&G*-G*!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 )NrQ  rR  rS  zpython-xlib-42.tar.gzr  r  rp  rz   rI  r}   r   r   linksz
                        from setuptools import installer, setup
                        setup(setup_requires='python-xlib==42',
                        dependency_links={dependency_links!r})
                        rc  z
                        [easy_install]
                        index_url = {index_url}
                        find_links = {find_links}
                        r  )r  rU   r  )r   r   rq  r  r  rV   r   rW   r   r   r   r   r  r   )	r&   r   r  rw  rp  rx  r  r  rd  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']},
                          )
                         r|   r  r  rz   	dist_inforp  r}   r   r   
                        from setuptools import installer, setup
                        setup(setup_requires='dep[extra]')
                        NPIP_FIND_LINKSr   r  rQ  rR  rS  r  )r   rq  r  r  rV   r   rW   r   r  r   r   r
   	add_entryr   r   r   r   r&   r   rw  dep_pkgrp  rx  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  rz   a$  
                          import setuptools
                          setuptools.setup(
                              name='extra_dep',
                              version='1.0',
                              py_modules=['extra_dep'],
                          )
                          r`  )zextra_dep.pyr|   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]
                                           ''',
                          )
                         r|   a  
                                     from distutils.command.build_py import build_py

                                     import extra_dep

                                     class epcmd(build_py):
                                         pass
                                     )rz   rI  zepcmd.pyr  r  rp  r}   r   r   r  Nr  r   r  rQ  rR  rS  epcmd)r   rq  r  r   rV   r   rW   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  rX  rg  rd   r   parametrizer{  r  r  r  r  r  r  r  r  r  r%   r   r   rO  rO  5  sw       M M M<    \8M [_m<<7 7 =<7< [_m<<A7 A7 =<A7F [_m<<(1 (1 =<(1T> > >:- - -(- - -4:# :# :#x [@-PP)8 )8 QP)8V38 38 38jR4 R4 R4 R4 R4r   rO  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.
    rz   zT             import setuptools
             setuptools.setup(
                 name=z,
                 version=z
             )
         r`  N)r   r   )rb  r  rm  s      r   r  r  D  sl          "	    	
    r   c                   
 d|v sJ |                     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)rW   )r1  idxpartss     r   rV  z$make_nspkg_sdist.<locals>.<listcomp>j  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__)rz   z__init__.pyNr|   )	splitrangert  r   rV   r   rW   r   r   )rb  r  rm  	nspackagepackagesr  initr   packager   r  s             @r   r  r  ^  sA    (????NN3EaIJJJJq#e**q.1I1IJJJH	 	 	 		 	
 	 	 "+	 	 	
 
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 )Nrz   z                import setuptools
                setuptools.setup(
                  name={name!r},
                  version={version!r},
                  python_requires={python_requires!r},
                )
                )r#   rm  python_requiresr`  )r   r   r  )rb  r  rm  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)rt  r  r   ioBytesIOr   TarInfor  sizeinttimemtimeaddfile)rb  r   rD   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$ri  r}  r%   c                    t          |          }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'.
    rp  rj  z==)r#   rm  rf  rd  zname version;z: zg
            [metadata]
            {metadata}
            [options]
            {options}
            
)optionsmetadatar|   rI  r}   r   r   NzI            import setuptools
            setuptools.setup(**%r)
        rz   -z.tar.gz)r   rV   r   abspathupdaterW   r   popr  
isinstancetupler  r   r   r  r   r   )r   r  rm  r  setup_py_templater  rg  normalized_distnametest_setup_attrsrp  r  r  r#   valuesectiontest_setup_cfg_contentsr   foobar_paths                     r   rr  rr    s   $ %X..1>>W>>?W__T223	   -,,,w||D*--HHX  %! 	/ 	/D$((..E~++----"!%%// (NNd--e--...."&#
 #
 &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 ',,t(;%N%Ng%N%N%NOOKLh000Os$   	F++F/2F/7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                             d}t           j                            d          }||k    sJ d S )N#!r  z#!/usr/local/bin/python	r5   nt_quote_argrV   r   normpathr   r8  r;   
get_headerr&   r   r   s      r   test_get_script_headerz'TestScriptHeader.test_get_script_header   s[    M(8(8(H(HIIMMM++,EFF!!!!!!r   c                     dt          j        t          j                            t
          j                             d}t           j                            d          }||k    sJ d S )Nr
   -x
z#!/usr/bin/python -xr  r  s      r   test_get_script_header_argsz,TestScriptHeader.test_get_script_header_args  s[    P(8(8(H(HIIPPP++,BCC!!!!!!r   c                 x    t           j                            d| j                  }d| j         d}||k    sJ d S )N#!/usr/bin/pythonr8  r
  r  )r5   r;   r  non_ascii_exer&   r   r   s      r   $test_get_script_header_non_ascii_exez5TestScriptHeader.test_get_script_header_non_ascii_exe
  sR    ++D,> , 
 
 2*111!!!!!!r   c                     t           j                            dd| j        z   dz             }d| j         d}||k    sJ d S )Nr  "r  #!"z"
)r5   r;   r  exe_with_spacesr  s      r   &test_get_script_header_exe_with_spacesz7TestScriptHeader.test_get_script_header_exe_with_spaces  s\    ++C$2F,F,L , 
 
 3-222!!!!!!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	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)r5   r6   r9   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)r5   r6   
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   r  )	rV   r   r  r5   r6   r8   rt  r9   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-pythonr3   r  N)r5   r6   r'  rt  r9   r#  s     r   "test_from_simple_string_uses_shlexz2TestCommandSpec.test_from_simple_string_uses_shlex2  sL    
 n''(@AA3xx1}}}}#--//))))))r   returnNc                    t          j        t                    5 }t          j                            t                                 ddd           n# 1 swxY w Y   t          |j                  dk    sJ |j                    dS )zc
        from_param should raise its own TypeError when the argument's type is unsupported
        Nz1Argument has an unsupported type <class 'object'>)	rd   re   	TypeErrorr5   r6   r'  objectr   r  )r&   exc_infos     r   %test_from_param_raises_expected_errorz5TestCommandSpec.test_from_param_raises_expected_error;  s     ]9%% 	0N%%fhh///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 #VVVV> WVVVVs   ,AAA)r/  N)r-   r.   r/   r$  r)  r   r   r  r  r   rV   r   r,  r.  r4  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 )Nr|   r
  r  z\")r5   WindowsScriptWriterr  r?   endswithlstriprstrip)r&   hdrs     r   test_headerz#TestWindowsScriptWriter.test_headerG  s    $//33~~d#####||D!!!!!jjjj>>%(((((((r   N)r-   r.   r/   r=  r%   r   r   r6  r6  F  s#        ) ) ) ) )r   r6  c                   B    e Zd ZU eed<   eed<   eed<   eed<   eed<   dS )VersionStubr  r  microreleaselevelserialN)r-   r.   r/   r  __annotations__r   r%   r   r   r?  r?  Q  s@         JJJJJJJJJKKKKKr   r?  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 )NrR   rP   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_objrE   optimizer   r   install_userbaseinstall_usersitecontextwarningscatch_warningssimplefilterr?  rr   r   r
  finalize_optionshasattrr   rZ   lowerr@   rA   config_vars)r   
tmpdir_cwdr   rD   r`   install_cmdr   rm  r   r#   rZ   s              r   &test_use_correct_python_version_stringr^  Y  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<darwinzDhttps://github.com/pypa/setuptools/pull/4716#issuecomment-2447624418c                    |                     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=[])
rz   r   r   *developz--userc                     h | ]	}|j         
S r%   r  )r1  r   s     r   r3  z9test_editable_user_and_build_isolation.<locals>.<setcomp>  s    555A555r   zeasy-install.pthzaproj.egg-link)rr   r   r   r   rs   getusersitepackagesr   rJ  r  globr   )r   r   rC  	user_site
sys_prefixsetup_script	installeds          r   &test_editable_user_and_build_isolationrn    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   )U__doc__r  r  r=   r   rV   r  r@   rs   r:  r   r  rX   r  rU  r~   r   typingr   unittestr   rd   jaracor   r   r  r  rR   r5   r   r   r	   r
   
setuptoolsr   setuptools._normalizationr   r   setuptools.distsetuptools.sandboxr   setuptools.testsr   setuptools.tests.serverr   r   r|   r   textwrapr   distutils.errorsrf   r   r   r    r   r1   r   filterwarningsr   r   usefixturesr   r  r  r   r"  rO  r  r  r  r   rr  r   r   r?   is_shr8  r  r   r6  r?  r^  rB  rn  r%   r   r   <module>r~     s         				      				  				      



                                   , , , , , , , , , U U U U U U U U U U       0 0 0 0 0 0 < < < < < < ( ( ( ( ( ( ( ( ( ( ( ( * * * * * * ; ; ; ; ; ; ; ;                 / / /        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L4 L4 L4 L4 L4 L4 L4 L4^  4!! !! !!H  08 8 8& #J J J JZ LF##@(@(@=   " " " " " " "	 ":* * * * * * * *Z) ) ) ) ) ) ) )    *   +8 +8 +8\ LHQ   9+ 9+	 9+ 9+ 9+r   