
    7bh                     p   	 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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mZmZ d dlm Z  d dl!Z!d dl"Z"d dl#m$Z$m%Z% 	 d dl&Z& e!jP                  e	jR                  e	jT                  k(  xs e	jV                  e	jX                  k7  d      Z-eser e!j\                  d       e       dd       Z/ G d	 d
e!j`                  e       Z1 G d de1      Z2e- G d de1             Z3e4dk(  r e!jj                          yy# e'$ r dZ&Y w xY w)    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copy_python_src_ignore)can_symlinkEnvironmentVarGuardrmtreeTESTFNFakePath)ExtraAssertions)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        8/opt/python-3.12.12/usr/lib/python3.12/test/test_venv.pycheck_outputr)   0   s    	A }}HC||s#**W&89:++LL#sC) 	)8O    c                   6    e Zd Z	 dZd Zd Zd Zd ZdddZy	)
BaseTesti  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bindirr4   r7   sysversion_info_base_executablesplitexeplatformlexistsexistscannot_link_exe)self
executables     r(   setUpzBaseTest.setUpB   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?   rK   s    r(   tearDownzBaseTest.tearDownU   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rO   )r   r   getvalue)rK   funcargskwargsoutputerrors         r(   run_with_capturezBaseTest.run_with_captureX   sV    & "ed%f% #   %.."222 #" s!   A	AAA	AA$c                 V    t        j                  j                  | j                  g| S rO   )r:   r;   joinr?   )rK   rU   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rr]   )openr\   read)rK   r   rU   fresults        r(   get_text_file_contentszBaseTest.get_text_file_contentsa   s@    #$##T*C(CqVVXF D Ds	   7AN)	__name__
__module____qualname__maxDiffrM   rQ   rY   r\   rd    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	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j<                  ej@                  dk(  d       d"        Z" ej                  ej@                  dk(  d#      d$        Z# ej                  ej@                  dk(  d#      d%        Z$e
d&        Z%e
d'        Z& ej<                  ej@                  dk(  d(      d)        Z' ej                  ej$                  d*k(  d+      d,        Z(d- Z) ej<                  ej@                  dk(  d(      e
d.               Z*d/ Z+d0 Z,y)1	BasicTestc                 ~     | j                   | }| j                  t        j                  j	                  |             y rO   )r\   
assertTruer:   r;   isdir)rK   rU   fns      r(   rn   zBasicTest.isdiri   s-    T%b)*r*   c                     	 t        | j                         | j                  t        j                  | j                         | j                          y rO   )r   r?   rY   venvcreate_check_output_of_default_createrP   s    r(   test_defaults_with_str_pathz%BasicTest.test_defaults_with_str_pathm   s9    	 	t||dkk4<<8,,.r*   c                     	 t        | j                         | j                  t        j                  t        | j                               | j                          y rO   )r   r?   rY   rq   rr   r   rs   rP   s    r(   test_defaults_with_pathlikez%BasicTest.test_defaults_with_pathlikeu   s>    	 	t||dkk8DLL+AB,,.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.)rn   rA   r7   r4   r\   structcalcsizer:   r@   rB   rG   rm   r;   islinkassertFalserI   rd   rD   dirnameassertInr<   rL   r?   rF   r!   listdir)
rK   r%   
conditionsdatarL   r;   copiesr$   ro   bds
             r(   rs   z)BasicTest._check_output_of_default_create}   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   ri   )r   r?   rq   
EnvBuilderr   upgrade_dependencies
_setup_piprY   rr   rd   assertNotRegexr:   r@   assertRegex)rK   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6C''se.DE6 $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'
)r:   r;   rE   r?   r   rq   r   rY   rr   ensure_directoriesrd   assertEqualr   assertNotInr   basenamegetcwd)rK   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)Nr9   r/   r3   r   c           	          t         j                  j                  | d         | d<   j                  | dddddg       y )Nr   -mpipinstallr   )r:   r;   normcaser   )r$   rV   
expect_exerK   s     r(   pip_cmd_checkerz<BasicTest.test_upgrade_dependencies.<locals>.pip_cmd_checker   sG    ))#a&1A  "!#
r*   zvenv.subprocess.check_output)rq   r   rB   rG   r:   r;   rE   rL   r=   TemporaryDirectoryr   r[   r<   r   r   r   )rK   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,,\: H- +*, HG- +*s%   2B1E#E5EE	EEc                 n   	 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 ]p  \  }}d|z  |d<   t        |      \  }}| j                  t        j                   |j#                         j%                               t        j                   |      |       r y )N-cprefixexec_prefixbase_prefixbase_exec_prefixzimport sys; print(sys.%s)r6   )r   r?   rY   rq   rr   r:   r;   r[   rA   rF   rB   r   r   r)   r   pathlibPathstripr"   )rK   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FH
 169CF#C(HCW\\#))+*<*<*>?$\\(3V=!8r*   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)NFr   r   zget_preferred_scheme("prefix")rq   zget_default_scheme()rq   is_python_build()get_makefile_filename()get_config_h_filename()%import sysconfig; print(sysconfig.%s)r6   r   r?   rY   rq   rr   r:   r;   r[   rA   rF   str	sysconfigis_python_buildget_makefile_filenameget_config_h_filenamesubTestr)   r   r   encoderK   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ND( d#@4GA',S  hoo.?E $#L $#   *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)NTr   r   r   r   r   r   r   r   r6   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ND( d#@4GA',S  hoo.?E $#L $#r   r9   ))r/   )r2   r0   )r1   site-packages)r3   )r7   )r4   r4   r5   Nr6   r   c                 6   	 |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)Nwb   Still here?)r:   r;   r[   r?   mkdirr`   write)rK   pathsfilenamesubdirsdro   rb   s          r(   create_contentszBasicTest.create_contentsB  ss    	 GT\\4G4AHHQKa*Bb$1'  	   s   2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)Nfoo)r   rbr   Tr   )r   ENV_SUBDIRSrq   rr   r?   r:   r;   r[   rm   rI   r`   r   ra   r   r   )rK   r   ro   rb   r   s        r(   test_overwrite_existingz!BasicTest.test_overwrite_existingN  s   	 	T--u5DLL!''GdllBg.@BBOOBGGNN2./b$1  >:   ( //-t||$''GdllBg.@BBRWW^^B/0 (  s   3!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 rO   )	r:   r   r;   r[   r   isfileremovern   r   )rK   r;   ro   s      r(   clear_directoryzBasicTest.clear_directory`  sj    **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   r:   r;   r[   r?   r`   r   assertRaises
ValueErrorOSErrorrq   rr   r   )rK   r   ro   rb   s       r(   test_unoverwritable_failsz#BasicTest.test_unoverwritable_failsh  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 )NFT)r   r   r   r   )rq   r   rY   rr   r?   rn   rA   r7   r4   r\   rF   r:   r;   rI   r!   r   rm   )rK   r   r   ro   r   s        r(   test_upgradezBasicTest.test_upgradeq  s    	 %Goog6G!!'..$,,?JJt{{#JJt||$DJJ!""4;;9B77>>"%&&t{{3'",-hB/0OOBGGNN2.0G"0LM %r*   c                     	 dD ]]  \  }}t        j                  d|      }|j                  | j                         | j	                  d      }| j                  d|z  |       _ y )N))Ttrue)FfalseT)r   r   r}   z"include-system-site-packages = %s
)rq   r   rr   r?   rd   r   )rK   sspsr   r   s        r(   test_isolationzBasicTest.test_isolation  s[    	 9FCooDsKGNN4<<(..|<DMM?!CTJ	 9r*   c                    	 dD ]  }t        j                  d|      }|j                  | j                         | j	                  | j
                  | j                        }|s^| j                  r/| j                  t        j                  j                  |             | j                  t        j                  j                  |              y )Nr   Tr   r   )rq   r   rr   r?   r\   rA   rF   rJ   r   r:   r;   r   rm   )rK   uslr   ro   s       r(   test_symlinkingzBasicTest.test_symlinking  s    	 !CooD3?GNN4<<(""4;;9B '' $$RWW^^B%78OOBGGNN2$67 !r*   c                    	 t        | j                         | j                  t        j                  | j                         t
        j                  j                  t
        j                  j                  | j                        | j                  | j                        }t        |ddg      \  }}| j                  |j                         |j                                y )Nr   !import sys; print(sys.executable))r   r?   rY   rq   rr   r:   r;   r[   r<   rA   rF   r)   r   r   r   rK   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 )NTr  r   r  r   r?   rq   r   rr   r:   r;   r[   r<   rA   rF   r)   r   r   r   rK   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&contains invalid characters on Windowsc                 j   	 t        | j                         t        j                  d      }|| j	                  d       d}t
        j                  j                  t
        j                  j                  | j                        |      }t        j                  d      }|j                  |       t
        j                  j                  || j                  d      }t
        j                  j                  | j                  d      }t        |d      5 }|j                  d	t        j                   |       d
       d d d        t#        ||g      \  }}	|j%                         }
