Current File : //usr/local/apps/python3/lib/python3.11/test/__pycache__/test_venv.cpython-311.pyc
�

�Ke
}��>�dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
mZmZmZmZmZmZmZmZmZmZddlmZmZmZddlZddlZddlmZm Z 	ddl!Z!n
#e"$rdZ!YnwxYwej#e
j$e
j%kpe
j&e
j'kd��Z(eserej)d���e��dd���Z*Gd	�d
ej+��Z,Gd�de,��Z-e(Gd
�de,����Z.e/dkrej0��dSdS)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�
requires_zlib�*skip_if_broken_multiprocessing_synchronize�verbose�requires_subprocess�
is_emscripten�is_wasi�requires_venv_with_pip�
TEST_HOME_DIR)�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�.�tj|tjtj|���}|���\}}|jrHt
r%|r#t
|�dd����tj|j|||���||fS)N)�stdout�stderr�encoding�utf-8�backslashreplace)	�
subprocess�Popen�PIPE�communicate�
returncoder�print�decode�CalledProcessError)�cmdr�p�out�errs     �8/usr/local/apps/python3/lib/python3.11/test/test_venv.py�check_outputr%,s�����������	�	�	�A��}�}���H�C���|�)��	;�s�	;��#�*�*�W�&8�9�9�:�:�:��+�
�L�#�s�C�)�)�	)���8�O�c�:�eZdZdZdZd�Zd�Zd�Zd�Zdd�d	�Z	d
S)�BaseTestzBase class for venv tests.i�c�<�tj�tj����|_tjdkrd|_d|_d|_	n,d|_ddtjdd�zf|_d	|_	tj}tj�
|��d
|_tjdkrGtj�|��r(tj�|��s	d|_dSd
|_dS)N�nt�Scripts��Lib�Include�bin�lib�python%d.%d��include����win32TF)�os�path�realpath�tempfile�mkdtemp�env_dir�name�bindirr0r3�sys�version_info�_base_executable�split�exe�platform�lexists�exists�cannot_link_exe)�self�
executables  r$�setUpzBaseTest.setUp>s����w�'�'��(8�(:�(:�;�;���
�7�d�?�?�#�D�K��D�H�$�D�L�L��D�K��}�s�/?����/C�C�D�D�H�$�D�L��)�
��7�=�=��,�,�R�0����L�G�#�#�����
�+�+�
$��G�N�N�:�.�.�
$�$(�D� � � �#(�D� � � r&c�.�t|j��dS�N)rr;�rGs r$�tearDownzBaseTest.tearDownQs���t�|�����r&c��t��5}t��5}||i|��ddd��n#1swxYwYddd��n#1swxYwY|���|���fSrK)rr�getvalue)rG�func�args�kwargs�output�errors      r$�run_with_capturezBaseTest.run_with_captureTs���
�
�
�	&�&� �"�"�
&�e���d�%�f�%�%�%�
&�
&�
&�
&�
&�
&�
&�
&�
&�
&�
&����
&�
&�
&�
&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&���� � �%�.�.�"2�"2�2�2s,�A
�	3�A
�7	�A
�7	�A
�
A�Ac�:�tjj|jg|�R�SrK)r6r7�joinr;)rGrQs  r$�get_env_filezBaseTest.get_env_fileZs���w�|�D�L�0�4�0�0�0�0r&r�rc��t|j|�d|���5}|���}ddd��n#1swxYwY|S)N�rrY)�openrX�read)rGrrQ�f�results     r$�get_text_file_contentszBaseTest.get_text_file_contents]s���
�#�$�#�T�*�C�(�
C�
C�
C�	�q��V�V�X�X�F�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��
s�<�A�AN)
�__name__�
__module__�__qualname__�__doc__�maxDiffrIrMrUrXr`�r&r$r(r(:sy������$�$��G�)�)�)�&���3�3�3�1�1�1�6=�������r&r(c	�L�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
ed	���Zed
���Z
eeje��d��d�����Zejd
krdZn,dddddejdd�zfddejdd�zdffZd�Zd�Zd�Zd�Zd�Zd�Zeje��d��d���Zed���Zeje��d��d���Zejej d kd!��d"���Z!ed#���Z"ed$���Z#ej$ej d kd%��d&���Z%ejejd'kd(��d)���Z&d*�Z'ej$ej d kd%��ed+�����Z(dS),�	BasicTestzTest venv module functionality.c�~�|j|�}|�tj�|����dSrK)rX�
assertTruer6r7�isdir)rGrQ�fns   r$rkzBasicTest.isdires7��
�T�
��
%�������
�
�b�)�)�*�*�*�*�*r&c��t|j��|�tj|j��|���dS)zQ
        Test the create function with default arguments and a str path.
        N)rr;rU�venv�create�_check_output_of_default_createrLs r$�test_defaults_with_str_pathz%BasicTest.test_defaults_with_str_pathisF��	�t�|�������d�k�4�<�8�8�8��,�,�.�.�.�.�.r&c���t|j��|�tjtj|j����|���dS)zZ
        Test the create function with default arguments and a pathlib.Path path.
        N)rr;rUrnro�pathlib�PathrprLs r$�test_defaults_with_pathlib_pathz)BasicTest.test_defaults_with_pathlib_pathqsP��	�t�|�������d�k�7�<���+E�+E�F�F�F��,�,�.�.�.�.�.r&c�8�|�|j��|�|j��|j|j�|�d��}tjd��dkotjdkotj
dk}|r3|�tj�
|����n2|�tj�|����|�d��}tj}tj�|��}|�d|z|��|�dtj�tj��z|��tjd	krd
nd}dtj�d
|�d|j��}|�||��|�|j|j��}tj�|��sP|�|j��}	t1d|	z��t1dtj|	��z��|�tj�|��d|z��dS)N�lib64�P��posix�darwin�
pyvenv.cfgz	home = %szexecutable = %sr*�z	 --copiesz
command = z -m venvz --without-pip �Contents of %r:�    %r�File %r should exist.)rkr=r3r0rX�struct�calcsizer6r<r>rCrjr7�islink�assertFalserEr`r@�dirname�assertInr8rHr;rBr�listdir)
rGr!�
conditions�datarHr7�copiesr rl�bds
          r$rpz)BasicTest._check_output_of_default_createys5���
�
�4�;�����
�
�4�<� � � ���
�D�H������g�&�&����s�+�+�q�0�1�r�w�'�7I�1��|�x�/�	��	0��O�O�B�G�N�N�1�-�-�.�.�.�.����R�W�^�^�A�.�.�/�/�/��*�*�<�8�8���)�
��w���z�*�*���
�
�k�D�(�$�/�/�/��
�
�'��g�&�&�s�~�6�6�7�8<�	>�	>�	>��w��}�}���+��X�3�>�X�X�6�X�X�$�,�X�X���
�
�c�4� � � �
�
�
�t�{�D�H�
5�
5���w�~�~�b�!�!�	-��"�"�4�;�/�/�B��#�b�(�)�)�)��(�R�Z��^�^�+�,�,�,��������r�*�*�,C�b�,H�I�I�I�I�Ir&c��gd�}|D]�\}}t|j��|stj��}ntjd
i||dvrdndi��}t	��|_t	��|_|�|j|j��|�	d��}|sdD]}|�
|d|�������tjdkr|d	kr��|�
|d|������dS)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)rr;rn�
EnvBuilderr�upgrade_dependencies�
_setup_piprUror`�assertNotRegexr6r<�assertRegex)rG�attrs�attr�opt�br�s      r$�test_config_file_command_keyz&BasicTest.test_config_file_command_key�sS��	
�	
�	
���	?�	?�I�D�#��4�<� � � ��
S��O�%�%����O�S�S��d�.F�&F�&F�U�U�D�Q�S�S��%)�V�V�A�"��6�6�A�L��!�!�!�(�D�L�9�9�9��.�.�|�<�<�D��
?�6�F�F�C��'�'��.D�s�.D�.D�E�E�E�E�F���$���4��#3�#3��� � ��'=��'=�'=�>�>�>�>�%	?�	?r&c��tj�|j��d}t	|j��tj��}|�|j|j��|�	|j��}|�
d��}|�|jd|z��|�
d|��t	|j��tjd���}|�|j|j��|�	|j��}|�
d��}|�|jd��|�d|��t	|j��tjd	���}tj�tj����}|�|j|j��|�	|j��}|�
d��}|�|jd|z��|�d
|z|��dS)N�r|z(%s) z	prompt = z	My prompt)r�z(My prompt) zprompt = 'My prompt'
�.zprompt = '%s'
)r6r7rAr;rrnr�rUro�ensure_directoriesr`�assertEqualr��assertNotInr��basename�getcwd)rG�env_name�builder�contextr��cwds      r$�test_promptzBasicTest.test_prompt�s����7�=�=���.�.�q�1���t�|�����/�#�#�����g�n�d�l�;�;�;��,�,�T�\�:�:���*�*�<�8�8��������8�);�<�<�<�����d�+�+�+��t�|�����/��5�5�5�����g�n�d�l�;�;�;��,�,�T�\�:�:���*�*�<�8�8��������8�8�8��
�
�.��5�5�5��t�|�����/��-�-�-���g���r�y�{�{�+�+�����g�n�d�l�;�;�;��,�,�T�\�:�:���*�*�<�8�8��������3��7�7�7��
�
�'�#�-�t�4�4�4�4�4r&c�����tj��}tjdkrdnd}tj�tj��d}tj	��5}tj�
tj�|||�����tjdkr<tj�
tj���������fd�}|�
|��}td|��5|�|��ddd��n#1swxYwYddd��dS#1swxYwYdS)Nr5r+r/r�c
���tj�|d��|d<��|�ddddddg��dS)Nr�-m�pip�installr��
setuptools)r6r7�normcaser�)r rR�
expect_exerGs  ��r$�pip_cmd_checkerz<BasicTest.test_upgrade_dependencies.<locals>.pip_cmd_checker�s_�����)�)�#�a�&�1�1��A��� � ��"���!�#��$������r&zvenv.subprocess.check_output)rnr�r>rCr6r7rArHr9�TemporaryDirectoryr�rWr8r�rr�)rGr��bin_path�
python_exe�fake_env_dirr��fake_contextr�s`      @r$�test_upgrade_dependenciesz#BasicTest.test_upgrade_dependencies�s������/�#�#�� #��� 7� 7�9�9�U���W�]�]�3�>�2�2�1�5�
�
�
(�
*�
*�	;�l���)�)�����\�8�Z�@�@���J��|�w�&�&��W�-�-�b�g�.>�.>�z�.J�.J�K�K�
�

�

�

�

�

�

�#�5�5�l�C�C�L��5��G�G�
;�
;��,�,�\�:�:�:�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;����
;�
;�
;�
;�/	;�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;����	;�	;�	;�	;�	;�	;s7�,B6E�"E�8E�E	�E�E	�E�E �#E c���t|j��|�tj|j��t
j�|j|j|j	��}|ddg}d|jfd|jfdtjfdtjffD]Z\}}d|z|d<t|��\}}|�|���|���|���[dS)	z>
        Test that the prefix values are as expected.
        �-cN�prefix�exec_prefix�base_prefix�base_exec_prefixzimport sys; print(sys.%s)r2)rr;rUrnror6r7rWr=rBr>r�r�r%r��strip�encode)rG�envpyr r��expectedr"r#s       r$�
test_prefixeszBasicTest.test_prefixes�s���	�t�|�������d�k�4�<�8�8�8�����T�\�4�;���A�A���d�D�!��
�t�|�$�
�D�L�)�
�C�O�,�
��!5�6�	!8�	E�	E��F�H�
1�6�9�C��F�#�C�(�(�H�C�����S�Y�Y�[�[�(�/�/�*;�*;�V�D�D�D�D�	E�	Er&c��t|j��|�tj|jd���t
j�|j|j|j	��}|ddg}dddttj����fdtj
��fd	tj��ffD]�\}}|�|��5d
|z|d<t!|��\}}|�|���|���|��ddd��n#1swxYwY��dS)�R
        Test that the sysconfig functions work in a virtual environment.
        F�r�r�N�zget_preferred_scheme("prefix")rn�zget_default_scheme()rn�is_python_build()�get_makefile_filename()�get_config_h_filename()�%import sysconfig; print(sysconfig.%s)r2�rr;rUrnror6r7rWr=rB�str�	sysconfig�is_python_build�get_makefile_filename�get_config_h_filename�subTestr%r�r�r��rGr�r �callr�r"r#s       r$�test_sysconfigzBasicTest.test_sysconfigs���
	�t�|�������d�k�4�<�%��H�H�H�����T�\�4�;���A�A���d�D�!��
7�,�
 �#�i�&?�&A�&A�"B�"B�C�
&�	�(G�(I�(I�J�
&�	�(G�(I�(I�J�L�	F�	F�N�D�(����d�#�#�
F�
F�@�4�G��A��'��,�,���S�� � ������h�o�o�.?�.?��E�E�E�
F�
F�
F�
F�
F�
F�
F�
F�
F�
F�
F����
F�
F�
F�
F��	F�	F��AD:�:D>	�D>	zNeeds symlinksc��t|j��|�tj|jd���t
j�|j|j|j	��}|ddg}dddttj����fdtj
��fd	tj��ffD]�\}}|�|��5d
|z|d<t!|��\}}|�|���|���|��ddd��n#1swxYwY��dS)r�Tr�r�Nr�r�r�r�r�r�r2r�r�s       r$�test_sysconfig_symlinksz!BasicTest.test_sysconfig_symlinkss���	�t�|�������d�k�4�<�$��G�G�G�����T�\�4�;���A�A���d�D�!��
7�,�
 �#�i�&?�&A�&A�"B�"B�C�
&�	�(G�(I�(I�J�
&�	�(G�(I�(I�J�L�	F�	F�N�D�(����d�#�#�
F�
F�@�4�G��A��'��,�,���S�� � ������h�o�o�.?�.?��E�E�E�
F�
F�
F�
F�
F�
F�
F�
F�
F�
F�
F����
F�
F�
F�
F��	F�	Fr�r5))r+)r.r,)r-�
site-packages)r/)r3)r0r0r1Nr2r�c�*�|D]�}tjj|jg|�R�}tj|��tj�||��}t|d��5}|�d��ddd��n#1swxYwY��dS)zn
        Create some files in the environment which are unrelated
        to the virtual environment.
        �wb�Still here?N)r6r7rWr;�mkdirr\�write)rG�paths�filename�subdirs�drlr^s       r$�create_contentszBasicTest.create_contents>s���
�	(�	(�G����T�\�4�G�4�4�4�A��H�Q�K�K�K�����a��*�*�B��b�$���
(�1�����'�'�'�
(�
(�
(�
(�
(�
(�
(�
(�
(�
(�
(����
(�
(�
(�
(��		(�	(s�%B�B	�B	c���|�|jd��tj|j��|jD]�}tjj|jg|dz�R�}|�t
j�	|����t|d��5}|�|���d��ddd��n#1swxYwY��tj
d���}|�|j��|jD]S}tjj|jg|dz�R�}|�t
j�	|�����TdS)zE
        Test creating environment in an existing directory.
        �foo)r��rbr�NT�r�)r��ENV_SUBDIRSrnror;r6r7rWrjrEr\r�r]r�r�)rGr�rlr^r�s     r$�test_overwrite_existingz!BasicTest.test_overwrite_existingJs���	
���T�-�u�5�5�5���D�L�!�!�!��'�	;�	;�G����d�l�B�g��.@�B�B�B�B��O�O�B�G�N�N�2�.�.�/�/�/��b�$���
;�1�� � ������>�:�:�:�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;����
;�
;�
;�
;���/��-�-�-�����t�|�$�$�$��'�	1�	1�G����d�l�B�g��.@�B�B�B�B����R�W�^�^�B�/�/�0�0�0�0�	1�	1s�)C�C	�C	c�v�tj|��D]�}tj�||��}tj�|��stj�|��rtj|���utj�|��rt|����dSrK)	r6r�r7rWr��isfile�removerkr)rGr7rls   r$�clear_directoryzBasicTest.clear_directory\s����*�T�"�"�	�	�B�����d�B�'�'�B��w�~�~�b�!�!�
�R�W�^�^�B�%7�%7�
��	�"�
�
�
�
�����r�"�"�
��r�
�
�
��	�	r&c�t�|jdd�D]�}tjj|jg|�R�}t|d��5}|�d��ddd��n#1swxYwY|�ttftj|j��|�|j����dS)N�r�r&)
r�r6r7rWr;r\r��assertRaises�
ValueError�OSErrorrnror�)rGr�rlr^s    r$�test_unoverwritable_failsz#BasicTest.test_unoverwritable_failsds����%�b�q�b�)�	/�	/�E����d�l�3�U�3�3�3�B��b�$���
�1��������
�
�
�
�
�
�
�
�
�
�
����
�
�
�
����z�7�3�T�[�$�,�O�O�O�� � ���.�.�.�.�	/�	/s�A � A$	�'A$	c��dD�]@}tj|���}|�|j|j��|�|j��|�|j��|j|j�|�	|j|j
��}tj�
|��sP|�	|j��}td|z��tdtj|��z��|�tj�
|��d|z����BdS)zC
        Test upgrading an existing environment directory.
        �FT)r�r~rr�N)rnr�rUror;rkr=r3r0rXrBr6r7rErr�rj)rGr�r�rlr�s     r$�test_upgradezBasicTest.test_upgradems$��%�	N�	N�G��o�g�6�6�6�G��!�!�'�.�$�,�?�?�?��J�J�t�{�#�#�#��J�J�t�|�$�$�$��D�J���!�!��"�"�4�;���9�9�B��7�>�>�"�%�%�
1��&�&�t�{�3�3���'�"�,�-�-�-��h���B���/�0�0�0��O�O�B�G�N�N�2�.�.�0G�"�0L�M�M�M�M�	N�	Nr&c���dD]c\}}tjd|���}|�|j��|�d��}|�d|z|���ddS)z:
        Test isolation from system site-packages
        ))T�true)F�falseT)r�r�r|z"include-system-site-packages = %s
N)rnr�ror;r`r�)rG�ssp�sr�r�s     r$�test_isolationzBasicTest.test_isolation�s}��9�	K�	K�F�C���o�D�s�K�K�K�G��N�N�4�<�(�(�(��.�.�|�<�<�D��M�M�?�!�C�T�J�J�J�J�		K�	Kr&c��dD]�}tjd|���}|�|j��|�|j|j��}|rl|jr3|�tj
�|������|�tj
�|������dS)z3
        Test symlinking works as expected
        r�T�r�r�N)
