
    z%i\                     P   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mZmZmZmZmZmZmZmZmZmZ ddlmZmZmZ ddlZddlZddlmZm Z  	 ddl!Z! ejF                  e
jH                  e
jJ                  k(  xs e
jL                  e
jN                  k7  d      Z(eser ejR                  d       e       dd       Z* G d	 d
ejV                        Z, G d de,      Z-e( G d de,             Z.e/dk(  r ej`                          yy# e"$ r dZ!Y w xY w)z|
Test harness for the venv module.

Copyright (C) 2011-2012 Vinay Sajip.
Licensed to the PSF under a contributor agreement.
    N)
captured_stdoutcaptured_stderr*skip_if_broken_multiprocessing_synchronizeverboserequires_subprocessis_emscriptenis_wasirequires_venv_with_pipTEST_HOME_DIRrequires_resource)can_symlinkEnvironmentVarGuardrmtree)patchMockz:cannot run venv.create from within a venv on this platformz)venv is not available on Emscripten/WASI.c                 <   t        j                  | t         j                  t         j                  |      }|j                         \  }}|j                  rEt
        r|rt        |j                  dd             t        j                  |j                  | ||      ||fS )N)stdoutstderrencodingutf-8backslashreplace)	
subprocessPopenPIPEcommunicate
returncoder   printdecodeCalledProcessError)cmdr   pouterrs        B/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/test_venv.pycheck_outputr%   -   s    	A }}HC||s#**W&89:++LL#sC) 	)8O    c                   8    e Zd ZdZdZd Zd Zd Zd Zddd	Z	y
)BaseTestzBase class for venv tests.i  c                 F   t         j                  j                  t        j                               | _        t         j                  dk(  rd| _        d| _        d| _	        n+d| _        ddt        j                  d d z  f| _        d	| _	        t        j                  }t         j                  j                  |      d
   | _        t        j                  dk(  rFt         j                  j!                  |      r't         j                  j#                  |      sd| _        y d| _        y )NntScriptsLibIncludebinlibpython%d.%d   includewin32TF)ospathrealpathtempfilemkdtempenv_dirnamebindirr0   r3   sysversion_info_base_executablesplitexeplatformlexistsexistscannot_link_exe)self
executables     r$   setUpzBaseTest.setUp?   s    ww''(8(8(:;77d?#DKDH$DLDK}s/?/?/CCDDH$DL))
77==,R0LLG#
+GGNN:.#'D #(D r&   c                 .    t        | j                         y N)r   r;   rG   s    r$   tearDownzBaseTest.tearDownR   s    t||r&   c                     t               5 }t               5 } ||i | d d d        d d d        j                         j                         fS # 1 sw Y   1xY w# 1 sw Y   5xY wrK   )r   r   getvalue)rG   funcargskwargsoutputerrors         r$   run_with_capturezBaseTest.run_with_captureU   sd     	&& " &ed%f%&	&  %.."222& &	& 	&s!   A	AAA	AA$c                 V    t        j                  j                  | j                  g| S rK   )r6   r7   joinr;   )rG   rQ   s     r$   get_env_filezBaseTest.get_env_file[   s    ww||DLL0400r&   r   r   c                    t         | j                  | d|      5 }|j                         }d d d        |S # 1 sw Y   S xY w)NrrY   )openrX   read)rG   r   rQ   fresults        r$   get_text_file_contentszBaseTest.get_text_file_contents^   sC    #$##T*C(C 	qVVXF		s	   7AN)
__name__
__module____qualname____doc__maxDiffrI   rM   rU   rX   r`    r&   r$   r(   r(   ;   s(    $G)&31 6= r&   r(   c            	       .   e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
ed	        Zed
        Ze ej                   e       d      d               Zej&                  dk(  rdZn,dddddej*                  dd z  fddej*                  dd z  dffZd Zd Zd Zd Zd Zd Z ej                   e       d      d        Zed        Z ej                   e       d      d        Z ej                  ej@                  d k(  d!      d"        Z!ed#        Z"ed$        Z# ejH                  ej@                  d k(  d%      d&        Z% ej                  ej&                  d'k(  d(      d)        Z&d* Z' ejH                  ej@                  d k(  d%      ed+               Z(d, Z)y)-	BasicTestzTest venv module functionality.c                 ~     | j                   | }| j                  t        j                  j	                  |             y rK   )rX   
assertTruer6   r7   isdir)rG   rQ   fns      r$   rk   zBasicTest.isdirf   s-    T%b)*r&   c                     t        | j                         | j                  t        j                  | j                         | j                          y)zQ
        Test the create function with default arguments and a str path.
        N)r   r;   rU   venvcreate_check_output_of_default_createrL   s    r$   test_defaults_with_str_pathz%BasicTest.test_defaults_with_str_pathj   s4     	t||dkk4<<8,,.r&   c                     t        | j                         | j                  t        j                  t        j                  | j                               | j                          y)zZ
        Test the create function with default arguments and a pathlib.Path path.
        N)r   r;   rU   rn   ro   pathlibPathrp   rL   s    r$   test_defaults_with_pathlib_pathz)BasicTest.test_defaults_with_pathlib_pathr   s=     	t||dkk7<<+EF,,.r&   c                 J   | j                  | j                         | j                  | j                          | j                   | j                    | j	                  d      }t        j                  d      dk(  xr( t        j                  dk(  xr t        j                  dk7  }|r/| j                  t        j                  j                  |             n.| j                  t        j                  j                  |             | j!                  d      }t        j"                  }t        j                  j%                  |      }| j'                  d|z  |       | j'                  dt        j                  j)                  t        j*                        z  |       t        j                  d	k(  rd
nd}dt        j*                   d| d| j,                   }| j'                  ||       | j	                  | j                  | j.                        }t        j                  j                  |      sJ| j	                  | j                        }	t1        d|	z         t1        dt        j2                  |	      z         | j                  t        j                  j                  |      d|z         y )Nlib64P   posixdarwin
pyvenv.cfgz	home = %szexecutable = %sr*    z	 --copiesz
command = z -m venvz --without-pip Contents of %r:    %rFile %r should exist.)rk   r=   r3   r0   rX   structcalcsizer6   r<   r>   rC   rj   r7   islinkassertFalserE   r`   r@   dirnameassertInr8   rH   r;   rB   r   listdir)
rG   r!   
conditionsdatarH   r7   copiesr    rl   bds
             r$   rp   z)BasicTest._check_output_of_default_createz   s   

4;;

4<< 

DHHg&s+q0 1rww'7I 1||x/ 	OOBGGNN1-.RWW^^A./**<8))
wwz*kD($/'gg&&s~~678<	>ww}+3>>*(6(/$,,Xc4 t{{DHH5ww~~b!""4;;/B#b()(RZZ^+,r*,Cb,HIr&   c                    g d}|D ]  \  }}t        | j                         |st        j                         }nt        j                  d
i ||dv rdndi}t	               |_        t	               |_        | j                  |j                  | j                         | j                  d      }|sdD ]  }| j                  |d|         t        j                  dk(  r|d	k(  r| j                  |d|         y )N))NN)symlinksz--copies)with_pip--without-pip)system_site_packages--system-site-packages)clear--clear)upgrade	--upgrade)upgrade_deps--upgrade-deps)prompt--prompt)r   r   FTr|   )r   r   r   r   r   zcommand = .* r*   r   rf   )r   r;   rn   
EnvBuilderr   upgrade_dependencies
_setup_piprU   ro   r`   assertNotRegexr6   r<   assertRegex)rG   attrsattroptbr   s         r$   test_config_file_command_keyz&BasicTest.test_config_file_command_key   s    	
  	?ID#4<< OO%OO Sd.F&FUDQS%)VA"6AL!!!((DLL9..|<D6 FC''se.DEF $4#3  -u'=>%	?r&   c                    t         j                  j                  | j                        d   }t	        | j                         t        j                         }| j                  |j                  | j                         |j                  | j                        }| j                  d      }| j                  |j                  d|z         | j                  d|       t	        | j                         t        j                  d      }| j                  |j                  | j                         |j                  | j                        }| j                  d      }| j                  |j                  d       | j                  d|       t	        | j                         t        j                  d	      }t         j                  j                  t        j                                }| j                  |j                  | j                         |j                  | j                        }| j                  d      }| j                  |j                  d|z         | j                  d