| j'                  |j)                         |
d   v        | j+                  |
d   |j)                                y # 1 sw Y   qxY w)Nbashbash required for this test
"';&&$e|'"Tr   activateztest_special_chars.shwsource r
python -c 'import sys; print(sys.executable)'
python -c 'import os; print(os.environ["VIRTUAL_ENV"])'
deactivate
r   r   r   r?   shutilwhichskipTestr:   r;   r[   r<   rq   r   rr   rA   r`   r   shlexquoter)   
splitlinesrm   r   assertEndsWith)rK   r  r   r?   r   r  test_scriptrb   r&   r'   liness              r(   test_special_chars_bashz!BasicTest.test_special_chars_bash  sF   	 	t||||F#<MM78!'',,rww//=xH//-w77<<jAggll4<<1HI+s#qGGgekk(34 5# # $ $
  { 34S )U1X56E!Hhoo&78 $#s   )F))F2c                    	 t        | j                         t        j                  d      xs t        j                  d      }|| j	                  d       d}t
        j                  j                  t
        j                  j                  | j                        |      }t        j                  d      }|j                  |       t
        j                  j                  || j                  d      }t
        j                  j                  | j                  d      }t        |d	      5 }|j                  d
t        j                   |       d       d d d        t#        ||g      \  }}	|j%                         }
| j'                  |j)                         |
d   v        | j+                  |
d   |j)                                y # 1 sw Y   qxY w)Ntcshcshzcsh required for this testr  Tr   zactivate.cshztest_special_chars.cshr  r  r  r   r   r  )rK   r'  r   r?   r   r  r"  rb   r&   r'   r#  s              r(   test_special_chars_cshz BasicTest.test_special_chars_csh  sT   	 	t||ll6"9fll5&9;MM67!'',,rww//=xH//-w77<<nEggll4<<1IJ+s#qGGgekk(34 5# # $ $
  k 23S )U1X56E!Hhoo&78 $#s   ')G  G	zonly relevant on Windowsc           
      &   	 t        | j                         d}t        j                  j	                  t        j                  j                  | j                        |      }t        j                  d      }|j                  |       t        j                  j	                  || j                  d      }t        j                  j	                  | j                  d      }t        |d      5 }|j                  d| d| j                   d	| j                   d
       d d d        t        |g      \  }}|j                         }	| j                  |j!                         |	d   v        | j#                  |	d   |j!                                y # 1 sw Y   pxY w)Nz'&&^$eTr   activate.batztest_special_chars.batr  z@echo off
"z" & z* -c "import sys; print(sys.executable)" & z> -c "import os; print(os.environ['VIRTUAL_ENV'])" & deactivater   r   )r   r?   r:   r;   r[   r<   rq   r   rr   rA   r`   r   rF   r)   r   rm   r   r!  )
rK   r   r?   r   r  
test_batchrb   r&   r'   r#  s
             r(   test_special_chars_windowsz$BasicTest.test_special_chars_windows  s4   	 	t||'',,rww//=xH//-w77<<nEWW\\$,,0HI
*c"aGG  zxxj Jxxj !!! " #  -S )U1X56E!Hhoo&78 #"s   (0FFc                 J   	 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 )Nu   ϼўТλФЙTr   r*  &r   zprint(0)oemr]   0)r   r?   r:   r;   r[   r<   rq   r   rr   rA   rF   r)   r   r   )rK   r?   r   r  r   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 )Nr   zrfrom multiprocessing import Pool; pool = Pool(1); print(pool.apply_async("Python".lower).get(3)); pool.terminate()python)r   r   r?   rY   rq   rr   r:   r;   r[   r<   rA   rF   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                  |d|g       y )Nz_test_venv_multiprocessing.py-I)r   r   r?   rY   rq   rr   r:   r;   r[   r<   rA   rF   r   r   
check_call)rK   r   scripts      r(   test_multiprocessing_recursionz(BasicTest.test_multiprocessing_recursion5  s    	 	34t||dkk4<<8RWW--dll;![[$((4m-LMudF34r*   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)Nr  r  Tr   r  ztest_strict.shr  zset -euo pipefail
source z
deactivate
r~   )r  r  r  r   r?   rq   r   rr   r:   r;   r[   rA   r`   r   r)   r   r   )rK   r  r   r  r"  rb   r&   r'   s           r(   %test_deactivate_with_strict_bash_optsz/BasicTest.test_deactivate_with_strict_bash_optsC  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_envV  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        |             y rO   )	r   r?   r:   pathsepr   r   rq   rr   r   )rK   bad_itempaths     r(   test_pathsep_errorzBasicTest.test_pathsep_errorb  sX    	 	t||||bjj0*dkk<@*dkk8L3IJr*   c           	      	   	 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,                  |	      }
t/        |	|
      }|
D ]  }||v r|dk(  rt        j
                  j                  |	|      }t        j
                  j)                  |      rt        j0                  ||       dt        j
                  j3                  |      st        j4                  |t        j
                  j                  ||      t.                |j7                  |	        t        j
                  j                  || j                  | j8                        dd	d
| j                  g}t        j:                  j                  |      }t=        j>                  d      }|rt=        j@                         rJt        j
                  jC                  t        j
                  jE                  t        j                              }t        jF                  dk(  rd}nd}d|||i}t        jH                  jK                  d      x}r||d<   tM        jN                  ||       t        j
                  j                  | j                  | j                  | j8                        }|dddg}tQ        |      \  }}| jS                  |jU                         |v        y )Nr   zos.pyzpython%d%d.zipr6   z.zipr   )ignorer   rq   r   LIBDIRr|   DYLD_LIBRARY_PATHLD_LIBRARY_PATH
PYTHONPATHASAN_OPTIONS)envz-Sr   zimport sys; print(sys.path))+r   r?   rB   
platlibdirr:   r;   r<   r=   r>   
addCleanupr[   rA   r   r  copy2rL   r4   makedirsrC   endswithr   copyfiler   r   copyrn   copytreeappendrF   r@  r   get_config_varr   abspathr   rG   environgetr   r7  r)   rm   r   )rK   rK  non_installed_dirrA   libdirlandmark
stdlib_zipzip_landmark'additional_pythonpath_for_non_installedeachpathnamesignored_namesr@   ro   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_posixl  si   	 	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 ?@

8, 6x G!D}, . h5Bww~~b)B/r*BGGLL,F/EG " 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                 l   	 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)Nr  r   r   zCR LF found in line s   
)r   r   r?   r   r   rq   rr   r`   	enumerater   rO  )	rK   venv_dirscripts_dir_script_pathr8  ilineerror_messages	            r(   .test_activate_shell_script_has_no_dos_newlinesz8BasicTest.test_activate_shell_script_has_no_dos_newlines  s    	
 <<-x"..+,z9H+t$$VQ/4"6qc :  w!7G 0 %$$s   %;B**B3c                    t         j                  j                  }t        j                  dk(  r~dt
        t
        fdt        j                         t        j                         fg}dd l}t        j                  d      }|rcg |d||fd|j                  |      |j                  |      f}n6dt
        t
        fdt        j                         t        j                         fg}|D ]X  \  }}}| j                  | d|       5  |r| j                   |||             n| j                   |||             d d d        Z y # 1 sw Y   exY w)Nr9   Tr   ProgramFilesF-)rq   r   