rnr�ror;rXr=rBrFr�r6r7r�rj)rG�uslr�rls    r$�test_symlinkingzBasicTest.test_symlinking�s���
!�
	8�
	8�C��o�D�3�?�?�?�G��N�N�4�<�(�(�(��"�"�4�;���9�9�B��
8��'�8��$�$�R�W�^�^�B�%7�%7�8�8�8�8��O�O�B�G�N�N�2�$6�$6�7�7�7��
	8�
	8r&c��t|j��|�tj|j��t
j�t
j�|j��|j	|j
��}t|ddg��\}}|�|�
��|�����dS)�D
        Test that the sys.executable value is as expected.
        r��!import sys; print(sys.executable)N)rr;rUrnror6r7rWr8r=rBr%r�r�r��rGr�r"r#s    r$�test_executablezBasicTest.test_executable�s���
	�t�|�������d�k�4�<�8�8�8�����R�W�-�-�d�l�;�;�!�[�$�(�4�4�����/�!1�2�2���S���������e�l�l�n�n�5�5�5�5�5r&c���t|j��tjdd���}|�|j��t
j�t
j�|j��|j	|j
��}t|ddg��\}}|�|�
��|�����dS)r
Trr�rN�rr;rnr�ror6r7rWr8r=rBr%r�r�r��rGr�r�r"r#s     r$�test_executable_symlinksz"BasicTest.test_executable_symlinks�s���
	�t�|�����/��t�<�<�<�����t�|�$�$�$�����R�W�-�-�d�l�;�;�!�[�$�(�4�4�����/�!1�2�2���S���������e�l�l�n�n�5�5�5�5�5r&r*zonly relevant on Windowsc�4�t|j��tj�tj�|j��d��}t
jd���}|�|��tj�||j	d��}tj�||j	|j
��}t|d|j
ddgd�	��\}}|�|�
��d
��dS)z0
        Test handling of Unicode paths
        uϼўТλФЙTr�zactivate.bat�&r�zprint(0)�oemrY�0N)rr;r6r7rWr8rnr�ror=rBr%r�r�)rGr;r��activater�r"r#s       r$�test_unicode_in_batch_filez$BasicTest.test_unicode_in_batch_file�s���
	�t�|�����'�,�,�r�w�/�/���=�=�~�N�N���/��-�-�-�����w�����7�<�<����n�E�E������W�d�k�4�8�<�<���
�s�D�H�d�J�7��
�
�
���S�	
��������c�*�*�*�*�*r&c���t��t|j��|�tj|j��tj�tj�	|j��|j
|j��}t|ddg��\}}|�
|���d�����dS)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)rrr;rUrnror6r7rWr8r=rBr%r�r�r�rs    r$�test_multiprocessingzBasicTest.test_multiprocessing�s���	3�4�4�4��t�|�������d�k�4�<�8�8�8�����R�W�-�-�d�l�;�;�!�[�$�(�4�4�����
�! �!�!���S�
	
��������h�o�o�&7�&7�8�8�8�8�8r&c��t��t|j��|�tj|j��tj�tj�	|j��|j
|j��}tj�td��}tj||g��dS)zG
        Test that the multiprocessing is able to spawn itself
        z_test_venv_multiprocessing.pyN)rrr;rUrnror6r7rWr8r=rBrr�
check_call)rGr��scripts   r$�test_multiprocessing_recursionz(BasicTest.test_multiprocessing_recursion�s���
	3�4�4�4��t�|�������d�k�4�<�8�8�8�����R�W�-�-�d�l�;�;�!�[�$�(�4�4������m�-L�M�M����u�f�o�.�.�.�.�.r&znot relevant on Windowsc���tjd��}|�|�d��t|j��tjd���}|�|j��tj	�
|j|jd��}tj	�
|jd��}t|d��5}|�
d|�d	���ddd��n#1swxYwYt||g��\}}|�|d
�����|�|d
�����dS)N�bashzbash required for this testTr�rztest_strict.sh�wzset -euo pipefail
source z
deactivate
r})�shutil�which�skipTestrr;rnr�ror6r7rWr=r\r�r%r�r�)rGr r�r�test_scriptr^r"r#s        r$�%test_deactivate_with_strict_bash_optsz/BasicTest.test_deactivate_with_strict_bash_opts�s{���|�F�#�#���<��M�M�7�8�8�8��t�|�����/��-�-�-�����t�|�$�$�$��7�<�<���d�k�:�F�F���g�l�l�4�<�1A�B�B��
�+�s�
#�
#�	$�q�
�G�G�#�&�#�#�#�
$�
$�
$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$����	$�	$�	$�	$� ��{� 3�4�4���S�����b�i�i�k�k�*�*�*�����b�i�i�k�k�*�*�*�*�*s�C5�5C9�<C9r{zonly relevant on macOSc��t|j��tj��}|�|j��t
j�t
j�|j��|j	|j
��}t|ddg��\}}|�|�
��d�����dS)Nr�z5import os; print("__PYVENV_LAUNCHER__" in os.environ)�Falserrs     r$�test_macos_envzBasicTest.test_macos_envs����t�|�����/�#�#�����t�|�$�$�$�����R�W�-�-�d�l�;�;�!�[�$�(�4�4�����C�!E�F�F���S���������g�n�n�&6�&6�7�7�7�7�7r&c��t|j��|jtjz}|�t
tj|��|�t
tjtj	|����dS)zn
        Test that venv creation fails when the target directory contains
        the path separator.
        N)