|z  |       y )N   r|   z(%s) z	prompt = z	My prompt)r   z(My prompt) zprompt = 'My prompt'
.zprompt = '%s'
)r6   r7   rA   r;   r   rn   r   rU   ro   ensure_directoriesr`   assertEqualr   assertNotInr   basenamegetcwd)rG   env_namebuildercontextr   cwds         r$   test_promptzBasicTest.test_prompt   s   77==.q1t||//#gnndll;,,T\\:**<88);<d+t||//5gnndll;,,T\\:**<88.5t||//-ggryy{+gnndll;,,T\\:**<837'#-t4r&   c                     t        j                         }t        j                  dk(  rdnd}t        j
                  j                  t        j                        d   }t        j                         5 }t        j
                  j                  t        j
                  j                  |||            t        j                  dk(  r<t        j
                  j                  t        j
                  j                               fd}|j                  |      }t        d|      5  |j                  |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr5   r+   r/   r   c           	          t         j                  j                  | d         | d<   j                  | dddddg       y )Nr   -mpipinstallr   )r6   r7   normcaser   )r    rR   
expect_exerG   s     r$   pip_cmd_checkerz<BasicTest.test_upgrade_dependencies.<locals>.pip_cmd_checker   sG    ))#a&1A  "!#
r&   zvenv.subprocess.check_output)rn   r   r>   rC   r6   r7   rA   rH   r9   TemporaryDirectoryr   rW   r8   r   r   r   )rG   r   bin_path
python_exefake_env_dirr   fake_contextr   s   `      @r$   test_upgrade_dependenciesz#BasicTest.test_upgrade_dependencies   s   //# # 79UWW]]3>>215
((* 	;l))\8Z@J ||w&WW--bgg.>.>z.JK
 #55lCL5G ;,,\:;-	; 	;,; ;-	; 	;s%   2B1E#E5EE	EEc                     t        | j                         | j                  t        j                  | j                         t
        j                  j                  | j                  | j                  | j                        }|ddg}d| j                  fd| j                  fdt        j                  fdt        j                  ffD ]J  \  }}d|z  |d<   t        |      \  }}| j                  |j                         |j!                         |       L y)	z>
        Test that the prefix values are as expected.
        -cNprefixexec_prefixbase_prefixbase_exec_prefixzimport sys; print(sys.%s)r2   )r   r;   rU   rn   ro   r6   r7   rW   r=   rB   r>   r   r   r%   r   stripencode)rG   envpyr    r   expectedr"   r#   s          r$   test_prefixeszBasicTest.test_prefixes   s     	t||dkk4<<8T\\4;;AdD!t||$DLL)COO,!5!56	!8 	EFH
 169CF#C(HCSYY[(//*;VD	Er&   c                    t        | j                         | j                  t        j                  | j                  d       t
        j                  j                  | j                  | j                  | j                        }|ddg}dddt        t        j                               fdt        j                         fd	t        j                         ffD ]d  \  }}| j                  |      5  d
