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

�Ke	m�	���ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZddl
mZejdkre
jd���ddlZdZej����d�����rdZd	d
dejdd
�d�dejdd
�d�dejddd�d�ddejid�d�ddejejd
�d�d�d�Zeddd���Zd�d gd!�e���D�����Zd�d"d#g��Zd$�Zd%�Zd&�Z d'�Z!Gd(�d)��Z"Gd*�d+��Z#Gd,�d-e
j$e#��Z%dS).�N)�Path)�support�win32ztest only applies to Windows�py.exez_d.exezpy_d.exezPython Test Suitezhttps://www.python.org/zX.Y version�X.Y.exe)N�ExecutablePath)�DisplayName�InstallPathzX.Y-32 version�
X.Y-32.exezX.Y-arm64 versionz
X.Y-arm64.exez-X fake_arg_for_test)Nr�ExecutableArgumentsz!Ignored because no ExecutablePath)r	�
SupportUrl�3.100�3.100-32�3.100-arm64�ignoredzPython Test Suite SinglezSingle Interpreter)r	r)�PythonTestSuite�PythonTestSuite1�PythonTestSuite/3.100zPythonTestSuite/3.100-32zPythonTestSuite/3.100-arm64)�	PY_PYTHON�
PY_PYTHON2�
PY_PYTHON3�
�
[defaults]c�V�g|]&\}}|dd�����d|����'S)�N�=)�lower��.0�k�vs   �</usr/local/apps/python3/lib/python3.11/test/test_launcher.py�
<listcomp>r#Ss:��=�=�=���A��1�2�2�����������=�=�=�z
[commands]ztest-command=TEST_EXE.exec�`���fd��|���D]\}}�|||���dS)Nc���t|t��rXtj||��5}|���D]\}}�|||���	ddd��dS#1swxYwYdSt|t
��r$tj||dtj|��dStd�	|�����)Nz&don't know how to create data for '{}')
�
isinstance�dict�winreg�CreateKeyEx�items�str�
SetValueEx�REG_SZ�	TypeError�format)�root�key�value�hkeyr r!�_create_registry_datas      �r"r5z3create_registry_data.<locals>._create_registry_data]s����e�T�"�"�		T��#�D�#�.�.�
6�$�!�K�K�M�M�6�6�D�A�q�)�)�$��1�5�5�5�5�6�
6�
6�
6�
6�
6�
6�
6�
6�
6�
6�
6�
6����
6�
6�
6�
6�
6�
6���s�
#�
#�	T���d�C��v�}�e�D�D�D�D�D��D�K�K�E�R�R�S�S�Ss�(A"�"A&�)A&)r+)r1�datar r!r5s    @r"�create_registry_datar7\s`���
T�
T�
T�
T�
T��
�
���*�*���1���d�A�q�)�)�)�)�*�*r$c#�K�tj��D]?}	tj||��V��#t$r}|jdkrYd}~dS�d}~wwxYwdS)Ni)�	itertools�countr)�EnumKey�OSError�winerror)r1�i�exs   r"�	enum_keysr@ms�����
�_�
�
����	��.��q�)�)�)�)�)�)���	�	�	��{�c�!�!�������������	�����s�1�
A�A�
A�Ac��tjtjz}t|��D]c}tj|||���5}t|t
|����ddd��n#1swxYwYtj||���ddS)N��access)r)�	KEY_WRITE�KEY_ENUMERATE_SUB_KEYS�list�OpenKey�delete_registry_datar@�	DeleteKey)r1�keys�ACCESSr2r4s     r"rHrHws���
�
�� =�
=�F��D�z�z�$�$��
�^�D�#�f�
5�
5�
5�	8�� ��y����7�7�7�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8����	8�	8�	8�	8����s�#�#�#�#�$�$s�A,�,A0	�3A0	c	�*�d|�d�}tjdftjtjftjtjffD]N\}}	tjtj||tj|z�����dS#t$rY�KwxYwdS)NzSoftware\Python\PythonCore\z\InstallPathrrBTF)	r)�HKEY_CURRENT_USER�HKEY_LOCAL_MACHINE�KEY_WOW64_64KEY�KEY_WOW64_32KEY�CloseKeyrG�KEY_READr<)�tagr2r1�flags    r"�is_installedrUs���
:��
:�
:�
:�C�	�	!�1�%�	�	"�F�$:�;�	�	"�F�$:�;��	�	�
��d�
	��O�F�N�4��V�_�t�=S�T�T�T�U�U�U��4�4���	�	�	��D�	�����5s�
6B�
B�Bc� �eZdZd�Zd�Zd�ZdS)�
PreservePyInic�J�t|��|_||_d|_dS�N)r�path�content�
_preserved)�selfrZr[s   r"�__init__zPreservePyIni.__init__�s!����J�J��	��������r$c��	|j���|_n#t$r
d|_YnwxYw|j�|jd���dS)Nzutf-16��encoding)rZ�
read_bytesr\�FileNotFoundError�
write_textr[�r]s r"�	__enter__zPreservePyIni.__enter__�sg��	#�"�i�2�2�4�4�D�O�O�� �	#�	#�	#�"�D�O�O�O�	#�����	���T�\�H��=�=�=�=�=s�!�5�5c��|j�|j���dS|j�|j��dSrY)r\rZ�unlink�write_bytes)r]�exc_infos  r"�__exit__zPreservePyIni.__exit__�sB���?�"��I���������I�!�!�$�/�2�2�2�2�2r$N)�__name__�
__module__�__qualname__r^rfrk�r$r"rWrW�sA���������
>�>�>�3�3�3�3�3r$rWc�~�eZdZdZed���Zd�Zdd�Zd�Ze	j
dd	���Ze	j
d
���ZdS)
�
RunPyMixinNc��d}tj��r'ttj��jtz}n[tjd���	d��D]1}|r-t|��tz}|�
��rn�2d}|�r	tj|dgtj
tj
tj
dd���5}|j���t!|jd�����d�d	��d
}|j���|�d��ddd��n#1swxYwYtj�|��sd}n#t0$rd}YnwxYw|s,t3jd�t�����|S)
N�PATH�;�-h�ascii�ignore)�stdin�stdout�stderrra�errorsrr� ��
zcannot locate '{}' for test)�	sysconfig�is_python_buildr�sys�
executable�parent�PY_EXE�os�getenv�split�is_file�
subprocess�Popen�PIPErx�close�nextry�
splitlines�
rpartition�read�wait�version�
startswithr<�unittest�SkipTestr0)�cls�py_exe�pr�s    r"�find_pyzRunPyMixin.find_py�s�����$�&�&�		��#�.�)�)�0�6�9�F�F��Y�v�&�&�,�,�S�1�1�
�
����!�!�W�W�v�-�F��~�~�'�'��������	�
��%��T�N�$�/�%�?�%�?�$�#�
������G�M�M�O�O�O�"�1�8�T�2�2�=�=�?�?��B�M�M�c�R�R�ST�U�G��H�M�M�O�O�O��F�F�2�J�J�J��������������������{�-�-�g�6�6�"�!�F����
�
�
�����
�����	��#�-�4�4�V�<�<���
��
s7�:F�BE0�$F�0E4�4F�7E4�8$F�F,�+F,c�P�|js|���|_|jSrY)r�r�res r"�
get_py_exezRunPyMixin.get_py_exe�s#���{�	)��,�,�.�.�D�K��{�r$Frc��
�|js|���|_hd��
i�
fd�tj���D���dddd��d�|pi���D���}|s
|jg|�}tj|||jt
jt
jt
j���5}|j�	��|�
d��|j����
d	d
��}|j����
dd
��}ddd��n#1swxYwY|j|krpt jrd|sbt%d��t%|jg|���t%d
��t%|��t%d��t%|��|r/|j|kr$tj|j|jg|�||���|�||j��d�|���D��}	||	d<||	d<|	S)N>rrr�VIRTUAL_ENVc�l��i|]0\}}|����v�|���|��1Sro��upper)rr r!rws   �r"�
<dictcomp>z%RunPyMixin.run_py.<locals>.<dictcomp>�s9���V�V�V���1�a�g�g�i�i�v�>U�>U�q�w�w�y�y�!�>U�>U�>Ur$�1�)�PYLAUNCHER_DEBUG�PYLAUNCHER_DRYRUN�PYLAUNCHER_LIMIT_TO_COMPANYc�>�i|]\}}|���|��Sror�rs   r"r�z%RunPyMixin.run_py.<locals>.<dictcomp>�s&��<�<�<���1�q�w�w�y�y�!�<�<�<r$)�envr�rxryrzr~�utf-8�replacervz
++ COMMAND ++z++ STDOUT ++z++ STDERR ++c���i|]b}|�d��sKd|v�|�d��d|�d��d�����cS)�#�:rr})r��	partition�lstrip)r�ss  r"r�z%RunPyMixin.run_py.<locals>.<dictcomp>�so��
�
�
���<�<��$�$�
�*-����
�K�K����Q�����S�!1�!1�!�!4�!;�!;�!=�!=�)1��r$ryrz)r�r�r��environr+r�r�r�rxr�r�ryr��decoderz�
returncoder�verbose�print�CalledProcessError�assertEqualr�)r]�argsr��
allow_fail�expect_returncode�argvr��out�errr6rws          @r"�run_pyzRunPyMixin.run_py�s�����{�	)��,�,�.�.�D�K�I�I�I��
�V�V�V�V��
�(8�(8�(:�(:�V�V�V�
� #�!$�+-�	
�
�
�
=�<����(9�(9�(;�(;�<�<�<�
���	(��K�'�$�'�D�
�
����{��/��?��?�

�
�
�	=��
�G�M�M�O�O�O�
�F�F�2�J�J�J��(�-�-�/�/�(�(��)�<�<�C��(�-�-�/�/�(�(��)�<�<�C�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=����	=�	=�	=�	=�
�<�,�,�,���,��,��/�"�"�"��4�;�&��&�'�'�'��.�!�!�!��#�J�J�J��.�!�!�!��#�J�J�J��	>�!�,�*;�;�;��/���t�{�>R�T�>R�TW�Y\�]�]�]����.���=�=�=�
�
��^�^�%�%�
�
�
��
��X����X���s�B	E�E�Ec��tj�d��}|stjd���tt
|��dz|��S)N�LOCALAPPDATAz5LOCALAPPDATA environment variable is missing or emptyzpy.ini)r�r��getr�r�rWr)r]r[�
local_appdatas   r"�py_inizRunPyMixin.py_inisT���
���~�6�6�
��	8��#�%7�8�8�
8��T�-�0�0�8�;�W�E�E�Er$r�c#�K�ttjtj�����dz��}|�||���	|V�|���dS#|���wxYw)N)�dirz.pyr`)r�tempfile�mktempr��getcwdrdrh)r]r[ra�files    r"�scriptzRunPyMixin.scriptsr�����H�O��	���4�4�4�u�<�=�=������(��3�3�3�	��J�J�J��K�K�M�M�M�M�M��D�K�K�M�M�M�M���s�A+�+Bc#�^K�tj��dz}|�dd���|ttj��jz}|���	|dt|j��ifV�tj
|��dS#tj
|��wxYw)N�ScriptsT)�exist_ok�parentsr�)r�cwd�mkdirr�r��name�touchr,r��shutil�rmtree)r]�venv�venv_exes   r"�	fake_venvzRunPyMixin.fake_venvs������x�z�z�I�%���
�
�D�$�
�/�/�/��4���/�/�4�4��������	 ��]�C���,<�,<�=�=�=�=�=��M�$�������F�M�$�������s�&B�B,)NFrN)r�)
rlrmrnr��classmethodr�r�r�r��
contextlib�contextmanagerr�r�ror$r"rqrq�s�������
�F��&�&��[�&�P���
,�,�,�,�\F�F�F����������� � ��� � � r$rqc�6�eZdZed���Zed���Zd�Zd�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
d�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!d�Z"d �Z#d!�Z$d"�Z%d#�Z&d$�Z'd%�Z(d&�Z)d'�Z*d(�Z+d)�Z,d*�Z-d+�Z.d,�Z/d-S).�TestLauncherc���tjtjd��5}t|t��ddd��n#1swxYwYt
jrtjd��}dSdS)N�Software\Pythonz!reg query HKCU\Software\Python /s)	r)�	CreateKeyrMr7�	TEST_DATArr�r��check_output)r�r2r�s   r"�
setUpClasszTestLauncher.setUpClasss���
�
�f�6�8K�
L�
L�	1�PS� ��i�0�0�0�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1��?�	O��'�(M�N�N�A�A�A�	O�	Os�A�A�	Ac���tjtjdtjtjz���5}t|t��ddd��dS#1swxYwYdS)Nr�rB)r)rGrMrDrErHr�)r�r2s  r"�
tearDownClasszTestLauncher.tearDownClass(s���
�^�F�4�6I�RX�Rb�ek�fC�SC�D�D�D�	1�HK� ��i�0�0�0�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1�	1�	1s�A�A �#A c��|�dg��}|�|jt|d����|�tj�d��d|d��dS)N�-0�argv0r|rr�)r�r�r�rr�r�r��r]r6s  r"�test_versionzTestLauncher.test_version.sn���{�{�D�6�"�"�������d�4��=�&9�&9�:�:�:������.�.�s�3�3�A�6��Y��H�H�H�H�Hr$c�j�|�dg��}|�d|d��dS)Nru�TruezSearchInfo.help�r�r�r�s  r"�test_help_optionzTestLauncher.test_help_option3s7���{�{�D�6�"�"�������&7�!8�9�9�9�9�9r$c��dD]�\}}}|�|��5|�|g��}|�||d��|�||d��ddd��n#1swxYwY��dS)N))r�r��False)�-0pr�r�)�--listr�r�)�--list-pathsr�r�zSearchInfo.listzSearchInfo.listPaths)�subTestr�r�)r]�opt�v1�v2r6s     r"�test_list_optionzTestLauncher.test_list_option7s���
�		C�		C�K�C��R����c�"�"�
C�
C��{�{�C�5�)�)��� � ��T�*;�%<�=�=�=�� � ��T�*@�%A�B�B�B�
C�
C�
C�
C�
C�
C�
C�
C�
C�
C�
C����
C�
C�
C�
C��
		C�		Cs�AA9�9A=	�A=	c��
��|�dg��}i}i�|d���D]D}tjd|��}|r+|�d��||�d��<�Et
D]U}t
|�
�
fd��
D��}|D]}d|�d|��}�
|d	�|<���d|�d
�d���V�fd�|���D��}		|��|	��dS#tj
r$td��t|d���xYw)
Nr�ry�\s*(.+?)\s+?(\*\s+)?(.+)$r�c�J��g|]}t�|t���|�� Sro�r'r(�r�t�company_datas  �r"r#z*TestLauncher.test_list.<locals>.<listcomp>M�,���Q�Q�Q�!�z�,�q�/�4�/P�/P�Q�A�Q�Q�Qr$�-V:�/r	�/ignoredc�$��i|]\}}|�v�	||��
Sroro�rr r!�expects   �r"r�z*TestLauncher.test_list.<locals>.<dictcomp>S�$���@�@�@�4�1�a�A��K�K�!�Q�K�K�Kr$�*** STDOUT ***)r�r��re�match�groupr��popr+�assertDictEqualrr�r�)r]r6�found�line�m�company�tagsrS�arg�actualr�rs          @@r"�	test_listzTestLauncher.test_listCs������{�{�H�:�&�&��������N�-�-�/�/�	/�	/�D���5�t�<�<�A��
/�$%�G�G�A�J�J��a�g�g�a�j�j�!�� �	6�	6�G�$�W�-�L�Q�Q�Q�Q�|�Q�Q�Q�D��
?�
?��+�G�+�+�c�+�+��*�3�/�
�>��s����J�J�.�W�.�.�.��5�5�5�5�@�@�@�@�5�;�;�=�=�@�@�@��	�� � ���0�0�0�0�0��	���
&��&�'�'�'��d�8�n�%�%�%����s�:D�3Ec	����|�dg��}i}i�|d���D]D}tjd|��}|r+|�d��||�d��<�Et
D]�}t
|��fd��D��}|D]�}d|�d|��}�|d	}		|	d
�|<	�|xxd|	dzz
cc<n#t$rYnwxYw�P#t$rGtt|	d��ttj
��jz���|<Y��wxYw��d|�d
�d���ވfd�|�
��D��}
	|��|