rr;r6�pathsepr�r�rnrorsrt)rG�bad_itempaths  r$�test_pathsep_errorzBasicTest.test_pathsep_errorsf��
	�t�|�����|�b�j�0�����*�d�k�<�@�@�@����*�d�k�7�<��3M�3M�N�N�N�N�Nr&c	��t|j��tj}tj�tj����}|�	t|��tj�
||j��}t	j|��tjtj|��tj�
|||jd��}t	j|��tj�
|d��}dtjdd�z}tj�
|||��}g}tjD�]�}	|	�d��rStj�|	��r3tj|	tj�
||�����ktj�tj�
|	d����r�t	j|	��D]�}
|
dkr�	tj�
|	|
��}tj�|��rtj||���^tj�|��r3tj|tj�
||
��������o|�|	�����tj�
||j|j��dd	d
|jg}tj�
|��}
t;jd��}|rt;j��rFtj� tj�!tj����}tj"dkrd
}nd}tGj$|d|
||i���tj�
|j|j|j��}|dddg}tK|��\}}|�&|�'��|v��dS)zr
        Test that when create venv from non-installed python, the zip path
        value is as expected.
        r�zos.pyzpython%d%d.zipNr2z.zipr�r�rnr��LIBDIRr{�DYLD_LIBRARY_PATH�LD_LIBRARY_PATH�
PYTHONPATH)�envz-Sr�zimport sys; print(sys.path))(rr;r>�
platlibdirr6r7r8r9r:�
addCleanuprWr=r�r"�copy2rHr0�makedirsr?�endswithr��copyfiler��copyrk�copytree�appendrBr+r��get_config_varr��abspathr�rCrrr%rjr�)rGr4�non_installed_dirr=�libdir�landmark�
stdlib_zip�zip_landmark�'additional_pythonpath_for_non_installed�eachpathr<rlr �
pythonpath�ld_library_path�ld_library_path_envr�r"r#s                   r$�%test_zippath_from_non_installed_posixz/BasicTest.test_zippath_from_non_installed_posixs���	�t�|�����^�
��G�,�,�X�-=�-?�-?�@�@������ 1�2�2�2�����/���=�=��
��������S�^�V�,�,�,�����/��T�X�a�[�I�I��
��F�����7�<�<���0�0��%��(8��!��(<�<�
��w�|�|�$5�$.�$.�0�0��35�/���	�	�H�� � ��(�(�
��7�>�>�(�+�+�E��O� �����%6�
�C�C�E�E�E����������X�w� ?� ?�@�@�
��J�x�0�0�H�H�D���.�.� �����h��5�5�B��w�~�~�b�)�)�H���B��/�/�/�/�����r�*�*�H����B�G�L�L���,F�,F�G�G�G��H�8�>�>�������w�|�|�-�t�{�D�H�E�E�����|�	���Z�_�_�3�5�5�
�
$�2�8�<�<���	O�)�";�"=�"=�	O� �g�o�o�b�g�o�o�c�n�.M�.M�N�N�O��<�8�#�#�"5���"3����c�#/��#6��#I�	J�	J�	J�	J�����T�\�4�;���A�A���d�D�"?�@����$�$���S�����+�+�-�-��4�5�5�5�5�5r&))rarbrcrdrkrqrurpr�r�r��requireVenvCreater�r��unittest�
skipUnlessr
r�r>rCr�r?r�r�r�r�r�rrr
rr6r<rrr�skipIfr&r)r-rIrfr&r$rhrhbsg������)�)�+�+�+�/�/�/�/�/�/�J�J�J�8?�?�?�>5�5�5�8;�;�;�<�E�E���E�$�F�F���F�*��X������(8�9�9�F�F�:�9���F�*�|�w���
���
���
�M�C�$4�R�a�R�$8�8�9�
�M�C�$4�R�a�R�$8�8�/�J�
��
(�
(�
(�1�1�1�$���/�/�/�N�N�N�*K�K�K��X������(8�9�9�8�8�:�9�8�.�
6�
6���
6��X������(8�9�9�6�6�:�9�6��X����D��*D�E�E�+�+�F�E�+� �9�9���9�(�/�/���/��X�_�R�W��_�&?�@�@�+�+�A�@�+�$�X�����1�3K�L�L�	8�	8�M�L�	8�O�O�O��X�_�R�W��_�&?�@�@��F6�F6���A�@�F6�F6�F6r&rhc�v�eZdZdZd�Zd�Zd�Zd�Zd�Ze	j
d���Ze��d���Z
d	S)
�
EnsurePipTestz%Test venv module installation of pip.c��tj�tj�|j��|j|j��}t|ddg��\}}|�d��}|�	|d��|�d��}|�	|�
��d��dS)Nr�z1try:
 import pip