|z  |d<   t!        |      \  }}| j#                  |j%                         |j'                         |       ddd       f y# 1 sw Y   qxY w)R
        Test that the sysconfig functions work in a virtual environment.
        Fr   r   Nzget_preferred_scheme("prefix")rn   zget_default_scheme()rn   is_python_build()get_makefile_filename()get_config_h_filename()%import sysconfig; print(sysconfig.%s)r2   r   r;   rU   rn   ro   r6   r7   rW   r=   rB   str	sysconfigis_python_buildget_makefile_filenameget_config_h_filenamesubTestr%   r   r   r   rG   r   r    callr   r"   r#   s          r$   test_sysconfigzBasicTest.test_sysconfig  s   
 	t||dkk4<<%HT\\4;;AdD! 7, #i&?&?&A"BC&	(G(G(IJ&	(G(G(IJL 	FND( d# F@4GA',S  hoo.?EF F	FF F   )AD::E	zNeeds symlinksc                    t        | j                         | j                  t        j                  | j                  d       t
        j                  j                  | j                  | j                  | j                        }|ddg}dddt        t        j                               fdt        j                         fd	t        j                         ffD ]d  \  }}| j                  |      5  d
|z  |d<   t!        |      \  }}| j#                  |j%                         |j'                         |       ddd       f y# 1 sw Y   qxY w)r   Tr   r   Nr   r   r   r   r   r   r2   r   r   s          r$   test_sysconfig_symlinksz!BasicTest.test_sysconfig_symlinks  s    	t||dkk4<<$GT\\4;;AdD! 7, #i&?&?&A"BC&	(G(G(IJ&	(G(G(IJL 	FND( d# F@4GA',S  hoo.?EF F	FF Fr   r5   ))r+   )r.   r,   )r-   site-packages)r/   )r3   )r0   r0   r1   Nr2   r   c                 4   |D ]  }t        j                  j                  | j                  g| }t        j                  |       t         j                  j                  ||      }t        |d      5 }|j                  d       ddd        y# 1 sw Y   xY w)zn
        Create some files in the environment which are unrelated
        to the virtual environment.
        wb   Still here?N)r6   r7   rW   r;   mkdirr\   write)rG   pathsfilenamesubdirsdrl   r^   s          r$   create_contentszBasicTest.create_contents>  s~    
  	(GT\\4G4AHHQKa*Bb$ (1'( (		(( (s   1BB	c                    | j                  | j                  d       t        j                  | j                         | j                  D ]  }t        j                  j                  | j                  g|dz    }| j                  t
        j                  j                  |             t        |d      5 }| j                  |j                         d       ddd        t        j                  d      }|j                  | j                         | j                  D ]]  }t        j                  j                  | j                  g|dz    }| j                  t
        j                  j                  |             _ y# 1 sw Y   =xY w)zE
        Test creating environment in an existing directory.
        foo)r   rbr   NTr   )r   ENV_SUBDIRSrn   ro   r;   r6   r7   rW   rj   rE   r\   r   r]   r   r   )rG   r   rl   r^   r   s        r$   test_overwrite_existingz!BasicTest.test_overwrite_existingJ  s#    	T--u5DLL!'' 	;GdllBg.@BBOOBGGNN2./b$ ;1  >:; ;	; //-t||$'' 	1GdllBg.@BBRWW^^B/0	1; ;s   2!E;;F	c                 v   t        j                  |      D ]  }t         j                  j                  ||      }t         j                  j	                  |      st         j                  j                  |      rt        j                  |       wt         j                  j                  |      st        |        y rK   )	r6   r   r7   rW   r   isfileremoverk   r   )rG   r7   rl   s      r$   clear_directoryzBasicTest.clear_directory\  so    **T" 	BdB'Bww~~b!RWW^^B%7		"r"r
	r&   c                    | j                   d d D ]  }t        j                  j                  | j                  g| }t        |d      5 }|j                  d       d d d        | j                  t        t        ft        j                  | j                         | j                  | j                          y # 1 sw Y   \xY w)N   r   r&   )r   r6   r7   rW   r;   r\   r   assertRaises