_same_pathrB   rG   r   lowerupper_winapir:   getenvGetShortPathNameGetLongPathNamer   rm   r   )rK   	same_pathtestsrw  	progfilesr_   path1path2s           r(   test_venv_same_pathzBasicTest.test_venv_same_path  s.   OO..	<<7" vv&v||~v||~6E 		.1I9i0 733I>@W@WXa@bc vv&7E  %OAueq01OOIeU$;<$$Yue%<=	 21  %11s   4E  E		)-re   rf   rg   rn   rt   rv   rs   r   r   r   requireVenvCreater   r   unittest
skipUnlessr   r   rB   rG   r   rC   r   r   r   r   r   r  r	  r  r  skipIfr:   r@   r$  r(  r,  r1  r4  r9  r;  r>  rB  rf  rp  r  ri   r*   r(   rk   rk   f   s   )+//J8?>58;: = =& 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__RWW_&NO9 P92 X__RWW_&NO9 P92 XD*DE9 F9, XD*DE+ F+  9 9( 5 5 X__RWW_&?@+ A+$ X13KL	8 M	8K X__RWW_&?@Q6  AQ6fH >r*   rk   c                       e Zd Z	 d Zd Zd Zd Zd Zej                  d        Z
 e        ed      d               Zy	)
EnsurePipTestc                    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)r:   r;   r[   r<   r?   rA   rF   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 rO   r   r?   rY   rq   rr   r  rP   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   r  rP   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`   r:   devnullr   ra   rm   r;   rI   )rK   rb   s     r(   test_devnullzEnsurePipTest.test_devnull	  sW    
 "**d#qQVVXs+ $ 	rzz23 $#s   !BB
c                 X   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:                        }	 dd l}| j)                  |jA                         d       |j'                  d      }| j5                  d|       |s| jC                          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   4xY w# 1 sw Y   xY w# 1 sw Y   xY w# t>        $ r* t7        j8                  dd|t6        j:                        }Y w xY w)NrD  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::ImportWarningr6  r   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.*$)flagsr   z<^WARNING: Disabling truststore since ssl support is missing$zSuccessfully uninstalled pip)"r   r?   r   r=   r   r:   r;   r[   r   r`   r   nicer_errorrY   rq   rr   r<   rA   rF   r)   r"   r   format	ensurepipversionlenfsencoder   resub	MULTILINEsslImportErrorrstripr  )rK   r   envvarshome_dir
bad_configwin_locationposix_locationr   fnamedirpathfpathrb   r   r&   r'   expected_versionr?   r  s                     r(   do_test_with_pipzEnsurePipTest.do_test_with_pip  s0   t|| "g )1G$% ),G$% ,,.("*5
  2!5'5&7NGU ggll8W=GHHW%GGLL%8EeS)Q
