
    ϶vg                     J   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*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0Z1 ej2        d          d             Z3 G d d          Z4 e/d          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j7        ;                    d"           G d# d$                      Z>ej2        d%             Z? G d& d'          Z@ G d( d)          ZAd* ZBd+ ZCd, ZDd- ZEd.d/eBddd0fd1ZFej7        G                    e
jH        I                    d2          o ejJ        e
jK                  d34           G d5 d6                      ZL G d7 d8          ZM G d9 d:          ZN G d; d<e          ZOd= ZPej7        Q                    e
jH        d>k    d?4          d@             ZRdS )AzEasy install Tests    N)Path)
NamedTuple)mockpath)Distributionnormalize_pathworking_set)sandbox)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    _/var/www/pixelcanvas.ch/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_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args_name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!(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>W       4 r   Tlink1link2okc                      dS rJ   r$   r$   r   r   rK   z8TestEasyInstallTest.test_no_find_links.<locals>.<lambda>a   rL   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   rQ   rU   getcwdrY   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   rm   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 )Nrn   Fro   )delattrrr   r4   rs   )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_argsrQ   targetxrY   rD   
PYTHONPATHN	r   
ensure_dirr4   rQ   r   setitemrU   environrZ   )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 )	Nry   ar  
                    import setuptools
                    setuptools.setup(
                        name="setuptools-test-unicode",
                        version="1.0",
                        packages=["mypkg"],
                        include_package_data=True,
                        scripts=['mypkg/unicode_in_script'],
                    )
                    rz   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   rQ   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 )Nry   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   rQ   r   r   r   r   r   N)