ValueErrorOSErrorrn   ro   r   )rG   r   rl   r^   s       r$   test_unoverwritable_failsz#BasicTest.test_unoverwritable_failsd  s    %%bq) 	/Edll3U3Bb$ 1z73T[[$,,O  .	/ s   	B66B?	c                    dD ]O  }t        j                  |      }| j                  |j                  | j                         | j                  | j                         | j                  | j                          | j
                  | j                    | j                  | j                  | j                        }t        j                  j                  |      sJ| j                  | j                        }t        d|z         t        dt        j                  |      z         | j!                  t        j                  j                  |      d|z         R y)zC
        Test upgrading an existing environment directory.
        FT)r   r~   r   r   N)rn   r   rU   ro   r;   rk   r=   r3   r0   rX   rB   r6   r7   rE   r   r   rj   )rG   r   r   rl   r   s        r$   test_upgradezBasicTest.test_upgradem  s     % 	NGoog6G!!'..$,,?JJt{{#JJt||$DJJ!""4;;9B77>>"%&&t{{3'",-hB/0OOBGGNN2.0G"0LM	Nr&   c                     dD ]]  \  }}t        j                  d|      }|j                  | j                         | j	                  d      }| j                  d|z  |       _ y)z:
        Test isolation from system site-packages
        ))Ttrue)FfalseT)r   r   r|   z"include-system-site-packages = %s