+ *)	 '8 %%'))$++t||?S37 * 9 (# / #F RWW--dll;T[[$((S.J,dUK!) *S
 jj#b!jj##??9+<+<+>?3c"2346FG++dll+229=gs#
 !"g!!# -5()'6140)2 3S	 $ # jj# ff NOQ.	) 	r* jj#4c: $))+ $E *)
 ('# /. #"l $# #"0  	)&&N2<<)C	)s   MA6M5L*	M!.L7MMM**MM*M6 *L4/M7M<MM		MMM'	#M**M360N)(N)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)Nr*   replace)errorsz

**Subprocess Output**
z

**Subprocess Error**
)r   r#   rW   r"   r   fail)rK   excr&   r'   s       r(   r  zEnsurePipTest.nicer_errors  s     			,, 	::$,,I,>C::$,,I,>CII% **- /)),/ 	s+   B
 BB AA;6B;B  Bcpuc                 H    | j                  d       | j                  d       y )NFT)r  rP   s    r(   test_with_pipzEnsurePipTest.test_with_pip  s      	e$d#r*   N)re   rf   rg   r  r  r  r  r  
contextlibcontextmanagerr  r
   r   r  ri   r*   r(   r  r    s^    /
,(
(
4^,@  $ u$  $r*   r  __main__rO   )6r  r  r:   os.pathr   r  r  r   r   rB   r   r=   r  test.supportr   r   r   r   r   r   r	   r
   r   r   r   test.support.os_helperr   r   r   r   r   test.support.testcaser   r  rq   unittest.mockr   r   ctypesr  r  r   r   rD   rL   r  SkipTestr)   TestCaser,   rk   r  re   mainri   r*   r(   <module>r     sM     	   	    
   E E E E
6 6 1   % (H''JJ#//! .
s~~-@B 
 G
(

G
HH &x  / &PG
> G
>R Z$H Z$ Z$z zHMMO U  Fs   5D+ +D54D5