��dS#tjr$t#d��t#|d���xYw)Nr�ryr�rr�c�J��g|]}t�|t���|�� Sror�r�s  �r"r#z0TestLauncher.test_list_paths.<locals>.<listcomp>frr$rrr
rr|rrc�$��i|]\}}|�v�	||��
Srorors   �r"r�z0TestLauncher.test_list_paths.<locals>.<dictcomp>urr$r)r�r�r	r
rr��KeyErrorr,rr�r�r�rr+r
rr�r�)
r]r6rrrrrrSr�installrr�rs
           @@r"�test_list_pathszTestLauncher.test_list_paths\s/�����{�{�N�+�,�,��������N�-�-�/�/�	/�	/�D���5�t�<�<�A��
/�$%�G�G�A�J�J��a�g�g�a�j�j�!�� �	6�	6�G�$�W�-�L�Q�Q�Q�Q�|�Q�Q�Q�D��

W�

W��+�G�+�+�c�+�+��&�s�+�M�:��W�")�*:�";�F�3�K���s����s�W�5J�-K�'K�K������#�������������W�W�W�"%�d�7�4�=�&9�&9�D���<P�<P�<U�&U�"V�"V�F�3�K�K�K�W����
�J�J�.�W�.�.�.��5�5�5�5�@�@�@�@�5�;�;�=�=�@�@�@��	�� � ���0�0�0�0�0��	���
&��&�'�'�'��d�8�n�%�%�%����sC�;C2�C!� C2�!
C.�+C2�-C.�.C2�2AE�E�F�3G
c���d}|�d|�d�g��}|�d|d��|�||d��|�d|d��dS)	Nrrrr�
LaunchCommand�env.companyr�env.tagr��r]rr6s   r"�test_filter_to_companyz#TestLauncher.test_filter_to_company~s}��#���{�{�,�'�,�,�,�-�.�.������D��$9�:�:�:�����$�}�"5�6�6�6�����$�y�/�2�2�2�2�2r$c��d}|�d|�d�gtd������}|�d|d��|�||d	��|�d
|d��dS)Nrrrz3.0)r�r�rrrrr)r�r(r�r s   r"�#test_filter_to_company_with_defaultz0TestLauncher.test_filter_to_company_with_default�s���#���{�{�,�'�,�,�,�-�4�%�3H�3H�3H�{�I�I������D��$9�:�:�:�����$�}�"5�6�6�6�����$�y�/�2�2�2�2�2r$c��d}|�dg��}|�d|d��|�||d��|�d|d��|�dg��}|�d	|d��|�||d��|�d
|d��|�dg��}|�d|d��|�||d��|�d
|d��dS)Nrz-V:3.100rrrrrz-V:3.100-32rrz-V:3.100-arm64z"X.Y-arm64.exe -X fake_arg_for_testrr�r s   r"�test_filter_to_tagzTestLauncher.test_filter_to_tag�s:��#���{�{�K�=�)�)������D��$9�:�:�:�����$�}�"5�6�6�6�����$�y�/�2�2�2��{�{�N�+�,�,������t�O�'<�=�=�=�����$�}�"5�6�6�6�����T�)�_�5�5�5��{�{�-�.�/�/�����=�t�O�?T�U�U�U�����$�}�"5�6�6�6������Y��8�8�8�8�8r$c��d}|�d|�d�gd���}|�d|�d�g��}|�d|d��|�||d	��|�d
|d��dS)Nrrz/3.1�g)r�z/3.100rrrrrr�r s   r"�test_filter_to_company_and_tagz+TestLauncher.test_filter_to_company_and_tag�s���#���{�{�/�'�/�/�/�0�C�{�H�H���{�{�1�'�1�1�1�2�3�3������D��$9�:�:�:�����$�}�"5�6�6�6�����$�y�/�2�2�2�2�2r$c�@�d}|�dgd|id���}dS)Nrz-V:Nonexistentr�r(�r�r�)r�r s   r"�test_filter_with_single_installz,TestLauncher.test_filter_with_single_install�s4��$���{�{�
��.��8�!��
�
���r$c�*�	|�dgd���}n'#tj$rtjd���wxYw|�d|d��|�|d�d��|d��dS)	N�-3T�r�z(requires at least one Python 3.x install�
PythonCorerr�3.)r�r�r�r�r�r��
assertTruer�r�s  r"�test_search_major_3z TestLauncher.test_search_major_3�s���	P��;�;��v�$�;�7�7�D�D���,�	P�	P�	P��#�$N�O�O�O�	P��������t�M�':�;�;�;�����Y��2�2�4�8�8�$�y�/�J�J�J�J�Js��$?c���	|�dgd���}nO#tj$r=td�t	dd��D����stjd����wxYw|�d|d	��|�|d
�	d��|d
��|�|d
�
d��|d
��dS)
Nz-3-32Tr/c3�<K�|]}td|�d���V��dS)r1�-32N)rU)rr>s  r"�	<genexpr>z6TestLauncher.test_search_major_3_32.<locals>.<genexpr>�s2����G�G�Q�|�K��K�K�K�0�0�G�G�G�G�G�Gr$��z/requires at least one 32-bit Python 3.x installr0rrr1r6)r�r�r��any�ranger�r�r�r2r��endswithr�s  r"�test_search_major_3_32z#TestLauncher.test_search_major_3_32�s���	��;�;��y�T�;�:�:�D�D���,�	�	�	��G�G�%��2�,�,�G�G�G�G�G�
[��'�(Y�Z�Z�Z��	����	
����t�M�':�;�;�;�����Y��2�2�4�8�8�$�y�/�J�J�J�����Y��0�0��7�7��i��I�I�I�I�Is
��AA'c�L�	|�dgd���}n8#tj$r&td��st	jd���YnwxYw|�d|d��|�|d�d	��|d��dS)
N�-2Tr/z2.7z(requires at least one Python 2.x installr0rrz2.)	r�r�r�rUr�r�r�r2r�r�s  r"�test_search_major_2z TestLauncher.test_search_major_2�s���	T��;�;��v�$�;�7�7�D�D���,�	T�	T�	T���&�&�
T��'�(R�S�S�S�
T�
T�	T����	
����t�M�':�;�;�;�����Y��2�2�4�8�8�$�y�/�J�J�J�J�Js��2A�Ac�b�|�t��5|�dg��}ddd��n#1swxYwY|�d|d��|�d|d��|�d|d�����dS)N�-argr�SearchInfo.companyr�SearchInfo.tag�X.Y.exe -argry�r��TEST_PY_DEFAULTSr�r��stripr�s  r"�test_py_defaultzTestLauncher.test_py_default�s���
�[�[�)�
*�
*�	)�	)��;�;��x�(�(�D�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)����	)�	)�	)�	)����*�D�1E�,F�G�G�G�����$�'7�"8�9�9�9������h��)=�)=�)?�)?�@�@�@�@�@s�>�A�Ac�d�|�t��5|�ddg��}ddd��n#1swxYwY|�d|d��|�d|d��|�d|d�����dS)	Nr?rBrrCrrD�X.Y-32.exe -argryrFr�s  r"�test_py2_defaultzTestLauncher.test_py2_default�s���
�[�[�)�
*�
*�	/�	/��;�;��f�~�.�.�D�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/����*�D�1E�,F�G�G�G�����T�*:�%;�<�<�<����*�D��N�,@�,@�,B�,B�C�C�C�C�C��?�A�Ac�d�|�t��5|�ddg��}ddd��n#1swxYwY|�d|d��|�d|d��|�d|d�����dS)	Nr.rBrrCrrD�'X.Y-arm64.exe -X fake_arg_for_test -argryrFr�s  r"�test_py3_defaultzTestLauncher.test_py3_default�s���
�[�[�)�
*�
*�	/�	/��;�;��f�~�.�.�D�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/����*�D�1E�,F�G�G�G������-=�(>�?�?�?����B�D��N�DX�DX�DZ�DZ�[�[�[�[�[rMc��|�dgt���}|�d|d��|�d|d��|�d|d�����dS)	NrBr#rrCrrDrEry�r��TEST_PY_ENVr�rHr�s  r"�test_py_default_envz TestLauncher.test_py_default_env�s~���{�{�F�8��{�5�5�����*�D�1E�,F�G�G�G�����$�'7�"8�9�9�9������h��)=�)=�)?�)?�@�@�@�@�@r$c��|�ddgt���}|�d|d��|�d|d��|�d|d	�����dS)
Nr?rBr#rrCrrDrKryrRr�s  r"�test_py2_default_envz!TestLauncher.test_py2_default_env�s����{�{�D�&�>�{�{�;�;�����*�D�1E�,F�G�G�G�����T�*:�%;�<�<�<����*�D��N�,@�,@�,B�,B�C�C�C�C�Cr$c��|�ddgt���}|�d|d��|�d|d��|�d|d	�����dS)
Nr.rBr#rrCrrDrOryrRr�s  r"�test_py3_default_envz!TestLauncher.test_py3_default_env�s����{�{�D�&�>�{�{�;�;�����*�D�1E�,F�G�G�G������-=�(>�?�?�?����B�D��N�DX�DX�DZ�DZ�[�[�[�[�[r$c���|�t��5dD]�}|�|��5|�dg|�d����}|�d|d��|�d|d��|�d	|d
�����ddd��n#1swxYwY��	ddd��dS#1swxYwYdS)N)z"py.exe"rz"py"�py�	--versionz
 --version�r�rrCrrDzX.Y.exe --versionry)r�rGr�r�r�rH)r]r�r6s   r"�test_py_default_short_argv0z(TestLauncher.test_py_default_short_argv0�s���
�[�[�)�
*�
*�	S�	S�=�
S�
S���\�\�%�(�(�S�S��;�;��}�e�;O�;O�;O�;�P�P�D��$�$�%6��=Q�8R�S�S�S��$�$�W�d�3C�.D�E�E�E��$�$�%9�4��>�;O�;O�;Q�;Q�R�R�R�	S�S�S�S�S�S�S�S�S�S�S����S�S�S�S��
S�	S�	S�	S�	S�	S�	S�	S�	S�	S�	S�	S�	S����	S�	S�	S�	S�	S�	Ss5�C�BC�7C�C�C�
C�C�C!�$C!c��|�dgt���}d}|d���D]0}tjd|��}|r|�d��}n�1|�d|��dS)Nr�r#ryz\s*-V:(.+?)\s+?\*\s+(.+)$r�r)r�rSr�r	r
rr�)r]r6�defaultrrs     r"�test_py_default_in_listz$TestLauncher.test_py_default_in_list�s����{�{�D�6�{�{�3�3������N�-�-�/�/�	�	�D���5�t�<�<�A��
��'�'�!�*�*����
�	
���0�'�:�:�:�:�:r$c��|���5\}}|�dg|���}|d���D]Q}tjd|��}|r8|�t
|��|�d����n�R|�d��|�dg|���}|d���D]D}tjd|��}|r+|�d|�d����n�E|�d	��ddd��dS#1swxYwYdS)
Nr�r#ryz
\s*\*\s+(.+)$r�zdid not find active venv pathr�zActive venvzdid not find active venv entry)	r�r�r�r	r
r�r,r�fail)r]r�r�r6rrs      r"�test_virtualenv_in_listz$TestLauncher.test_virtualenv_in_lists���
�^�^�
�
�	<��(�C��;�;��w�C�;�0�0�D��X��1�1�3�3�
;�
;���H�-�t�4�4�����$�$�S��]�]�A�G�G�A�J�J�?�?�?��E���	�	�9�:�:�:��;�;��v�3�;�/�/�D��X��1�1�3�3�
<�
<���H�-�t�4�4�����$�$�]�A�G�G�A�J�J�?�?�?��E���	�	�:�;�;�;�#	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<�	<�	<s�D)E�E�Ec�6�|���5\}}|�gi|�ddi����}|�dgi|�ddi����}ddd��n#1swxYwY|�|d���t	|����|�|dd��|�|d���t	|����|�|dd��dS)NrzPythonTestSuite/3r#z-V:PythonTestSuite/3ryzSearchInfo.lowPriorityTagr�)r�r�r�rHr,�assertNotEqual)r]r�r��data1�data2s     r"�test_virtualenv_with_envz%TestLauncher.test_virtualenv_with_envs`��
�^�^�
�
�	i��(�C��K�K��(Q�3�(Q��=P�(Q�(Q�K�R�R�E��K�K�!7� 8�>g��>g�k�Sf�>g�>g�K�h�h�E�	i�	i�	i�	i�	i�	i�	i�	i�	i�	i�	i����	i�	i�	i�	i�	
����x��.�.�0�0�#�h�-�-�@�@�@�����:�;�V�D�D�D����E�(�O�1�1�3�3�S��]�]�C�C�C����E�"=�>��G�G�G�G�Gs�?A � A$�'A$c���|�t��5|�d��5}|�|dg��}ddd��n#1swxYwYddd��n#1swxYwY|�d|d��|�d|d��|�d|�d�|d	�����dS)
N�#! /usr/bin/python -prearg�-postargrrCrrD�X.Y.exe -prearg �	 -postargry�r�rGr�r�r�rH�r]r�r6s   r"�test_py_shebangzTestLauncher.test_py_shebang#sX��
�[�[�)�
*�
*�	9�	9����9�:�:�
9�f��{�{�F�J�#7�8�8��
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�	
���*�D�1E�,F�G�G�G�����$�'7�"8�9�9�9����=�F�=�=�=�t�H�~�?S�?S�?U�?U�V�V�V�V�V�4�A,�A�	A,�A	�A,�A	�A,�,A0�3A0c���|�t��5|�d��5}|�|dg��}ddd��n#1swxYwYddd��n#1swxYwY|�d|d��|�d|d��|�d|�d�|d	�����dS)
Nz#! python -preargrkrrCrrDrlrmryrnros   r"�test_python_shebangz TestLauncher.test_python_shebang+sX��
�[�[�)�
*�
*�	9�	9����0�1�1�
9�V��{�{�F�J�#7�8�8��
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�	
���*�D�1E�,F�G�G�G�����$�'7�"8�9�9�9����=�F�=�=�=�t�H�~�?S�?S�?U�?U�V�V�V�V�Vrqc���|�t��5|�d��5}|�|dg��}ddd��n#1swxYwYddd��n#1swxYwY|�d|d��|�d|d��|�d|�d�|d	�����dS)
Nz#! /usr/bin/python2 -preargrkrrCrrD�X.Y-32.exe -prearg rmryrnros   r"�test_py2_shebangzTestLauncher.test_py2_shebang3sX��
�[�[�)�
*�
*�	9�	9����:�;�;�
9�v��{�{�F�J�#7�8�8��
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�	
���*�D�1E�,F�G�G�G�����T�*:�%;�<�<�<����@�v�@�@�@�$�x�.�BV�BV�BX�BX�Y�Y�Y�Y�Yrqc���|�t��5|�d��5}|�|dg��}ddd��n#1swxYwYddd��n#1swxYwY|�d|d��|�d|d��|�d|�d�|d	�����dS)
Nz#! /usr/bin/python3 -preargrkrrCrrD�+X.Y-arm64.exe -X fake_arg_for_test -prearg rmryrnros   r"�test_py3_shebangzTestLauncher.test_py3_shebang;s[��
�[�[�)�
*�
*�	9�	9����:�;�;�
9�v��{�{�F�J�#7�8�8��
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�	
���*�D�1E�,F�G�G�G������-=�(>�?�?�?����X�v�X�X�X�Z^�_g�Zh�Zn�Zn�Zp�Zp�q�q�q�q�qrqc���|�t��5|�d��5}|�|dg��}ddd��n#1swxYwYddd��n#1swxYwY|�d|d��|�d|d��|�d|�d�|d	�����dS)
Nz#! /usr/bin/python -prearg
rkrrCrrDrlrmryrnros   r"�test_py_shebang_nlzTestLauncher.test_py_shebang_nlCsX��
�[�[�)�
*�
*�	9�	9����;�<�<�
9���{�{�F�J�#7�8�8��
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�	
���*�D�1E�,F�G�G�G�����$�'7�"8�9�9�9����=�F�=�=�=�t�H�~�?S�?S�?U�?U�V�V�V�V�Vrqc���|�t��5|�d��5}|�|dg��}ddd��n#1swxYwYddd��n#1swxYwY|�d|d��|�d|d��|�d|�d�|d	�����dS)
Nz#! /usr/bin/python2 -prearg
rkrrCrrDrurmryrnros   r"�test_py2_shebang_nlz TestLauncher.test_py2_shebang_nlKsX��
�[�[�)�
*�
*�	9�	9����<�=�=�
9���{�{�F�J�#7�8�8��
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�	
���*�D�1E�,F�G�G�G�����T�*:�%;�<�<�<����@�v�@�@�@�$�x�.�BV�BV�BX�BX�Y�Y�Y�Y�Yrqc���|�t��5|�d��5}|�|dg��}ddd��n#1swxYwYddd��n#1swxYwY|�d|d��|�d|d��|�d|�d�|d	�����dS)
Nz#! /usr/bin/python3 -prearg
rkrrCrrDrxrmryrnros   r"�test_py3_shebang_nlz TestLauncher.test_py3_shebang_nlSs[��
�[�[�)�
*�
*�	9�	9����<�=�=�
9���{�{�F�J�#7�8�8��
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�	
���*�D�1E�,F�G�G�G������-=�(>�?�?�?����X�v�X�X�X�Z^�_g�Zh�Zn�Zn�Zp�Zp�q�q�q�q�qrqc���|�t��5|�d��5}|�|dgd|�d����}ddd��n#1swxYwYddd��n#1swxYwY|�d|d��|�d|d	��|�d
|�d�|d�����dS)Nrjrkz
"py.exe" "z
" -postargr\rrCrrDzX.Y.exe -prearg "ryrnros   r"�test_py_shebang_short_argv0z(TestLauncher.test_py_shebang_short_argv0[s���
�[�[�)�
*�
*�	_�	_����9�:�:�
_�f��{�{�F�J�#7�>]�6�>]�>]�>]�{�^�^��
_�
_�
_�
_�
_�
_�
_�
_�
_�
_�
_����
_�
_�
_�
_�	_�	_�	_�	_�	_�	_�	_�	_�	_�	_�	_����	_�	_�	_�	_�	
���*�D�1E�,F�G�G�G�����$�'7�"8�9�9�9����?�V�?�?�?��h��AU�AU�AW�AW�X�X�X�X�Xs4�A2�A�A2�A	�A2�"A	�#A2�2A6�9A6c�*�|�d�ddg����5|�gdd���}ddd��n#1swxYwY|�d|d��|�d	|d
��dS)Nrrzpython=3.999-64Tr()r�r�z3.999-64rDr�zSearchInfo.oldStyleTag)r��joinr�r�r�s  r"�test_py_handle_64_in_iniz%TestLauncher.test_py_handle_64_in_inids���
�[�[����L�2C�#D�E�E�
F�
F�	K�	K��;�;�r�d�c�;�J�J�D�	K�	K�	K�	K�	K�	K�	K�	K�	K�	K�	K����	K�	K�	K�	K�	
����T�*:�%;�<�<�<������&>�!?�@�@�@�@�@s�A�A�Ac� �ttj��j}|�t
��5|�d|�d���5}|�|dgdttj��j�dtj
d����i���}ddd��n#1swxYwYddd��n#1swxYwY|�tj�d|�d�|d	�����dS�
N�#! /usr/bin/env z -preargrkrsrtr#z	 -prearg rmry)
rr�r��stemr�rGr�r�r�r�r�r�rH�r]r�r�r6s    r"�test_search_pathzTestLauncher.test_search_pathksz���C�N�#�#�(��
�[�[�)�
*�
*�	�	����>��>�>�>�?�?�
�6��{�{��Z�(��D���$8�$8�$?�!U�!U�"�)�F�BS�BS�!U�!U�V�#����
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
���C�N�F�F�V�F�F�F��X��H\�H\�H^�H^�_�_�_�_�_�6�C�AB.�"C�.B2	�2C�5B2	�6C�C	�C	c� �ttj��j}|�t
��5|�d|�d���5}|�|dgdttj��j�dtj
d����i���}ddd��n#1swxYwYddd��n#1swxYwY|�tj�d|�d�|d	�����dSr�)
rr�r�r�r�rGr�r�r�r�r�r�rH)r]r�r�r6s    r"�test_search_path_exez!TestLauncher.test_search_path_exeusz���C�N�#�#�(��
�[�[�)�
*�
*�	�	����>��>�>�>�?�?�
�6��{�{��Z�(��D���$8�$8�$?�!U�!U�"�)�F�BS�BS�!U�!U�V�#����
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
���C�N�F�F�V�F�F�F��X��H\�H\�H^�H^�_�_�_�_�_r�c���|���j}|�t��5|�d|����5}|�|gd|���j�dtjd����i���}ddd��n#1swxYwYddd��n#1swxYwY|�	d|��|d�
����dS)Nr�rsrtr#zX.Y.exe ry)r�r�r�rGr�r�r�r�r�r�rHr�s    r"�test_recursive_search_pathz'TestLauncher.test_recursive_search_path�sj����� � �%��
�[�[�)�
*�
*�	�	����6��6�6�7�7�
�6��{�{��H��D�O�O�$5�$5�$<�!R�!R�r�y��?P�?P�!R�!R�S�#����
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
���,�F�,�,�d�8�n�.B�.B�.D�.D�E�E�E�E�Es6�B9�
A	B"�B9�"B&	�&B9�)B&	�*B9�9B=�B=c�r�|�dgddid���}|d���}	tjddgtjtj�	��|�d|��n&#t$r|�d
|��YnwxYw|�d|��dS)Nz-V:3.10�PYLAUNCHER_ALWAYS_INSTALLr��or+ryz
winget.exer[)ryrzzms-windows-store://�9PJPW5LDXLZ5)r�rHr��
check_callr��STDOUT�assertInrc)r]r6�cmds   r"�test_installzTestLauncher.test_install�s����{�{�I�;�-H�#�,N�be�{�f�f���8�n�"�"�$�$��	-��!�<��"=�j�o�^h�^o�p�p�p�p�
�M�M�,��,�,�,�,��!�	6�	6�	6��M�M�/��5�5�5�5�5�	6����
	
�
�
�n�c�*�*�*�*�*s�-A;�; B�Bc���|�d��5}|�|g��}ddd��n#1swxYwY|�d|��|d�����dS)Nz#! C:/some_random_app -withargzC:\some_random_app -witharg ry)r�r�r�rHros   r"�test_literal_shebang_absolutez*TestLauncher.test_literal_shebang_absolute�s���
�[�[�:�
;�
;�	)�v��;�;��x�(�(�D�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)����	)�	)�	)�	)����4�F�4�4���N� � �"�"�	
�	
�	
�	
�	
�
�9�=�=c��|�d��5}|�|g��}ddd��n#1swxYwY|�|jj�d|��|d�����dS)Nz#! ..\some_random_app -withargz\some_random_app -witharg ry�r�r�r�r�rHros   r"�test_literal_shebang_relativez*TestLauncher.test_literal_shebang_relative�s���
�[�[�;�
<�
<�	)���;�;��x�(�(�D�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)����	)�	)�	)�	)�����}�#�H�H��H�H���N� � �"�"�	
�	
�	
�	
�	
r�c��|�d��5}|�|g��}ddd��n#1swxYwY|�d|j�d|��|d�����|�d��5}|�|g��}ddd��n#1swxYwY|�d|j�d|��|d�����dS)Nz#! "some random app" -witharg�"z\some random app" -witharg ryz#! some" random "app -withargr�ros   r"�test_literal_shebang_quotedz(TestLauncher.test_literal_shebang_quoted�s~��
�[�[�9�
:�
:�	)�f��;�;��x�(�(�D�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)����	)�	)�	)�	)����C��
�C�C�6�C�C���N� � �"�"�	
�	
�	
�
�[�[�9�
:�
:�	)�f��;�;��x�(�(�D�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)����	)�	)�	)�	)����C��
�C�C�6�C�C���N� � �"�"�	
�	
�	
�	
�	
s�9�=�=�B5�5B9�<B9c��|�d��5}|�|g��}ddd��n#1swxYwY|�d|j�d|��|d�����dS)Nz#! some\" random "app -withargr�z\some\ random app" -witharg ryr�ros   r"�"test_literal_shebang_quoted_escapez/TestLauncher.test_literal_shebang_quoted_escape�s���
�[�[�;�
<�
<�	)���;�;��x�(�(�D�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)����	)�	)�	)�	)����E��
�E�E�V�E�E���N� � �"�"�	
�	
�	
�	
�	
r�c�R�|�t��5|�d��5}|�|g��}ddd��n#1swxYwYddd��n#1swxYwY|�d|��|d�����dS)Nz#! test-command arg1zTEST_EXE.exe arg1 ry)r��TEST_PY_COMMANDSr�r�r�rHros   r"�test_literal_shebang_commandz)TestLauncher.test_literal_shebang_command�s$��
�[�[�)�
*�
*�	-�	-����3�4�4�
-���{�{�F�8�,�,��
-�
-�
-�
-�
-�
-�
-�
-�
-�
-�
-����
-�
-�
-�
-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-����	-�	-�	-�	-�	
���)��)�)���N� � �"�"�	
�	
�	
�	
�	
s4�A+�A�A+�A	�A+�A	�A+�+A/�2A/c��|�d��5}|�|g��}ddd��n#1swxYwY|jdz}|�|�d|��|d�����dS)Nz#! /usr/bin/not-python arg1z/usr/bin/not-pythonz arg1 ry)r�r�r�r�rH)r]r�r6rs    r"�%test_literal_shebang_invalid_templatez2TestLauncher.test_literal_shebang_invalid_template�s���
�[�[�6�
7�
7�	)�6��;�;��x�(�(�D�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)����	)�	)�	)�	)���!6�6������%�%�V�%�%���N� � �"�"�	
�	
�	
�	
�	
r�N)0rlrmrnr�r�r�r�r�r�rrr!r$r&r)r,r3r=r@rIrLrPrTrVrXr]r`rcrhrprsrvryr{r}rr�r�r�r�r�r�r�r�r�r�r�r�ror$r"r�r�s
�������O�O��[�O��1�1��[�1�
I�I�I�
:�:�:�
C�
C�
C����2 � � �D3�3�3�3�3�3�9�9�9�"3�3�3�
�
�
�K�K�K�	J�	J�	J�K�K�K�A�A�A�D�D�D�\�\�\�A�A�A�D�D�D�\�\�\�S�S�S�;�;�;�<�<�<�(	H�	H�	H�W�W�W�W�W�W�Z�Z�Z�r�r�r�W�W�W�Z�Z�Z�r�r�r�Y�Y�Y�A�A�A�`�`�`�	`�	`�	`�	F�	F�	F�+�+�+�
�
�
�
�
�
�

�

�

�
�
�
�
�
�
�
�
�
�
�
r$r�)&r�r9r�r	r�r�r�rr��textwrapr��pathlibr�testr�platformr�r)r�r��casefoldr<�prefixr�r(rSr�r+rGr�r7r@rHrUrWrq�TestCaser�ror$r"�<module>r�s*����������	�	�	�	�	�	�	�	�
�
�
�
�����
�
�
�
������������������������������<�7���
�(�
�:�
;�
;�;��
�
�
�
���>�����%�%�h�&7�&7�&9�&9�:�:��
�F�+�/�(��j�"+���
�
�,��j�".���
�
�/��j�"1�'=���
�
�?��c�j��
�
�3��B2�/��j�"%�.���
�
�	�	�C+
�+
�	�\�d�%�)�,������9�9���=�=��):�):�)<�)<�=�=�=������9�9�������
*�*�*�"���$�$�$����3�3�3�3�3�3�3�3�(x �x �x �x �x �x �x �x �vs
�s
�s
�s
�s
�8�$�j�s
�s
�s
�s
�s
r$