N)rn   r   ro   r;   r`   r   )rG   sspsr   r   s        r$   test_isolationzBasicTest.test_isolation  s]     9 	KFCooDsKGNN4<<(..|<DMM?!CTJ		Kr&   c                    dD ]  }t        j                  d|      }|j                  | j                         | j	                  | j
                  | j                        }|s^| j                  r/| j                  t        j                  j                  |             | j                  t        j                  j                  |              y)z3
        Test symlinking works as expected
        r   Tr   r   N)rn   r   ro   r;   rX   r=   rB   rF   r   r6   r7   r   rj   )rG   uslr   rl   s       r$   test_symlinkingzBasicTest.test_symlinking  s    
 ! 	8CooD3?GNN4<<(""4;;9B '' $$RWW^^B%78OOBGGNN2$67	8r&   c                    t        | j                         | j                  t        j                  | j                         t
        j                  j                  t
        j                  j                  | j                        | j                  | j                        }t        |ddg      \  }}| j                  |j                         |j                                y)D
        Test that the sys.executable value is as expected.
        r   !import sys; print(sys.executable)N)r   r;   rU   rn   ro   r6   r7   rW   r8   r=   rB   r%   r   r   r   rG   r   r"   r#   s       r$   test_executablezBasicTest.test_executable  s    
 	t||dkk4<<8RWW--dll;![[$((4/!1 2Selln5r&   c                    t        | j                         t        j                  dd      }|j	                  | j                         t
        j                  j                  t
        j                  j                  | j                        | j                  | j                        }t        |ddg      \  }}| j                  |j                         |j                                y)r	  Tr  r   r
  Nr   r;   rn   r   ro   r6   r7   rW   r8   r=   rB   r%   r   r   r   rG   r   r   r"   r#   s        r$   test_executable_symlinksz"BasicTest.test_executable_symlinks  s    
 	t||//t<t||$RWW--dll;![[$((4/!1 2Selln5r&   r*   zonly relevant on Windowsc                 H   t        | j                         t        j                  j	                  t        j                  j                  | j                        d      }t        j                  d      }|j                  |       t        j                  j	                  || j                  d      }t        j                  j	                  || j                  | j                        }t        |d| j                  ddgd	      \  }}| j                  |j                         d
       y)z0
        Test handling of Unicode paths
        u   ϼўТλФЙTr   zactivate.bat&r   zprint(0)oemrY   0N)r   r;   r6   r7   rW   r8   rn   r   ro   r=   rB   r%   r   r   )rG   r;   r   activater   r"   r#   s          r$   test_unicode_in_batch_filez$BasicTest.test_unicode_in_batch_file  s    
 	t||'',,rww//=~N//-w77<<nEWdkk488<sDHHdJ7
S 	c*r&   c                    t                t        | j                         | j                  t        j
                  | j                         t        j                  j                  t        j                  j                  | j                        | j                  | j                        }t        |ddg      \  }}| j                  |j                         dj                                y)zA
        Test that the multiprocessing is able to spawn.
        r   zrfrom multiprocessing import Pool; pool = Pool(1); print(pool.apply_async("Python".lower).get(3)); pool.terminate()pythonN)r   r   r;   rU   rn   ro   r6   r7   rW   r8   r=   rB   r%   r   r   r   r  s       r$   test_multiprocessingzBasicTest.test_multiprocessing  s     	34t||dkk4<<8RWW--dll;![[$((4!  !S
 	hoo&78r&   c                    t                t        | j                         | j                  t        j
                  | j                         t        j                  j                  t        j                  j                  | j                        | j                  | j                        }t        j                  j                  t        d      }t        j                  ||g       y)zG
        Test that the multiprocessing is able to spawn itself
        z_test_venv_multiprocessing.pyN)r   r   r;   rU   rn   ro   r6   r7   rW   r8   r=   rB   r   r   
check_call)rG   r   scripts      r$   test_multiprocessing_recursionz(BasicTest.test_multiprocessing_recursion  s    
 	34t||dkk4<<8RWW--dll;![[$((4m-LMufo.r&   znot relevant on Windowsc                    t        j                  d      }|| j                  d       t        | j                         t        j                  d      }|j                  | j                         t        j                  j                  | j                  | j                  d      }t        j                  j                  | j                  d      }t        |d      5 }|j                  d| d	       d d d        t        ||g      \  }}| j                  |d
j!                                | j                  |d
j!                                y # 1 sw Y   ZxY w)Nbashzbash required for this testTr   r  ztest_strict.shwzset -euo pipefail
source z
deactivate
r}   )shutilwhichskipTestr   r;   rn   r   ro   r6   r7   rW   r=   r\   r   r%   r   r   )rG   r  r   r  test_scriptr^   r"   r#   s           r$   %test_deactivate_with_strict_bash_optsz/BasicTest.test_deactivate_with_strict_bash_opts  s   ||F#<MM78t||//-t||$77<<dkk:Fggll4<<1AB+s# 	$qGG &Z (## $	$  { 34Sbiik*biik*	$ 	$s   E		Er{   zonly relevant on macOSc                    t        | j                         t        j                         }|j	                  | j                         t
        j                  j                  t
        j                  j                  | j                        | j                  | j                        }t        |ddg      \  }}| j                  |j                         dj                                y )Nr   z5import os; print("__PYVENV_LAUNCHER__" in os.environ)Falser  r  s        r$   test_macos_envzBasicTest.test_macos_env  s    t||//#t||$RWW--dll;![[$((4C!E FSgnn&67r&   c                 "   t        | j                         | j                  t        j                  z   }| j	                  t
        t        j                  |       | j	                  t
        t        j                  t        j                  |             y)zn
        Test that venv creation fails when the target directory contains
        the path separator.
        N)
r   r;   r6   pathsepr   r   rn   ro   rs   rt   )rG   bad_itempaths     r$   test_pathsep_errorzBasicTest.test_pathsep_error  sW    
 	t||||bjj0*dkk<@*dkk7<<3MNr&   c           	      V	   t        | j                         t        j                  }t        j
                  j                  t        j                               }| j                  t         |       t        j
                  j                  || j                        }t	        j                  |       t        j                  t        j                  |       t        j
                  j                  ||| j                   d         }t	        j"                  |       t        j
                  j                  |d      }dt        j$                  dd z  }t        j
                  j                  |||      }g }t        j
                  D ]  }	|	j'                  d      rUt        j
                  j)                  |	      s5t        j*                  |	t        j
                  j                  ||             jt        j
                  j)                  t        j
                  j                  |	d            rt	        j,                  |	      D ]  }
|
dk(  r	t        j
                  j                  |	|
      }t        j
                  j)                  |      rt        j.                  ||       _t        j
                  j1                  |      st        j2                  |t        j
                  j                  ||
              s|j5                  |	        t        j
                  j                  || j                  | j6                        dd	d
| j                  g}t        j8                  j                  |      }t;        j<                  d      }|rt;        j>                         rJt        j
                  jA                  t        j
                  jC                  t        j                              }t        jD                  dk(  rd}nd}d|||i}t        jF                  jI                  d      x}r||d<   tK        jL                  ||       t        j
                  j                  | j                  | j                  | j6                        }|dddg}tO        |      \  }}| jQ                  |jS                         |v        y)zr
        Test that when create venv from non-installed python, the zip path
        value is as expected.
        r   zos.pyzpython%d%d.zipNr2   z.zipr   r   rn   r   LIBDIRr{   DYLD_LIBRARY_PATHLD_LIBRARY_PATH
PYTHONPATHASAN_OPTIONS)envz-Sr   zimport sys; print(sys.path))*r   r;   r>   
platlibdirr6   r7   r8   r9   r:   
addCleanuprW   r=   r   r!  copy2rH   r0   makedirsr?   endswithr   copyfiler   copyrk   copytreeappendrB   r*  r   get_config_varr   abspathr   rC   environgetr   r  r%   rj   r   )rG   r4  non_installed_dirr=   libdirlandmark
stdlib_zipzip_landmark'additional_pythonpath_for_non_installedeachpathr<   rl   r    
pythonpathld_library_pathld_library_path_env	child_envasan_optionsr   r"   r#   s                        r$   %test_zippath_from_non_installed_posixz/BasicTest.test_zippath_from_non_installed_posix  sN    	t|| ^^
GG,,X-=-=-?@ 12/=
S^^V,/TXXa[I
F77<<0%(8(8!(<<
ww||$5$.$.0 35/  	H  (77>>(+OO %6
CE Xw ?@JJx0 HD. h5Bww~~b)B/r*BGGLL,FGH 8>>!	$ ww||-t{{DHHE||	 ZZ__35

 $228<)";";"= ggoobggoocnn.MNO<<8#"5"3j#_
	 ::>>.99<9(4In%cy1T\\4;;A dD"?@$S++-45r&   c                 j   t        j                  | j                        }t        |       | j                  ^\  }}||z  dz  }t        j                  |       t        |d      5 }t        |d      D ]+  \  }}d| }| j                  |j                  d      |       - 	 ddd       y# 1 sw Y   yxY w)z
        Test that the `activate` shell script contains no CR LF.
        This is relevant for Cygwin, as the Windows build might have
        converted line endings accidentally.
        r  r   r   zCR LF found in line s   
N)rs   rt   r;   r   r   rn   ro   r\   	enumerater   r8  )	rG   venv_dirscripts_dir_script_pathr  ilineerror_messages	            r$   .test_activate_shell_script_has_no_dos_newlinesz8BasicTest.test_activate_shell_script_has_no_dos_newlinesk  s     <<-x"..+,z9H+t$ 	H$VQ/ H4"6qc :  w!7GH	H 	H 	Hs   $;B))B2)*ra   rb   rc   rd   rk   rq   ru   rp   r   r   r   requireVenvCreater   r   unittest
skipUnlessr   r   r>   rC   r   r?   r   r   r   r   r   r  r  r  r  r6   r<   r  r  r  skipIfr%  r(  r,  rM  rW  rf   r&   r$   rh   rh   c   sR   )+//J8?>58;: E E$ F F* X(89F : F* ||w
 MC$4$4Ra$889MC$4$4Ra$88/J

(1$/N*K X(898 :8. 
6 
6 X(896 :6 XD*DE+ F+  9 9( / / X__RWW_&?@+ A+$ X13KL	8 M	8O X__RWW_&?@K6  AK6ZHr&   rh   c                       e Zd ZdZd Zd Zd Zd Zd Ze	j                  d        Z e        ed      d	               Zy
)EnsurePipTestz%Test venv module installation of pip.c                    t         j                  j                  t         j                  j                  | j                        | j
                  | j                        }t        |ddg      \  }}|j                  d      }| j                  |d       |j                  d      }| j                  |j                         d       y )Nr   z1try:
 import pip
except ImportError:
 print("OK")latin-1r}   OK)r6   r7   rW   r8   r;   r=   rB   r%   r   r   r   r  s       r$   assert_pip_not_installedz&EnsurePipTest.assert_pip_not_installed~  s    RWW--dll;![[$((4B!D ES jj#b!jj#d+r&   c                     t        | j                         | j                  t        j                  | j                         | j                          y rK   r   r;   rU   rn   ro   ra  rL   s    r$   test_no_pip_by_defaultz$EnsurePipTest.test_no_pip_by_default  s2    t||dkk4<<8%%'r&   c                     t        | j                         | j                  t        j                  | j                  d       | j                          y )NF)r   rc  rL   s    r$   test_explicit_no_pipz"EnsurePipTest.test_explicit_no_pip  s7    t||dkk4<<%H%%'r&   c                    t        t        j                  d      5 }| j                  |j	                         d       d d d        | j                  t        j                  j                  t        j                               y # 1 sw Y   FxY w)Nr   r&   )r\   r6   devnullr   r]   rj   r7   rE   )rG   r^   s     r$   test_devnullzEnsurePipTest.test_devnull  s^    
 "**d# 	,qQVVXs+	, 	rzz23	, 	,s   !BB
c                    t        | j                         t               5 }d|d<   d|d<   t        j                         5 }||d<   d}d}d}|fD ]  \  }}t
        j                  j                  ||      }	t        j                  |	       t
        j                  j                  |	|      }
t        |
d	      5 }|j                  |       d d d         | j                         5  | j                  t        j                  | j                  |d
       d d d        d d d        d d d        t
        j                  j                  t
        j                  j                  | j                        | j                   | j"                        }t%        |ddddddddg	      \  }}|j'                  d      }| j)                  |d       |j'                  d      }dj+                  t-        j.                               }| j)                  |d t1        |       |       t        j2                  | j                        j'                  d      }| j5                  ||       t               5 }| j                         5  d|d<   t%        |dddddddg      \  }}d d d        d d d        |j'                  d      }t7        j8                  dd|t6        j:                        }| j)                  |j=                         d       |j'                  d      }| j5                  d|       |s| j?                          y y # 1 sw Y   xY w# 1 sw Y   %xY w# 1 sw Y   *xY w# 1 sw Y   /xY w# 1 sw Y   xY w# 1 sw Y   xY w)NignorePYTHONWARNINGS1PIP_NO_INSTALLHOMEz[global]
no-install=1)r   zpip.ini)z.pipzpip.confr   T)r   r   z-Wzignore::DeprecationWarningzignore::ImportWarningz-Ir   r   z	--versionr_  r}   zpip {}zensurepip._uninstallzl^(WARNING: )?The directory .* or its parent directory is not owned or is not writable by the current user.*$)flagszSuccessfully uninstalled pip) r   r;   r   r9   r   r6   r7   rW   r   r\   r   nicer_errorrU   rn   ro   r8   r=   rB   r%   r   r   format	ensurepipversionlenfsencoder   resub	MULTILINErstripra  )rG   r   envvarshome_dir
bad_configwin_locationposix_locationr   fnamedirpathfpathr^   r   r"   r#   expected_versionr;   s                    r$   do_test_with_pipzEnsurePipTest.do_test_with_pip  s,   t|| " !	9g )1G$% ),G$% ,,. 9("*5
  2!5'5&7 ,NGU ggll8W=GHHW%GGLL%8EeS) ,Q
+, ,	, %%' 9))$++t||?S37 * 99#9!	9F RWW--dll;T[[$((S.J,dUK!) *S
 jj#b!jj##??9+<+<+>?3c"2346FG++dll+229=gs#
 !" 	3g!!# 3 -5()'6140)2 3S	3	3 jj# ff NOQ. 	r* jj#4c: $))+ $u, ,
9 9#9 9!	9 !	9l3 3	3 	3sw   MA6L?5L%	L?!.L2L?MM%*MM%%L/*L?2L<7L??M		MMM"	M%%M.c              #     K   	 d y# t         j                  $ rc}|j                  xs dj                  d      }|j                  xs dj                  d      }| j                  | d| d|        Y d}~yd}~ww xY ww)z
        Capture output from a failed subprocess for easier debugging.

        The output this handler produces can be a little hard to read,
        but at least it has all the details.
        Nr&   replace)errorsz

**Subprocess Output**
z

**Subprocess Error**
)r   r   rS   r   r   fail)rG   excr"   r#   s       r$   rq  zEnsurePipTest.nicer_error  s     		,, 	::$,,I,>C::$,,I,>CII% **- /)),/ 	s+   B	 BA?AA:5B:A??Bcpuc                 H    | j                  d       | j                  d       y )NFT)r  rL   s    r$   test_with_pipzEnsurePipTest.test_with_pip
  s      	e$d#r&   N)ra   rb   rc   rd   ra  rd  rf  ri  r  
contextlibcontextmanagerrq  r
   r   r  rf   r&   r$   r]  r]  {  s^    /
,(
(
4V,p  $ u$  $r&   r]  __main__rK   )1rd   r  rs  r6   os.pathrs   rw  r!  r   r   r>   r   r9   test.supportr   r   r   r   r   r   r	   r
   r   r   test.support.os_helperr   r   r   rY  rn   unittest.mockr   r   ctypesImportErrorrZ  r   r   r@   rH   rX  SkipTestr%   TestCaser(   rh   r]  ra   mainrf   r&   r$   <module>r     s=     	   	    
  - - -
 N M   % (H''JJ#//! .
s~~-@B 
 G
(

G
HH &x   &PVH VHp R$H R$ R$j zHMMO c  Fs   &D D%$D%