HEX
Server: Apache
System: Linux bd12.noc223.com 4.18.0-553.121.1.lve.el8.x86_64 #1 SMP Thu Apr 30 16:40:41 UTC 2026 x86_64
User: handcraf (1693)
PHP: 8.1.28
Disabled: NONE
Upload Files
File: //opt/alt/python312/lib64/python3.12/test/__pycache__/test_argparse.cpython-312.opt-1.pyc
�

~h�e�����ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlmZddlmZGd�dej"�ZGd�dej&�ZGd�d	ej&�Zej*Gd
�de��ZGd�d
e�ZGd�de�ZGd�de�Zd�ZGd�dej:�ZGd�de�Z efZ!e de!i�Z"Gd�de"�Z#Gd�de"�Z$Gd�de"�Z%Gd�de"�Z&Gd �d!e"�Z'Gd"�d#e"�Z(Gd$�d%e"�Z)Gd&�d'e"�Z*Gd(�d)e"�Z+Gd*�d+e"�Z,Gd,�d-e"�Z-Gd.�d/e"�Z.Gd0�d1e"�Z/Gd2�d3e"�Z0Gd4�d5e"�Z1Gd6�d7e"�Z2Gd8�d9e"�Z3Gd:�d;e"�Z4Gd<�d=e"�Z5Gd>�d?e"�Z6Gd@�dAe"�Z7GdB�dCe"�Z8GdD�dEe"�Z9GdF�dGe"�Z:GdH�dIe"�Z;GdJ�dKe"�Z<GdL�dMe"�Z=GdN�dOe"�Z>GdP�dQe"�Z?GdR�dSe"�Z@GdT�dUe"�ZAGdV�dWe"�ZBGdX�dYe"�ZCGdZ�d[e"�ZDGd\�d]e"�ZEGd^�d_e"�ZFGd`�dae"�ZGGdb�dce"�ZHGdd�dee"�ZIGdf�dge"�ZJGdh�die"�ZKGdj�dke"�ZLGdl�dme"�ZMGdn�doe"�ZNGdp�dqe"�ZOGdr�dse"�ZPGdt�due"�ZQGdv�dwe"�ZRGdx�dye"�ZSGdz�d{e"�ZTGd|�d}e"�ZUGd~�de"�ZVGd��d�e"�ZWGd��d�e"�ZXGd��d�e"�ZYGd��d�e"�ZZGd��d�e"�Z[Gd��d�e"�Z\Gd��d�e"�Z]Gd��d�e"�Z^Gd��d�e"�Z_Gd��d�e"�Z`Gd��d�e"�ZaGd��d�e"�ZbGd��d�e"�ZcGd��d�e"�ZdGd��d�e"�ZeGd��d�e"�ZfGd��d�e"�ZgGd��d�e"�ZhGd��d�e"�ZiGd��d�e"�ZjGd��d�e"�ZkGd��d�e"�ZlGd��d�e"�ZmGd��d�e"�ZnGd��d�e"�ZoGd��d�e"�ZpGd��d�e"�ZqGd��d�e"�ZrGd��d�e"�ZsGd��d�e"�ZtGd��d�e"�ZuGd��d�e"�ZvGd��d�ee"�ZwGd„d�ee"�ZxGdĄd�e�Zye�Zze�Z{GdƄdǫZ|e|dȫZ}e|dɫZ~e|dʫZe|d˫Z�e|d̫Z�e|dͫZ�Gd΄d�e�Z�GdЄd�ee"�Z�Gd҄d�ee"�Z�GdԄd�ee"�Z�Gdքd�e�Z�e�jGd؄d�ee"��Z�e�jGdڄd�ee"��Z�e�jGd܄d�ee"��Z�e�jGdބd�e���Z�Gd�d�e�Z�Gd�d�e�Z�Gd�d�e"�Z�Gd�d�e"�Z�Gd�d�e"�Z�Gd�d�e�Z�Gd�d�e"�Z�Gd�d�e�Z�Gd�d�e"�Z�Gd�d�e�Z�Gd�d�e�Z�Gd��d�e�Z�Gd��d�e�Z�Gd��d�e�Z�Gd��d�e�e�Z�Gd��d�e�e�Z�G�d��de�e�Z�G�d��de�e�Z�G�d��de�e�Z�G�d��de�e�Z�G�d��d	e�e�Z�G�d
��de�e�Z�G�d��d
e�e�Z�G�d��de�Z�G�d��de�e��Z�G�d��de�e��Z�G�d��de�e��Z�G�d��de�e��Z�G�d��de�e��Z�G�d��de�e��Z�G�d��de�e��Z�G�d��de�e��Z�G�d ��d!e�Z�G�d"��d#e�Z�G�d$��d%e�Z�G�d&��d'e�Z�efZ!e��d(e!i�Z�G�d)��d*e��Z�G�d+��d,e��Z�G�d-��d.e��Z�G�d/��d0e��Z�G�d1��d2e��Z�G�d3��d4e��Z�G�d5��d6e��Z�G�d7��d8e��Z�G�d9��d:e��Z�G�d;��d<e��Z�G�d=��d>e��Z�G�d?��d@e��Z�G�dA��dBe��Z�G�dC��dDe��Z�G�dE��dFe��Z�G�dG��dHe��Z�G�dI��dJe��Z�G�dK��dLe��Z�G�dM��dNe��Z�G�dO��dPe��Z�G�dQ��dRe��Z�G�dS��dTe��Z�G�dU��dVe��Z�G�dW��dXe��Z�G�dY��dZe��Z�G�d[��d\e��Z�G�d]��d^e��Z�G�d_��d`e��Z�G�da��dbe��Z�G�dc��dde��Z�G�de��dfe��Z�G�dg��dhe��Z�G�di��dje��Z�G�dk��dle��Z�G�dm��dne��Z�G�do��dpe��Z�G�dq��dre��Z�G�ds��dte��Z�G�du��dve�Z�G�dw��dxe�Z�G�dy��dze�Z�G�d{��d|e�Z�G�d}��d~e�Z�G�d��d�e�Z�G�d���d�e�Z�G�d���d�e�Z�G�d���d�e�Z�G�d���d�e�Z�G�d���d�e�Z�G�d���d�e�Z�G�d���d�e�Z�G�d���d�e�Z�G�d���d�e�Z�G�d���d�e�Z�G�d���d�e�Z�G�d���d�e�Z�G�d���d�e�Z�G�d���d�e�Z�d��Z�e�d�k(re�j��yy(��N)�	os_helper)�mockc�*��eZdZdZd�fd�	Zd�Z�xZS)�StdIOBufferz�Replacement for writable io.StringIO that behaves more like real file

    Unlike StringIO, provides a buffer attribute that holds the underlying
    binary data, allowing it to replace sys.stdout/sys.stderr in more
    contexts.
    c���|jd�}t�|�	tjtj
|��d|��y)N�utf-8)�newline)�encode�super�__init__�io�BufferedWriter�BytesIO)�self�
initial_valuer	�	__class__s   ��9/opt/alt/python312/lib64/python3.12/test/test_argparse.pyrzStdIOBuffer.__init__s@���%�,�,�W�5�
�
����*�*�2�:�:�m�+D�E� �'�	�	3�c��|j�|jjj�j	d�S)Nr)�flush�buffer�raw�getvalue�decode�rs rrzStdIOBuffer.getvalue#s-���
�
���{�{���'�'�)�0�0��9�9r)��
)�__name__�
__module__�__qualname__�__doc__rr�
__classcell__�rs@rrrs����3�
:rrc��eZdZd�Zd�Zy)�
StdStreamTestc��tj�}tjd�5t	j
d�5|j
dd��ddd�ddd�y#1swY�xYw#1swYyxYw)N�argparse._sys.exitr�foo)�status�message)�argparse�ArgumentParser�
contextlib�redirect_stderrr�patch�exit�r�parsers  r�test_skip_invalid_stderrz&StdStreamTest.test_skip_invalid_stderr*sg���(�(�*���&�&�t�,�	1��J�J�+�,�	1�
�K�K�q�%�K�0�		1�	1�	1�	1��	1�	1�s#�A1�A%�A1�%A.	�*A1�1A:c�|�tj�}|j|jt	j
|jdg�fD]�}|j|��5tjd�5t�5}tj|�5tjd�5|�|j|j�d�ddd�ddd�ddd�ddd�ddd���y#1swY�,xYw#1swY�0xYw#1swY�4xYw#1swY�8xYw#1swY��xYw)N�-h)�funcr'zusage:)r+r,�print_usage�
print_help�	functools�partial�
parse_args�subTestr-�redirect_stdoutrr.rr/�assertRegexr)rr2r6�
mocked_stderrs    r�test_skip_invalid_stdoutz&StdStreamTest.test_skip_invalid_stdout2s7���(�(�*�����������f�/�/�$��8�
�	F�D����$��'�	
F��*�*�4�0�	
F��
�		
F�"/��*�*�=�9�	
F��
�
�/�0�
	
F���� � ��!7�!7�!9�9�E�	
F�	
F�	
F�	
F�	
F�	
F�	F�
	
F�	
F��	
F�	
F��	
F�	
F��	
F�	
F��	
F�	
F�sl�"D2�8D&�D	�D�/(D
�D�D	�'D&�/D2�D�D�D�D	�D#
�D&�&D/�+D2�2D;	N)rrr r3r@�rrr%r%(s
��1�Frr%c��eZdZd�Zy)�TestCasec�T�|jtj��}d|d<y)N�80�COLUMNS)�enterContextr�EnvironmentVarGuard�r�envs  r�setUpzTestCase.setUpGs&�����	� =� =� ?�@����I�rN)rrr rKrArrrCrCEs��rrCc�$�eZdZd�Zd�Zd�Zd�Zy)�TempDirMixinc��tj�|_tj�|_tj|j�y�N)�tempfile�mkdtemp�temp_dir�os�getcwd�old_dir�chdirrs rrKzTempDirMixin.setUpRs/�� �(�(�*��
��y�y�{���
������rc�|�tj|j�tj|jd��D]Y\}}}|D]N}tj
tjj|j|�tj��P�[tj|jd�y)NF)�topdownT)rSrVrU�walkrR�chmod�path�join�stat�S_IWRITE�shutil�rmtree)r�root�dirs�files�names     r�tearDownzTempDirMixin.tearDownWs���
�������!#�������!F�	K��D�$���
K����������d�m�m�T�:�D�M�M�J�
K�	K�	�
�
�d�m�m�T�*rc���tjj|j|�}t	|dd��5}|j|�ddd�|S#1swY|SxYw)N�wr��encoding)rSr[r\rR�open�write)r�filename�	file_path�files    r�create_writable_filez!TempDirMixin.create_writable_file^sP���G�G�L�L�����9�	�
�)�S�7�
3�	!�t��J�J�x� �	!���	!���s�A�Ac�j�tj|j|�tj�yrO)rSrZror]�S_IREAD)rrls  r�create_readonly_filez!TempDirMixin.create_readonly_fileds��
����*�*�8�4�d�l�l�CrN)rrr rKrerorrrArrrMrMOs�� �
+��DrrMc��eZdZd�Zy)�Sigc� �||_||_yrO)�args�kwargs�rrvrws   rrzSig.__init__is����	���rN�rrr rrArrrtrtgs��rrtc��eZdZd�Zd�Zd�Zy)�NSc�:�|jj|�yrO)�__dict__�update)rrws  rrzNS.__init__ps���
�
���V�$rc���t|jj��}dj|D�cgc]}d|z��	c}�}t	|�j
�d|�d�Scc}w)Nz, z%s=%r�(�))�sortedr}�itemsr\�typer)r�sorted_items�tup�	kwarg_strs    r�__repr__zNS.__repr__ssQ���d�m�m�1�1�3�4���I�I��E��w��}�E�F�	���:�.�.�	�:�:��Fs�A!c�0�t|�t|�k(SrO)�vars�r�others  r�__eq__z	NS.__eq__xs���D�z�T�%�[�(�(rN)rrr rr�r�rArrr{r{ns��%�;�
)rr{c��eZdZdd�Zy)�ArgumentParserErrorNc�l�tj||||�||_||_||_||_yrO)�	Exceptionrr*�stdout�stderr�
error_code)rr*r�r�r�s     rrzArgumentParserError.__init__~s2�����4��&�&�9����������$��r)NNNryrArrr�r�|s��%rr�c
��ttjt�sttjt�r||i|��Stj}tj}t�t_t�t_		||i|��}tt
|��D]�}t||�}|tjurt|||��/|tjjurt||t|dt���h|tjurt|||���|tjjus��t||t|dt����||t_|t_S#t$r\}|j}	tjj�}
tjj�}td|
||	�d�d}~wwxYw#|t_|t_wxYw)Nr�
SystemExit)�
isinstance�sysr�rr��listr��getattr�setattrr�BIN_STDOUT_SENTINEL�BIN_STDERR_SENTINELr��coderr�)r;rvrw�
old_stdout�
old_stderr�result�key�attr�er�r�r�s            r�stderr_to_parser_errorr��s����#�*�*�k�*�j����[�.Q��4�*�6�*�*����J����J���C�J���C�J� �	>���0��0�F��D��L�)�	
]���v�s�+���3�:�:�%��F�C��4��S�Z�Z�.�.�.��F�C���X�GZ�)[�\��S�Z�Z�'��F�C��4��S�Z�Z�.�.�.��F�C���X�GZ�)[�\�	
]�� ��
���
���	>��6�6�D��Z�Z�(�(�*�F��Z�Z�(�(�*�F�%��f�f�d�4�9=�
>��		>�� ��
���
�s,�
CF�F�	G)�
AG$�$G)�)G,�,Hc�2��eZdZ�fd�Z�fd�Z�fd�Z�xZS)�ErrorRaisingArgumentParserc�>��tt|�
}t|g|��i|��SrO)rr�r;r�)rrvrwr;rs    �rr;z%ErrorRaisingArgumentParser.parse_args�s%����5�t�G�
�%�j�B�4�B�6�B�Brc�>��tt|�
}t|g|��i|��SrO)rr�r0r�)rrvrwr0rs    �rr0zErrorRaisingArgumentParser.exit�s%����/��;��%�d�<�T�<�V�<�<rc�>��tt|�
}t|g|��i|��SrO)rr��errorr�)rrvrwr�rs    �rr�z ErrorRaisingArgumentParser.error�s%����0�$�=��%�e�=�d�=�f�=�=r)rrr r;r0r�r"r#s@rr�r��s���C�=�>�>rr�c��eZdZdZd�Zy)�ParserTesterMetaclassa}Adds parser tests using the class attributes.

    Classes of this type should specify the following attributes:

    argument_signatures -- a list of Sig objects which specify
        the signatures of Argument objects to be created
    failures -- a list of args lists that should cause the parser
        to fail
    successes -- a list of (initial_args, options, remaining_args) tuples
        where initial_args specifies the string args to be parsed,
        options is a dict that should match the vars() of the options
        parsed out of initial_args, and remaining_args should be any
        remaining unparsed arguments
    c���|dk(ryt|d�st�|_t|d�st|_d�}d�}d�}d�}d�}Gd	�d
t
�}	|||fD]}
||fD]}|	||
|���y)N�ParserTestCase�parser_signature�parser_classc�^�|D](}|j|ji|j���*y)z(Add all arguments directly to the parserN)�add_argumentrvrw)r2�argument_signatures�sigs   r�	no_groupsz1ParserTesterMetaclass.__init__.<locals>.no_groups�s.��*�
=��#��#�#�S�X�X�<����<�
=rc��|jd�}|D](}|j|ji|j���*y)z4Add all arguments under a single group in the parserr(N)�add_argument_groupr�rvrw)r2r��groupr�s    r�	one_groupz1ParserTesterMetaclass.__init__.<locals>.one_group�s>���-�-�e�4�E�*�
<��"��"�"�C�H�H�;��
�
�;�
<rc��t|�D]?\}}|jd|z�}|j|ji|j���Ay)z0Add each argument in its own group to the parserzfoo:%iN)�	enumerater�r�rvrw)r2r��ir�r�s     r�many_groupsz3ParserTesterMetaclass.__init__.<locals>.many_groups�sL��#�$7�8�
<���3��1�1�(�Q�,�?��"��"�"�C�H�H�;��
�
�;�
<rc�$�|j|�S)z#Parse the args by passing in a list)r;)r2rvs  r�listargsz0ParserTesterMetaclass.__init__.<locals>.listargs�s���$�$�T�*�*rc��tj}|dg|zt_	|j�|t_S#|t_wxYw)z(Parse the args by defaulting to sys.argvr)r��argvr;)r2rv�old_sys_argvs   r�sysargsz/ParserTesterMetaclass.__init__.<locals>.sysargs�s>���8�8�L�$�Q��(�4�/�C�H�
(��(�(�*�'����<���s	�?�
Ac�$�eZdZd�Zd�Zd�Zd�Zy)�0ParserTesterMetaclass.__init__.<locals>.AddTestsc�H�||_||_|jj}|jj}|j|jfD]>}|j}|||f}dj|�}	|fd�}
	|	|
_t||	|
��@y#t$rY�wxYw)N�_c��||�yrOrA�r�	test_funcs  r�wrapperzJParserTesterMetaclass.__init__.<locals>.AddTests.__init__.<locals>.wrapper�	��!�$�r)�_add_arguments�_parse_argsr�
test_failures�test_successesr\�	TypeErrorr�)r�
tester_cls�
add_argumentsr;�add_arguments_name�parse_args_namer��	func_name�names�	test_namer�s           rrz9ParserTesterMetaclass.__init__.<locals>.AddTests.__init__�s���&3��#�#-�� �%)�%8�%8�%A�%A�"�"&�"2�"2�";�";��"&�"4�"4�d�6I�6I�!J�<�I� )� 2� 2�I�%�'9�?�J�E� #�����I�09�(��+4��(��J�	�7�;�<��%����s�>B�	B!� B!c��|jj}|jj}|j|i|��}|j	||j
�|SrO)r�rvrwr�r�r�)r�testerrvrwr2s     r�_get_parserz<ParserTesterMetaclass.__init__.<locals>.AddTests._get_parsersV���.�.�3�3���0�0�7�7��,��,�,�d�=�f�=���#�#�F�F�,F�,F�G��
rc���|j|�}|jD]C}|j�}|jt|��5|j|�ddd��Ey#1swY�PxYw)N)�msg)r��failures�split�assertRaisesr�r;)rr�r2�args_strrvs     rr�z>ParserTesterMetaclass.__init__.<locals>.AddTests.test_failuressm���)�)�&�1�� &���0�H�#�>�>�+�D��,�,�-@�d�,�K�0��)�)�$�/�0�0�0�0�0�s�A%�%A.	c���|j|�}|jD]I\}}t|t�r|j	�}|j||�}|j
||��KyrO)r��	successesr��strr�r��assertEqual)rr�r2rv�expected_ns�	result_nss      rr�z?ParserTesterMetaclass.__init__.<locals>.AddTests.test_successessc���)�)�&�1��)/�)9�)9�?�%�D�+�!�$��,�#�z�z�|�� $� 0� 0��� >�I��&�&�{�I�>�	?rN)rrr rr�r�r�rArr�AddTestsr��s��
<�&
�
0�
?rr�)�hasattrrtr�r�r��object)�clsrd�bases�bodydictr�r�r�r�r�r�r�r;s            rrzParserTesterMetaclass.__init__�s����#�#���s�.�/�#&�5�C� ��s�N�+�9�C��
	=�
	<�	<�	+�	(�)	?�v�)	?�Z(��K�@�	9�M�'��1�
9�
���m�Z�8�
9�	9rN)rrr r!rrArrr�r��s
��
�_9rr�r�c��eZdZdZed�gZgd�Zded��fded��fd	ed��fd
ed��fded��fgZy)
�TestOptionalsSingleDash�1Test an Optional with a single-dash option string�-x)r��a�--foo�-x --fooz-x -yrN��x�-x ar��-xaz-x -1�-1z-x-1�	rrr r!rtr�r�r{r�rArrr�r�3sY��;��t�9�+��8�H�	�R�$�Z��	��c���	��S�	��	�"�t�*��	��d����Irr�c�t�eZdZdZedd��eddd��ed	�gZgd
�Zdedd
d
��fdedd
d
��fdedd
d��fdedd
d��fdedd
d��fdedd
d��fdedd
d��fdedd
d��fdeddd
��fdeddd
��fdeddd��fdeddd��fgZy
)�TestOptionalsSingleDashCombinedr�r��
store_true��actionz-yyy�store_const�*�r�const�-z)r�r�r�r�z-x -zz-z -xz-yxz-yz az-yyyxz-yyyzaz-xyzaz-x=rFN)r��yyy�zT�-zar��-z az-xzaz-xz az-x -zaz-x -z a�-yz-x -yyy -zaz-x -yyy -z ar�rArrr�r�As	��;�	�D��&��F�=��3��D�	���
C�H�
�R�%�T�T�
*�+�	
�r�D�d�d�+�,�	��U���,�-�	��e���-�.�	��d���,�-�	�"�t���-�.�	�2��$�#�.�/�	�B��4�3�/�0�	
�r�E�r�T�*�+�	��e��t�,�-�	��T�r�S�1�2�	��d��c�2�3�
�Irr�c��eZdZdZed�gZgd�Zded��fded��fd	ed
��fded��fded��fgZy)
�TestOptionalsSingleDashLongzATest an Optional with a multi-character single-dash option string�-foo)r
r�r�z
-foo --fooz-foo -y�-fooarN�r(z-foo ar�z-foo -1r�z-fo a�-f ar�rArrrr[sY��K��v�;�-��G�H�	�R�D�\��	�2�#�;��	�B�4�L�!�	�"��+��	������Irrc���eZdZdZed�ed�ed�gZgd�Zdeddd��fd	ed
dd��fded
dd��fded
dd��fdeddd��fdedd
d��fdeddd
��fgZy)�&TestOptionalsSingleDashSubsetAmbiguousz=Test Optionals where option strings are subsets of each other�-f�-foobar�-foorab)rr
�-fo�-foo bz-foobz-foobaz-foorarN)�f�foobar�foorabrr��-fa�-foa�oar�ooa�	-foobar a�	-foorab ar�rArrrris���G��t�9�c�)�n�c�)�n�E��K�H�	�R�$�t�D�
1�2�	��c�$�t�4�5�	��S��d�3�4�	��d�4��5�6�	�"�u�T�$�7�8�	�b�4��D�9�:�	�b�4��S�9�:��Irrc���eZdZdZed�ed�gZgd�Zdedd��fded	d��fd
edd	��fded	d��fdedd	��fd
ed	d��fdedd	��fgZy)� TestOptionalsSingleDashAmbiguousz7Test Optionals that partially match but are not subsetsrr)rrrrr
rrrN)rrz-foob ar�z-foor az-fooba az-foora arr r�rArrr"r"ys���A��y�>�3�y�>�:��E�H�	�R�t�D�
)�*�	�B�c�$�/�0�	�B�d�3�/�0�	�R�s�4�0�1�	�R�t�C�0�1�	�b��D�1�2�	�b��S�1�2��Irr"c��eZdZdZedd��gZgd�Zded��fd	ed
��fded
��fded
��fgZy)�TestOptionalsNumericz(Test an Optional with a short opt stringr��one��dest)r�r�z-1 --fooz-1 -yz-1 -1z-1 -2rN)r%z-1 ar�z-1az-1-2�-2r�rArrr$r$�sQ��2��t�%�0�1��A�H�	�R�D�\��	�����	��s���	�����	�Irr$c��eZdZdZed�gZgd�Zded��fded��fd	ed��fd
ed��fded��fgZy)
�TestOptionalsDoubleDashz1Test an Optional with a double-dash option stringr�)r�rrr�z--foo -xz--foo --barrNrz--foo ar�z--foo=az
--foo -2.5z-2.5z
--foo=-2.5r�rArrr*r*�sY��;��w�<�.��F�H�	�R�D�\��	�B�3�K� �	�B�3�K� �	�r�f�~�&�	�r�f�~�&��Irr*c
���eZdZdZedd��ed�gZgd�Zdedd	�
�fdedd�
�fd
edd	�
�fdedd	�
�fdedd	�
�fdedd	�
�fgZy	)�#TestOptionalsDoubleDashPartialMatchz7Tests partial matching with a double-dash option string�--badgerr�r�z--bat)�--bar�--b�--ba�--b=2z--ba=4�	--badge 5rFN)�badger�batz--bat X�X�--badT�--badg�--badger�rArrr,r,�s���A�	�J�|�,��G����H�H�	�R�u�$�
'�(�	�B�e��-�.�	�"�D�d�+�,�	�2�T�t�,�-�	�B�d��-�.�	�R�t��.�/�
�Irr,c���eZdZdZedd��ed�gZgd�Zdedd	�
�fdedd�
�fd
edd�
�fdedd	�
�fdedd	�
�fdedd	�
�fdedd	�
�fgZy	)�"TestOptionalsDoubleDashPrefixMatchz?Tests when one double-dash option string is a prefix of anotherr-r�r�r0)r.r/r0r1r2rFN)r3�baz--ba Xr5z--ba=Xr6Tr7r8r�rArrr:r:�s���I�	�J�|�,��F����>�H�	�R�u��
&�'�	�2�U�s�+�,�	�2�U�s�+�,�	�"�D�T�*�+�	�2�T�d�+�,�	�B�d�t�,�-�	�R�t��-�.��Irr:c���eZdZdZedd��ed�eddd�	�gZgd
�Zdedd
d
��fdedd
d
��fdeddd
��fdeddd
��fdedd
d��fdedd
d��fgZy
)�TestOptionalsSingleDoubleDashz<Test an Optional with single- and double-dash option stringsrr�r�r.�-bazrrr)r.�-fbarz-fbazz-bazf�-b B�BrFN�r�bar�bazTz--ba BrAz
-f --bar Bz-f -bz-ba -fr�rArrr=r=�s���F�	�D��&��G���F�=��3���
A�H�	�R�%�T�t�
,�-�	
�r�D�d��-�.�	�2��3�D�1�2�	�r�D�c�t�4�5�	�"�t��2�.�/�	�2��$�B�/�0�
�Irr=c��eZdZdZedd��Zedd��ed�ed	d
d��gZgd
�Zdeddd��fdeddd��fdeddd��fdeddd��fdeddd��fdeddd��fgZ	y)�!TestOptionalsAlternatePrefixCharsz9Test an Optional with option strings with custom prefixes�+:/F��prefix_chars�add_help�+fr�r��::bar�/bazrrr)r.r?r@rAr�--bar Br>r5�--helpz+hz::helpz/helprNrBT�::ba BrA�
+f ::bar B�+f /b�/ba +f�
rrr r!rtr�r�r�r{r�rArrrFrF�s���C����>���D��&��G���F�=��3���
q�H�	�R�%�T�t�
,�-�	
�r�D�d��-�.�	�2��3�D�1�2�	�r�D�c�t�4�5�	�"�t��2�.�/�	�2��$�B�/�0�
�IrrFc��eZdZdZedd��Zedd��ed�ed	d
d��gZgd
�Zdeddd��fdeddd��fdeddd��fdeddd��fdeddd��fdeddd��fgZ	y)�*TestOptionalsAlternatePrefixCharsAddedHelpz�When ``-`` not in prefix_chars, default operators created for help
       should use the prefix_chars in use rather than - or --
       http://bugs.python.org/issue9444rGTrHrKr�r�rLrMrrr)r.r?r@rArrNr>rFNrBrPrArQrRrSrTrArrrVrV�s���+����=���D��&��G���F�=��3���
H�H�	�R�%�T�t�
,�-�	
�r�D�d��-�.�	�2��3�D�1�2�	�r�D�c�t�4�5�	�"�t��2�.�/�	�2��$�B�/�0�
�IrrVc	���eZdZdZedd��Zedd��edd��ed	d��gZgd
�Zdeddd��fded
dd��fded
d
d��fded
d
d
��fgZ	y)�2TestOptionalsAlternatePrefixCharsMultipleShortArgsz@Verify that Optionals must be called with their defined prefixesz+-FrHr�r�r�z+yz+z)�-wz-xyzz+xr
z+xyzr�r��yrTz+y -xz+yz -xNrTrArrrXrXs���J���u�=���D��&��D��&��D��&���
�H�
�R�%�5�E�
*�+�	
�r�D�E�U�+�,�	�"�t�t�u�-�.�	�2����-�.�	�IrrXc��eZdZdZeddddd��gZgd�Zd	ed
��fded��fded��fded��fded��fgZy
)�TestOptionalsShortLongz<Test a combination of single- and double-dash option strings�-vz	--verbosez-nz--noisyr�r�)z
--x --verbosez-Nr�z-v xrF)�verboseTNr�rArrr]r]sn��F�	�D�+�t�Y�|�D���4�H�	�R��
��	
�r�$�� �	�b��&�'�	
�r�$�� �	�B�t�$�%��Irr]c��eZdZdZed�edd��gZdgZdedd	�
�fded	d�
�fd
edd�
�fdedd�
�fgZy	)�TestOptionalsDestz*Tests various means of setting destinationz	--foo-bar�--baz�zabbazr&r�z--foo-bar frN)�foo_barrcz--baz g�gz--foo-bar h --baz i�hr�z--baz j --foo-bar k�k�jr�rArrrara-sf��4��{�+�S��x�-H�I���u�H�	��3�t�4�5�	�B�t�C�0�1�	��3�s� ;�<�	��3�s� ;�<�	�Irrac��eZdZdZed�edd��gZdgZdedd�	�fd
edd�	�fdedd
�	�fgZy)�TestOptionalsDefaultz*Tests specifying a default for an Optionalr�r
r��defaultr�rN�r�r[z-xxr�z-yyr[r�rArrrjrj:sU��4��t�9�c�$��&;�<���u�H�	�R�$�"�
��	��S�B�� �	��T�S�!�"��Irrjc�V�eZdZdZed�gZddgZded��fded��fgZy)�TestOptionalsNargsDefaultz7Tests not specifying the number of args for an Optionalr�r�rNr�r�r�rArrroroFs9��A��t�9�+���T�{�H�	�R�$�Z��	��c����Irroc�\�eZdZdZedd��gZddgZded��fd	edg��fgZy)
�TestOptionalsNargs1z&Tests specifying 1 arg for an Optionalr����nargsr�rNr�r�r�rArrrqrqQs?��0��t�1�-�.���T�{�H�	�R�$�Z��	��s�e����Irrqc�^�eZdZdZedd��gZgd�Zded��fd	egd
���fgZy)�TestOptionalsNargs3z'Tests specifying 3 args for an Optionalr��rs)r�r�r��-x a b�a -x�a -x brNr�z-x a b c�r��b�cr�rArrrvrv\s:��1��t�1�-�.��>�H�	�R�$�Z��	�R�/�*�+��Irrvc�Z�eZdZdZedd��eddd��eddd	�
�eddedd
��gZdgZdeddd	d��fdeddd	d��fdeddd	d��fdeddd	d��fdeddd	d��fdedddd��fdedddd��fdeddd	d��fdeddd	d��fg	Z	y)�TestOptionalsNargsOptionalz0Tests specifying an Optional arg for an OptionalrY�?rsr�r)rtrr
�spam�rtrlr�42�84)rtr�rrl�2rN�T�rgr�r[rz-w 2z-x 2z-y 2z-z 2��
rrr r!rt�intr�r�r{r�rArrrrgs���:�	�D����D��2�&��D��V�,��D��#�T�4�@�	���u�H�	�R�$�$�&�B�
/�0�	
�r�D�D�F�b�1�2�	��c�T�V�r�2�3�	
�r�D�B�&�B�/�0�	��d�c�V�r�2�3�	
�r�D�D�D�B�/�0�	��d�d�c�R�0�1�	
�r�D�D�F�b�1�2�	��d�d�f��2�3�
�Irrc���eZdZdZedd��eddd��gZdgZd	ed
d��fdegd��fdedgd��fd
eddgd��fded
g��fded
dg��fded
ddg��fgZy
)�TestOptionalsNargsZeroOrMore�?Tests specifying args for an Optional that accepts zero or morer��*rsr
r�r�r�rNrmr�rxr|�-y a�-y a br�rArrr�r�~s���I�	�D����D��V�,����u�H�	�R�$�&�
!�"�	
�r�B�&�!�"�	��s�e�v�&�'�	�2��c�
�f�-�.�	
�r�D�B�� �	��d�s�e�$�%�	�2���c�
�+�,��Irr�c
��eZdZdZedd��eddd��gZgd�Zd	ed
d��fded
gd��fded
dgd��fded
d
g��fded
d
dg��fgZy
)�TestOptionalsNargsOneOrMorez>Tests specifying args for an Optional that accepts one or morer��+rsr
r�r�)r�r�r
ryza -y brNrmr�r�rxr|r�r�r�rArrr�r��s���H�	�D����D��V�,���3�H�	�R�$�&�
!�"�	��s�e�v�&�'�	�2��c�
�f�-�.�	��d�s�e�$�%�	�2���c�
�+�,��Irr�c
���eZdZdZedd��edeed���gZgd�Zd	e	d
d
��fde	d
d
��fde	dd
��fde	d
d��fde	d
d��fde	dd��fgZ
y
)�TestOptionalsChoicesz,Tests specifying the choices for an Optionalr�abc��choicesz-g��r�r�)r�z-f dz-fadz-gaz-g 6rN)rrerr�z-f cr}z-g 0rz-g 03rwz-fb -g4r|��rrr r!rtr��ranger�r�r{r�rArrr�r��s���6�	�D�%� ��D�s�E�!�H�-�/��4�H�	�R�$�$�
� �	��c�T�"�#�	��c�T�"�#�	��d�a��!�	�"�t�q�/�"�	�B���N�#�
�Irr�c�\�eZdZdZeded��gZddgZded�	�fd
ed�	�fgZ	y)
�TestOptionalsRequiredz)Tests an optional action that is requiredr�T�r��requiredr�r�-x 1rrr�z-x42rNr�rArrr�r��sE��3�	�D�s�T�*����R�y�H�	��a���	��b����Irr�c�Z�eZdZdZedd��gZddgZded�	�fd
ed�	�fgZy)�TestOptionalsActionStorez&Tests the store action for an Optionalr��storer�r�ryrNr�z-xfoor(r�rArrr�r��s=��0��t�G�4�5���V�}�H�	�R�$�Z��	�"�u�+���Irr�c�Z�eZdZdZedde��gZdgZded��fdee��fgZ	y)	�TestOptionalsActionStoreConstz,Tests the store_const action for an Optionalr
rrr�rN�r[)
rrr r!rtr�r�r�r{r�rArrr�r��s=��6��t�M��H�I���u�H�	�R�$�Z��	
�r�F�|���Irr�c�Z�eZdZdZedd��gZgd�Zded��fded	��fgZy
)�TestOptionalsActionStoreFalsez,Tests the store_false action for an Optionalr�store_falser�)r�rr	rT)rFNr�rArrr�r��s9��6��t�M�:�;��#�H�	�R�$�Z��	
�r�E�{���Irr�c�Z�eZdZdZedd��gZgd�Zded��fded	��fgZy
)�TestOptionalsActionStoreTruez+Tests the store_true action for an Optionalz--appler�r�)r�z	--apple=bz	--apple brF)�appleTNr�rArrr�r��s9��5��y��>�?��.�H�	�R�e�_��	�B�T�N�#��Irr�c��eZdZdZedej��gZddgZde	d��fde	d	��fd
e	d��fde	d��fd
e	d	��fgZ
d�Zd�Zy)�TestBooleanOptionalActionzTests BooleanOptionalActionr�r��	--foo bar�	--foo=barrNrT�--no-fooFz--foo --no-fooz--no-foo --fooc��tj�}|jt�5}|j	ddtj
��ddd�|j
dtj��y#1swY�/xYw)Nr�T�rrz*got an unexpected keyword argument 'const')	r+r,r�r�r��BooleanOptionalAction�assertInr��	exception�rr2�cms   r�
test_constz$TestBooleanOptionalAction.test_const�sn���(�(�*��
�
�
�y�
)�	\�R�����t�H�<Z�<Z��[�	\�	
�
�
�B�C����DU�V�	\�	\�s�#A;�;Bc���tj�}|jt�5|j	dtj
d��ddd�|jt�5|j	dtj
t��ddd�|jt�5|j	dtj
d��ddd�|jt�5|j	dtj
d��ddd�|jt�5|j	dtj
d�	�ddd�|jt�5|j	d
tj
d�	�ddd�y#1swY��OxYw#1swY��xYw#1swY��xYw#1swY��xYw#1swY�|xYw#1swYyxYw)N�-a)rr��-b�-c)r�metavar�-d�d�-e)rr�rrA)r+r,�assertWarns�DeprecationWarningr�r��boolr1s  r�test_deprecated_init_kwz1TestBooleanOptionalAction.test_deprecated_init_kws����(�(�*��
�
�
�0�
1�	������5�5��
 �
�	��
�
�0�
1�	������5�5��
 �
�	��
�
�0�
1�	������5�5��
 �
�	��
�
�0�
1�	������5�5��
 �
�	��
�
�0�
1�	������5�5��
 �
�	��
�
�0�
1�	������5�5��
 �
�	�	�A	�	��	�	��	�	��	�	��	�	��	�	�sG�#F�*'F'�.#F4�.#G�.#G�.#G�F$�'F1�4F=�G	�G�G!)
rrr r!rtr+r�r�r�r{r�r�r�rArrr�r��ss��%��w�x�/M�/M�N�O���[�)�H�	�R�D�\��	�"��,��	�R�E�]�#�	�2�%�=�)�	�2�$�<�(��I�W�)rr�c�n�eZdZdZeddej��gZdgZde	d��fde	d��fgZ
y	)
�!TestBooleanOptionalActionRequiredz$Tests BooleanOptionalAction requiredr�T)r�rrrr�FN)rrr r!rtr+r�r�r�r{r�rArrr�r�+sI��.�	�G�d�8�+I�+I�J����t�H�	�"��,��	�R�E�]�#��Irr�c�t�eZdZdZedd��gZgd�Zded��fd	ed
g��fded
dg��fgZy)
�TestOptionalsActionAppend�'Tests the append action for an Optionalrb�appendr��r�rb�a --baz�	--baz a brN�rD�--baz ar��--baz a --baz br|r�rArrr�r�7sL��1��w�x�8�9��5�H�	�R�D�\��	�B�C�5�M�"�	�B�C��:�.�/��Irr�c�|�eZdZdZedddg��gZgd�Zdedg��fd	edd
g��fdegd���fgZy
)�$TestOptionalsActionAppendWithDefaultr�rbr�r5�rrlr�rr�r�r�r�)r5r�r|Nr�rArrr�r�CsQ��1��w�x�#��G�H��5�H�	�R�S�E�]��	�B�C��:�&�'�	�B�?�3�4��Irr�c���eZdZdZedd��edd��edd��edd��gZgd	�Zd
edddd��fdedgddd��fdeddgdd��fdedddd��fdedddd��fgZy)
�!TestConstActionsMissingConstKwargz=Tests that const gets default value of None when not providedr�append_constr�r�r�rr.)z-f vr�r�rN)rr(r|rCr�rArrr�r�Os���G�	�D��(��G�N�+��D��'��G�M�*�	��2�H�	�R�$�D�D�d�
3�4�	
�r�T�F���$�7�8�	�"�t�$��4�T�:�;�	
�r�D�d�d��5�6�	�"�t���4�8�9��Irr�c	��eZdZdZedde��eddd��gZgd	�Zd
ed��fdeeg��fd
eededg��fgZ	y)�TestOptionalsActionAppendConst�-Tests the append_const action for an Optionalr�r�rr�r�r|�rr'�r�r�za -cz-bxz-b xrN�r|�-b -cx -b -cyzr��yz�
rrr r!rtr�r�r�r{r�rArrr�r�bsf��7�	�D��y�9��D���,���2�H�	�R�$�Z��	
�r�Y�K� �!�	�2��C��D� A�B�C��Irr�c
��eZdZdZeddedg��eddd�	�gZgd
�Zdedg��fdedeg��fd
edededg��fgZ	y)�)TestOptionalsActionAppendConstWithDefaultr�r�r�r5)rrrlr�r�r|r�r�rr�r�r�r�Nr�rArrr�r�qsq��7�	�D��y�3�%�H��D���,���2�H�	�R�3�%�[��	
�r�S�)�$�%�&�	�2��i��i�� F�G�H��Irr�c�Z�eZdZdZedd��gZgd�Zded��fded	��fgZy)
�TestOptionalsActionCountz&Tests the count action for an Optionalr��countr�)r�r�z-x bz	-x a -x brNr�rrr�rArrr�r��s8��0��t�G�4�5��1�H�	�R�$�Z��	
�r�A�w���Irr�c	��eZdZdZed�ed�edd��gZddgZd	ed
d
d��fd
edd
d��fded
dd��fdedd
d��fgZy
)�"TestOptionalsAllowLongAbbreviationz2Allow long options to be abbreviated unambiguouslyr�z--foobazz--foobler�r�z--foob 5z--foobrNF)r(�foobaz�fooblez--foo 7�7z	--fooba ar�z--foobl --foo greTr�rArrr�r��s~��<�	�G���J���J�|�,���
�H�%�H�	�R�D��e�
4�5�	�B�3�t�E�:�;�	�b�T�#�e�<�=�	�B�3�t�D�A�B�	�Irr�c��eZdZdZed��Zed�edd��ed�gZgd	�Zd
eddd��fd
eddd��fdeddd��fgZ	y)�%TestOptionalsDisallowLongAbbreviation�1Do not allow abbreviations of long options at allF��allow_abbrevr�z--foodler�r�z--foonly)z-foon 3z--foon 3z--foodz--food --foo 2rN�r(�foodle�foonlyz--foo 3�3z--foonly 7 --foodle --foo 2r�Tr�rTrArrr�r��sr��;���.���G���J�|�,��J����
C�H�	�R�D��t�
4�5�	�B�3�u�T�:�;�	&��s�4��(L�M��Irr�c��eZdZdZedd��Zed�edd��ed	�gZgd
�Zdeddd�
�fdeddd�
�fdeddd�
�fgZ	y)�0TestOptionalsDisallowLongAbbreviationPrefixCharszBDisallowing abbreviations works with alternative prefix charactersr�F�rIr�z++fooz++foodler�r�z++foonly)z+foon 3z++foon 3z++foodz++food ++foo 2rNr�z++foo 3r�z++foonly 7 ++foodle ++foo 2r�Tr�rTrArrr�r��st��L���%�@���G���J�|�,��J����
C�H�	�R�D��t�
4�5�	�B�3�u�T�:�;�	&��s�4��(L�M��Irr�c
���eZdZdZed��Zed�edd��gZddgZd	ed
d
��fded
d
��fdedd
��fded
d��fded
d��fdedd��fgZ	y
)�/TestDisallowLongAbbreviationAllowsShortGroupingr�Fr�z-rr�r�r�z-c -rrN��rr}z-rar�z-rcc�ccz-ccr�z-cc -raz-ccrccrTrArrr�r��s���;���.���D�	��D��!����g��H�	�R�$�$�
� �	��S�D�!�"�	��d�d�#�$�	��T�Q�� �	�B���N�#�	�2���?�#�
�Irr�c
���eZdZdZedd��Zed�edd��gZdd	gZd
edd��fd
edd��fdedd��fdedd��fdedd��fdedd��fgZ	y)�5TestDisallowLongAbbreviationAllowsShortGroupingPrefixzEShort option grouping works with custom prefix and allow_abbrev=Falser�Fr�z+rz+cr�r�z+c +rrNr�z+rar�z+rccr�z+ccr�z+cc +raz+ccrccrTrArrr�r��s���O���%�@���D�	��D��!����g��H�	�R�$�$�
� �	��S�D�!�"�	��d�d�#�$�	��T�Q�� �	�B���N�#�	�2���?�#�
�Irr�c�B�eZdZdZed�gZgd�Zded��fgZy)�TestPositionalsNargsNonez,Test a Positional that doesn't specify nargsr(�rr��a br�rNr�rArrrr�s)��6��u�:�,�� �H�	�b�S�k���Irrc�H�eZdZdZedd��gZgd�Zdedg��fgZy)	�TestPositionalsNargs1z.Test a Positional that specifies an nargs of 1r(rrrsrr�rNr�rArrrr�s/��8��u�A�.�/�� �H�	�b�c�U�m���Irrc�J�eZdZdZedd��gZgd�Zdeddg�	�fgZy
)�TestPositionalsNargs2z.Test a Positional that specifies an nargs of 2r(r�rs)rr�r��a b crr�r|rNr�rArrrr�s2��8��u�A�.�/��'�H�	���S�z�"�#��Irrc�r�eZdZdZedd��gZdgZdeg��fdedg��fd	edd
g��fgZy)�TestPositionalsNargsZeroOrMorez0Test a Positional that specifies unlimited nargsr(r�rsr�rrr�rr|Nr�rArrr
r
sN��:��u�C�0�1���v�H�	�R�B�Z��	�b�c�U�m��	���S�z�"�#��Irr
c�t�eZdZdZeddd��gZdgZded��fd	ed	g��fd
ed	dg��fgZy)
�%TestPositionalsNargsZeroOrMoreDefaultz>Test a Positional that specifies unlimited nargs and a defaultr(r�rCr�r�rrr�rr|Nr�rArrrrsP��H��u�C��?�@���v�H�	�R�E�]��	�b�c�U�m��	���S�z�"�#��Irrc�`�eZdZdZedd��gZddgZdedg��fd	edd
g��fgZy)�TestPositionalsNargsOneOrMorez2Test a Positional that specifies one or more nargsr(r�rsrr�r�rrr|Nr�rArrrrsD��<��u�C�0�1���D�z�H�	�b�c�U�m��	���S�z�"�#��Irrc�Z�eZdZdZedd��gZddgZded�	�fd
ed
�	�fgZy)�TestPositionalsNargsOptionalzTests an Optional Positionalr(r�rsr�rrNrr�r�rArrrr)s=��&��u�C�0�1���e�}�H�	�R�D�\��	�b�S�k���Irrc�\�eZdZdZeddd��gZddgZded�	�fd
ed
�	�fgZy)�#TestPositionalsNargsOptionalDefaultz1Tests an Optional Positional with a default valuer(r�rr�r�rrrr�Nr�rArrrr4s?��;��u�C��<�=���e�}�H�	�R�B�Z��	�b�S�k���Irrc�^�eZdZdZedded��gZgd�Zded�	�fd
ed�	�fgZ	y)
�,TestPositionalsNargsOptionalConvertedDefaultznTests an Optional Positional with a default value
    that needs to be converted to the appropriate type.
    r(r�r�)rtr�rl)r�r�1 2rrr�1rrNr�rArrrr?sE���
	�E��3��5���$�H�	�R�B�Z��	�b�Q�i���Irrc�R�eZdZdZed�ed�gZgd�Zdedd��fgZy	)