except ImportError:
 print("OK")�latin-1r}�OK)r6r7rWr8r;r=rBr%rr�r�rs    r$�assert_pip_not_installedz&EnsurePipTest.assert_pip_not_installedis�������R�W�-�-�d�l�;�;�!�[�$�(�4�4�����B�!D�E�E���S��j�j��#�#������b�!�!�!��j�j��#�#����������d�+�+�+�+�+r&c��t|j��|�tj|j��|���dSrK�rr;rUrnrorSrLs r$�test_no_pip_by_defaultz$EnsurePipTest.test_no_pip_by_defaultvsD���t�|�������d�k�4�<�8�8�8��%�%�'�'�'�'�'r&c��t|j��|�tj|jd���|���dS)NF)r�rUrLs r$�test_explicit_no_pipz"EnsurePipTest.test_explicit_no_pip{sI���t�|�������d�k�4�<�%��H�H�H��%�%�'�'�'�'�'r&c�2�ttjd��5}|�|���d��ddd��n#1swxYwY|�tj�tj����dS)Nr�r&)r\r6�devnullr�r]rjr7rE)rGr^s  r$�test_devnullzEnsurePipTest.test_devnull�s���
�"�*�d�
#�
#�	,�q����Q�V�V�X�X�s�+�+�+�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,����	,�	,�	,�	,�	
�������r�z�2�2�3�3�3�3�3s�)A�A�Ac��t|j��t��5}d|d<d|d<tj��5}||d<d}d}d}|fD]�\}}t
j�||��}	tj|	��t
j�|	|��}
t|
d	��5}|�
|��ddd��n#1swxYwY��|���5|�tj|j|d
���ddd��n#1swxYwYddd��n#1swxYwYddd��n#1swxYwYt
j�t
j�|j��|j|j��}t%|dd
ddddddg	��\}
}|�d��}|�|d��|
�d��}
d�t-j����}|�|
dt1|���|��tj|j���d��}|�||
��t��5}|���5d|d<t%|dd
dddddg��\}
}ddd��n#1swxYwYddd��n#1swxYwY|�d��}t7jdd|t6j���}|�|���d��|
�d��}
|�d|
��|�d|
��|s|���dSdS)N�ignore�PYTHONWARNINGS�1�PIP_NO_INSTALL�HOMEz[global]
no-install=1)r�zpip.ini)z.pipzpip.confr!T)r�r�z-Wzignore::DeprecationWarningzignore::ImportWarningz-Ir�r�z	--versionrQr}zpip {}zensurepip._uninstallzl^(WARNING: )?The directory .* or its parent directory is not owned or is not writable by the current user.*$)�flagszSuccessfully uninstalled pipz#Successfully uninstalled setuptools) rr;rr9r�r6r7rWr�r\r��nicer_errorrUrnror8r=rBr%rr��format�	ensurepip�version�len�fsencoder��re�sub�	MULTILINE�rstriprS)rGr��envvars�home_dir�
bad_config�win_location�posix_locationr��fname�dirpath�fpathr^r�r"r#�expected_versionr;s                 r$�do_test_with_pipzEnsurePipTest.do_test_with_pip�s7���t�|����
 �
"�
"�!	9�g�)1�G�$�%�),�G�$�%��,�.�.�
9�(�"*����5�
� 2��!5��'5�&7�,�,�N�G�U� �g�l�l�8�W�=�=�G��H�W�%�%�%��G�L�L��%�8�8�E��e�S�)�)�,�Q����
�+�+�+�,�,�,�,�,�,�,�,�,�,�,����,�,�,�,��
�%�%�'�'�9�9��)�)�$�+�t�|�?S�37�*�9�9�9�9�9�9�9�9�9�9�9�9�9�9����9�9�9�9�#
9�
9�
9�
9�
9�
9�
9�
9�
9�
9�
9����
9�
9�
9�
9�!	9�!	9�!	9�!	9�!	9�!	9�!	9�!	9�!	9�!	9�!	9����!	9�!	9�!	9�!	9�F����R�W�-�-�d�l�;�;�T�[�$�(�S�S�����.J��,�d��U�K�!)�*�*���S�
�j�j��#�#������b�!�!�!��j�j��#�#��#�?�?�9�+<�+>�+>�?�?������3�c�"2�3�3�3�4�6F�G�G�G��+�d�l�+�+�2�2�9�=�=���
�
�g�s�#�#�#�
!�
"�
"�	3�g��!�!�#�#�
3�
3�-5��(�)�'���6��1�4��0�)2�3�3���S�	
3�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3����
3�
3�
3�
3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3����	3�	3�	3�	3��j�j��#�#���f�N�OQ����.�.�.��	
��������r�*�*�*��j�j��#�#���
�
�4�c�:�:�:��
�
�;�S�A�A�A�$�	,��)�)�+�+�+�+�+�	,�	,s��E�A8E�9C	�E�C
�E�"C
�#E�;)D0�$E�0D4�4E�7D4�8E�;E�E	�E�E	�E�E"�%E"�2L
� K3�'L
�3K7	�7L
�:K7	�;L
�
L�Lc#�K�	dV�dS#tj$rb}|jpd�d���}|jpd�d���}|�|�d|�d|����Yd}~dSd}~wwxYw)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**
)rrrSrr�fail)rG�excr"r#s    r$rczEnsurePipTest.nicer_error�s�����		��E�E�E�E�E���,�	�	�	��:�$��,�,�I�,�>�>�C��:�$��,�,�I�,�>�>�C��I�I��/�/�*-�/�/�),�/�/�
�
�
�
�
�
�
�
�
�����	���s�
�A;�AA6�6A;c�Z�|�d��|�d��dS)NFT)rvrLs r$�
test_with_pipzEnsurePipTest.test_with_pip�s0�����e�$�$�$����d�#�#�#�#�#r&N)rarbrcrdrSrVrXr[rv�
contextlib�contextmanagerrcrr}rfr&r$rOrOfs�������/�/�
,�
,�
,�(�(�(�
(�(�(�
4�4�4�W,�W,�W,�r�������$����$�$���$�$�$r&rO�__main__rK)1rdr~rer6�os.pathrsrir"r�rr>r�r9�test.supportrrrrrrr	r
rr�test.support.os_helperr
rrrKrn�
unittest.mockrr�ctypes�ImportErrorrLr�r�r@rHrJ�SkipTestr%�TestCaser(rhrOra�mainrfr&r$�<module>r�s�������������	�	�	�	���������	�	�	�	�
�
�
�
�
�
�
�
�����
�
�
�
���������A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�N�M�M�M�M�M�M�M�M�M���������%�%�%�%�%�%�%�%���M�M�M�M������
�F�F�F�����
(�H�'��J�#�/�!�.�
��s�~�-�@�B�B��
�I�G�I�
�(�
�G�
H�
H�H�����������&�&�&�&�&�x� �&�&�&�PB6�B6�B6�B6�B6��B6�B6�B6�H�R$�R$�R$�R$�R$�H�R$�R$���R$�j�z����H�M�O�O�O�O�O��s�&A+�+A5�4A5