r   r   r4   rQ   r   r   rU   r   rZ   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.   rG   r`   ri   rt   rw   rc   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   rU   rb   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)rV   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	
 	
 	
  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 )Nry   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 rl   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 rl   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 )Nry   pyzuser should not be implied)r   script_namer4   rQ   rD   rZ   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)	rc   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   rU   pathseprV   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.
        ry   fooN)r   r   r4   rQ   rY   rD   rZ   local_indexscanrU   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commandrQ   rr   	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_writerr   r  r   r   staticmethodr   r   rc   r   r   r   r   
contextlibcontextmanagerr  r  r$   r   r   r   r   r  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)cdry   r|   r   r   )r   replacer   tempdirrU   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 )Nry   	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_portrc   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$   )r0  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   rU   r   url
subprocessrunPIPESTDOUT
returncoderequestsr9   r+  
splitlines	Exceptionrc   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   r6  z"TestInstallRequires.create_project&  sK     
	''Vw'GGG	!!!!!r   N)r,   r-   r.   rF  r6  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'  rQ   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>Q  s    4441444r   r-  )r   r   quietrN  create_sdistr  environmentr   r7  r8  r9  Popenwaitr>  )r%   r  r   	dist_filetemp_install_dirr_   s         r   'test_setup_requires_honors_fetch_paramsz9TestSetupRequires.test_setup_requires_honors_fetch_params5  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.gzry   a  
                    import setuptools
                    setuptools.setup(
                        name="setuptools-test-fetcher",
                        version="1.0",
                        setup_requires = ['does-not-exist'],
                    )
                rH  r{   N)r   r  rU   r   rV   r   r   )dir	dist_paths     r   rW  zTestSetupRequires.create_sdistS  s        	3S*NOOI #	 	 &  & OOO+	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA))A-0A-)r$   dependency_linkssetup_requires)rc  re  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rf  ry   --nameNr   r   test_pkg)r   r
   r   r   save_pkg_resources_stater  create_setup_requires_packagerU   r   rV   rV  r   	readlineslenstrip)	r%   rf  	fake_disttemp_dirro  test_setup_pyr+  _stderrliness	            r   .test_setup_requires_overrides_version_conflictz@TestSetupRequires.test_setup_requires_overrides_version_conflictx  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 |                     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 rl   r$   )memberr   s     r   rK   zFTestSetupRequires.test_setup_requires_override_nspkg.<locals>.<lambda>  s     r   Nr   rj  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.2rm  ry   rn  z9Installing setup.py requirements caused a VersionConflictFAILr   r   ro  )r   rp  r  rU   r   rV   make_nspkg_sdistr   tarfiler   extraction_filter
extractallr   insertr   r
   r   r   rq  rV  r   r   VersionConflictfailgetvaluerr  rs  rt  )r%   rf  rv  foobar_1_archivefoobar_1_dirtfrC   templatero  rw  r+  rx  ry  s                r   "test_setup_requires_override_nspkgz4TestSetupRequires.test_setup_requires_override_nspkg  sg    .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$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 )Nry   z
                    import setuptools
                    setuptools.setup(
                        name={name!r},
                        version={version!r},
                        py_modules=[{name!r}],
                    )
                    )r"   rl  z.pyz6
                    version = 42
                    )r   formatr   )ra  distnamerl  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)rl  )setup_attrsmake_packagerf  ry   	--versionr   r   42)r   rp  r  rq  r   rU   r   rV   rV  r   rr  rs  rt  )	r%   rf  r  rv  ro  rw  r+  rx  ry  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 )NrP  rQ  rR  r   rS  PIP_INDEX_URLpython-xlib0.19rb  r  rH  r|   r   r   z}
                        [easy_install]
                        index_url = https://pypi.org/legacy/
                        ry   r  r   r   z/python-xlib/)r   r8  r   rp  r  rq  r   rU   r   rV   r   r   r   rc   rd   re   rf   rg   r   rs  r>  )r%   r  r   rv  ro  test_setup_cfgfprw  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 )NrP  rQ  rR  r  z
dep.tar.gz
dependencyr  	localhost)	authorityr  r  zdependency @ %srd  r  ry   r  r   )r   r8  r   rp  r  rU   r   rV   make_trivial_sdistr   rq  r   r   rs  r>  )r%   r  r   rv  	dep_sdistdep_urlro  rw  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.ro  z~
                    from setuptools import setup
                    setup(setup_requires='python-xlib')
                    z\
                    [easy_install]
                    allow_hosts = *
                    ry   rH  prefixry   r  Nr   )r   r   rp  r  r   buildr   pathlibr   rc   rd   re   rf   rg   r   rs  r>  )r%   r  r   rv  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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.rP  rQ  rR  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  )re  rc  r  ry   r  Nz.eggszdep 1.0)r   r   r   make_python_requires_sdistr   version_infomajorminorrI  r   r  r   rp  rq  r   rU   r   rV   r   listmapr   find_distributions)r%   r   r   r  r  r  r  r  r  index	index_urlro  rw  eggss                 r   (test_setup_requires_with_python_requiresz:TestSetupRequires.test_setup_requires_with_python_requiresQ  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 )NrP  rQ  rR  zpython-xlib-42.tar.gzr  r  ro  ry   rH  r|   r   r   linksz
                        from setuptools import installer, setup
                        setup(setup_requires='python-xlib==42',
                        dependency_links={dependency_links!r})
                        rb  z
                        [easy_install]
                        index_url = {index_url}
                        find_links = {find_links}
                        r  )r  rT   r  )r   r   rp  r  r  rU   r   rV   r   r   r   r   r  r   )	r%   r   r  rv  ro  rw  r  r  rc  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  ry   	dist_inforo  r|   r   r   
                        from setuptools import installer, setup
                        setup(setup_requires='dep[extra]')
                        NPIP_FIND_LINKSr   r  rP  rQ  rR  r  )r   rp  r  r  rU   r   rV   r   r  r   r   r
   	add_entryr   r   r   r   r%   r   rv  dep_pkgro  rw  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  ry   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
                                     )ry   rH  zepcmd.pyr  r  ro  r|   r   r   r  Nr  r   r  rP  rQ  rR  epcmd)r   rp  r  r   rU   r   rV   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  rW  rf  rc   r   parametrizerz  r  r  r  r  r  r  r  r  r  r$   r   r   rN  rN  4  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   rN  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.
    ry   zT             import setuptools
             setuptools.setup(
                 name=z,
                 version=z
             )
         r_  N)r   r   )ra  r  rl  s      r   r  r  C  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)rV   )r0  idxpartss     r   rU  z$make_nspkg_sdist.<locals>.<listcomp>h  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__)ry   z__init__.pyNr{   )	splitrangers  r   rU   r   rV   r   r   )ra  r  rl  	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 )Nry   z                import setuptools
                setuptools.setup(
                  name={name!r},
                  version={version!r},
                  python_requires={python_requires!r},
                )
                )r"   rl  python_requiresr_  )r   r   r  )ra  r  rl  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)rs  r  r   ioBytesIOr   TarInfor  sizeinttimemtimeaddfile)ra  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$rh  r|  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'.
    ro  ri  z==)r"   rl  re  rc  zname version;z: zg
            [metadata]
            {metadata}
            [options]
            {options}
            
)optionsmetadatar{   rH  r|   r   r   NzI            import setuptools
            setuptools.setup(**%r)
        ry   -z.tar.gz)rU   r   abspathupdaterV   r   popr  
isinstancetupler  r   r   r  r   r   )r   r  rl  r  setup_py_templater  rf  test_setup_attrsro  r  r  r"   valuesectiontest_setup_cfg_contentsr   foobar_paths                    r   rq  rq    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_argrU   r   normpathr   r7  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r7  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	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#!")	rU   r   r  r4   r5   r7   rs  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#  rs  r8   r  s     r   "test_from_simple_string_uses_shlexz2TestCommandSpec.test_from_simple_string_uses_shlex0  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'>)	rc   rd   	TypeErrorr4   r5   r#  objectr   r   )r%   exc_infos     r   %test_from_param_raises_expected_errorz5TestCommandSpec.test_from_param_raises_expected_error9  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   rU   r   r(  r*  r0  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{   z#!r  z\")r4   WindowsScriptWriterr  r>   endswithlstriprstrip)r%   hdrs     r   test_headerz#TestWindowsScriptWriter.test_headerE  s    $//33~~d#####||D!!!!!jjjj>>%(((((((r   N)r,   r-   r.   r9  r$   r   r   r2  r2  D  s#        ) ) ) ) )r   r2  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;  O  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 )NrQ   rO   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simplefilterr;  rq   r   r	  finalize_optionshasattrr   rY   lowerr?   r@   config_vars)r   
tmpdir_cwdr   rC   r_   install_cmdr   rl  r   r"   rY   s              r   &test_use_correct_python_version_stringrZ  W  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=[])
ry   r   r   *developz--userc                     h | ]	}|j         
S r$   r  )r0  r   s     r   r2  z9test_editable_user_and_build_isolation.<locals>.<setcomp>  s    555A555r   zeasy-install.pthzaproj.egg-link)rq   r   r   r   rr   getusersitepackagesr   rI  r  globr   )r   r   rB  	user_site
sys_prefixsetup_script	installeds          r   &test_editable_user_and_build_isolationrj    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   )S__doc__r  r  r<   r   rU   r  r?   rr   r9  r   r  rW   r  rQ  r}   r   typingr   unittestr   rc   jaracor   r   r  r  rQ   r4   r   r   r	   r
   
setuptoolsr   r   setuptools.distsetuptools.sandboxr   setuptools.testsr   setuptools.tests.serverr   r   r{   r   textwrapr   distutils.errorsre   r   r   r   r   r0   r   filterwarningsr   r   usefixturesr   r  r  r  r!  rN  r  r  r  r   rq  r   r   r>   is_shr7  r  r  r2  r;  rZ  rA  rj  r$   r   r   <module>ry     s         				      				  				      



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