�TestPositionalsNargsNoneNonez-Test two Positionals that don't specify nargsr(rC)rr�r�rrr�r|�r(rCNr�rArrrrNs3��7��u�:�s�5�z�2��'�H�	��s��$�%��Irrc�X�eZdZdZed�edd��gZgd�Zdedd	g�
�fgZy)�TestPositionalsNargsNone1z6Test a Positional with no nargs followed by one with 1r(rCrrrs)rr�r�rrr�r|rNr�rArrrrXs8��@��u�:�s�5��':�;��*�H�	��s���&�'��Irrc�Z�eZdZdZedd��ed�gZgd�Zdedd	gd
��fgZy)
�TestPositionalsNargs2Nonez8Test a Positional with 2 nargs followed by one with noner(r�rsrC�rr�r�r�a b c drr�r|r}rNr�rArrrrbs:��B��u�A�.��E�
�;��3�H�	�"�#�s���-�.��Irrc��eZdZdZed�edd��gZddgZdedg�	�fd
eddg�	�fdeddd
g�	�fgZy)�"TestPositionalsNargsNoneZeroOrMorez>Test a Positional with no nargs followed by one with unlimitedr(rCr�rsrr�r�rrr|rr}Nr�rArrr!r!ls^��H��u�:�s�5��'<�=���G�}�H�	�b�S�b�!�"�	��s���&�'�	�"��3��*�-�.��Irr!c�r�eZdZdZed�edd��gZgd�Zdedd	g�
�fdedd	dg�
�fgZy
)�!TestPositionalsNargsNoneOneOrMorez@Test a Positional with no nargs followed by one with one or morer(rCr�rs�rr�r�rr�r|rrr}Nr�rArrr#r#xsK��J��u�:�s�5��'<�=��!�H�	��s���&�'�	�"��3��*�-�.��Irr#c�l�eZdZdZed�edd��gZgd�Zdedd�	�fd
edd�	�fgZy)� TestPositionalsNargsNoneOptionalz@Test a Positional with no nargs followed by one with an Optionalr(rCr�rs�rr�rr�Nrrr|r�rArrr&r&�sE��J��u�:�s�5��'<�=��%�H�	�b�S�d�#�$�	��s��$�%��Irr&c��eZdZdZedd��ed�gZddgZdegd�	�fd
edgd�	�fdeddgd
�	�fgZy)�"TestPositionalsNargsZeroOrMoreNonez@Test a Positional with unlimited nargs followed by one with noner(r�rsrCrr�r�rrr|rr}Nr�rArrr)r)�s^��J��u�C�0�#�e�*�=���G�}�H�	�b�R�S�!�"�	���u�#�&�'�	�"�#�s���-�.��Irr)c�r�eZdZdZedd��ed�gZgd�Zdedgd	�
�fdedd	gd�
�fgZy
)�!TestPositionalsNargsOneOrMoreNonezBTest a Positional with one or more nargs followed by one with noner(r�rsrCr$rr�r|rrr}Nr�rArrr+r+�sK��L��u�C�0�#�e�*�=��!�H�	���u�#�&�'�	�"�#�s���-�.��Irr+c�n�eZdZdZeddd��ed�gZgd�Zdedd�	�fd
edd�	�fgZy)
� TestPositionalsNargsOptionalNonezBTest a Positional with an Optional nargs followed by one with noner(r�rr�rCr'r�rrr|Nr�rArrr-r-�sG��L��u�C��<�c�%�j�I��%�H�	�b�R�S�!�"�	��s��$�%��Irr-c�z�eZdZdZedd��edd��gZgd�Zded	d
gg��fded	d
gd
g��fgZy)�TestPositionalsNargs2ZeroOrMorez=Test a Positional with 2 nargs followed by one with unlimitedr(r�rsrCr�r$rr�r|rrr}Nr�rArrr/r/�sR��G��u�A�.��E��0E�F��!�H�	���S�z�r�*�+�	�"�#�s��#��/�0��Irr/c�`�eZdZdZedd��edd��gZgd�Zded	d
gdg��fgZy
)�TestPositionalsNargs2OneOrMorez?Test a Positional with 2 nargs followed by one with one or morer(r�rsrCr�)rr�r�rrr�r|r}rNr�rArrr1r1�s?��I��u�A�.��E��0E�F��(�H�	�"�#�s��#��/�0��Irr1c�x�eZdZdZedd��edd��gZgd�Zded	d
gd��fd
ed	d
gd��fgZy)�TestPositionalsNargs2Optionalz7Test a Positional with 2 nargs followed by one optionalr(r�rsrCr�)rr�r�rrr�r|Nrrr}r�rArrr3r3�sP��A��u�A�.��E��0E�F��,�H�	���S�z�t�,�-�	�"�#�s���-�.��Irr3c��eZdZdZedd��edd��gZddgZd	egd	g�
�fded	gdg�
�fd
ed	dgdg�
�fgZy)�TestPositionalsNargsZeroOrMore1z=Test a Positional with unlimited nargs followed by one with 1r(r�rsrCrrrr�r�rrr|rr}Nr�rArrr5r5�sg��G��u�C�0�#�e�1�2E�F���G��H�	�b�R�c�U�#�$�	���u�3�%�(�)�	�"�#�s��#��/�0��Irr5c�z�eZdZdZedd��edd��gZgd�Zded	gd
g��fded	d
gd
g��fgZy)�TestPositionalsNargsOneOrMore1z?Test a Positional with one or more nargs followed by one with 1r(r�rsrCrrr$rr�r|rrr}Nr�rArrr7r7�sR��I��u�C�0�#�e�1�2E�F��!�H�	���u�3�%�(�)�	�"�#�s��#��/�0��Irr7c�t�eZdZdZedd��edd��gZgd�Zded	dg�
�fdeddg�
�fgZy	)
�TestPositionalsNargsOptional1z?Test a Positional with an Optional nargs followed by one with 1r(r�rsrCrrr'r�Nrrr|r�rArrr9r9�sL��I��u�C�0�#�e�1�2E�F��%�H�	�b�T��u�%�&�	��s���&�'��Irr9c��eZdZdZed�edd��edd��gZgd�Zd	ed
gdg��fd
ed
dgdg��fgZy)�#TestPositionalsNargsNoneZeroOrMore1z=Test three Positionals: no nargs, unlimited nargs and 1 nargsr(rCr�rsrDrrr$rr�r|�r(rCrDrr}Nr�rArrr;r;�s`��G�	�E�
��E����E�����
"�H�	��s����.�/�	�"��3�%�c�U�3�4��Irr;c��eZdZdZed�edd��edd��gZgd�Zd	ed
dgdg�
�fded
ddgdg�
�fgZy)�"TestPositionalsNargsNoneOneOrMore1z?Test three Positionals: no nargs, one or more nargs and 1 nargsr(rCr�rsrDrr)rr�r�r|rr�r|r}r<rr�Nr�rArrr>r>sd��I�	�E�
��E����E�����
'�H�	�"��3�%�c�U�3�4�	�B�3�S�#�J�S�E�:�;��Irr>c��eZdZdZed�eddd��edd�	�gZgd
�Zdeddd
g��fdedd
dg��fgZy)�!TestPositionalsNargsNoneOptional1z;Test three Positionals: no nargs, optional narg and 1 nargsr(rCr���?r�rDrrrsr$rr�r|r<rr}Nr�rArrr@r@s`��E�	�E�
��E��e�,��E�����
"�H�	��s��C�5�1�2�	�"��#�C�5�1�2��Irr@c��eZdZdZedd��eddd��gZdd	gZd
edd��fd
ed
d��fded
d��fgZy)�$TestPositionalsNargsOptionalOptionalzTest two optional nargsr(r�rsrCrr�r�rrNrr�rr|r�rArrrCrCse��!�	�E����E��b�)�����!�H�	�R�D�b�
!�"�	�b�S�b�!�"�	��s��$�%��IrrCc	��eZdZdZedd��edd��gZdgZded	g�
�fdedg�
�fdedd
g�
�fdedd
dg�
�fgZy	)�&TestPositionalsNargsOptionalZeroOrMorez1Test an Optional narg followed by unlimited nargsr(r�rsrCr�r�rNrr�rr|rr}r�rArrrErE.sn��;��u�C�0�#�e�3�2G�H���y�H�	�R�D�b�
!�"�	�b�S�b�!�"�	��s���&�'�	�"��3��*�-�.�	�IrrEc��eZdZdZedd��edd��gZddgZd	ed
d	g��fded	d
g��fded	d
dg��fgZy
)�%TestPositionalsNargsOptionalOneOrMorez3Test an Optional narg followed by one or more nargsr(r�rsrCr�rr�r�Nrrr|rr}r�rArrrGrG;sc��=��u�C�0�#�e�3�2G�H���G�}�H�	�b�T��u�%�&�	��s���&�'�	�"��3��*�-�.��IrrGc�f�eZdZdZeded���gZgd�Zded��fded��fgZ	y	)
�TestPositionalsChoicesStringz&Test a set of single-character choicesr��abcdefgr��rr�rfr��efr��r�reN)
rrr r!rt�setr�r�r{r�rArrrIrIGs=��0��v�s�9�~�>�?��-�H�	�b�c�l��	�b�c�l���IrrIc�h�eZdZdZedeed���gZgd�Zde	d��fd	e	d
��fgZ
y)�TestPositionalsChoicesIntzTest a set of integer choicesr��r�rK�4r�rM�15�Nr�rArrrPrPRs?��'��v�C��r��C�D��-�H�	�b�a�j��	
�r�r�{���IrrPc�b�eZdZdZedd��eddd��gZgd�Zded	d
dgg��fgZy
)�TestPositionalsActionAppendzTest the 'append' actionr�r�r�r�)rrtrrr�r|r}rMNr�rArrrVrV]sI��"�	�F�8�$��F�8�1�-���4�H�	�"�3��c�
�+�,�-��IrrVc��eZdZdZedd��eddd��gZd	d
gZdedd
��fdedd
��fdedd��fdedd��fgZy)�"TestOptionalsNumericAndPositionalsz;Tests negative number args when numeric options are presentr�r�rsz-4r[r��r'rr(z-315rNFrmr�Tz-4 ar�rArrrXrXmss��E�	�C�s���D�s�<�0����f�~�H�	�R�$�%�
 �!�	�b�3�%� �!�	
�r�D�D�!�"�	��c�T�"�#�	�IrrXc	��eZdZdZedd��eddd��gZd	gZd
edd�
�fdedd�
�fdedd�
�fdedd�
�fdedd�
�fgZy)�(TestOptionalsAlmostNumericAndPositionalszBTests negative number args when almost numeric options are presentr�r�rsz-k4r[r�rYz-k3rNFrmr(r�Tz-k4 ar�rArrr[r[}s���L�	�C�s���E��L�1����w�H�	�R�$�%�
 �!�	
�r�D�E�"�#�	�b�3�%� �!�	��T�T�"�#�	�"�s�d�#�$��Irr[c��eZdZedd��eddd��gZdgZdgedd	�
�fdgedd	�
�fdgedd	�
�fddged	d�
�fddged	d�
�fddged	d�
�fd
ged	d�
�fdged	d�
�fgZy	)�$TestEmptyAndSpaceContainingArgumentsr�r�rsr
z--yyyr[r&rNrmza badgerz	-a badgerz--yyy=a badgerz--yyy=-a badger)rrr rtr�r�r{r�rArrr]r]�s���	�C�s���D�'��$����v�H�
��r�B�$�� �
��r�J�$�/�0�
���[�D�1�2�
���R�$�"�%�&�
�
�	�R�$�*�5�6�
��	�b�4�;�7�8�
�	�R�$�*�5�6�
�	�b�4�;�7�8�	�Irr]c��eZdZed��Zedddd��edd	ed
��edd
d��gZddgZdedd
d��fdedd
d��fdedd
d��fdeddd��fdedd
d��fdedd
d��fgZ	y)� TestPrefixCharacterOnlyArgumentsz-+�rI�-r�r�r3)r'rtrr�r[r)r'r�rlz-+-rr�rYr
z+ -rNFrZz- Xr5z+ -3���Tz- ===z===)
rrr rtr�r�r�r�r{r�rArrr_r_�s�����-���C�c��H�5��C�c��R�0��E��L�1���
�e�}�H�	�R�$�"��
&�'�	�b�8�r�U�+�,�	��S�B�%�(�)�	��d�b�E�*�+�	��T�R�4�(�)�	�"�u��e�,�-�
�Irr_c���eZdZdZedd��edd��gZgZdedg��fdegg��fd	ed
gg��fded
gdg��fd
edd
g��fd
egd
g��fdedgd
g��fgZy)�TestNargsZeroOrMorer�r�r�rsr[rNrmr�r�z	-x a -- br|ryrzr�rArrrdrd�s���I��t�3�/��S��1D�E���H�	�R�$�"�
��	
�r�B�"�~��	��s�e�r�"�#�	�b�C�5�S�E�*�+�	�b�4�C�5�!�"�	��b�S�E�"�#�	�2���#��'�(��Irrdc	��eZdZdZed�edd��ed�gZgd�Zdedgd	�
�fdedgd�
�fd
edgd�d	�
�fdedddgd	�
�fgZy	)�TestNargsRemainderz2Tests specifying a positional with nargs=REMAINDERr�r[�...rsr)rrz-z Zr5NrZz-z Z X�Z�
X A B -z Z)�ArArrhz	X Y --foo�Yr�r�rArrrfrf�sv��<��s�8�S��E�%:�C��I�F��!�H�	�b�3�"��%�&�	�2��r�S�)�*�	�r�C�#8�D�A�B�	�b�3�3��.�D�9�:�	�Irrfc�l�eZdZdZede��eded��edd�	�gZgd
�Zdeddg�
�fdeddg�
�fdedddg�
�fdeddg�
�fdeddg�
�fdeddg�
�fdedddg�
�fdedddg�
�fdedddg�
�fdedddg�
�fdedddg�
�fgZ	y)�TestOptionLikez.Tests options that may or may not be argumentsr��r�z-3r[)r�r'rr�rs)
r�z-y2.5r�z-x -az-x -3z-x -3.5z-3 -3.5z-x -2.5z	-x -2.5 az-3 -.5za x -1z-x -1 az-3 -1 arNrZz-x 2.5�@z-x 2.5 ar�z-3.5��?z-3-.5g�z-3 .5za -3.5za -x 1g�?z-x 1 az-3 1 a)
rrr r!rt�floatr�r�r{r�rArrrmrm�s��8�	�D�u���D�u�3�'��C�s����
0�H�

�R�$�$�"�
%�&�	�2��t�r�*�+�	�R�#��#��/�0�	��d�c�R�(�)�	�"�t�t�r�*�+�	�"�t�s�b�)�*�	�2����u�-�.�	�b�4�4�C�5�)�*�	�2��t��u�-�.�	�2��t��u�-�.�	�2����u�-�.��Irrmc��eZdZdZeddej��eddej��eddej�	�gZd
gZde	�fde	d�
�fde	ddg��fde	d��fde	dd��fde	ddgd��fgZ
y)�TestDefaultSuppressz%Test actions with suppressed defaultsr(r�r�rCr�rbr�r�r�rr�rrr|rTr�r��r(rDr�r<N)rrr r!rtr+�SUPPRESSr�r�r{r�rArrrsrs�s���/�	�E��h�&7�&7�8��E��h�&7�&7�8��G�L�(�2C�2C�D���
�v�H�	�R�T�
�	�b�S�k��	��s���&�'�	�"��,��	�B�3�D�)�*�	�b�S�s�e��6�7�
�Irrsc��eZdZdZeej��Zedd��edd��edd	�
�gZdgZ	de
�fd
e
d
��fde
d
dg��fde
d��fde
d
d��fde
d
dgd��fgZy)�TestParserDefaultSuppressz4Test actions with a parser-level default of SUPPRESS��argument_defaultr(r�rsrCr�rbr�r�r�rr�rrr|rTr�r�rtr�r<N)rrr r!rtr+rur�r�r�r{r�rArrrwrw�s���>��H�,=�,=�>���E����E����G�L�)���
�v�H�	�R�T�
�	�b�S�k��	��s���&�'�	�"��,��	�B�3�D�)�*�	�b�S�s�e��6�7�
�Irrwc��eZdZdZed��Zeddd��edd	�
�edd�
�ed
d��gZdgZdedddd��fdedddd��fdeddgdd��fd
edddd��fdedddd��fdeddgdd��fgZ	y)�TestParserDefault42z.Test actions with a parser-level default of 42rrx�	--version�version�1.0�rr}r(r�rsrCr�rbr�r�r�r)r(rCrDr}r�rr|Tr�r�NrTrArrr{r{s���8��B�/���K�	�5�9��E����E����G�L�)�	���v�H�	�R�B�B�B��
3�4�	�b�S�b�b�"�5�6�	��s���2�r�:�;�	�"����r�:�;�	�B�3�B�D�"�=�>�	�b�S�s�e��r�B�C�
�Irr{c���eZdZdZ�fd�Zed��Zed�ed�edd�	�gZgd
�Zde	jzZded
ddg��fdeddddg��fded
edg��fded
deg��fdededdg��fdeddedg��fgd�edddg��fgZ
e	jrPe	jjd�Zej$e�Ze
ded
edg��fded
deg��fgz
Z
�xZSdZ�xZS)�TestArgumentsFromFile�"Test reading arguments from a filec���tt|��dtj|j
�dzfddd|jdzfg}|D]+\}}t|d�5}|j|�ddd��-y#1swY�8xYw)N�hello�
)�	recursives-a
A
@hello)�invalids@no-such-path
�undecodable�wb)	rr�rKrS�fsencoder�r�rjrk�r�
file_textsr[�textrnrs     �rrKzTestArgumentsFromFile.setUp+s����
�#�T�0�2�
�b�k�k�$�*�*�-��5�6�
%�
,�
�D�,�,�u�4�5�

�
�%�	!�J�D�$��d�D�!�
!�T��
�
�4� �
!�
!�	!�
!�
!�s�A<�<B	�@��fromfile_prefix_charsr�r�r[r�rs)rr�r5z@invalidz@missingzhello world!zX YNr5rk)r�r�r[z
X -a A Y Zrjrh�@hello XzX @helloz-a B @recursive Y ZzX @recursive Z -a BrA)r�rr5rkr�@z@undecodable XzX @undecodabler)rrr r!rKrtr�r�r�r�FS_NONASCIIr�r{r��TESTFN_UNDECODABLE�lstripr�rS�fsdecode�decoded_undecodabler"r#s@rr�r�(sR���,�!���5���D�	��C���C�s����
7�H��Y�2�2�2�E�	��T�S�S�E�*�+�	�r�C�3�3��*�5�6�	�R�$�%�C�5�1�2�	�R�$�#�%��1�2�	��S�E�c�3�Z� @�A�	��S�C�E�3�<� @�A�	�r�B�#�#��7�8��I��#�#��2�2�9�9�$�?��)�b�k�k�+�6���
�r�D�,?�C�5�I�J�
�r�D�C�4G�3H�I�J�
�	
�	�
�rr�c���eZdZdZ�fd�ZGd�de�ZeZed��Z	edd�	�gZ
gZd
egd���fgZ
�xZS)
�TestArgumentsFromFileConverterr�c���tt|��dg}|D]+\}}t|d�5}|j	|�ddd��-y#1swY�8xYw)N)r�s
hello world!
r�)rr�rKrjrkr�s     �rrKz$TestArgumentsFromFileConverter.setUpXsb���
�,�d�9�;�(�
�
�%�	!�J�D�$��d�D�!�
!�T��
�
�4� �
!�
!�	!�
!�
!�s�A�A	c��eZdZd�Zy)�>TestArgumentsFromFileConverter.FromFileConverterArgumentParserc#�`K�|j�D]}|j�s�|���y�wrO)r��strip)r�arg_line�args   r�convert_arg_line_to_argszWTestArgumentsFromFileConverter.FromFileConverterArgumentParser.convert_arg_line_to_argscs-�����~�~�'�
���y�y�{���	�
�s�,.N)rrr r�rArr�FromFileConverterArgumentParserr�as��	rr�r�r�r[r�rsr�)r�zworld!r5r�)rrr r!rKr�r�r�rtr�r�r�r{r�r"r#s@rr�r�UsX���,�!��*D��3�L���5���C�s�����H�	�R�2�3�4��Irr�c�*�eZdZd�Zd�Zd�Zd�Zd�Zy)�TestFileTypeReprc�d�tjd�}|jdt|��y)Nr�z
FileType('r')�r+�FileTyper��repr�rr�s  r�test_rzTestFileTypeRepr.test_rys&��� � ��%������$�t�*�5rc�f�tjdd�}|jdt|��y)Nr�rrzFileType('wb', 1)r�r�s  r�	test_wb_1zTestFileTypeRepr.test_wb_1}s)��� � ��q�)�����,�d�4�j�9rc�h�tjdd��}|jdt|��y)Nr��latin_1rhz!FileType('r', encoding='latin_1')r�r�s  r�test_r_latinzTestFileTypeRepr.test_r_latin�s)��� � ��y�9�����<�d�4�j�Irc�j�tjddd��}|jdt|��y)Nrg�big5�ignore)ri�errorsz/FileType('w', encoding='big5', errors='ignore')r�r�s  r�test_w_big5_ignorez#TestFileTypeRepr.test_w_big5_ignore�s.��� � ��v�h�G�����J��d��	%rc�j�tjddd��}|jdt|��y)Nr�rr�replace�r�z"FileType('r', 1, errors='replace')r�r�s  r�test_r_1_replacez!TestFileTypeRepr.test_r_1_replace�s+��� � ��a�	�:�����=�t�D�z�JrN)rrr r�r�r�r�r�rArrr�r�ws��6�:�J�%�
Krr�c��eZdZd�Zd�Zy)�StdStreamComparerc��tj|�|_|dk(rt|_y|dk(rt
|_yt
�|_y)N�
stdout.buffer�
stderr.buffer)�operator�
attrgetterr�r��
backupattrr�r�)rr�s  rrzStdStreamComparer.__init__�s=�� �*�*�4�0����?�"�1�D�O�
�_�
$�1�D�O�$�h�D�Orc�p�	||jt�k(S#t$r||jk(cYSwxYwrO)r�r��AttributeErrorr�r�s  rr�zStdStreamComparer.__eq__�s9��	,��D�L�L��-�-�-���	,��D�O�O�+�+�	,�s��5�5N�rrr rr�rArrr�r��s��'�,rr��stdinr�r�zstdin.bufferr�r�c��eZdZiZd�Zd�Zy)�RFilec��||_yrO�rd�rrds  rrzRFile.__init__��	����	rc�&�||jvr|j|}n/|j�x}|j|<|j�t|t�s|jd�}|j|jcxk(xr|k(ScS)N�ascii)�seen�read�closer�r�rrd�rr�r�s   rr�zRFile.__eq__�st���D�I�I���9�9�U�#�D�&+�j�j�l�2�D�4�9�9�U�#��K�K�M��$��$��;�;�w�'�D��y�y�E�J�J�.�$�.�.�.�.rN)rrr r�rr�rArrr�r��s��
�D��/rr�c�J��eZdZdZ�fd�Zedej���edejd���gZgd�Z	de
d	ed��
�fde
ed�ed��
�fd
e
ed�ed��
�fde
ee�
�fde
d	ed��
�fgZ
�xZS)�
TestFileTypeR�8Test the FileType option/argument type for reading filesc���tt|��dD]R}ttj
j
|j|�dd��5}|j|�ddd��T|jd�y#1swY�pxYw)Nrrgrrh�readonly)
rr�rKrjrSr[r\rRrkrr�r�	file_namernrs   �rrKzTestFileTypeR.setUp�sz���
�m�T�(�*�'�	&�I��b�g�g�l�l�4�=�=�)�<��G�-�
&�04��
�
�9�%�
&�
&�	&�	
�!�!�*�-�
&�
&�s�A=�=B	r�rnr�r�)r�rznon-existent-file.txtr(N�r�r��
-x foo barrC�
bar -x foo�-x - -r�)rrr r!rKrtr+r�r�r�r{r��eq_stdinr�r"r#s@rr�r��s����B�.�	�D�(�x�(�(�*�+��F�*��*�*�3�/�0���3�H�	��T��e��-�.�	�r�E�%�L�u�U�|�<�=�	�r�E�%�L�u�U�|�<�=�	�2��x�0�1�	�R�$�U�:�%6�7�8��Irr�c���eZdZdZ�fd�Zedejd�d��gZdgZ	de
ed	��
�fgZ�xZ
S)�TestFileTypeDefaultsz<Test that a file is not created unless the default is neededc����tt|��ttj
j
|jd�dd��}|jd�|j�y)N�goodrgrrh)
rr�rKrjrSr[r\rRrkr�)rrnrs  �rrKzTestFileTypeDefaults.setUp�sG���
�"�D�/�1��B�G�G�L�L�����7��w�O���
�
�6���
�
�rr�r�zno-file.txt�r�rlrz-c goodr�)r})rrr r!rKrtr+r�r�r�r{r�r�r"r#s@rr�r��sN���F��	�D�(�x�(�(��-�}�E����t�H��R�%��-�0�1�2�Irr�c	�*��eZdZdZ�fd�Zedejd���edejd���gZddgZ	de
d	ed��
�fde
ed�ed��
�fd
e
ed�ed��
�fde
ee�
�fgZ
�xZS)�TestFileTypeRBr�c����tt|��dD]R}ttj
j
|j|�dd��5}|j|�ddd��Ty#1swY�_xYw)Nrrgrrh)	rr�rKrjrSr[r\rRrkr�s   �rrKzTestFileTypeRB.setUp�sj���
�n�d�)�+�'�	&�I��b�g�g�l�l�4�=�=�)�<��G�-�
&�04��
�
�9�%�
&�
&�	&�
&�
&�s�A,�,A5	r��rbrnr�rr(Nr�r�rCr�r�)rrr r!rKrtr+r�r�r�r{r��	eq_bstdinr�r"r#s@rr�r��s����B�&�	�D�(�x�(�(��.�/��F�*��*�*�4�0�1����b�z�H�	��T��e��-�.�	�r�E�%�L�u�U�|�<�=�	�r�E�%�L�u�U�|�<�=�	�2�	�	�2�3�	�Irr�c�&�eZdZe�Zd�Zd�Zy)�WFilec��||_yrOr�r�s  rrzWFile.__init__r�rc�
�||jvr]d}d|jvr|jd�}|j|�|j	�|jj|�|j|jk(S)NzCheck that file is writable.r|r�)r��moder
rkr��addrdr�s   rr�zWFile.__eq__se����	�	�!�1�D��e�j�j� ��{�{�7�+���K�K����K�K�M��I�I�M�M�%� ��y�y�E�J�J�&�&rN)rrr rNr�rr�rArrr�r�s���5�D��'rr�c
�L��eZdZdZ�fd�Zedejd���edejd���gZgd�Z	de
d	ed��
�fde
d	ed��
�fde
ed�ed
��
�fde
ed�ed
��
�fde
ee�
�fgZ
�xZS)�
TestFileTypeWz8Test the FileType option/argument type for writing filesc�f��t�|��|jd�|jd�y�Nr��writable�rrKrrro�rrs �rrKzTestFileTypeW.setUp�(���
��
���!�!�*�-��!�!�*�-rr�rgrnr�)r�rr�r(Nr�r�r�rCr�r��rrr r!rKrtr+r�r�r�r{r��	eq_stdoutr�r"r#s@rr�r�s����B�.�	�D�(�x�(�(��-�.��F�*��*�*�3�/�0���&�H�	��T��e��-�.�	�R�$�U�:�%6�7�8�	�r�E�%�L�u�U�|�<�=�	�r�E�%�L�u�U�|�<�=�	�2�	�	�2�3��Irr�c����eZdZdZ�fd�Zedejd���edejd���gZgd�Z	de
ed	�ed
���fde
ee��fgZ
�xZS)
�
TestFileTypeXzATest the FileType option/argument type for writing new files onlyc�f��t�|��|jd�|jd�yr�r�r�s �rrKzTestFileTypeX.setUp.r�rr�r�rnr�)r�rr�r�r�r(rCr�r�r�r#s@rr�r�*sy���K�.�	�D�(�x�(�(��-�.��F�*��*�*�3�/�0���2�H�	�r�E�%�L�u�U�|�<�=�	�2�	�	�2�3��Irr�c	��eZdZdZedejd���edejd���gZddgZde	de
d��	�fd
e	e
d�e
d��	�fde	e
d�e
d��	�fd
e	ee�	�fgZy)�TestFileTypeWBz?Test the FileType option/argument type for writing binary filesr�r�rnr�rr(Nr�r�rCr�r�)
rrr r!rtr+r�r�r�r{r��
eq_bstdoutr�rArrr�r�>s���I�	�D�(�x�(�(��.�/��F�*��*�*�4�0�1����b�z�H�	��T��e��-�.�	�r�E�%�L�u�U�|�<�=�	�r�E�%�L�u�U�|�<�=�	�2�
��4�5�	�Irr�c��eZdZdZedejd���edejd���gZdee	d�e	d��	�fd
ee
e
�	�fgZy)�TestFileTypeXBzHTest the FileType option/argument type for writing new binary files onlyr��xbrnr�r�r(rCr�r�N)rrr r!rtr+r�r�r{r�r�r�rArrr�r�Osn��N�	�D�(�x�(�(��.�/��F�*��*�*�4�0�1���

�r�E�%�L�u�U�|�<�=�	�2�
��4�5��Irr�c��eZdZdZd�Zy)�TestFileTypeOpenArgsz0Test that open (the builtin) is correctly calledc
�2�tj}|d�df|dd�df|dd��df|d	d
��df|dd
dd�dfg}tjd�5}|D] \}}|d�|jdg|����"	ddd�y#1swYyxYw)Nr�)r����NNrgrr)rgrrNNr�r�)rgrNr�r�r�rh)r�rr�Nr�l1�strict)rgrrrz
builtins.openr()r+r�rr/�assert_called_with)r�FT�cases�mr�rvs      r�test_open_argsz#TestFileTypeOpenArgs.test_open_args`s���
�
�
��
��X�-�.�
��Q�Z�-�.�
��I�
&�(B�C�
��v�
&�(@�A�
��Q��h�
'�)A�B�
���Z�Z��
(�	3�A�#�
3�
��d��U��$��$�$�U�2�T�2�
3�	3�	3�	3�s�&B
�
BN)rrr r!r
rArrrr]s
��:�3rrc��eZdZdZd�Zy)�!TestFileTypeMissingInitializationzx
    Test that add_argument throws an error if FileType class
    object was passed instead of instance of FileType
    c�.�tj�}|jt�5}|j	dtj
��ddd�|j
tj
�d�tj��y#1swY�@xYw)Nr�rnz: is a FileType class object, instance of it must be passed)	r+r,r��
ValueErrorr�r�r�r�r�r�s   r�testz&TestFileTypeMissingInitialization.testusx���(�(�*��
�
�
�z�
*�	>�b�����8�+<�+<��=�	>�	
���� � �
#������	
�	>�	>�s�"B�BN�rrr r!rrArrrros���
	
rrc��eZdZdZede��ede��gZgd�Zde	dd�	�fd
e	dd�	�fd
e	dd�	�fgZ
y)�TestTypeCallablez,Test some callables as option/argument typesz--eggsrnr�)r��42jz--eggs az	--eggs 2iz--eggs=42 42rgE@)�eggsr�z--eggs 2j -- -1.5y@���z1024.675Ng3333��@)rrr r!rt�complexrqr�r�r{r�rArrrr�s^��6�	�H�7�#��F�����5�H�	���$�/�0�	�b�b�t�4�5�	�R�T��1�2��Irrc��eZdZdZGd�de�Zede��ede��gZgZde	ed�ed	��
�fde	ed�ed
��
�fgZ
y)�TestTypeUserDefinedz(Test a user-defined option/argument typec��eZdZd�Zd�Zy)�TestTypeUserDefined.MyTypec��||_yrO��value�rrs  rrz#TestTypeUserDefined.MyType.__init__��	���D�Jrc�`�t|�|jft|�|jfk(SrO�r�rr�s  rr�z!TestTypeUserDefined.MyType.__eq__��'����J��
�
�+��U��U�[�[�/I�I�IrNr�rArr�MyTyper��
��	�	Jrr#r�rnr�rzr|r�r��-xf grreN)rrr r!rCr#rtr�r�r{r�rArrrr�sm��2�J��J�	�D�v���F�� ����H�	�2��s��&��+�6�7�	�"�v�c�{����5�6��Irrc��eZdZdZGd�d�Zede��ede��gZgZdeed�ed	��
�fdeed�ed
��
�fgZ	y)�TestTypeClassicClasszTest a classic class typec��eZdZd�Zd�Zy)�TestTypeClassicClass.Cc��||_yrOrrs  rrzTestTypeClassicClass.C.__init__�rrc�`�t|�|jft|�|jfk(SrOr!r�s  rr�zTestTypeClassicClass.C.__eq__�r"rNr�rArr�Cr)�r$rr,r�rnr�rzr|r�r�r%rreN)
rrr r!r,rtr�r�r{r�rArrr'r'�sk��#�J�J�	�D�q���F������H�	�2��#��Q�s�V�,�-�	�"�q��v�A�c�F�+�,��Irr'c��eZdZdZd�Zy)�TestTypeRegistrationz*Test a user-defined type by registering itc��d�}tj�}|jdd|�|jdd��|jdd��|j	|jdj
��tdd�	��|j	|jd
j
��tdd�	��y)Nc��d|zS)Nzmy_type{%s}rA��strings r�get_my_typez.TestTypeRegistration.test.<locals>.get_my_type�s
�� �6�)�)rr��my_typer�rnr[rz
my_type{1}rmz-x 1 42zmy_type{42})r+r,�registerr�r�r;r�r{)rr3r2s   rrzTestTypeRegistration.test�s���	*��(�(�*������	�;�7����D�y��1����C�i��0�����*�*�3�9�9�;�7��d�l�3�	5�����*�*�9�?�?�+<�=��l�m�<�	>rNrrArrr.r.�s
��4�
>rr.c��eZdZdZGd�dej
�ZGd�dej
�Zeddee	d�	�ed
ee
dd�
�gZgZde
dd��fde
dd��fde
dd��fde
dd��fgZy)�TestActionUserDefinedz*Test a user-defined option/argument actionc��eZdZdd�Zy)�$TestActionUserDefined.OptionalActionNc���	td��}|dvrd|_n|dvrd|_ntd|z��t	|d	|�y#t$r}td|z��d}~wwxYw)
N��?rM)��?rAr�)�@r��	value: %szopt_action failed: %sr�)r{r3�AssertionErrorr�r��rr2�	namespacer�
option_stringr�r�s       r�__call__z-TestActionUserDefined.OptionalAction.__call__�su��
G�!�d�m���N�*�)*�K�&��e�^�)+�K�&�(��u�)<�=�=�

�I�v�u�-��"�
G�)�*A�A�*E�F�F��
G�s�2A�	A�A�ArO�rrr rCrArr�OptionalActionr9�s��	.rrEc��eZdZdd�Zy)�&TestActionUserDefined.PositionalActionNc���	td��}|dvrd|_n&|dvrd|_n|dvrd|_ntd	|z��t	|d|�y#t$r}td
|z��d}~wwxYw)Nr��r3)rr�r;)rrrA)r�r<r>zarg_action failed: %sr3)r{r�r?r�r�r@s       rrCz/TestActionUserDefined.PositionalAction.__call__�s���
G�!��l���H�$�'+�K�$��c�\�',�K�$��c�\�',�K�$�(��u�)<�=�=�

�I�x��/��"�
G�)�*A�A�*E�F�F��
G�s�>A�	A*�A%�%A*rOrDrArr�PositionalActionrG�s��	0rrJz-sr�r;)r'rr�rlr3r�r�)rr�rtrlz-s0.125r<)r�r3r�rz
-s 0.625 1rArrz84 -s2r=r�N)rrr r!r+�ActionrErJrtrqr�r�r�r{r�rArrr7r7�s���4�.����.�,0�8�?�?�0�4	�D�v�n���	&��H�-��C��	,����H�	�B�E�!�,�-�	
�r�t�B�'�(�	�r�u�Q�/�0�	�2�3�r�*�+�	�Irr7c�@�eZdZdZGd�dej
�Zd�Zy)�TestActionRegistrationz5Test a user-defined action supplied by registering itc��eZdZdd�Zy)�TestActionRegistration.MyActionNc�8�t||jd|z�y)Nzfoo[%s])r�r')rr2rA�valuesrBs     rrCz(TestActionRegistration.MyAction.__call__s���I�t�y�y�)�f�*<�=rrOrDrArr�MyActionrOs��	>rrRc�<�tj�}|jdd|j�|j	dd��|j|j
dg�td���|j|j
dg�td	���y)
Nr�	my_actionr3r�rzfoo[1]rIr�zfoo[42])r+r,r5rRr�r�r;r{r1s  rrzTestActionRegistration.tests{���(�(�*������+�t�}�}�=����H�[��9�����*�*�C�5�1�2�X�3F�G�����*�*�D�6�2�B�i�4H�IrN)rrr r!r+rKrRrrArrrMrMs��?�>�8�?�?�>�
JrrMc�F�eZdZeddde��gZdZdegd���fgZy	)
�TestActionExtendr��extendr�)rrtr�rAz--foo f1 --foo f2 f3 f4)�f1�f2�f3�f4rN)	rrr rtr�r�r�r{r�rArrrVrV&s4���G�H�C�c�:����H�	"�B�+C�$D�E��IrrVc����eZdZdZd�Z		dd�Z�fd�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�Z�xZS)�TestAddSubparserszTest the add_subparsers methodc�8�|jtg|��i|��yrO�r�r�rxs   r�assertArgumentParserErrorz+TestAddSubparsers.assertArgumentParserError6�������-�?��?��?rc�T�|r,tdd|��}|j|ddzdzdd�	�n!tdd�
�}|jddd�	�|jdtd
��ddi}|rd|d<d|d<nd|d<|jd4i|��}|j	|j�td��}|rd|d<|rddg|d<|jd5i|��}|jdtd��|jdd d!�"�td#��}	|rd$|	d<|jd6i|	��}
|
jd%d&d'�"�|
jd(td)d*�+�td,��}|rd-|d<|jd7i|��}|jd.td/��|jd0d1d2�3�|S)8N�PROG�main description)�prog�descriptionrIrr�r(r��foo help�r�help�rerfr�rC�bar help�r�rir�F�COMMANDr��commands�title�command helpriz
1 description�rfz1 help�1alias1�1alias2�aliasesrYzw helpr�r��x help�r�riz
2 descriptionz2 helpr
�123�y helprr�zz help)r�rtriz
3 descriptionz3 help�tzt help�urgzu help�rtrirA�r)r�)r�)	r�r�rq�add_subparsersr`�dict�
add_parserr�r)
r�subparser_helprIrtr2�subparsers_kwargs�
subparsers�parser1_kwargs�parser1�parser2_kwargs�parser2�parser3_kwargs�parser3s
             rr�zTestAddSubparsers._get_parser9s���/��);�,�X�F�����Q��!�#�e�+�L�z�
 �
S�0��);�=�F������:�
 �
?������J�	�	0�(��/���+4��i�(�)3��g�&�(6��f�%�*�V�*�*�?�->�?�
��&�&�v�'<�'<�=��/�:���%-�N�6�"��)2�I�(>�N�9�%�'�*�'�'�>�~�>�����T��(��;����S�%�h��?��/�:���%-�N�6�"�'�*�'�'�>�~�>�����T�5�x��@����S�w�c���I��/�:���%-�N�6�"�'�*�'�'�>�~�>�����S�s���:����S��H��=��
rc�z��t�|��|j�|_|jd��|_y)NT)r�)rrKr�r2�command_help_parserr�s �rrKzTestAddSubparsers.setUpps2���
��
���&�&�(���#'�#3�#3�4�#3�#H�� rc�~�dD]8}|j�}|j|jj|��:y)N)rr�za az0.5 az0.5 1z0.5 1 -yz0.5 2 -w)r�r`r2r;)rr�rvs   r�test_parse_args_failuresz*TestAddSubparsers.test_parse_args_failuresus;��1�	I�H��>�>�#�D��*�*�4�;�;�+A�+A�4�H�	Irc
�<�|j|jjdj��t	dddd���|j|jjdj��t	dd	d
ddg�
��|j|jjdj��t	dddd���|j|jjdj��t	dddgd����y)N�0.5 1 b -w 7Frp�r|�r(rCrgr�z0.25 --foo 2 -y 2 3j -- -1jTr;r�y@y��)r(rCr[rz--foo 0.125 1 cr<r}z-1.5 3 11 -- a --foo 7 -- br�)r�r�r��--r|)r(rCryrz)r�r2r;r�r{rs r�test_parse_argsz!TestAddSubparsers.test_parse_args|s�������K�K�"�"�>�#7�#7�#9�:��5�c�Q�#�.�	
�	
����K�K�"�"�#@�#F�#F�#H�I��4�T�S�R��I�6�	
�	
����K�K�"�"�#4�#:�#:�#<�=��4�U�d�c�2�	
�	
����K�K�"�"�#@�#F�#F�#H�I��5�d�b�,J�K�	
rc	���|j|jjdj��t	dddd��gf�|j|jjdj��t	dddd��dgf�|j|jjd	j��t	dddd��dgf�|j|jjd
j��t	dddd��ddgf�|j|jjd
j��t	dddd��gd�f�y)Nr�Frpr�r|r�z0.5 -p 1 b -w 7�-pz0.5 1 b -w 7 -pz0.5 1 b -q -rs -w 7z-qz-rsz0.5 -W 1 b -X Y -w 7 Z)z-Wz-Xrkrh)r�r2�parse_known_argsr�r{rs r�test_parse_known_argsz'TestAddSubparsers.test_parse_known_args�sC������K�K�(�(��)=�)=�)?�@�
�E�s�a�3�
/��4�	
�	
����K�K�(�(�):�)@�)@�)B�C�
�E�s�a�3�
/�$��8�	
�	
����K�K�(�(�):�)@�)@�)B�C�
�E�s�a�3�
/�$��8�	
�	
����K�K�(�(�)>�)D�)D�)F�G�
�E�s�a�3�
/�$���?�	
�	
����K�K�(�(�)A�)G�)G�)I�J�
�E�s�a�3�
/�1G�H�	
rc��t�}|jdd��|jd��}|jd�}|jd�|j	tddd	�
�|j
dj���y)Nr�r�r�rCr&rrDFr�r<r)r�r�r}rr�r{r;r�)rr2r�r�s    r�	test_destzTestAddSubparsers.test_dest�s{��+�-�����G�L��9��*�*��*�6�
��'�'��,�����U�#������3�C�8��*�*�5�;�;�=�9�	;rc��|jdg�}|j|jd�|j|jd�y)N�runrA)r;r��commandr`)rr2�rets   r�_test_required_subparsersz+TestAddSubparsers._test_required_subparsers�s@�������(��������e�,�	
�&�&�v�'8�'8�"�=rc��t�}|jd��}d|_|jd�|j	|�y)Nr�r&Tr�)r�r}r�rr��rr2r�s   r�&test_required_subparsers_via_attributez8TestAddSubparsers.test_required_subparsers_via_attribute�sA��+�-���*�*�	�*�:�
�"�
�����e�$��&�&�v�.rc��t�}|jdd��}|jd�|j|�y)Nr�T�r'r�r�)r�r}rr�r�s   r�"test_required_subparsers_via_kwargz4TestAddSubparsers.test_required_subparsers_via_kwarg�s;��+�-���*�*�	�D�*�I�
����e�$��&�&�v�.rc��t�}|jd��}|jd�|jd�}|j	|j
�y)Nr�r&r�rA�r�r}rr;�assertIsNoner��rr2r�r�s    r� test_required_subparsers_defaultz2TestAddSubparsers.test_required_subparsers_default�sM��+�-���*�*�	�*�:�
����e�$�����#�����#�+�+�&rc�B�t�}|jd��}|jd�|jd�|jt�5}|jd�ddd�|j
jjd�y#1swY�0xYw)NT�r�r(rCrAz8error: the following arguments are required: {foo,bar}
$�	r�r}rr�r�r;r>r�r��rr2r��excinfos    r�-test_required_subparsers_no_destination_errorz?TestAddSubparsers.test_required_subparsers_no_destination_error�s���+�-���*�*�D�*�9�
����e�$����e�$�
�
�
�2�
3�	"�w����b�!�	"�������$�$�G�	
�	"�	"���B�Bc�B�t�}|jd��}|jd�|jd�|jt�5}|jd�ddd�|j
jjd�y#1swY�0xYw)NTr�r(rCr�zPerror: argument {foo,bar}: invalid choice: 'baz' \(choose from 'foo', 'bar'\)\n$r�r�s    r�3test_wrong_argument_subparsers_no_destination_errorzETestAddSubparsers.test_wrong_argument_subparsers_no_destination_error�s���+�-���*�*�D�*�9�
����e�$����e�$�
�
�
�2�
3�	(�w����h�'�	(�������$�$�_�	
�	(�	(�r�c��t�}|jdd��}|jd�|jd�}|j	|j
�y)Nr�Fr�r�rAr�r�s    r�test_optional_subparsersz*TestAddSubparsers.test_optional_subparsers�sO��+�-���*�*�	�E�*�J�
����e�$�����#�����#�+�+�&rc���|j|jj�d�|j|jj�t	j
d��y)N�)usage: PROG [-h] [--foo] bar {1,2,3} ...
a?            usage: PROG [-h] [--foo] bar {1,2,3} ...

            main description

            positional arguments:
              bar         bar help
              {1,2,3}     command help

            options:
              -h, --help  show this help message and exit
              --foo       foo help
            )r�r2�format_usage�format_help�textwrap�dedentrs r�	test_helpzTestAddSubparsers.test_help�sQ��������1�1�3�E�	G�������0�0�2�H�O�O�E�5�	rc���|jd��}|j|j�d�|j|j�t	j
d��y)Nz+:-r`z)usage: PROG [-h] [++foo] bar {1,2,3} ...
a?            usage: PROG [-h] [++foo] bar {1,2,3} ...

            main description

            positional arguments:
              bar         bar help
              {1,2,3}     command help

            options:
              -h, --help  show this help message and exit
              ++foo       foo help
            �r�r�r�r�r�r�r1s  r�test_help_extra_prefix_charsz.TestAddSubparsers.test_help_extra_prefix_chars�s\���!�!�u�!�5������,�,�.�E�	G�����+�+�-�x���@�0�	rc��tdd��}|jddd��|j|j�t	j
d��y)	Nrcrdrjz--non-breakingr�uRhelp message containing non-breaking spaces shall not wrap at non-breaking spacesrhu7            usage: PROG [-h] [--non-breaking]

            main description

            options:
              -h, --help      show this help message and exit
              --non-breaking  help message containing non-breaking spaces shall not
                              wrap at non-breaking spaces
        �r�r�r�r�r�r�r1s  r�test_help_non_breaking_spacesz/TestAddSubparsers.test_help_non_breaking_spaces	s[��+��%7�9������]�;�	�	<�	
����+�+�-�x���	@�	0
�		rc�R�tdd��}|jdd��|j|j�t	j
d��tdd��}|jdgd�	�|j|j�t	j
d
��y)Nrcrdrjr(z    �riz�            usage: PROG [-h] foo

            main description

            positional arguments:
              foo         

            options:
              -h, --help  show this help message and exit
        z%(choices)srvz�            usage: PROG [-h] {}

            main description

            positional arguments:
              {}          

            options:
              -h, --help  show this help message and exit
        r�r1s  r�test_help_blankz!TestAddSubparsers.test_help_blank!	s���+��%7�9�������	�	�	
����+�+�-�x���	@�	0
�		�,��%7�9������2��	�	 �	
����+�+�-�x���	@�	0
�		rc���|jd��}|j|j�d�|j|j�t	j
d��y)NrGr`z)usage: PROG [+h] [++foo] bar {1,2,3} ...
a?            usage: PROG [+h] [++foo] bar {1,2,3} ...

            main description

            positional arguments:
              bar         bar help
              {1,2,3}     command help

            options:
              +h, ++help  show this help message and exit
              ++foo       foo help
            r�r1s  r� test_help_alternate_prefix_charsz2TestAddSubparsers.test_help_alternate_prefix_charsC	s\���!�!�u�!�5������,�,�.�E�	G�����+�+�-�x���@�0�	rc���|j|jj�d�|j|jj�t	j
d��y)Nr�a�            usage: PROG [-h] [--foo] bar {1,2,3} ...

            main description

            positional arguments:
              bar         bar help
              {1,2,3}     command help
                1         1 help
                2         2 help
                3         3 help

            options:
              -h, --help  show this help message and exit
              --foo       foo help
            )r�r�r�r�r�r�rs r�test_parser_command_helpz*TestAddSubparsers.test_parser_command_helpU	sU������1�1�>�>�@�E�	G�����1�1�=�=�?�!���*��	rc�~�tdd��}|jddd��|jdd	�
�|jddd
��}|jd�}|jd�}|j	|j�d�|j	|j
�tjd��y)Nrcrdrjr�r�rgrhrCrkr��subcommandsrpzadditional text)rorfrirr�z'usage: PROG [-h] [--foo] bar {1,2} ...
av            usage: PROG [-h] [--foo] bar {1,2} ...

            main description

            positional arguments:
              bar         bar help

            options:
              -h, --help  show this help message and exit
              --foo       foo help

            subcommands:
              command help

              {1,2}       additional text
            )	r�r�r}rr�r�r�r�r�)rr2r�r�r�s     r�test_subparser_title_helpz+TestAddSubparsers.test_subparser_title_helpj	s���+��8J�L�����G�L�z��J����E�
��3��*�*��7E�0A�+�C�
��'�'��,���'�'��,������,�,�.�C�	E�����+�+�-�x���@�0�	rc��|jt�5}|jj|j	��ddd�|j|jj�y#1swY�0xYwrO)r�r�r2r;r�r�r�r�)rr��
expected_helpr�s    r�_test_subparser_helpz&TestAddSubparsers._test_subparser_help�	s[��
�
�
�2�
3�	5�r��K�K�"�"�8�>�>�#3�4�	5��������(;�(;�<�	5�	5�s�*A/�/A8c�N�|jdtjd��y)Nz5.0 1 -ha            usage: PROG bar 1 [-h] [-w W] {a,b,c}

            1 description

            positional arguments:
              {a,b,c}     x help

            options:
              -h, --help  show this help message and exit
              -w W        w help
            �r�r�r�rs r�test_subparser1_helpz&TestAddSubparsers.test_subparser1_help�	�"���!�!�*�h�o�o�?�/�	rc�N�|jdtjd��y)Nz5.0 2 -ha            usage: PROG bar 2 [-h] [-y {1,2,3}] [z ...]

            2 description

            positional arguments:
              z           z help

            options:
              -h, --help  show this help message and exit
              -y {1,2,3}  y help
            r�rs r�test_subparser2_helpz&TestAddSubparsers.test_subparser2_help�	r�rc	� �|jd��}|j|jdj��t	dddd��gf�|j|jdj��t	dddd��gf�y)	NT�rtz
0.5 1alias1 bFrpr|r�z
0.5 1alias2 b)r�r�r�r�r{r1s  r�test_alias_invocationz'TestAddSubparsers.test_alias_invocation�	s����!�!�$�!�/������#�#�O�$9�$9�$;�<�
�E�s�d�c�
2�B�7�	
�	
����#�#�O�$9�$9�$;�<�
�E�s�d�c�
2�B�7�	
rc�|�|jd��}|j|jdj��y)NTr�z
0.5 1alias3 b)r�r`r;r�r1s  r�test_error_alias_invocationz-TestAddSubparsers.test_error_alias_invocation�	s8���!�!�$�!�/���&�&�v�'8�'8�'6�'<�'<�'>�	@rc��|jdd��}d|_|j|j�t	j
d��y)NT)rtr�a	            usage: PROG [-h] [--foo] bar COMMAND ...

            main description

            positional arguments:
              bar                   bar help

            options:
              -h, --help            show this help message and exit
              --foo                 foo help

            commands:
              COMMAND
                1 (1alias1, 1alias2)
                                    1 help
                2                   2 help
                3                   3 help
            )r��maxDiffr�r�r�r�r1s  r�test_alias_helpz!TestAddSubparsers.test_alias_help�	sH���!�!�$�t�!�D���������+�+�-�x���@�0�	r)FNF) rrr r!r`r�rKr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r"r#s@rr]r]3s����(�@�>B�!�5�nI�
I�
�&
�,;�>�/�/�'�

�

�'��"�&�$ �D�$�*�<=�
��	
�@�
rr]c�"�eZdZdZd�Zd�Zd�Zy)�TestPositionalsGroupsz@Tests that order of group positionals matches construction orderc��t�}|jd�|jd�}|jd�|jd�tddd��}|j	d	j��}|j
||�y)
Nr(rerCrDrr�r�r<�1 2 3)r�r�r�r{r;r�r��rr2r��expectedr�s     r�test_nongroup_firstz)TestPositionalsGroups.test_nongroup_first�	sx��+�-�����E�"��)�)�#�.��
���5�!����E�"��#�3�C�0���"�"�7�=�=�?�3������6�*rc��t�}|jd�}|jd�|jd�|jd�tddd��}|j	d	j��}|j
||�y)
N�xxxr(rCrDrr�r�r<r��r�r�r�r{r;r�r�r�s     r�test_group_firstz&TestPositionalsGroups.test_group_first�	sx��+�-���)�)�%�0��
���5�!����E�"����E�"��#�3�C�0���"�"�7�=�=�?�3������6�*rc�d�t�}|jd�}|jd�|jd�|jd�|jd�}|jd�tddd	d
��}|j	dj��}|j
||�y)
Nr�r(rCrDr�frellrr�r�rR)r(rCrDr�z1 2 3 4r�r�s     r�test_interleaved_groupsz-TestPositionalsGroups.test_interleaved_groups�	s���+�-���)�)�%�0�����E�"�
���5�!����E�"��)�)�%�0��
���7�#��#�3�C�s�;���"�"�9�?�?�#4�5������6�*rN)rrr r!r�r�r�rArrr�r��	s��J�+�+�
+rr�c�v��eZdZdZd�Z�fd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Z�xZS)�TestParentParsersz5Tests that parsers can be created with parent parsersc�8�|jtg|��i|��yrOr_rxs   rr`z+TestParentParsers.assertArgumentParserError�	rarc���t�|��td��|_|jj	d�|jjd�}|j	d�|jj	d�td��|_|jj	d�|jj	d�|jjd	�}|j	d
�td��|_|jj	d�td��|_|jj	d�td��|_	|jj�}|j	dd�
�|j	dd�
�tjjtjd�|_y)NF�rJz--wr�r
rr�r�r}z--dr�r�r�r)rrKr��wxyz_parentr�r��abcd_parent�w_parent�z_parent�ab_mutex_parent�add_mutually_exclusive_grouprSr[�basenamer�r��main_program)r�x_group�c_groupr�rs    �rrKzTestParentParsers.setUp
sb���
��
��5�u�E������%�%�e�,��"�"�5�5�c�:�����T�"����%�%�c�*�5�u�E������%�%�c�*����%�%�d�+��"�"�5�5�c�:�����U�#�2�E�B��
��
�
�"�"�5�)�2�E�B��
��
�
�"�"�3�'� :�5�I����$�$�A�A�C��
���4���5�
���4���5��G�G�,�,�S�X�X�a�[�9��rc��t|jg��}|j|jdj	��tddd���y)N��parentsz-y 1 2 --w 3r�rr��rgr[r)r�r�r�r;r�r{r1s  r�test_single_parentz$TestParentParsers.test_single_parent
sE��+�T�5E�5E�4F�G������*�*�>�+?�+?�+A�B��c�S�C�0�	2rc��|j|jj�t|jg��}|j|j�y�Nr�)�_test_mutex_abr�r;r�r1s  r�test_single_parent_mutexz*TestParentParsers.test_single_parent_mutex"
sC�����D�0�0�;�;�<�+�T�5I�5I�4J�K�����F�-�-�.rc��|jg}td|��}t|g��}|j|j�y)NF)rJr�r�)r�r�rr;�rr�r2s   r�test_single_granparent_mutexz.TestParentParsers.test_single_granparent_mutex'
s<���'�'�(��+�U�G�L��+�V�H�=�����F�-�-�.rc��|j|g�tdd���|j|dg�tdd���|j|dg�tdd���|j|ddg�|j|ddg�|j|dg�|j|ddg�|j|ddg�y)NF�r�r|r�Tr�r�)r�r{r`)rr;s  rrz TestParentParsers._test_mutex_ab-
s�������B���e�u�)=�>�����T�F�+�R�$�%�-@�A�����T�F�+�R�%�4�-@�A��&�&�z�D�$�<�@��&�&�z�D�$�<�@��&�&�z�D�6�:��&�&�z�D�$�<�@��&�&�z�D�$�<�@rc���|j|jg}t|��}|j|j	dj��t
dddddd���y)Nr�z--d 1 --w 2 3 4r�rr�rR)r�r|r�rgr[r)r�r�r�r�r;r�r{rs   r�test_multiple_parentsz'TestParentParsers.test_multiple_parents7
sZ���#�#�T�%5�%5�6��+�G�<������*�*�+<�+B�+B�+D�E��c�T�S�C�4�3�G�	Irc
�n�|j|jg}t|��}|j|j	dj��t
ddddd���|j|jdj��|j|jd	j��y)
Nr�z
-a --w 2 3TFr�r�)r�r|rgr[rz
-a --w 2 3 -bz
-a -b --w 2 3)r�r�r�r�r;r�r{r`rs   r�test_multiple_parents_mutexz-TestParentParsers.test_multiple_parents_mutex=
s����'�'��)9�)9�:��+�G�<������*�*�<�+=�+=�+?�@��d�e�s�d�c�B�	D��&�&�����4�4�6�	8��&�&�����4�4�6�	8rc��|jtjtj|j|j
g��yr)r�r+�
ArgumentErrorr,r�r�rs r�test_conflicting_parentsz*TestParentParsers.test_conflicting_parentsG
s9������"�"��#�#��]�]�D�$4�$4�5�	�	7rc��|jtjtj|j|j
g��yr)r�r+r
r,r�r�rs r�test_conflicting_parents_mutexz0TestParentParsers.test_conflicting_parents_mutexM
s;������"�"��#�#��%�%�t�';�';�<�	�	>rc���|j|jg}t|��}|j|j	dj��t
ddd���y)Nr�rr�r�)r�r�r�r�r;r�r{rs   r�test_same_argument_name_parentsz1TestParentParsers.test_same_argument_name_parentsS
sM���#�#�T�]�]�3��+�G�<������*�*�5�;�;�=�9��d�d�c�2�	4rc	��t�}|j�}|jd|jg��}|j	d�|j|j
dj��tdddd�	��y)
NrCr�r�zbar -b 1 --d 2 3 4r�rr�rR)r�r|r�r�)	r�r}rr�r�r�r;r�r{)rr2r��abcde_parsers    r�test_subparser_parentsz(TestParentParsers.test_subparser_parentsY
sw��+�-���*�*�,�
�!�,�,�U�T�=M�=M�<N�,�O���!�!�#�&�����*�*�+?�+E�+E�+G�H��c�S�C�3�7�	9rc���t�}|j�}|jg}|jd|��}|j	d�}|jd�|j|jg}|jd|��}|jd�|j|jdj��tdd	d
���|j|jdj��td	dd
ddd
���|j|jdj��|j|jdj��y)Nr(r�r�r}rCr�zfoo -a 4TFrRr{zbar -b  --w 2 3 4r�r�)r�r|rgr[rr�zfoo -a -b 4zbar -b -a 4)r�r}r�rr�r�r�r�r;r�r{r`)rr2r�r��
abc_parserr��wxyzabe_parsers       r�test_subparser_parents_mutexz.TestParentParsers.test_subparser_parents_mutexa
s>��+�-���*�*�,�
��'�'�(���*�*�5�'�*�B�
��/�/�	�:�����S�!��#�#�T�%9�%9�:��#�.�.�u�g�.�F���#�#�C�(�����*�*�:�+;�+;�+=�>��d�e�s�3�	5�����*�*�+>�+D�+D�+F�G��e�t�s�d�c�S�I�	K��&�&����}�2�2�4�	6��&�&����}�2�2�4�	6rc	��|j|jg}t|��}|j�}|j}|j|t
jdj||rdnd���y)Nr�aG            usage: {}{}[-h] [-b B] [--d D] [--w W] [-y Y] a z

            positional arguments:
              a
              z

            options:
              -h, --help  show this help message and exit
              -b B
              --w W

            c:
              --d D

            x:
              -y Y
        � r)	r�r�r�r�r�r�r�r��format)rr�r2�parser_help�prognames     r�test_parent_helpz"TestParentParsers.test_parent_helpt
sm���#�#�T�%5�%5�6��+�G�<���(�(�*���$�$������h�o�o�7�"
�F�8�H�S�"�6�#'8�	9rc	���td��}|jdd��}|jd�|jd�|j�}|jd�|jd	�t|g�
�}|j	t
|jgd��|j�}|j}|j|tjdj||rd
nd���y)NFr�re�gd�rorfrYr�r
rr�)r
rkrrhz�            usage: {}{}[-h] [-w W] [-x X] [-y Y | -z Z]

            options:
              -h, --help  show this help message and exit
              -y Y
              -z Z

            g:
              gd

              -w W
              -x X
        rr)
r�r�r�r�r�r�r;r�r�r�r�r�r)r�parentrer	r2rrs       r�test_groups_parentsz%TestParentParsers.test_groups_parents�
s���+�U�;���%�%�C�T�%�B��	���t��	���t���/�/�1��	���t��	���t��+�V�H�=�����-�v�/@�/@�"�	$��(�(�*���$�$������h�o�o�
7�
�F�8�H�S�"�6�
'8�
	9r)rrr r!r`rKr�rrrr	rrrrrrrr$r"r#s@rr�r��	sT���?�@�:�82�
/�
/�A�I�8�7�>�4�9�6�&9�09rr�c�$�eZdZd�Zd�Zd�Zd�Zy)� TestMutuallyExclusiveGroupErrorsc�b�t�}|j}|t|jd��y)Nr()ro)r�r�r�r�)rr2�raisess   r�test_invalid_add_argument_groupz@TestMutuallyExclusiveGroupErrors.test_invalid_add_argument_group�
s'��+�-���"�"���y�&�=�=�U�Krc� �t�}|j�}|j}|j}|t|dd��|t|d�|t|dd��|t|dd��|t|dt
j��y)Nr�Tr�rCr�rsrr)r�r�r�r�rr+�PARSER)rr2r�r�r(s     r�test_invalid_add_argumentz:TestMutuallyExclusiveGroupErrors.test_invalid_add_argument�
sv��+�-���3�3�5���)�)���"�"���z�<��4�@��z�<��/��z�<��c�:��z�<��a�8��z�<��h�o�o�Frc�^�td��}|j�}|jdd��|jdd��|j�}|jdd��|jd	d��d
}|j|j	�tj|��y)Nrc�rer�r�r�r.r�z--soupz--nutsz�            usage: PROG [-h] [--foo | --bar] [--soup | --nuts]

            options:
              -h, --help  show this help message and exit
              --foo
              --bar
              --soup
              --nuts
              )r�r�r�r�r�r�r�)rr2�group1�group2r�s     rr�z*TestMutuallyExclusiveGroupErrors.test_help�
s���+��8���4�4�6�����G�L��9����G�M��:��4�4�6�����H�\��:����H�]��;�	��	
����+�+�-�x���x�/H�Irc���tj�}|j�}|jt�5|jdg�ddd�y#1swYyxYw)Nr5)r+r,r�r�rr;�rr2r�s   r�test_empty_groupz1TestMutuallyExclusiveGroupErrors.test_empty_group�
sQ���(�(�*���3�3�5��
�
�
�z�
*�	&����t�f�%�	&�	&�	&�s�A�AN)rrr r)r,r�r3rArrr&r&�
s��L�
	G�J�(&rr&c�<�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
y	)
�MEMixinc��|jd��j}t}|jD]#}|j	|||j���%y�NFr���
get_parserr;r�r�r�r��rr;r��args_strings    r�test_failures_when_not_requiredz'MEMixin.test_failures_when_not_required�
sM���_�_�e�_�4�?�?�
�#���=�=�	F�K����e�Z��1B�1B�1D�E�	Frc��|jd��j}t}|jdgzD]#}|j	|||j���%y)NTr�rr8r:s    r�test_failures_when_requiredz#MEMixin.test_failures_when_required�
sT���_�_�d�_�3�>�>�
�#���=�=�B�4�/�	F�K����e�Z��1B�1B�1D�E�	Frc���|jd��j}|j|jz}|D]-\}}||j	��}|j||��/yr7)r9r;r��successes_when_not_requiredr�r�)rr;r�r;r��	actual_nss      r� test_successes_when_not_requiredz(MEMixin.test_successes_when_not_required�
sc���_�_�e�_�4�?�?�
��N�N�T�%E�%E�E�	�(1�	5�$�K��"�;�#4�#4�#6�7�I����Y��4�	5rc��|jd��j}|jD]-\}}||j��}|j	||��/y�NTr�)r9r;r�r�r�)rr;r;r�rAs     r�test_successes_when_requiredz$MEMixin.test_successes_when_required�
sS���_�_�d�_�3�>�>�
�(,���	5�$�K��"�;�#4�#4�#6�7�I����Y��4�	5rc��|jd��j}|j}|j|�t	j
|��yr7)r9r��usage_when_not_requiredr�r�r��rr��expected_usages   r�test_usage_when_not_requiredz$MEMixin.test_usage_when_not_required�
s>�������6�C�C���5�5�����������)H�Irc��|jd��j}|j}|j|�t	j
|��yrD)r9r��usage_when_requiredr�r�r�rHs   r�test_usage_when_requiredz MEMixin.test_usage_when_required�
s>�������5�B�B���1�1�����������)H�Irc���|jd��j}|j|jz}|j	|�tj|��yr7)r9r�rGrir�r�r��rr�ris   r�test_help_when_not_requiredz#MEMixin.test_help_when_not_requiredsG���o�o�u�o�5�A�A���+�+�d�i�i�7�����������(=�>rc���|jd��j}|j|jz}|j	|�tj|��yrD)r9r�rLrir�r�r�rOs   r�test_help_when_requiredzMEMixin.test_help_when_requiredsG���o�o�t�o�4�@�@���'�'�$�)�)�3�����������(=�>rN)rrr r<r>rBrErJrMrPrRrArrr5r5�
s.��F�F�5�5�J�
J�
?�
?rr5c��eZdZdd�ZddgZdedd��fded	d��fd
edd��fdedd	��fgZd
edd��fgZdZdZ	dZ
y)�TestMutuallyExclusiveSimpleNc��td��}|j|��}|jdd��|jddd	d
��|S)Nrcr.r�r.rkr�rbr�rh�baz help)rtrri�r�r�r��rr�r2r�s    rr9z&TestMutuallyExclusiveSimple.get_parser
sN��+��8���3�3�X�3�F��
���7���4�
���7�#�S�z��J��
r�--bar X --baz Yz
--bar X --baz�--bar Xr5�rCrDz--bar X --bar Zrh�--baz Yrkrbrz;        usage: PROG [-h] [--bar BAR | --baz [BAZ]]
        z;        usage: PROG [-h] (--bar BAR | --baz [BAZ])
        z�
        options:
          -h, --help   show this help message and exit
          --bar BAR    bar help
          --baz [BAZ]  baz help
        rO�rrr r9r�r{r�r@rGrLrirArrrTrTs����"�?�3�H�	�B�3�D�)�*�	�B�3�D�1�2�	�B�4�S�)�*�	�"��3�'�(�	�I�
�R�D�d�
#�$�#�������DrrTc
��eZdZdd�ZdgZdedddd��fdedddd��fd	edddd��fd
edddd��fgZdedddd��fgZdZd
Z	dZ
y)�TestMutuallyExclusiveLongNc���td��}|jdd��|jdd��|j|��}|jd	d
��|jdd��|S)
Nrcr.z--abcdez
abcde helpr�z--fghijz
fghij helpr�z--klmnoz
klmno helpz--pqrstz
pqrst help�r�r�r�rXs    rr9z$TestMutuallyExclusiveLong.get_parser0sp��+��8�����I�L��9����I�L��9��3�3�X�3�F��
���9�<��8�
���9�<��8��
rz--klmno X --pqrst Yz	--klmno Xr5)�abcde�fghij�klmno�pqrstz--abcde Y --klmno Xrkz	--pqrst Xz--pqrst X --fghij Yrzi    usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ]
                [--klmno KLMNO | --pqrst PQRST]
    zi    usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ]
                (--klmno KLMNO | --pqrst PQRST)
    z�
    options:
      -h, --help     show this help message and exit
      --abcde ABCDE  abcde help
      --fghij FGHIJ  fghij help
      --klmno KLMNO  klmno help
      --pqrst PQRST  pqrst help
    rOr]rArrr_r_.s����&�&�H�	�b�t�4�s�$�G�H�	��S��C�t�<�	>�	�b�t�4�t�3�G�H�	��T��D��<�	>��I�
�R�d�$�d�$�
?�@�#�������Drr_c��eZdZd�ZdgZdedd��fdedd��fd	ed
d��fgZded
d��fgZd
ZdZ	dZ
y
)�$TestMutuallyExclusiveFirstSuppressedc��td��}|j|��}|jdtj��|jddd�	�|S)
Nrcr.r�r�r�r
r�rxrh�r�r�r�r+rurXs    rr9z/TestMutuallyExclusiveFirstSuppressed.get_parser[sR��+��8���3�3�X�3�F��
���4�h�&7�&7��8�
���4�
�H��E��
rz-x X -yz-x Xr5Trmz	-x X -x Yrkr
NFrz&        usage: PROG [-h] [-y]
        z$        usage: PROG [-h] -y
        zm
        options:
          -h, --help  show this help message and exit
          -y          y help
        r]rArrrgrgYst����{�H�	��c�T�"�#�	�b�3�$�'�(�	
�r�D�E�"�#��I�
�R�$�$�
� �#�������Drrgc	��eZdZd�Zgd�Zdeddd��fdeddd��fd	eddd
��fdeddd��fgZdeddd��fgZd
xZZ	dZ
y)�#TestMutuallyExclusiveManySuppressedc���td��}|j|��}|j}|ddtj��|ddtj��|d	tj�
�|S)Nrcr.r��--spamr�rhr-r�z	--bladderr�ri)rr�r2r�r�s     rr9z.TestMutuallyExclusiveManySuppressed.get_parser|sc��+��8���3�3�X�3�F��� � ���H�\��0A�0A�B��J�}�8�3D�3D�E��K�h�/�/�0��
r)z--spam --badgerz--badger --bladder Bz--bladder B --spamrmTN)r�r3�bladderr-Fz--bladder BrAz
--spam --spamrz!        usage: PROG [-h]
        �P
        options:
          -h, --help  show this help message and exit
        �rrr r9r�r{r�r@rLrGrirArrrkrkzs�����H�
�2�4��d�;�<�	�R�U�5�$�?�@�	���d�C�@�A�	�"�$�t�T�B�C�	�I�
�R�U�4��
6�7�#��5���1��Drrkc
��eZdZd�Zgd�Zdeddd��fded	d
d��fded	ddg��fded	dgd���fgZd
ed	dd��fgZdZdZ	dZ
y)�*TestMutuallyExclusiveOptionalAndPositionalc��td��}|j|��}|jddd��|jdd	�
�|jddd
d��|S)Nrcr.r�r�r��FOOrhrm�SPAMr�r3r�r5�BADGER�rtrlrirWrXs    rr9z5TestMutuallyExclusiveOptionalAndPositional.get_parser�sc��+��8���3�3�X�3�F��
���7�<�e��D�
���8�&��1�
���8�3��(��K��
r)z--foo --spam Sz
--spam S XzX --foozX Y Z --spam Sz	--foo X Yr�TNr5)r(r�r3z--spam SF�SzX Y Z)r5rkrhrzD        usage: PROG [-h] [--foo | --spam SPAM | badger ...]
        zD        usage: PROG [-h] (--foo | --spam SPAM | badger ...)
        z�
        positional arguments:
          badger       BADGER

        options:
          -h, --help   show this help message and exit
          --foo        FOO
          --spam SPAM  SPAM
        r]rArrrrrr�s�����H�
�"��D��5�6�	�R�E��C�8�9�	�b�U��s�e�4�5�	�"��T�/�B�C�	�I�
�R�E��S�
1�2�#������	�Drrrc
�*�eZdZd�Zgd�Zdeddddd��fdeddddd��fdeddddd��fd	eddddd��fd
eddddd��fdeddddd��fgZdeddddd��fd
eddddd��fdeddddd��fgZdxZZ	dZ
y)�#TestMutuallyExclusiveOptionalsMixedc�
�td��}|jddd��|j|��}|jddd	��|jd
dd��|jddd
��|jddd��|S)Nrcr.r�r�rurhr�r��a helpr��b helpr
rxr��c helprarXs    rr9z.TestMutuallyExclusiveOptionalsMixed.get_parser�s���+��8�����D��H��E��3�3�X�3�F��
���4��8��D�
���4��8��D����D��H��E�
���4��8��D��
r)z-a -b�-b -cz-a -cz-a -b -cr�TF�r�r|r}r�r[r�r�z-a -xz-y -bz-x -y -crr�r
z:        usage: PROG [-h] [-x] [-a] [-b] [-y] [-c]
        z�
        options:
          -h, --help  show this help message and exit
          -x          x help
          -a          a help
          -b          b help
          -y          y help
          -c          c help
        NrprArrrzrz�s����7�H�	
�r�D�E�U�e�u�=�>�	
�r�E�T�U�e�u�=�>�	
�r�E�U�d�e�u�=�>�	�"�t�u����?�@�	�"�u����$�?�@�	�R�%�5�D�D�D�A�B�
�I�
�R�%�5�E�U�e�
<�=�	
�r�E�U�e�t�u�=�>�	
�r�E�U�e�u��=�>�#��5���1�	�Drrzc�r�eZdZdd�ZddgZdedd��fdedd	��fgZd
edd��fgZdZdZ	d
Z
y)�TestMutuallyExclusiveInGroupNc��td��}|jdd��}|j|��}|jdd�	�|jd
d�	�|S)Nrcr.zTitled groupzGroup descriptionr"r�r.rkr�rbrV)r�r�r�r�)rr�r2�titled_group�mutex_groups     rr9z'TestMutuallyExclusiveInGroup.get_parser�sk��+��8���0�0� �.A�1�C��
�5�5�x�5�H�	�� � ��z� �:�� � ��z� �:��
rrYz--baz X --bar YrZr5r[r\rkrz9        usage: PROG [-h] [--bar BAR | --baz BAZ]
        z9        usage: PROG [-h] (--bar BAR | --baz BAZ)
        z�
        options:
          -h, --help  show this help message and exit

        Titled group:
          Group description

          --bar BAR   bar help
          --baz BAZ   baz help
        rOr]rArrr�r��si���"�#4�5�H�	�B�3�D�)�*�	�B�4�S�)�*��I�

�R�D�d�
#�$�#������
�Drr�c���eZdZd�Zgd�Zdeddddd��fded	d
ddd��fded	dd
dd��fdeddddd
��fd
ed	d
ddd
��fgZded	dddd��fded	dddd
��fgZdxZZ	dZ
y	)�1TestMutuallyExclusiveOptionalsAndPositionalsMixedc��td��}|jdd��|jddd�	�|j|�
�}|jddd
��|jddd�	�|jddd�	�|S)Nrcr.r�rur�r
r�rxrhr�r�r�r|r{r�r}r�r~rarXs    rr9z<TestMutuallyExclusiveOptionalsAndPositionalsMixed.get_parsers���+��8�����C�h��/����D��H��E��3�3�X�3�F��
���3�c���9�
���4��8��D�
���4��8��D��
r)zX A -brz-c X AzX ArjFr5r�zX -bNTzX -czX A -yzX -y -bzX -yz6        usage: PROG [-h] [-y] [-b] [-c] x [a]
        a
        positional arguments:
          x           x help
          a           a help

        options:
          -h, --help  show this help message and exit
          -y          y help
          -b          b help
          -c          c help
        rprArrr�r�s����-�H�	��S�E�U�c�U�;�<�	��d�d�e�s�e�<�=�	��d�e�t�s�e�<�=�	�2��u����=�>�	�B����#��>�?��I�

�b�4�5�E�S�E�:�;�	��d�e�u��t�<�=�#��
5���1��Drr�c�.�eZdZd�ZdZdZdZdZdZdZ	dZ
y)�TestMutuallyExclusiveNestedc�b�td��}|j|��}|jd�|jd�tj�5tj
dt�|j|��}ddd�jd�|jd�tj�5tj
dt�|j|��}ddd�jd	�|jd
�|S#1swY��xYw#1swY�9xYw)Nrcr.r�r�r�r�r�r�r�r)r�r�r��warnings�catch_warnings�simplefilterr�)rr�r2r�r0�group3s      rr9z&TestMutuallyExclusiveNested.get_parserMs��+��8���3�3�X�3�F��
���4� �
���4� �
�
$�
$�
&�	K��!�!�(�,>�?��7�7��7�J�F�	K�	���D�!����D�!�
�
$�
$�
&�	L��!�!�(�,>�?��8�8�(�8�K�F�	L�	���D�!����D�!��
�	K�	K��
	L�	L�s�-D�-D%�D"�%D.zO        usage: PROG [-h] [-a A | -b B | [-c C | -d D | [-e E | -f F]]]
        zO        usage: PROG [-h] (-a A | -b B | (-c C | -d D | (-e E | -f F)))
        z�
        options:
          -h, --help  show this help message and exit
          -a A
          -b B
          -c C
          -d D
          -e E
          -f F
        N)rrr r9rGrLrir<r>rBrErArrr�r�Fs8���"����
�D�'+�#�"&��'+�$�#'� rr�c� ��eZdZd�fd�	Z�xZS)�MEPBasec�b��tt|�|��}t|jd|g��}|S)Nr�F)rerJr�)rr�r9r�re)rr�r#r2rs    �rr9zMEPBase.get_parser}s4����w��0�(�0�C��+����u�v�h�@���
rrO)rrr r9r"r#s@rr�r�{s
����rr�c��eZdZy)�&TestMutuallyExclusiveGroupErrorsParentN�rrr rArrr�r�����rr�c��eZdZy)�!TestMutuallyExclusiveSimpleParentNr�rArrr�r��r�rr�c��eZdZy)�TestMutuallyExclusiveLongParentNr�rArrr�r��r�rr�c��eZdZy)�*TestMutuallyExclusiveFirstSuppressedParentNr�rArrr�r��r�rr�c��eZdZy)�)TestMutuallyExclusiveManySuppressedParentNr�rArrr�r��r�rr�c��eZdZy)�0TestMutuallyExclusiveOptionalAndPositionalParentNr�rArrr�r��r�rr�c��eZdZy)�)TestMutuallyExclusiveOptionalsMixedParentNr�rArrr�r��r�rr�c��eZdZy)�7TestMutuallyExclusiveOptionalsAndPositionalsMixedParentNr�rArrr�r��r�rr�c�6�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	y)	�TestSetDefaultsc
�
�t�}|jd��|jdd��|jtddd��|j	g��|jtddd��|j	gt���|jtddd��|j	gtd����|jtddd��|j	gtdd�	���y)
Nr(r�rCrr)r[rrZrDr�)r�r�r��set_defaultsr�r{r;r1s  r�test_set_defaults_no_argsz)TestSetDefaults.test_set_defaults_no_args�s���+�-�����e��$����e�q��)�����e�u��2��*�*�2�.�	0�����e�u��2��*�*�2�r�t�4�	6�����e�u��2��*�*�2�r�E�{�;�	=�����e�u��2��*�*�2�r�E�Q�/?�@�	Brc	��t�}|jdd��|jdd��|jt	dd��|jg��|jt	dd��|jgt	���|jt	dd��|jgt	d����|jt	d	d��|jd
j
���|jt	d	d��|jd
j
�t	���|jt	d	d��|jd
j
�t	d����y)Nr(rCrmr��xfooxrkrDr�rr�)r�r�r�r�r{r;r�r1s  r�test_set_defaults_with_argsz+TestSetDefaults.test_set_defaults_with_args�s6��+�-�����e�u��-����D�'��2�����g��/��*�*�2�.�	0�����g��/��*�*�2�r�t�4�	6�����e�u�-��*�*�2�r�E�{�;�	=�����c�U�+��*�*�6�<�<�>�:�	<�����c�U�+��*�*�6�<�<�>�2�4�@�	B�����c�U�+��*�*�6�<�<�>�2��;�G�	Irc��t�}|jd��|j�}|jd�}|jd��|j	tdd��|j
dj���y)Nr(r�r�rCr�rm)r�r�r}rr�r{r;r�)rr2r��parser_as    r�test_set_defaults_subparsersz,TestSetDefaults.test_set_defaults_subparsers�su��+�-�����e��$��*�*�,�
��(�(��-�������&�����e�u�-��*�*�3�9�9�;�7�	9rc��td��}|jd��t|g��}|jtd��|j	g��y)NFr�r(r�r�r�)rr#r2s   r�test_set_defaults_parentsz)TestSetDefaults.test_set_defaults_parents�sH��+�U�;�����e��$�+�V�H�=������e��f�&7�&7��&;�<rc�
�tj�}|j�jd�}|j	d��|j	d��|jt
d��|jdg��y)Nr5rrrr�)r+r,r}rr�r�r{r;)rr2�xparsers   r�)test_set_defaults_on_parent_and_subparserz9TestSetDefaults.test_set_defaults_on_parent_and_subparser�sl���(�(�*���'�'�)�4�4�S�9�������"������#�������F�$5�$5�s�e�$<�=rc��t�}|jdddd��|jd�|jdd�	�|jd
d��|jd
dd��|jt	dddd��|jg��|jdddd��|jt	dddd��|jg��y)N�Wr5rkrhr�rYr��XXrkr[r�rsr�ZZr��WW�YY)r�r�r�r�r{r;r1s  r�&test_set_defaults_same_as_add_argumentz6TestSetDefaults.test_set_defaults_same_as_add_argument�s���+�-�����c�S�C�3��7����D�!����D�$��/����C�s��+����C�s�D��9�	
����c�T�S�D�9��*�*�2�.�	0�	���d�c�T�S��9�����d�c�T�S�9��*�*�2�.�	0rc���t�}|jdddd��|jd�}|jd�|jdd	�
�|jdd�
�|jddd��|j	tdd	dd��|j
g��|jdddd��|j	tdddd��|j
g��y)Nr�r5rkrhr�r(rYr�r�rkr[r�rsrr�r�r�r�)r�r�r�r�r�r{r;r2s   r�,test_set_defaults_same_as_add_argument_groupz<TestSetDefaults.test_set_defaults_same_as_add_argument_group�s���+�-�����c�S�C�3��7��)�)�%�0��
���4� �
���4���.�
���3�c��*�
���3�c�4��8�	
����c�T�S�D�9��*�*�2�.�	0�	���d�c�T�S��9�����d�c�T�S�9��*�*�2�.�	0rN)
rrr r�r�r�r�r�r�r�rArrr�r��s'��B�I�"9�=�>�0�"0rr�c��eZdZd�Zy)�TestGetDefaultc��t�}|j|jd��|j|jd��|jd�|j|jd��|j|jd��|jdtd��|j|jd��|jd|jd��|j
d��|jd|jd��|jd|jd��y)	Nr(rCr�r.rr�r3r)r�r��get_defaultr�r�r�r�r1s  r�test_get_defaultzTestGetDefault.test_get_default
s��+�-�����&�,�,�U�3�4����&�,�,�U�3�4����G�$����&�,�,�U�3�4����&�,�,�U�3�4����G�#�r��:����&�,�,�U�3�4�����V�/�/��6�7������)�����6�#5�#5�e�#<�=�����V�/�/��6�7rN)rrr r�rArrr�r�

s��8rr�c��eZdZd�Zd�Zy)�TestNamespaceContainsSimplec�t�tj�}|jd|�|jd|�y)Nrr�)r+�	Namespace�assertNotIn�r�nss  r�
test_emptyz&TestNamespaceContainsSimple.test_empty&
s0��
�
�
�
!������R� �����b�!rc���tjdd��}|jd|�|jd|�|jd|�|jd|�|jd|�y)	Nrrr�rmrr�r[�xxr)r+r�r�r�r�s  r�test_non_emptyz*TestNamespaceContainsSimple.test_non_empty+
s`��
�
�
�!�q�
)������R� ��
�
�c�2���
�
�c�2������r�"�����b�!rN)rrr r�r�rArrr�r�$
s��"�
"rr�c��eZdZd�Zy)�TestHelpFormattingMetaclassc�V�|dk(ryGd�dt�}dD]\}}||||��y)N�HelpTestCasec�0�eZdZd�Zd�Zd�Zd�Zd�Zd�Zy)�6TestHelpFormattingMetaclass.__init__.<locals>.AddTestsc���||_||_|j|j|jfD]-}|j
�d|��}|fd�}	||_t|||��/y#t$rY�wxYw)Nr�c��||�yrOrAr�s  r�test_wrapperzUTestHelpFormattingMetaclass.__init__.<locals>.AddTests.__init__.<locals>.test_wrapperH
r�r)�func_suffix�std_name�test_format�
test_print�test_print_filerr�r�)r�
test_classr�r�r�r�r�s       rrz?TestHelpFormattingMetaclass.__init__.<locals>.AddTests.__init__?
s���#.�� � (��
�"&�"2�"2�"&�/�/�"&�"6�"6�"8�A�I�,5�+=�+=�{� K�I�5>�(��09��-��J�	�<�@�A��%����s�A#�#	A/�.A/c�\�tj|jji|jj��}t|dg�D](}|j|ji|j���*t|dg�}|D]X\}}|j|ji|j��}|D](}|j|ji|j���*�Zt|dg�}|r=|j�}	|D](}
|	j|
ji|
j���*|S)Nr��argument_group_signatures�subparsers_signatures)
r+r,r�rvrwr�r�r�r}r)rr�r2�argument_sig�
group_sigs�	group_sig�
argument_sigsr��subparsers_sigsr��
subparser_sigs           rr�zBTestHelpFormattingMetaclass.__init__.<locals>.AddTests._get_parserP
s`��!�0�0��,�,�1�1�6��-�-�4�4�6��%,�F�4I�2�$N�?�L�'�F�'�'��):�):�?�*6�*=�*=�?�?�%�V�-H�"�M�
�0:�B�,�I�}�5�F�5�5�y�~�~�J�8A�8H�8H�J�E�(5�B��*��*�*�L�,=�,=�B�-9�-@�-@�B�B�B�#*�&�2I�2�"N��"�!'�!6�!6�!8�J�)8�G�
�-�
�-�-�}�/A�/A�G�1>�1E�1E�G�G��
rc��t||j�}tj|�}d|_|j||�yrO)r�r�r�r�r�r�)rr��parser_text�
expected_texts    r�_testz<TestHelpFormattingMetaclass.__init__.<locals>.AddTests._testf
s9�� '���0@�0@� A�
� (���
� >�
�!%����"�"�=�+�>rc��|j|�}t|d|jz�}|j||��y)Nz	format_%s)r�r�r�r�)rr�r2rs    rr�zBTestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_formatl
s9���)�)�&�1�� ���t�7G�7G�)G�H���
�
�6�6�8�,rc���|j|�}t|d|jz�}tt|j�}tt|jt
��	|�tt|j�j�}tt|j|�|j||�y#tt|j|�wxYw�Nzprint_%s)	r�r�r�r�r�r�rrr�)rr�r2�print_�
old_streamr�s      rr�zATestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_printq
s����)�)�&�1�� ���d�6F�6F�)F�G��$�S�$�-�-�8�
���T�]�]�K�M�:�<��H�")�#�t�}�}�"=�"F�"F�"H�K��C����
�;��
�
�6�;�/���C����
�;�s�)/C�C#c��|j|�}t|d|jz�}t�}||�|j	�}|j||�yr�)r�r�r�rrr�)rr�r2r��sfiler�s      rr�zFTestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_print_file}
sQ���)�)�&�1�� ���d�6F�6F�)F�G��#�
���u�
�#�n�n�.���
�
�6�;�/rN)	rrr rr�r�r�r�r�rArrr�r�=
s!��
A�"
�,
?�
-�


0�
0rr�))�usager�)rir�)r�)r�rdr�r�r�r�r�s       rrz$TestHelpFormattingMetaclass.__init__9
s>���>�!��F	0�v�F	0�R&:�	1�!�K���S�+�x�0�	1rNryrArrr�r�7
s��O1rr�r�c��eZdZdZeddd��Zedddd	�
�eddd
��edd��edd��edd��gZgZdZedzZ	dZ
y)�TestHelpBiggerOptionals�;Make sure that argument help aligns when options are longerrc�DESCRIPTION�EPILOG�rerf�epilogr^r|r}�0.1rr�r��X HELPrh�--y�Y HELPr�r(�FOO HELPrC�BAR HELPz;        usage: PROG [-h] [-v] [-x] [--y Y] foo bar
        aW
        DESCRIPTION

        positional arguments:
          foo            FOO HELP
          bar            BAR HELP

        options:
          -h, --help     show this help message and exit
          -v, --version  show program's version number and exit
          -x             X HELP
          --y Y          Y HELP

        EPILOG
    �        0.1
        N�rrr r!rtr�r�r�r�rir}rArrr�r��
s���E���M�"*�,��	�D�+�i��?��D��H�5��E��!��E�
�#��E�
�#���!#��
�E����D� �Grr�c��eZdZdZd�ZejZejZejZdZ	e	dzZ
ejZy)�TestShortColumnsz�Test extremely small number of columns.

    TestCase prevents "COLUMNS" from being too small in the tests themselves,
    but we don't want any exceptions thrown in such cases. Only ugly representation.
    c�n�|jtj��}|jdd�y)NrFrS)rGrrHrNrIs  rrKzTestShortColumns.setUp�
s)�����	� =� =� ?�@�����	�4� rz�        usage: PROG
               [-h]
               [-v]
               [-x]
               [--y Y]
               foo
               bar
        a�
        DESCRIPTION

        positional arguments:
          foo
            FOO HELP
          bar
            BAR HELP

        options:
          -h, --help
            show this
            help
            message and
            exit
          -v, --version
            show
            program's
            version
            number and
            exit
          -x
            X HELP
          --y Y
            Y HELP

        EPILOG
    N)rrr r!rKr�r�r�r�r�rir}rArrrr�
sW���
!�#:�"J�"J��"9�"M�"M��"9�"S�"S��
�E����D�:#:�"A�"A�Grrc���eZdZdZeddd��Zedddd	�
�eddd
��edd��edd��edd��gZedd��edd��eddd��gfgZdZed zZ	d!Z
y")#�TestHelpBiggerOptionalGroupsr�rcr�r�r�r^r|r}r�rr�r�r�rhr�r�r�r(r�rCr�zGROUP TITLEzGROUP DESCRIPTIONrqrDzBAZ HELPrr�zZ HELPr{zN        usage: PROG [-h] [-v] [-x] [--y Y] [-z Z [Z ...]] foo bar baz
        a�
        DESCRIPTION

        positional arguments:
          foo            FOO HELP
          bar            BAR HELP

        options:
          -h, --help     show this help message and exit
          -v, --version  show program's version number and exit
          -x             X HELP
          --y Y          Y HELP

        GROUP TITLE:
          GROUP DESCRIPTION

          baz            BAZ HELP
          -z Z [Z ...]   Z HELP

        EPILOG
    rNrrArrrr�
s���E���M�"*�,��	�D�+�i��?��D��H�5��E��!��E�
�#��E�
�#���

�]�(;�	<���J�'���C�h�/�?1�	2�!��

�E����D�,�Grrc��eZdZdZedd��Zeddd��ed	d
��edd
��edd��gZgZdZedzZ	dZ
y)�TestHelpBiggerPositionalsz4Make sure that help aligns when arguments are longer�USAGEr��r�rfr�r�r�rhr�r�r��ekiekiekifekangzEKI HELPrCr��        usage: USAGE
        a
        DESCRIPTION

        positional arguments:
          ekiekiekifekang  EKI HELP
          bar              BAR HELP

        options:
          -h, --help       show this help message and exit
          -x               X HELP
          --y Y            Y HELP
        rNrrArrrrsl��>���m�D���D��H�5��E��!���J�/��E�
�#�	��!#��
�E����D��Grrc��eZdZdZedd��Zeddd��ed	d
d��gZedd
��eddd��gfgZdZedzZ	dZ
y)�TestHelpReformatting�>Make sure that text after short names starts on the first linercze   oddly    formatted
description

that is so long that it should go onto multiple lines when wrappedrjr�r�zoddly
    formatted -x help�r�rir[rz
normal y helproz'
    oddly formatted group

descriptionrqr�r�z` oddly 
formatted    -a  help  
    again, so long that it should be wrapped over multiple linesrh�2        usage: PROG [-h] [-x XX] [-a] yyy
        a�
        oddly formatted description that is so long that it should go onto multiple
        lines when wrapped

        positional arguments:
          yyy         normal y help

        options:
          -h, --help  show this help message and exit
          -x XX       oddly formatted -x help

        title:
          oddly formatted group description

          -a          oddly formatted -a help again, so long that it should be wrapped
                      over multiple lines
        rNrrArrrr6s���H��
�)�*��	�D�$�&=�	>��C��_�5���

�W�#0�
1��d�<�$�%�
&�		'�
!��
�E����D�(�Grrc��eZdZdZedd��Zeddd��ed	d
d��gZed�ed
dd��gfgZdZedzZ	dZ
y)�TestHelpWrappingShortNamesrrczZD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
Drjr�r�zxXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXrr[r�dYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH�ALPHASr�r�zPAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHArhra�
        D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD
        DD DD DD DD D

        positional arguments:
          yyy         YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH
                      YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH

        options:
          -h, --help  show this help message and exit
          -x XX       XHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH
                      HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HX

        ALPHAS:
          -a          AHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH
                      HHAAHHH HHAAHHH HHA
        rNrrArrrrjsz��H���[�A���D�$�]�3��C��\�2���


�X����\��@�B�	C�!��
�E����D�,�Grrc��eZdZdZedd��Zedddd�	�ed
dd�
�eddd�
�gZed�eddd�
�eddd�
�gfgZdZedzZ	dZ
y)�TestHelpWrappingLongNamesz<Make sure that text after long names starts on the next liner	zZD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD Dr
r^r|r}zZV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV Vrr��XXXXXXXXXXXXXXXXXXXXXXXXXzdXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHrr[�yyyyyyyyyyyyyyyyyyyyyyyyyrrr��AAAAAAAAAAAAAAAAAAAAAAAAAzdAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHr�zzzzzzzzzzzzzzzzzzzzzzzzzzdZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHrag
        D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD
        DD DD DD DD D

        positional arguments:
          yyyyyyyyyyyyyyyyyyyyyyyyy
                                YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH
                                YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH

        options:
          -h, --help            show this help message and exit
          -v, --version         show program's version number and exit
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
                                XH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH
                                XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XH

        ALPHAS:
          -a AAAAAAAAAAAAAAAAAAAAAAAAA
                                AH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH
                                AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AH
          zzzzzzzzzzzzzzzzzzzzzzzzz
                                ZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH
                                ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZH
        zs        V VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV
        VV VV VV VV V
        NrrArrrr�s���F���z�B���D�+�i��D��D�(��6��C���5���

�X����h�\�:���X�L�9�;�	<�!��

�E����D�<�Grrc��eZdZdZed��Zeddd��edd	d
��edd��ed
d
d��eddd��eddej��edddej��edddej��edejejd��g	Z	ed �ed!dd"��ed#d$d%��ed&d&d	��ed'd'd��gfgZ
d(Zed)zZd*Z
y+),�
TestHelpUsage�Test basic usage messagesrcr.rYr�rgr{r�r�r�r�r�r|r�)rirtr}r�r�zWhether to foo)rirr.zWhether to barT)rirlrrz--foobarz--barfoor�z--bazzzBazz!)rrlrir�r
r[rrwrr�r�a/        usage: PROG [-h] [-w W [W ...]] [-x [X ...]] [--foo | --no-foo]
                    [--bar | --no-bar]
                    [-f | --foobar | --no-foobar | --barfoo | --no-barfoo]
                    [--bazz | --no-bazz] [-y [Y]] [-z Z Z Z]
                    a b b [c] [d ...] e [e ...]
        az
        positional arguments:
          a                     a
          b                     b
          c                     c

        options:
          -h, --help            show this help message and exit
          -w W [W ...]          w
          -x [X ...]            x
          --foo, --no-foo       Whether to foo
          --bar, --no-bar       Whether to bar
          -f, --foobar, --no-foobar, --barfoo, --no-barfoo
          --bazz, --no-bazz     Bazz!

        group:
          -y [Y]                y
          -z Z Z Z              z
          d                     d
          e                     e
        rN)rrr r!rtr�r+r�rur�r�r�rir}rArrrr�s��#���'���D��#�&��D��#�&��C�c���C�c��#��C�c��%��G�*�8�3Q�3Q�R��G�*�D�$�:�:�	<��D�*�j��1O�1O�P��H�X�;�;�&�/�/�g�	?���

�W����C�c�*���A�C�(���#�S�)���#�S�)�	
�	�!��
�E����D�,�Grrc�Z�eZdZed��Zedd��eddd��gZd	Zed
zZdZy)
�TestHelpUsageWithParenthesesrcr.�
positionalz(example) positional�r�r�z
--optionalz{1 (option A), 2 (option B)}zX        usage: PROG [-h] [-p {1 (option A), 2 (option B)}] (example) positional
        z�
        positional arguments:
          (example) positional

        options:
          -h, --help            show this help message and exit
          -p {1 (option A), 2 (option B)}, --optional {1 (option A), 2 (option B)}
        rN)	rrr rtr�r�r�rir}rArrr r sL����'���L�"8�9��D�,�(F�G���

�E����D��Grr c��eZdZdZedd��ZgZed�edd��ed	d	��gfed
�edd��edd
��gfgZdZedzZ	dZ
y)�TestHelpOnlyUserGroupsrrcF�rerJ�xxxxr�r�r�r��yyyyr|r
r[z.        usage: PROG [-x X] [-y Y] a b
        zn
        xxxx:
          -x X  x
          a     a

        yyyy:
          b     b
          -y Y  y
        rNrrArrr$r$s���#����7����	�V����3����#��
�	�

�V����#����3��
�	�	!��
�E��	�	�D��Grr$c�|�eZdZdZed��Zedd��edd��ed	�ed
�gZgZdZedzZ	d
Z
y)�TestHelpUsageLongProgz*Test usage messages where the prog is long�<PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPr.rYr�r"r�r5r�r|zz        usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               [-h] [-w W] [-x X] a b
        z�
        positional arguments:
          a
          b

        options:
          -h, --help  show this help message and exit
          -w W
          -x X
        rNrrArrr)r)6sa��4���)���D�#���D�#���C���C��	��!#��
�E��
�
�D��Grr)c��eZdZdZed��Zedd��edd��ed	d
��edd��ed
�ed�gZgZdZedzZ	dZ
y)� TestHelpUsageLongProgOptionsWrapzATest usage messages where the prog is long and the optionals wrapr*r.rY�WWWWWWWWWWWWWWWWWWWWWWWWWr"r�rr
�YYYYYYYYYYYYYYYYYYYYYYYYYr�ZZZZZZZZZZZZZZZZZZZZZZZZZr�r|a        usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] [-x XXXXXXXXXXXXXXXXXXXXXXXXX]
               [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
               a b
        a-
        positional arguments:
          a
          b

        options:
          -h, --help            show this help message and exit
          -w WWWWWWWWWWWWWWWWWWWWWWWWW
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        rNrrArrr,r,Ssu��K���)���D�(�#��D�(�#��D�(�#��D�(�#��C���C��
��!#��
�E����D��Grr,c�h�eZdZdZedd��Zed�ed�ed�gZgZdZed	zZ	d
Z
y)�$TestHelpUsageLongProgPositionalsWrapzCTest usage messages where the prog is long and the positionals wrapr*Fr%�aaaaaaaaaaaaaaaaaaaaaaaaa�bbbbbbbbbbbbbbbbbbbbbbbbb�cccccccccccccccccccccccccz�        usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
               ccccccccccccccccccccccccc
        ��
        positional arguments:
          aaaaaaaaaaaaaaaaaaaaaaaaa
          bbbbbbbbbbbbbbbbbbbbbbbbb
          ccccccccccccccccccccccccc
        rNrrArrr1r1wsV��M���5�9���H�
��H�
��H�
���
!#��
�E�
���D��Grr1c	��eZdZdZed��Zedd��edd��ed	d
��edd��ed
�ed�ed�gZgZdZedzZ	dZ
y)�TestHelpUsageOptionalsWrapz,Test usage messages where the optionals wraprcr.rYr-r"r�rr
r.rr/r�r|r}z�        usage: PROG [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] [-x XXXXXXXXXXXXXXXXXXXXXXXXX]
                    [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
                    a b c
        a9
        positional arguments:
          a
          b
          c

        options:
          -h, --help            show this help message and exit
          -w WWWWWWWWWWWWWWWWWWWWWWWWW
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        rNrrArrr7r7�s|��6���'���D�(�#��D�(�#��D�(�#��D�(�#��C���C���C����!#��
�E��
�
�D��Grr7c��eZdZdZed��Zed�ed�ed�ed�ed�ed	�gZgZd
ZedzZ	dZ
y
)�TestHelpUsagePositionalsWrapz.Test usage messages where the positionals wraprcr.r�r
rr2r3r4z�        usage: PROG [-h] [-x X] [-y Y] [-z Z]
                    aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
                    ccccccccccccccccccccccccc
        a
        positional arguments:
          aaaaaaaaaaaaaaaaaaaaaaaaa
          bbbbbbbbbbbbbbbbbbbbbbbbb
          ccccccccccccccccccccccccc

        options:
          -h, --help            show this help message and exit
          -x X
          -y Y
          -z Z
        rNrrArrr9r9�si��8���'���D�	��D�	��D�	��H�
��H�
��H�
�
��!#��
�E�
���D��Grr9c��eZdZdZed��Zedd��edd��ed	d
��ed�ed�ed
�gZgZdZedzZ	dZ
y)�%TestHelpUsageOptionalsPositionalsWrapz<Test usage messages where the optionals and positionals wraprcr.r�rr"r
r.rr/r2r3r4a        usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] [-y YYYYYYYYYYYYYYYYYYYYYYYYY]
                    [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
                    aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
                    ccccccccccccccccccccccccc
        aZ
        positional arguments:
          aaaaaaaaaaaaaaaaaaaaaaaaa
          bbbbbbbbbbbbbbbbbbbbbbbbb
          ccccccccccccccccccccccccc

        options:
          -h, --help            show this help message and exit
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        rNrrArrr;r;�sr��F���'���D�(�#��D�(�#��D�(�#��H�
��H�
��H�
�
��!#��
�E����D��Grr;c�r�eZdZdZed��Zedd��edd��ed	d
��gZgZdZedzZ	d
Z
y)�TestHelpUsageOptionalsOnlyWrapz@Test usage messages where there are only optionals and they wraprcr.r�rr"r
r.rr/z�        usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] [-y YYYYYYYYYYYYYYYYYYYYYYYYY]
                    [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
        z�
        options:
          -h, --help            show this help message and exit
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        rNrrArrr=r=�s]��J���'���D�(�#��D�(�#��D�(�#���
!#��
�E�
���D��Grr=c�h�eZdZdZedd��Zed�ed�ed�gZgZdZed	zZ	d
Z
y)� TestHelpUsagePositionalsOnlyWrapzBTest usage messages where there are only positionals and they wraprcFr%r2r3r4z~        usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
                    ccccccccccccccccccccccccc
        r5rNrrArrr?r?sV��L����7���H�
��H�
��H�
���
!#��
�E����D��Grr?c
��eZdZdZed��Zeded��eddd	d
d��ed
dd��eddddgdd��edd��eddd��gZed�ed d!��ed"d#d$��gfgZd%Z	e	d&zZ
d'Zy())�TestHelpVariableExpansionz:Test that variables are expanded properly in help messagesrcr.r�z"x %(prog)s %(default)s %(type)s %%rlr
rr�XXXz y %(prog)s %(default)s %(const)s)rrlrrir�r�z$foo %(prog)s %(default)s %(choices)srvr.rDrrr��BBBz!bar %(prog)s %(default)s %(dest)s)rlr�r�rir�zspam %(prog)s %(default)sr�r3rpzbadger %(prog)s %(default)s)rlrir�r�za %(prog)s %(default)sr�rzb %(prog)s %(default)szw        usage: PROG [-h] [-x X] [-y] [--foo {a,b,c}] [--bar BBB] [-a A] [-b B]
                    spam badger
        a�
        positional arguments:
          spam           spam PROG None
          badger         badger PROG 0.5

        options:
          -h, --help     show this help message and exit
          -x X           x PROG None int %
          -y             y PROG 42 XXX
          --foo {a,b,c}  foo PROG None a, b, c
          --bar BBB      bar PROG baz bar

        group:
          -a A           a PROG None
          -b B           b PROG -1
        rN)rrr r!rtr�r�r�r�r�rir}rArrrArA.s���D���'���D�s�5�	7��D���%�3�	5��G�U�7�	9��G�U�Q��F�E�4�	6��F�4�5��H�c�(E�F���

�W����3�4���b�'?�@�
�	�!���E����D�"�GrrAc�>�eZdZdZedd��ZgZgZdZedzZ	dZ
y)	�&TestHelpVariableExpansionUsageSuppliedz@Test that variables are expanded properly when usage= is presentrcz%(prog)s FOO�rer�z         usage: PROG FOO
        rorNrrArrrErE\s=��J���n�=���� "���E����D�
�GrrEc�8�eZdZdZedd��ZgZgZdZeZ	dZ
y)�$TestHelpVariableExpansionNoArgumentsz;Test that variables are expanded properly with no argumentsrcFr%z        usage: PROG
        rNrrArrrHrHms1��E����7���� "���E��D��GrrHc�p�eZdZdZedej��Zedd��edd��gZgZ	d	Z
d
Zd
Zy)�TestHelpSuppressUsagez3Test that items can be suppressed in usage messagesrcrFr�rgr�r��	spam helpz�        positional arguments:
          spam        spam help

        options:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        rN)
rrr r!rtr+rur�r�r�rir�r}rArrrJrJzsO��=���h�.?�.?�@���G�*�%��F��%���!#���D�
�E��GrrJc�v�eZdZdZedd��Zedej��edd��gZgZ	d	Z
e
d
zZdZy)
�TestHelpSuppressOptionalz?Test that optional arguments can be suppressed in help messagesrcFr%r�r�r�rKz!        usage: PROG spam
        zA
        positional arguments:
          spam  spam help
        rN�
rrr r!rtr�r+rur�r�r�rir}rArrrMrM�s[��I����7���G�(�+�+�,��F��%���!#��
�E����D�
�GrrMc��eZdZdZed��Zedd��edd��gZed	�ed
ej��gfgZ	dZ
e
dzZd
Zy)�TestHelpSuppressOptionalGroupz<Test that optional groups can be suppressed in help messagesrcr.r�rgr�r�rKr�r.�2        usage: PROG [-h] [--foo FOO] spam
        ��
        positional arguments:
          spam        spam help

        options:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        rN)
rrr r!rtr�r�r+rur�r�rir}rArrrPrP�sq��F���'���G�*�%��F��%���


�W���G�(�*;�*;�<�=�>�!��
�E����D��GrrPc�t�eZdZdZed��Zedd��edej��gZgZ	dZ
e
d	zZd
Zy)�TestHelpSuppressPositionalzATest that positional arguments can be suppressed in help messagesrcr.r�rgr�r�z-        usage: PROG [-h] [--foo FOO]
        �o
        options:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        rNrNrArrrTrT�sY��K���'���G�*�%��F��*�*�+���!#��
�E����D��GrrTc�P�eZdZdZed��Zeddd��gZgZdZed	zZ	d
Z
y)�TestHelpRequiredOptionalz.Test that required options don't look optionalrcr.r�Trg)r�riz+        usage: PROG [-h] --foo FOO
        rUrNrrArrrWrW�sK��8���'���G�d��4���!#��
�E����D��GrrWc�h�eZdZdZeddd��Zeddd�	�ed
dd�
�gZgZdZedzZ	dZ
y)�TestHelpAlternatePrefixCharsz:Test that options display with different prefix charactersrcz^;F)rerIrJz^^foor�rgrhz;bz;;barrkr�z-        usage: PROG [^^foo] [;b BAR]
        zf
        options:
          ^^foo              foo help
          ;b BAR, ;;bar BAR  bar help
        rNrrArrrYrY�s[��D���T�E�J���G�L�z�:��D�'�
�+���!#��
�E����D��GrrYc�b�eZdZdZedd��Zedd��edd	��gZgZd
ZedzZ	dZ
y
)�TestHelpNoHelpOptionalz=Test that the --help argument can be suppressed help messagesrcFr%r�rgr�r�rKz-        usage: PROG [--foo FOO] spam
        zv
        positional arguments:
          spam       spam help

        options:
          --foo FOO  foo help
        rNrrArrr[r[�sU��G����7���G�*�%��F��%���!#��
�E����D��Grr[c�X�eZdZdZed��Zed�ed�gZgZdZedzZ	dZ
y	)
�TestHelpNonez1Test that no errors occur if no help is specifiedrcr.r�r�rQz�
        positional arguments:
          spam

        options:
          -h, --help  show this help message and exit
          --foo FOO
        rNrrArrr]r]sM��;���'���G���F����!#��
�E����D��Grr]c	��eZdZdZed��Zedddd��ed	d
dd��ed
ddd��edddd��gZgZdZedzZ	dZ
y)�TestHelpTupleMetavarz"Test specifying metavar as a tuplercr.rYrgr�)�W1�W2)rirtr�r�r�r�)�X1�X2r
r[rw)�Y1�Y2�Y3rrr�)�Z1z]        usage: PROG [-h] [-w W1 [W2 ...]] [-x [X1 [X2 ...]]] [-y Y1 Y2 Y3] [-z [Z1]]
        z�
        options:
          -h, --help        show this help message and exit
          -w W1 [W2 ...]    w
          -x [X1 [X2 ...]]  x
          -y Y1 Y2 Y3       y
          -z [Z1]           z
        rNrrArrr_r_*sx��,���'���D�s�#�|�<��D�s�#�|�<��D�s�!�-?�@��D�s�#�x�8�	��!#��
�E����D��Grr_c��eZdZdZedejd��Zedd��edd	��gZed
d��ed
d��gfgZ	dZ
e
dzZdZy)�TestHelpRawText�Test the RawTextHelpFormatterrc�7Keep the formatting
    exactly as it is written

here
�re�formatter_classrfr�z-    foo help should also
appear as given herer�r�rKro�?    This text
  should be indented
    exactly like it is here
rqr.rk�>        usage: PROG [-h] [--foo FOO] [--bar BAR] spam
        a�
        Keep the formatting
            exactly as it is written

        here

        positional arguments:
          spam        spam help

        options:
          -h, --help  show this help message and exit
          --foo FOO       foo help should also
                      appear as given here

        title:
              This text
            should be indented
              exactly like it is here

          --bar BAR   bar help
        rN)
rrr r!rtr+�RawTextHelpFormatterr�r�r�r�rir}rArrririEs���'��
�X�%B�%B����	�G�1�	2��F��%���

�W�#B�
C��g�J�
'�	(�	*�!��
�E����D�,�Grric��eZdZdZedejd��Zedd��edd	��gZed
d��ed
d��gfgZ	dZ
e
dzZdZy)�TestHelpRawDescriptionrjrcrkrlr�z4  foo help should not
    retain this odd formattingr�r�rKrornrqr.rkroa�
        Keep the formatting
            exactly as it is written

        here

        positional arguments:
          spam        spam help

        options:
          -h, --help  show this help message and exit
          --foo FOO   foo help should not retain this odd formatting

        title:
              This text
            should be indented
              exactly like it is here

          --bar BAR   bar help
        rN)
rrr r!rtr+�RawDescriptionHelpFormatterr�r�r�r�rir}rArrrrrrvs���'��
�X�%I�%I����	�G�;�	<��F��%���

�W�#B�
C��g�J�
'�	(�	*�!��
�E����D�*�Grrrc�J�eZdZdZedejd��Zedd��edd	d
��edejd
d��edejdej��eddd��edd��edddd��gZ
edd��ededd �!�gfgZd"Z
e
d#zZd$Zy%)&�TestHelpArgumentDefaultsz&Test the ArgumentDefaultsHelpFormatterrcrfrlr�z)foo help - oh and by the way, %(default)sr�r.r�rkrhz--tazzWhether to taz itT)rrirlz--corgezWhether to corge itz--quuxzSet the quuxr)rirlr�rKr3r��woodenzbadger helprwrorqrbrV)r�rlriz�        usage: PROG [-h] [--foo FOO] [--bar] [--taz | --no-taz] [--corge | --no-corge]
                    [--quux QUUX] [--baz BAZ]
                    spam [badger]
        ay
        description

        positional arguments:
          spam                 spam help
          badger               badger help (default: wooden)

        options:
          -h, --help           show this help message and exit
          --foo FOO            foo help - oh and by the way, None
          --bar                bar help (default: False)
          --taz, --no-taz      Whether to taz it (default: True)
          --corge, --no-corge  Whether to corge it
          --quux QUUX          Set the quux (default: 42)

        title:
          description

          --baz BAZ            baz help (default: 42)
        rN)rrr r!rtr+�ArgumentDefaultsHelpFormatterr�r�rur�r�r�r�rir}rArrruru�s���0��
�X�%K�%K�!�#��
	�G�E�F��G�L�z�:��G�H�:�:�$�d�	4��I�h�<�<�&��0A�0A�	C��H�>�2�6��F��%��H�C��
�F�
��

�W�-�	0�

�g�C��*�
=�	>�	@�!��
�E�
���D�*�Grruc�T�eZdZdZedd��Zedddd�	�gZgZd
ZedzZ	dZ
y
)�TestHelpVersionActionz,Test the default help for the version actionrcrfrj�-Vr|r}z3.6rz&        usage: PROG [-h] [-V]
        z�
        description

        options:
          -h, --help     show this help message and exit
          -V, --version  show program's version number and exit
        rNrrArrryry�sK��6���M�B���t�[��E�R�S�� "��
�E����D��Grryc��eZdZdZed��Zeddddej��ed	d
��edd
��gZgZ	dZ
e
dzZy)�TestHelpVersionActionSuppresszCTest that the --version argument can be suppressed in help messagesrcr.r^r|r}r~)rr}rir�rgr�r�rKrQrRN)rrr r!rtr�r+rur�r�r�rirArrr|r|�se��M���'���D�+�i���"�"�	$��G�*�%��F��%�	��!#��
�E����Drr|c��eZdZdZedd��Zedddd�	�gZd
D���cgc]}t	|����c}}}ZdZed
zZ	dZ
ycc}}}w)�TestHelpSubparsersOrdering�5Test ordering of subcommands in help matches the coderc�display some subcommandsrjr^r|r}r�r)r�r|r}r�r�r��6        usage: PROG [-h] [-v] {a,b,c,d,e} ...
        z�
        display some subcommands

        positional arguments:
          {a,b,c,d,e}

        options:
          -h, --help     show this help message and exit
          -v, --version  show program's version number and exit
        rN)rrr r!rtr�r�r�r�rir})�.0rdrts000rr~r~sw��?���'A�C���t�[��E�R�S��*C�D�D�!%�!�d�^�D��
�E��
�
�D��G��'Ds�Ar~c
��eZdZdZedd��Zedddd�	�gZd
ZeD����cgc]\}}t	||����c}}}}ZdZ	e	d
zZ
dZycc}}}}w)�"TestHelpSubparsersWithHelpOrderingrrcr�rjr^r|r}r�r))r�za subcommand help)r|zb subcommand help)r}zc subcommand help)r�zd subcommand help)r�ze subcommand help)rdrir�a�
        display some subcommands

        positional arguments:
          {a,b,c,d,e}
            a            a subcommand help
            b            b subcommand help
            c            c subcommand help
            d            d subcommand help
            e            e subcommand help

        options:
          -h, --help     show this help message and exit
          -v, --version  show program's version number and exit
        rN)rrr r!rtr�r��subcommand_datar�r�rir})r�rdrirts0000rr�r�"s���?���'A�C���t�[��E�R�S���O�0?�@�@�!+��t�!�d��6�@��
�E����D�"�G��1@s�A
r�c��eZdZd�Zeddej��Zede��ede��ede	d	�
�gZ
gZdZedzZ
d
Zy)�TestHelpMetavarTypeFormatterc��|SrOrAr1s r�custom_typez(TestHelpMetavarTypeFormatter.custom_typeOs���
rrcrf)rerfrmr�rnr�r�z
SOME FLOAT)r�r�zF        usage: PROG [-h] [-b custom_type] [-c SOME FLOAT] int
        z�
        description

        positional arguments:
          int

        options:
          -h, --help      show this help message and exit
          -b custom_type
          -c SOME FLOAT
        rN)rrr r�rtr+�MetavarTypeHelpFormatterr�r�rqr�r�r�rir}rArrr�r�Msr�����M�+3�+L�+L�N���s��-��t�+�6��t�%��F�H��!#��
�E����D��Grr�c�j�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zy)�TestInvalidArgumentConstructorsz-Test a bunch of invalid Argument constructorsc�v�tj�}|jt|jg|��i|��yrO)r+r,r�r�r��rrvrwr2s    r�assertTypeErrorz/TestInvalidArgumentConstructors.assertTypeErrorqs:���(�(�*������)�V�%8�%8�	+��	+�#)�	+rc�v�tj�}|jt|jg|��i|��yrO)r+r,r�rr�r�s    r�assertValueErrorz0TestInvalidArgumentConstructors.assertValueErrorvs:���(�(�*������*�f�&9�&9�	+��	+�#)�	+rc��|jdd��|jdd��|jdd��|jdi��y)	Nr�)rCr
r()�callbackrA)�
callback_args)�callback_kwargs�r�rs r�test_invalid_keyword_argumentsz>TestInvalidArgumentConstructors.test_invalid_keyword_arguments{sN�����T�t��,����T�E��2����T���4����T�2��6rc�V�|j�dD]}|j|���y)N)r�r�r�r��rrs  r�test_missing_destinationz8TestInvalidArgumentConstructors.test_missing_destination�s.������)�	0�F�� � �� �/�	0rc�H�|jd�|jd�y)Nr�z---�r�rs r�test_invalid_option_stringsz;TestInvalidArgumentConstructors.test_invalid_option_strings�s�����d�#����e�$rc�d�|jdd��|jdttf��y)Nr�r�rn)r�r�rqrs r�test_invalid_typez1TestInvalidArgumentConstructors.test_invalid_type�s,�����g�E��2����g�S�%�L��9rc�b�|jdd��|jdd��|jdd��tj�}|jt�5}|jdd��ddd�|j
dtj��y#1swY�/xYw)	Nr�r(r�rDr��r�r�z
store-truezunknown action)	r�r+r,r�rr�r�r�r�r�s   r�test_invalid_actionz3TestInvalidArgumentConstructors.test_invalid_action�s������d�5��1����e�E��2����g�.A��B��(�(�*��
�
�
�z�
*�	>�b�������=�	>��
�
�&��B�L�L�(9�:�	>�	>�s�#B%�%B.c��tj�}|jd��|jt�5}|jdd��ddd�|jdt
j��y#1swY�/xYw)Nr(r&rCrDz+dest supplied twice for positional argument)r+r,r�r�rr�r�r�r�s   r�test_multiple_destz2TestInvalidArgumentConstructors.test_multiple_dest�st���(�(�*�������'�
�
�
�z�
*�	3�b�����E��2�	3��
�
�C��"�,�,�'�	)�	3�	3�s�A>�>Bc��dD]B}tt��td��td��fD]}|jdd|i|����Dy)	N)rr�r�r�r�rnr�rs�abr�r)r�)r~r�r�)rr�attrss   r�test_no_argument_actionsz8TestInvalidArgumentConstructors.test_no_argument_actions�sU��0�	C�F��C�.�$�S�/��t�,�.�
C��$��$�$�B�&�B�E�B�
C�	Crc�b�dD]*}|jdd|��|jdd|���,y)N)r�r�r�r�r(r�r��rtrr�r�s  r�!test_no_argument_no_const_actionszATestInvalidArgumentConstructors.test_no_argument_no_const_actions�sA��<�	A�F�
� � ��U�6� �B�
� � ��S�� �@�
	Arc���dD][}|jdd|��|jdd|��dD],}|jdd||��|jdd||���.�]y)	Nr�r�rr�r�)rrr�r�r()rrtrr�)rrrts   r�#test_more_than_one_argument_actionszCTestInvalidArgumentConstructors.test_more_than_one_argument_actions�s���)�	B�F�
�!�!�$�a��!�?��!�!�&��&�!�A�'�
B���%�%�d�%�,1�&�&�B��%�%�f�E�,1�&�&�B�
B�	Brc�:�dD]}|jdd|���y)N)rr�r�r�r�r�r�s  r�test_required_const_actionsz;TestInvalidArgumentConstructors.test_required_const_actions�s*��5�	A�F�
� � ��S�� �@�	Arc��|jdd��|jddd��|jddtj��y)Nr��parsersr�rc)rre)rr�)r�r+r,rs r�"test_parsers_action_missing_paramszBTestInvalidArgumentConstructors.test_parsers_action_missing_params�sK�����Y�y��9����Y�y�v��F����Y�y�*2�*A�*A�	�	Crc�*�|jdd��y)Nr(Tr�r�rs r�test_required_positionalz8TestInvalidArgumentConstructors.test_required_positional�s�����U�T��2rc����Gd�dt��G�fd�dt�}tj�}|j	�|j
d|����|j	�|j
d|����y)Nc��eZdZy)�ITestInvalidArgumentConstructors.test_user_defined_action.<locals>.SuccessNr�rArr�Successr��s��rr�c�"��eZdZ	d�fd�	Zd�Zy)�HTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Actionc�2��|dk(r|�ur|�ur���yyy)Nr�rA)r�option_stringsr'rrlr�r�s      �rrzQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__init__�s2����6�>���'�"�g�-�")�)�O�.�(�"rc��yrOrArxs   rrCzQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__call__�s��rN)F)rrr rrC)r�s�rrKr��s���#(�	
,�
rrKrm)rrlrr�)r�r�r+r,r�r�)rrKr2r�s   @r�test_user_defined_actionz8TestInvalidArgumentConstructors.test_user_defined_action�sy���	�i�	�	�V�	� �(�(�*�����'�6�#6�#6��!'���	�	I����'�6�#6�#6��!'���	�	IrN)rrr r!r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rArrr�r�nsV��7�+�
+�
7�0�
%�:�;�)�C�A�B�A�C�3�Irr�c��eZdZd�Zd�Zy)�TestActionsReturnedc�>�tj�}|jd�}|j|jd�|jdd�}|j|jd�|jdd�}|j|jd�y)	Nr�r(r�r.rCr�r
r�)r+r,r�r�r'�rr2rs   rr�zTestActionsReturned.test_dest�s����(�(�*���$�$�W�-��������e�,��$�$�T�7�3��������e�,��$�$�T�4�0��������c�*rc�8�tj�}|jddddtddgddd	�
�	}|j	|j
d�|j	|jd�|j	|jd�|j	|jt�|j	|jddg�|j	|jd�|j	|jd�|j	|jd	�y)Nr�r�rr�rrr�rt�BARrD)rtrrlr�r�rir�r')
r+r,r�r�r�rtrrlr�r�rir�r'r�s   r�	test_misczTestActionsReturned.test_misc�s����(�(�*���$�$�W�C�r�-/�c�A�q�6�*/��U�%�L��	
������s�+�������r�*��������,�������c�*�������!�Q��0�������e�,��������/�������e�,rN)rrr r�r�rArrr�r��s��+�-rr�c�$�eZdZd�Zd�Zd�Zd�Zy)�TestConflictHandlingc�P�|jttjd��y)Nr()�conflict_handler)r�rr+r,rs r�
test_bad_typez"TestConflictHandling.test_bad_types"�����*�h�&=�&=�+0�	�	2rc��tj�}|jd�|jtj|jd�|jd�|jtj|jd�y)Nr�rm)r+r,r�r�r
r1s  r�test_conflict_errorz(TestConflictHandling.test_conflict_errorsn���(�(�*�����D�!����(�0�0� �-�-�t�	5����H�%����(�0�0� �-�-�x�	9rc��tj}|dd��}|jdd��|jdd��|j|j	�tjd��|jd	d
��|jd	d��|j|j	�tjd
��y)Nrc�resolve)rer�r�zOLD Xr�zNEW Xz�            usage: PROG [-h] [-x X]

            options:
              -h, --help  show this help message and exit
              -x X        NEW X
            rm�OLD_SPAMr"�NEW_SPAMz�            usage: PROG [-h] [-x X] [--spam NEW_SPAM]

            options:
              -h, --help       show this help message and exit
              -x X             NEW X
              --spam NEW_SPAM
            )r+r,r�r�r�r�r�)rr9r2s   r�test_resolve_errorz'TestConflictHandling.test_resolve_errors����,�,�
���)�D�����D�w��/����D�w��/�����+�+�-�x���@�0�	�	���H�j��9����H�j��9�����+�+�-�x���@�0�	rc���tj�}|j�}|jddg��|j	tj
|jd�|j	tj
|jd�|j	tj
|jddg��|j	tj
|jddg��y)N�fullname�aliasr�r�)r+r,r}rr�r
)rr2�sps   r�test_subparser_conflictz,TestConflictHandling.test_subparser_conflict2s����(�(�*��
�
"�
"�
$��
�
�
�j�7�)�
�4����(�0�0��-�-��	5����(�0�0��-�-��	2����(�0�0��-�-��:�,�	�	H����(�0�0��-�-��7�)�	�	ErN)rrr r�r�r�r�rArrr�r�
s��2�9��2Err�c�F�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zy)�TestOptionalsHelpVersionActionsz!Test the help and version actionsc��|jt�5}|j|j��ddd�|j	|j�jj�y#1swY�>xYwrO)r�r�r;r�r�r�r�r�)rr2r�r�s    r�assertPrintHelpExitz3TestOptionalsHelpVersionActions.assertPrintHelpExitGs`��
�
�
�2�
3�	0�r����h�n�n�.�/�	0�����+�+�-�r�|�|�/B�/B�C�	0�	0�s� A3�3A<c�F�|jt|j|�yrO)r�r�r;�rr2rvs   rr`z9TestOptionalsHelpVersionActions.assertArgumentParserErrorLs�����-�v�/@�/@�$�Grc���t�}|jdddd��|j|d�|j|d�|jtt
|d�y)	Nr^r|r}r~rr5rO�format_version�r�r�r�r�r�r�r1s  r�test_versionz,TestOptionalsHelpVersionActions.test_versionOsV��+�-�����D�+�i���O�� � ���.�� � ���2����.�'�6�;K�Lrc�
�td��}|jdddd��|jt�5}|j	dg�ddd�|jdjj�y#1swY�0xYw)	N�PPPr.r^r|r}z%(prog)s 3.5rzPPP 3.5
�r�r�r�r�r;r�r�r�r�s   r�test_version_formatz3TestOptionalsHelpVersionActions.test_version_formatVss��+��7�����D�+�i���X�
�
�
�2�
3�	&�r����t�f�%�	&�����b�l�l�&9�&9�:�	&�	&�s�A9�9Bc���td��}|jdddd��|j|d�|j|d	�|jtt
|d
�y)NFr�r^r|r}r~rr5rOr�)r�r�r`r�r�r�r1s  r�test_version_no_helpz4TestOptionalsHelpVersionActions.test_version_no_help]sX��+�U�;�����D�+�i���O��&�&�v�t�4��&�&�v�x�8����.�'�6�;K�Lrc��td��}|jddd��|jt�5}|j	dg�ddd�|jdjj�y#1swY�0xYw)NrBr.rzr}z%(prog)s 3.7rzXXX 3.7
r�r�s   r�test_version_actionz3TestOptionalsHelpVersionActions.test_version_actiondsq��+��7�����D��N��K�
�
�
�2�
3�	&�r����t�f�%�	&�����b�l�l�&9�&9�:�	&�	&�s�A8�8Bc��td��}|j|d�|j|d�|j|d�|j|d�y)NFr�r5rOr^r|)r�r`r1s  r�test_no_helpz,TestOptionalsHelpVersionActions.test_no_helpksL��+�U�;���&�&�v�t�4��&�&�v�x�8��&�&�v�t�4��&�&�v�{�;rc��t�}|jdd��|jdd��|j|d�|j|d�|j|d�|j	t
t|d�y)	Nr�rir�r
r}r^r|r�)r�r�r�r`r�r�r�r1s  r�test_alternate_help_versionz;TestOptionalsHelpVersionActions.test_alternate_help_versionrsu��+�-�����D���0����D���3�� � ���.��&�&�v�t�4��&�&�v�{�;����.�'�6�;K�Lrc�T�t�}|jddd��|jdd��|jd�gd	�}|d
dgz}|D]V}|D]	}|�d|��}�|j|d
z�|j||dz�|jtt
|d��Xy)Nr|r}r~rr�r�r�r[)rr�r(z-x barzbaz -xz--bad-optionzfoo bar bazz %s r5rOr�r�)rr2�valid_prefixes�valid_suffixes�prefix�suffixrs       r�!test_help_version_extra_argumentszATestOptionalsHelpVersionActions.test_help_version_extra_arguments{s���+�-�����K�	�5��I����D���6����C� �?��'�>�=�*I�I��$�	Q�F�(�
8��(.��7��
8��$�$�V�V�d�]�;��$�$�V�V�h�->�?����n�g�v�?O�P�	QrN)
rrr r!r�r`r�r�r�r�r�r�r�rArrr�r�Ds8��+�D�
H�M�;�M�;�<�M�Qrr�c�@�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zy
)�TestStringsz3Test str()  and repr() on Optionals and Positionalsc�V�ttfD]}|j||�|��yrO)r�r�r�)r�obj�
result_stringr6s    r�assertStringEqualzTestStrings.assertStringEqual�s)���$�K�	7�D����T�#�Y�
�6�	7rc�p�tjgd�ddddgd�ddd	�
�	}d}|j||�y)N)r�r�r�r|r�r�r�rrr�rwF�HELP�METAVAR�	r�r'r�rtrlr�r�rir�z�Action(option_strings=['--foo', '-a', '-b'], dest='b', nargs='+', const=None, default=42, type='int', choices=[1, 2, 3], required=False, help='HELP', metavar='METAVAR'))r+rKr�)r�optionr2s   r�
test_optionalzTestStrings.test_optional�sH�����0���������	��
Q�	�	
���v�v�.rc��tjgdtddgd�ddd��	}d	tz}|j||�y)
Nr�r�ro)rpg�?roTzH HH HzMV MV MVr�z�Action(option_strings=[], dest='x', nargs='?', const=None, default=2.5, type=%r, choices=[0.5, 1.5, 2.5], required=True, help='H HH H', metavar='MV MV MV'))r+rKrqr�)r�argumentr2s   r�
test_argumentzTestStrings.test_argument�sQ���?�?������#����	 ��
@�BG�
H�	�	
���x��0rc�Z�tjdd��}d}|j||�y)Nrr�rzNamespace(foo=42, bar='spam')�r+r�r��rr�r2s   r�test_namespacezTestStrings.test_namespace�s)��
�
�
�B�F�
3��0�����r�6�*rc�Z�tjdiddi��}d}|j||�y)N�"�quotezNamespace(**{'"': 'quote'})rArrs   r�'test_namespace_starkwargs_notidentifierz3TestStrings.test_namespace_starkwargs_notidentifier�s.��
�
�
�
1�3��.�
1��2�����r�6�*rc�^�tjdddiddi��}d}|j||�y)Nr�rrrr	z Namespace(a=1, **{'"': 'quote'})rArrs   r�2test_namespace_kwargs_and_starkwargs_notidentifierz>TestStrings.test_namespace_kwargs_and_starkwargs_notidentifier�s3��
�
�
�
6�!�
6��W�~�
6��7�����r�6�*rc�Z�tjdiddi��}d}|j||�y)N�validTzNamespace(valid=True)rArrs   r�$test_namespace_starkwargs_identifierz0TestStrings.test_namespace_starkwargs_identifier�s.��
�
�
�
2�7�D�/�
2��(�����r�6�*rc�z�tjd��}dtjz}|j||�y)Nrcr.zvArgumentParser(prog='PROG', usage=None, description=None, formatter_class=%r, conflict_handler='error', add_help=True))r+r,�
HelpFormatterr�)rr2r2s   r�test_parserzTestStrings.test_parser�s<���(�(�f�5��
�'�5�5�
6�	�	
���v�v�.rN)rrr r!r�r�rrr
rrrrArrr�r��s-��=�7�/�"1�"+�
+�
+�
+�
/rr�c��eZdZd�Zd�Zd�Zy)�
TestNamespacec��tj�}|jtt|d�tjdd��}|j|jd�|j|jd�y)Nr�rr�r)r+r�r�r�r�r�r�r|r�s  r�test_constructorzTestNamespace.test_constructor�s^��
�
�
�
!�����.�'�2�s�;�
�
�
�"��
/��������r�"�������v�&rc��tjdd��}tjdd��}tjd��}tjd��}|j||�|j||�|j||�|j||�|j||�|j	||k7�|j	||k7�|j	||k7�|j	||k7�y)Nrrr�r)r|r�)r�r�)r+r�r��assertNotEqual�
assertTrue)r�ns1�ns2�ns3�ns4s     r�
test_equalityzTestNamespace.test_equality�s���� � �1��*��� � �1��*��� � �1�%��� � �1�%������c�"����C��%����C��%����C��%����C��%�����s�
�#�����s�
�#�����s�
�#�����s�
�#rc���tjdd��}|j|jd�t�|j|jd�t�y)Nrrr�r)r+r��assertIsr��NotImplemented�__ne__r�s  r�$test_equality_returns_notimplementedz2TestNamespace.test_equality_returns_notimplemented�s@��
�
�
�!�q�
)���
�
�b�i�i��o�~�6��
�
�b�i�i��o�~�6rN)rrr rrr#rArrrr�s��'�$� 7rrc��eZdZd�Zd�Zd�Zy)�TestEncodingc��tjj|�\}}|dz
}t|dd��5}|j	�ddd�y#1swYyxYw)Nz.pyr�rrh)rSr[�splitextrjr�)rr[r�rs    r�_test_module_encodingz"TestEncoding._test_module_encodingsO���'�'�"�"�4�(���a���
��
�$��g�
.�	�!�
�F�F�H�	�	�	�s�A�Ac�B�|jtj�yrO)r(r+�__file__rs r�test_argparse_module_encodingz*TestEncoding.test_argparse_module_encodings���"�"�8�#4�#4�5rc�.�|jt�yrO)r(r*rs r�"test_test_argparse_module_encodingz/TestEncoding.test_test_argparse_module_encoding	s���"�"�8�,rN)rrr r(r+r-rArrr%r%�s���6�-rr%c��eZdZd�Zy)�TestArgumentErrorc�j�d}tjd|�}|jt|�|�y)Nz
my error here)r+r
r�r�)rr�r�s   r�test_argument_errorz%TestArgumentError.test_argument_errors-�����&�&�t�S�1������U��S�)rN)rrr r1rArrr/r/s��*rr/c��eZdZd�Zy)�TestArgumentTypeErrorc��d�}tdd��}|jd|��|jt�5}|j	dg�ddd�|jdjj�y#1swY�0xYw)	Nc�,�tjd��)N�spam!)r+�ArgumentTypeErrorr1s rr�z<TestArgumentTypeError.test_argument_type_error.<locals>.spams���,�,�W�5�5rrcFr%r�rnrBz-usage: PROG x
PROG: error: argument x: spam!
)r�r�r�r�r;r�r�r�)rr�r2r�s    r�test_argument_type_errorz.TestArgumentTypeError.test_argument_type_errors|��	6�,��%�H�����C�d��+�
�
�
�2�
3�	'�r����u�g�&�	'����J����,�,�	.�	'�	'�s�A;�;BN)rrr r8rArrr3r3s��
.rr3c��eZdZd�Zd�Zd�Zy)�TestMessageContentErrorc���tdd��}|jdt��|jdtd��|jd	td
��|j	t
�5}|j
g�ddd�tj�}|j|d�|j|d�|j|d	�|j	t
�5}|j
d
g�ddd�t|j�}|j|d�|j|d�|j|d	�|j	t
�5}|j
d
dg�ddd�t|j�}|j|d�|j|d�|j|d	�y#1swY��MxYw#1swY��xYw#1swY�nxYw)NrcrrF�req_posrn�-req_optTr��need_oner�)r�rt�req_opt�myXargumentz
-req_opt=1)
r�r�r�r�r�r�r;r�r>r��rr2r�r�s    r�%test_missing_argument_name_in_messagez=TestMessageContentError.test_missing_argument_name_in_message/s���+��r�B�����I�C��0����J�S�4��@����J�S���<�
�
�
�2�
3�	"�r����b�!�	"��"�,�,�������i�(�����i�(�����j�)�
�
�
�2�
3�	/�r����}�o�.�	/��"�,�,�������i�(�����i�(�����j�)�
�
�
�2�
3�	=�r����}�l�;�<�	=��"�,�,�������i�(�����i�(�����j�)�#	"�	"��	/�	/��	=�	=�s$�*G�$G�G �G�G� G)c���tdd��}|jdt��|jdtd��|jd	td
d��|jt�5}|jg�ddd�tj�}|j|d�|j|d�|j|d
�|jt�5}|jdg�ddd�t|j�}|j|d�|j|d�|j|d
�y#1swY��xYw#1swY�axYw)NrcrrFr<rnz	--req_optTr�z	--opt_optr�)r�rtrlr?�opt_optz--req_opt=1)r�r�r�r�r�r�r�r;r�r>r�rAs    r�%test_optional_optional_not_in_messagez=TestMessageContentError.test_optional_optional_not_in_messageHs8��+��r�B�����I�C��0����K�c�D��A����K�d�#�$(�	�	*�
�
�
�2�
3�	"�r����b�!�	"��"�,�,�������i�(�����i�(�����i�(�
�
�
�2�
3�	/�r����}�o�.�	/��"�,�,�������i�(�����i�(�����i�(�	"�	"��	/�	/�s�+E�%E�E�E!c�P�tdd��}|jd�|jddd��|jt�5}|j	g�ddd�tj�}|j|d�|j|d�y#1swY�CxYw)	NrcrrFr<�optional_positionalr�rr�)	r�r�r�r�r;r�r�r>r�rAs    r�'test_optional_positional_not_in_messagez?TestMessageContentError.test_optional_positional_not_in_message[s���+��r�B�����I�&����1��f��M�
�
�
�2�
3�	"�r����b�!�	"��"�,�,�������i�(�����3�4�		"�	"�s�B�B%N)rrr rBrErHrArrr:r:-s��*�2)�&5rr:c��eZdZd�Zy)�TestTypeFunctionCallOnlyOncec�����fd�}tj�}|jd|d��|jdj	��}�jt
d��|�y)Nc�*���j|d�y)Nr6�
foo_converted�r�)�string_to_convertrs �rr�zLTestTypeFunctionCallOnlyOnce.test_type_function_call_only_once.<locals>.spamms������.��8�"rr�rCr�z--foo spam!rMr)r+r,r�r;r�r�r{�rr�r2rvs`   r�!test_type_function_call_only_oncez>TestTypeFunctionCallOnlyOnce.test_type_function_call_only_oncels[���	#��(�(�*�����G�$���>�� � ��!4�!4�!6�7�������0�$�7rN)rrr rQrArrrJrJjs��8rrJc�$�eZdZd�Zd�Zd�Zd�Zy)�TestTypeFunctionCalledOnDefaultc����fd�}tj�}|jd|d��|jg�}�j	td��|�y)Nc�*���j|d�y)NrrMrN)�int_to_convertrs �rr�z]TestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_default.<locals>.spam}s������^�Q�/�"rr�rr�r�r+r,r�r;r�r{rPs`   r�/test_type_function_call_with_non_string_defaultzOTestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_default|sQ���	#��(�(�*�����G�$���:�� � ��$��������D�)rc��d�}tj�}|jd|d��|jg�}|j	td��|�y)Nc��y)NrMrA)rVs rr�zYTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_default.<locals>.spam�s��"rr��0r�rMrrWrPs    r�+test_type_function_call_with_string_defaultzKTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_default�sQ��	#��(�(�*�����G�$���<�� � ��$�������0�$�7rc��d�}tj�}|jd|d��|jg�}|j	td��|�y)Nc��|dzS)Nr�rA)�str_to_converts rrWzYTestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_default.<locals>.extend�s
��!�C�'�'r�--testr�r�z**)rrW)rrWr2rvs    r�)test_no_double_type_conversion_of_defaultzITestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_default�sR��	(��(�(�*�����H�6�3��?�� � ��$��	
�������-rc��tj�}|jddtgd��|j	g�}|j|jg�y)Nr`rr�)r'r�rlr)r+r,r�r�r;r�rr�s   r�test_issue_15906z0TestTypeFunctionCalledOnDefault.test_issue_15906�sT���(�(�*�����H�6��$&�x�	�	9�� � ��$��������B�'rN)rrr rXr\rarcrArrrSrSzs��	*�8�
.�(rrSc�<�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
y	)
�TestParseKnownArgsc�N�tj�}|jd�y)NrA�r+r,r;r1s  r�test_arguments_tuplez'TestParseKnownArgs.test_arguments_tuple�����(�(�*�����"�rc�N�tj�}|jg�yrOrgr1s  r�test_arguments_listz&TestParseKnownArgs.test_arguments_list�rirc�p�tj�}|jd�|jd�y)Nr�r��r+r,r�r;r1s  r�test_arguments_tuple_positionalz2TestParseKnownArgs.test_arguments_tuple_positional�s,���(�(�*�����C� ����&�!rc�r�tj�}|jd�|jdg�y)Nr�rmr1s  r�test_arguments_list_positionalz1TestParseKnownArgs.test_arguments_list_positional�s.���(�(�*�����C� ����3�%� rc���tj�}|jd�|jdj	��\}}|jt
d��|�|jddg|�y)Nr�z--foo F --bar --baz�Frr.rb)r+r,r�r�r�r�r{)rr2rv�extrass    r�test_optionalsz!TestParseKnownArgs.test_optionals�se���(�(�*�����G�$��.�.�/D�/J�/J�/L�M���f�������d�+����'�7�+�V�4rc�:�tj�}|jdddt��|jdd��|jd�gd	�}|j	|�\}}|jt
d
dd�
�|�|jgd�|�y)Nr^r�rr)rtrr�rmr�r�r3)rAr,r�r^r�rRrwTrA)�vr�r3)r,r�rR)r+r,r�r�r�r�r{)rr2r�rvrss     r�
test_mixedzTestParseKnownArgs.test_mixed�s����(�(�*�����D��1�3��?����H�]��;����H�%�2���.�.�t�4���f�����a�d�3�7��>����,�f�5rc��tj�}|jddd��|jg�}|j	tg��|�y)Nr�r�rm)rtr�r�rWr�s   r�test_zero_or_more_optionalz-TestParseKnownArgs.test_zero_or_more_optional�sI���(�(�*�����C�s�J��?�� � ��$������b��4�(rc�b�tj�}|jddd��|jdd��|jdg�}|j	tdgg��|�|jddg�}|j	tgg��|�|jd	g�}|j	tdgg��|�|jddg�}|j	tgg��|�|jgd
��}|j	tddgd
dg��|�y)Nrr�r�rsrCz--foo=--r�rz-f--)r�r�r|r�r}r�r�r|r}r�rWr�s   r�test_double_dashz#TestParseKnownArgs.test_double_dash�s���(�(�*�����D�'���5����E���-�� � �*��.��������B�/��6�� � �'�4��1��������+�T�2�� � �&��*��������B�/��6�� � �$���.��������+�T�2�� � �!D�E�������c�
��c�
�;�T�BrN)rrr rhrkrnrprtrwryr{rArrrere�s+����"�
!�
5�	6�)�Crrec�$�eZdZd�Zd�Zd�Zd�Zy)�TestIntermixedArgsc	��tjd��}|jdd��|jddd�	�}|jd
�|jddt�
�dj	�}|j|�}|j
tdd
dgd���|�|j|�\}}|j
tdd
dg��|�|j
gd�|�dj	�}|j|�\}}|j
tdd
ddg��|�|j
gd�|�|j|j�|j
|jd�y)Nrcr.r�r(r&r.rCTr��cmd�restr�)rtr�zcmd --foo x 1 --bar y 2 3r[r�r�)rCrr(r��rr�r�z!cmd --foo x 1 --error 2 --bar y 3rr)z--errorr�r�)
r+r,r�r�r��parse_intermixed_argsr�r{r��parse_known_intermixed_argsr�r�r�)rr2rCr�rvrss      r�
test_basiczTestIntermixedArgs.test_basic�sO���(�(�f�5�����G�%��0��!�!�'���!�E�����E�"����F�#�C��8�*�0�0�2���+�+�D�1��������C�i�H�$�O��.�.�t�4���f�������C�b�A�4�H�����&�1�2�8�8�:���9�9�$�?���f�������C�q�c�B�D�I����.��7�	
���&�,�,�'�������t�,rc�f�td��}|jd�|jd�|jdd��dj�}|jt�5}|j|�ddd�|j
tj�d	�y#1swY�/xYw)
Nrcr.rr�r[rgrsriz\.\.\.)	r�r�r�r�r�r�r>r�r�)rr2r�r�s    r�test_remainderz!TestIntermixedArgs.test_remainders���+��8�����D�!����C� ����C�u��-��!�!�#���
�
�y�
)�	/�R��(�(��.�	/�����R�\�\�*�I�6�	/�	/�s�'B'�'B0c���td��}|jd��}|jddd��|jd	d
��|jdd
dd��|jdj	��}|jt
ddgdd��|�|jt|jdj	��|j|jd�y)Nrcr.Tr�r�r�rtrhrmrur�r3r�r5rvrwz	1 --foo 2rr�)r3r(r�r)
r�r�r�r�r�r�r{r�r�r�)rr2r�rvs    r�test_exclusivez!TestIntermixedArgs.test_exclusives���+��8���3�3�T�3�B��
���7�<�e��D�
���8�&��1����H�C��8��L��+�+�K�,=�,=�,?�@������C��:�4�d�C�T�J����-�v�/K�/K�U�[�[�]�[��������.rc�2�td��}|jd��}|jddd��|jd	d
��|jdd
dd��|jt|j
g�|j
|jd�y)Nrcr.Tr�r�r�rtrhrmrur�r3r�r5rvrw)r�r�r�r�r�r�r�r�r2s   r�test_exclusive_incompatiblez.TestIntermixedArgs.test_exclusive_incompatible!s���+��8���3�3�T�3�B��
���7�<�e��D�
���8�&��1�
���8�3��(��K����)�V�%A�%A�2�F��������.rN)rrr r�r�r�r�rArrr}r}�s��-�67�
/�/rr}c��eZdZd�Zy)�!TestIntermixedMessageContentErrorc�L�tdd��}|jdt��|jdtd��|j	t
�5}|j
g�ddd�tj�}|j|d�|j|d	�|j	t
�5}|jg�ddd�t|j�}|j|d�|j|d	�y#1swY��xYw#1swY�OxYw)
NrcrrFr<rnr=Tr�r?)r�r�r�r�r�r�r;r�r>r��assertNotRegexrAs    rrBzGTestIntermixedMessageContentError.test_missing_argument_name_in_message.s���+��r�B�����I�C��0����J�S�4��@�
�
�
�2�
3�	"�r����b�!�	"��"�,�,�������i�(�����i�(�
�
�
�2�
3�	-�r��(�(��,�	-��"�,�,������C��+�����i�(�	"�	"��	-�	-�s�D�:D�D�D#N)rrr rBrArrr�r�+s��)rr�c�*�eZdZdZd�Zd�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.�Z0d/�Z1d0�Z2y1)2�TestAddArgumentMetavarz,length of metavar tuple does not match nargsc�T�tj�}|jd||��y)Nr��rtr�)r+r,r�)rrtr�r2s    r�do_test_no_exceptionz+TestAddArgumentMetavar.do_test_no_exceptionGs%���(�(�*�����G�5�'��Brc��tj�}|jt�5}|j	d||��ddd�|jjjd|j�y#1swY�=xYw)Nr�r�r)	r+r,r�rr�r�r�rv�EXPECTED_MESSAGE)rrtr�r2r�s     r�do_test_exceptionz(TestAddArgumentMetavar.do_test_exceptionKss���(�(�*��
�
�
�z�
*�	G�b�����u�g��F�	G�������*�*�1�-�t�/D�/D�E�	G�	G�s�A;�;Bc�*�|jdd��y)Nrr��r�rs r�test_nargs_None_metavar_stringz5TestAddArgumentMetavar.test_nargs_None_metavar_stringSs���!�!��c�!�:rc�:�|jdt���y)Nr��r��tuplers r�test_nargs_None_metavar_length0z6TestAddArgumentMetavar.test_nargs_None_metavar_length0Vs�����T�5�7��;rc�*�|jdd��y)Nr|r�r�rs r�test_nargs_None_metavar_length1z6TestAddArgumentMetavar.test_nargs_None_metavar_length1Ys���!�!��f�!�=rc�*�|jdd��y)N�rr�r��r�rs r�test_nargs_None_metavar_length2z6TestAddArgumentMetavar.test_nargs_None_metavar_length2\s�����T�:��>rc�*�|jdd��y)Nr�r�r�rs r�test_nargs_None_metavar_length3z6TestAddArgumentMetavar.test_nargs_None_metavar_length3_s�����T�?��Crc�*�|jdd��y)Nr�rr�r�rs r�"test_nargs_optional_metavar_stringz9TestAddArgumentMetavar.test_nargs_optional_metavar_stringd����!�!��S�!�9rc�:�|jdt���y)Nr�r�r�rs r�#test_nargs_optional_metavar_length0z:TestAddArgumentMetavar.test_nargs_optional_metavar_length0g������S�%�'��:rc�*�|jdd��y)Nr�r|r�r�rs r�#test_nargs_optional_metavar_length1z:TestAddArgumentMetavar.test_nargs_optional_metavar_length1j����!�!��V�!�<rc�*�|jdd��y)Nr�r�r�r�rs r�#test_nargs_optional_metavar_length2z:TestAddArgumentMetavar.test_nargs_optional_metavar_length2ms�����S�*��=rc�*�|jdd��y)Nr�r�r�r�rs r�#test_nargs_optional_metavar_length3z:TestAddArgumentMetavar.test_nargs_optional_metavar_length3p������S�/��Brc�*�|jdd��y)Nr�rr�r�rs r�$test_nargs_zeroormore_metavar_stringz;TestAddArgumentMetavar.test_nargs_zeroormore_metavar_stringur�rc�:�|jdt���y)Nr�r�r�rs r�%test_nargs_zeroormore_metavar_length0z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length0xr�rc�*�|jdd��y)Nr�r|r�r�rs r�%test_nargs_zeroormore_metavar_length1z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length1{r�rc�*�|jdd��y)Nr�r�r�r�rs r�%test_nargs_zeroormore_metavar_length2z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length2~����!�!��Z�!�@rc�*�|jdd��y)Nr�r�r�r�rs r�%test_nargs_zeroormore_metavar_length3z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length3�r�rc�*�|jdd��y)Nr�rr�r�rs r�#test_nargs_oneormore_metavar_stringz:TestAddArgumentMetavar.test_nargs_oneormore_metavar_string�r�rc�:�|jdt���y)Nr�r�r�rs r�$test_nargs_oneormore_metavar_length0z;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length0�r�rc�*�|jdd��y)Nr�r|r�r�rs r�$test_nargs_oneormore_metavar_length1z;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length1�s�����S�&��9rc�*�|jdd��y)Nr�r�r�r�rs r�$test_nargs_oneormore_metavar_length2z;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length2�r�rc�*�|jdd��y)Nr�r�r�r�rs r�$test_nargs_oneormore_metavar_length3z;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length3�r�rc�*�|jdd��y)Nrgrr�r�rs r�#test_nargs_remainder_metavar_stringz:TestAddArgumentMetavar.test_nargs_remainder_metavar_string�s���!�!��s�!�;rc�:�|jdt���y)Nrgr�)r�r�rs r�$test_nargs_remainder_metavar_length0z;TestAddArgumentMetavar.test_nargs_remainder_metavar_length0�s���!�!��u�w�!�?rc�*�|jdd��y)Nrgr|r�r�rs r�$test_nargs_remainder_metavar_length1z;TestAddArgumentMetavar.test_nargs_remainder_metavar_length1�s���!�!��v�!�>rc�*�|jdd��y)Nrgr�r�r�rs r�$test_nargs_remainder_metavar_length2z;TestAddArgumentMetavar.test_nargs_remainder_metavar_length2�s���!�!��z�!�Brc�*�|jdd��y)Nrgr�r�r�rs r�$test_nargs_remainder_metavar_length3z;TestAddArgumentMetavar.test_nargs_remainder_metavar_length3�s���!�!���!�Grc�*�|jdd��y)N�A...rr�r�rs r� test_nargs_parser_metavar_stringz7TestAddArgumentMetavar.test_nargs_parser_metavar_string�s���!�!���!�<rc�:�|jdt���y)Nr�r�r�rs r�!test_nargs_parser_metavar_length0z8TestAddArgumentMetavar.test_nargs_parser_metavar_length0�s�����V�U�W��=rc�*�|jdd��y)Nr�r|r�r�rs r�!test_nargs_parser_metavar_length1z8TestAddArgumentMetavar.test_nargs_parser_metavar_length1�s���!�!���!�?rc�*�|jdd��y)Nr�r�r�r�rs r�!test_nargs_parser_metavar_length2z8TestAddArgumentMetavar.test_nargs_parser_metavar_length2�s�����V�Z��@rc�*�|jdd��y)Nr�r�r�r�rs r�!test_nargs_parser_metavar_length3z8TestAddArgumentMetavar.test_nargs_parser_metavar_length3�s�����V�_��Erc�*�|jdd��y)Nrrrr�r�rs r�test_nargs_1_metavar_stringz2TestAddArgumentMetavar.test_nargs_1_metavar_string�����!�!��3�!�7rc�:�|jdt���y)Nrrr�r�rs r�test_nargs_1_metavar_length0z3TestAddArgumentMetavar.test_nargs_1_metavar_length0�������Q����8rc�*�|jdd��y)Nrrr|r�r�rs r�test_nargs_1_metavar_length1z3TestAddArgumentMetavar.test_nargs_1_metavar_length1�s���!�!��6�!�:rc�*�|jdd��y)Nrrr�r�r�rs r�test_nargs_1_metavar_length2z3TestAddArgumentMetavar.test_nargs_1_metavar_length2�������Q�
��;rc�*�|jdd��y)Nrrr�r�r�rs r�test_nargs_1_metavar_length3z3TestAddArgumentMetavar.test_nargs_1_metavar_length3�������Q���@rc�*�|jdd��y)Nr�rr�r�rs r�test_nargs_2_metavar_stringz2TestAddArgumentMetavar.test_nargs_2_metavar_string�r�rc�:�|jdt���y)Nr�r�r�rs r�test_nargs_2_metavar_length0z3TestAddArgumentMetavar.test_nargs_2_metavar_length0�r�rc�*�|jdd��y)Nr�r|r�r�rs r�test_nargs_2_metavar_length1z3TestAddArgumentMetavar.test_nargs_2_metavar_length1�������Q���7rc�*�|jdd��y)Nr�r�r�r�rs r�test_nargs_2_metavar_length2z3TestAddArgumentMetavar.test_nargs_2_metavar_length2�s���!�!��:�!�>rc�*�|jdd��y)Nr�r�r�r�rs r�test_nargs_2_metavar_length3z3TestAddArgumentMetavar.test_nargs_2_metavar_length3�r�rc�*�|jdd��y)Nrwrr�r�rs r�test_nargs_3_metavar_stringz2TestAddArgumentMetavar.test_nargs_3_metavar_string�r�rc�:�|jdt���y)Nrwr�r�rs r�test_nargs_3_metavar_length0z3TestAddArgumentMetavar.test_nargs_3_metavar_length0�r�rc�*�|jdd��y)Nrwr|r�r�rs r�test_nargs_3_metavar_length1z3TestAddArgumentMetavar.test_nargs_3_metavar_length1�r�rc�*�|jdd��y)Nrwr�r�r�rs r�test_nargs_3_metavar_length2z3TestAddArgumentMetavar.test_nargs_3_metavar_length2�r�rc�*�|jdd��y)Nrwr�r�r�rs r�test_nargs_3_metavar_length3z3TestAddArgumentMetavar.test_nargs_3_metavar_length3�s���!�!��?�!�CrN)3rrr r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrArrr�r�Cs��E��C�F�;�<�>�?�D�
:�;�=�>�C�
:�;�=�A�C�
:�;�:�A�C�
<�@�?�C�H�
=�>�@�A�F�
8�9�;�<�A�
8�9�8�?�A�
8�9�8�<�Drr�c�,�eZdZdZdZd�Zd�Zd�Zd�Zy)�TestInvalidNargszinvalid nargs valuez�nargs for store actions must be != 0; if you have nothing to store, actions such as store true or store const may be more appropriatec��tj�}|jt�5}|j	d|��ddd�|jjjd|j�y#1swY�=xYw�Nr�rsr)	r+r,r�rr�r�r�rv�EXPECTED_RANGE_MESSAGE�rrtr2r�s    r�do_test_range_exceptionz(TestInvalidNargs.do_test_range_exception�sm���(�(�*��
�
�
�z�
*�	6�b�����u��5�	6�������*�*�1�-�t�/J�/J�K�	6�	6���A:�:Bc��tj�}|jt�5}|j	d|��ddd�|jjjd|j�y#1swY�=xYwr)	r+r,r�rr�r�r�rv�EXPECTED_INVALID_MESSAGErs    r�do_test_invalid_exceptionz*TestInvalidNargs.do_test_invalid_exception�sm���(�(�*��
�
�
�z�
*�	6�b�����u��5�	6�������*�*�1�-�t�/L�/L�M�	6�	6�rc�L�|jd��|jd��y)Nr�rs�abcd)rrs r�test_nargs_alphabeticz&TestInvalidNargs.test_nargs_alphabetics$���&�&�S�&�1��&�&�V�&�4rc�(�|jd��y)Nrrs)rrs r�test_nargs_zeroz TestInvalidNargs.test_nargs_zeros���$�$�1�$�-rN)	rrr r
rrrrrrArrrr�s'��4��L��L�N�5�.rrc��eZdZd�Zd�Zy)�TestImportStarc�l�tjD]!}|jtt|���#yrO)r+�__all__rr�r�s  rrzTestImportStar.test
s*���$�$�	5�D��O�O�G�H�d�3�4�	5rc�(�tt�j�D��cgc]2\}}|jd�s|dk(st	j
|�s|��4}}}|j
t|�ttj��ycc}}w)Nr��ngettext)	r�r+r��
startswith�inspect�ismoduler�r�r)rrdrr�s    r�'test_all_exports_everything_but_modulesz6TestImportStar.test_all_exports_everything_but_modulessy�� $�H�~�3�3�5�
���e��O�O�C�(�D�J�,>��#�#�E�*�
�
��
�	
�������x�/?�/?�(@�A��

s�7BN)rrr rrrArrrrs
��5�Brrc�$��eZdZ�fd�Zd�Z�xZS)�TestWrappingMetavarc���t�|��td�|_d}|jj	d|��y)N�9this_is_spammy_prog_with_a_long_name_sorry_about_the_namez<http[s]://example:1234>z--proxyr")rrKr�r2r�)rr�rs  �rrKzTestWrappingMetavar.setUps9���
��
��0�G�
���
-����� � ��G� �<rc��|jj�}|j|tjd��y)Na            usage: this_is_spammy_prog_with_a_long_name_sorry_about_the_name
                   [-h] [--proxy <http[s]://example:1234>]

            options:
              -h, --help            show this help message and exit
              --proxy <http[s]://example:1234>
            )r2r�r�r�r�)r�	help_texts  r�test_help_with_metavarz*TestWrappingMetavar.test_help_with_metavar's4���K�K�+�+�-�	�����H�O�O�5�%�	r)rrr rKr!r"r#s@rrrs
���=�	rrc��eZdZd�Zd�Zd�Zy)�TestExitOnErrorc�~�tjd��|_|jjddt��y)NF)�
exit_on_errorz
--integers�N)r�r�)r+r,r2r�r�rs rrKzTestExitOnError.setUp5s-���-�-�E�B������ � ��s�� �Erc��|jjdj��}|j|t	j
d���y)Nz--integers 4r�)�integers)r2r;r�r�r+r�r�s  r�!test_exit_on_error_with_good_argsz1TestExitOnError.test_exit_on_error_with_good_args9s:��
�[�[�
#�
#�N�$8�$8�$:�
;������X�/�/��;�<rc��|jtj�5|jj	dj��ddd�y#1swYyxYw)Nz--integers a)r�r+r
r2r;r�rs r� test_exit_on_error_with_bad_argsz0TestExitOnError.test_exit_on_error_with_bad_args=sF��
�
�
�x�5�5�
6�	;��K�K�"�"�>�#7�#7�#9�:�	;�	;�	;�s�*A�AN)rrr rKr)r+rArrr#r#3s��F�=�;rr#c�@�it_t�t_yrO)r�r�rNr�rArr�tearDownModuler-Bs���E�J���E�Jr�__main__)�r-r9rr
r�rSr_r]r�r�rP�unittestr+r��test.supportrr�
TextIOWrapperrrCr%�skip_unless_working_chmodr�rMrtr{r�r�r�r,r�r�r�r�r�r�r�rrr"r$r*r,r:r=rFrVrXr]rarjrorqrvrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr
rrrrrrrrr!r#r&r)r+r-r/r1r3r5r7r9r;r>r@rCrErGrIrPrVrXr[r]r_rdrfrmrsrwr{r�r�r�r�r�r�r�r��	eq_stderrr�r��
eq_bstderrr�r�r�r�r��skip_if_dac_overrider�r�r�r�rrrrr'r.r7rMrVr]r�r�r&r5rTr_rgrkrrrzr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrr r$r)r,r1r7r9r;r=r?rArErHrJrMrPrTrWrYr[r]r_rirrruryr|r~r�r�r�r�r�r�r�rr%r/r3r:rJrSrer}r�r�rrrr#r-r�mainrArr�<module>r7sV�����	��	�
��
������"��:�"�"�"�:�$F�H�%�%�F�:�x� � ���$�$�D�6�D�%�D�.�&��)��)�%�)�%�# �L>��!8�!8�>�o9�D�o9�b	�	��&�'7���C���n���n��4�.��
�^�
� 
�~�
� 
�>�
��n���.��$���&�N��&���(���,���.
�^�
� 
��
�	�>�	�����.���.�����.�>��&�.��"�>��"
�N�
��~���N���N���>��>��>�@
��
�	��	�	�>�	����&�^������~�����"�N��"�~��"�n��&�N��.�~���N���N��	�^�	�	�N�	��N���>���.���>���>��������	��	�����~��	��	�����~���n���^���N��	�n�	��^���N���.���������>��
�^�
�	�N�	��>�����
�.�
� 
��
� �~��"�>��&�~��&
�.�
� 
��
��^��6�.��&���(�.��**�L�.�*�Z�\�>��DK�x�K�0�h���h��,�,�,�W�%���h�'�	��h�'�	��n�-�	�
��
/�
�
��
/�
�/�F�/�"�L�.��03�<��3�"�\�>��.'�F�'�"����L�.�� ��,����L�.�� ��&���
�\�>�
� �
� ���
�]�
� �
�3�8�3�$
��
�$�~���.��,�>��,>�8�>�.>�N�>�BJ�X�J�$�~��[��[�B
!+�H�!+�Nm9��m9�f+&�x�+&�Z-?�f�-?�` �'�8� �F(���(�V�7�H��B!�'�8�!�H*��(�*�Z'�'�8�'�T%�7�H�%�P'���'�R/(�'�8�/(�j�f��	��
-�	�
	��
(�	�
	��
&�	�
	��
1�	�
	��
0�	�
	��
7�	�
	��
0�	�
	��
>�	�X0�h�X0�|8�X�8�.
"�(�
"�&Q1�$�Q1�f	�	��*�>�5�"�E��"�l�"�H3B�|�3B�l,�<�,�^���>1�<�1�h%��%�P3��3�l6�L�6�r�<��,�\��>�L��:!�|�!�H�<��2#��#�L�<��D!�L�!�H�\��4�|��0+��+�\�\��"
�<�
��L��*�|��(�L��4���*�|��(�<��*�\��.�<��0�<��6.�l�.�b-�\�-�`0�|�0�d�L��(�L��2���:'��'�V�<��BxI�h�xI�|-�(�-�<3E�8�3E�tEQ�h�EQ�XC/�(�C/�R7�H�7�J-�8�-�$*��*�.�H�.�$65�h�65�z
8�8�
8� +(�h�+(�b:C��:C�B=/��=/�~)��)�0eD�X�eD�P.�x�.�@
B�X�
B� �(��0;�h�;���z���H�M�M�O�r