Server : LiteSpeed
System : Linux server51.dnsbootclub.com 4.18.0-553.62.1.lve.el8.x86_64 #1 SMP Mon Jul 21 17:50:35 UTC 2025 x86_64
User : nandedex ( 1060)
PHP Version : 8.1.33
Disable Function : NONE
Directory :  /opt/cppython/lib/python3.8/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]


Current File : //opt/cppython/lib/python3.8/test/__pycache__/test_argparse.cpython-38.opt-1.pyc
U

>��g���@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
ddlmZddlm
Z
Gdd�de
�ZGdd�dej�ZGd	d
�d
e�ZGdd�de�ZGd
d�de�ZGdd�de�Zdd�ZGdd�dej�ZGdd�de�ZefZedei�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�Z Gd d!�d!e�Z!Gd"d#�d#e�Z"Gd$d%�d%e�Z#Gd&d'�d'e�Z$Gd(d)�d)e�Z%Gd*d+�d+e�Z&Gd,d-�d-e�Z'Gd.d/�d/e�Z(Gd0d1�d1e�Z)Gd2d3�d3e�Z*Gd4d5�d5e�Z+Gd6d7�d7e�Z,Gd8d9�d9e�Z-Gd:d;�d;e�Z.Gd<d=�d=e�Z/Gd>d?�d?e�Z0Gd@dA�dAe�Z1GdBdC�dCe�Z2GdDdE�dEe�Z3GdFdG�dGe�Z4GdHdI�dIe�Z5GdJdK�dKe�Z6GdLdM�dMe�Z7GdNdO�dOe�Z8GdPdQ�dQe�Z9GdRdS�dSe�Z:GdTdU�dUe�Z;GdVdW�dWe�Z<GdXdY�dYe�Z=GdZd[�d[e�Z>Gd\d]�d]e�Z?Gd^d_�d_e�Z@Gd`da�dae�ZAGdbdc�dce�ZBGddde�dee�ZCGdfdg�dge�ZDGdhdi�die�ZEGdjdk�dke�ZFGdldm�dme�ZGGdndo�doe�ZHGdpdq�dqe�ZIGdrds�dse�ZJGdtdu�due�ZKGdvdw�dwe�ZLGdxdy�dye�ZMGdzd{�d{e�ZNGd|d}�d}e�ZOGd~d�de�ZPGd�d��d�e�ZQGd�d��d�e�ZRGd�d��d�e�ZSGd�d��d�e�ZTGd�d��d�e�ZUGd�d��d�e�ZVGd�d��d�e�ZWGd�d��d�e�ZXGd�d��d�e�ZYGd�d��d�e�ZZGd�d��d�e�Z[Gd�d��d�e�Z\Gd�d��d�e�Z]Gd�d��d�e�Z^Gd�d��d�e�Z_Gd�d��d�e�Z`Gd�d��d�e�ZaGd�d��d�e�ZbGd�d��d�e�ZcGd�d��d�e�ZdGd�d��d�e�ZeGd�d��d�e�ZfGd�d��d�e�ZgGd�d��d�e�ZhGd�d��d�e�ZiGd�d��d�e�ZjGd�d��d�e�ZkGd�d��d�e�ZlGd�d��d�e�ZmGd�d��d�ee�ZnGd�d��d�ee�ZoGd�d��d�e�ZpGd�d��d��ZqeqdƒZreqdÃZseqdăZtGd�dƄd�e�ZuGd�dȄd�ee�ZvGd�dʄd�ee�ZwGd�d̄d�ee�ZxGd�d΄d�e�Zye�ze{edσ�o�e�|�dkdСGd�d҄d�ee��Z}Gd�dԄd�ee�Z~Gd�dքd�e�ZGd�d؄d�e�Z�Gd�dڄd�e�Z�Gd�d܄d�e�Z�Gd�dބd�e�Z�Gd�d�d�e�Z�Gd�d�d�e�Z�Gd�d�d�e�Z�Gd�d�d�e�Z�Gd�d�d�e�Z�Gd�d�d�e�Z�Gd�d�d�e�Z�Gd�d�d�e�Z�Gd�d�d�e�Z�Gd�d�d�e�e�Z�Gd�d�d�e�e�Z�Gd�d��d�e�e�Z�Gd�d��d�e�e�Z�Gd�d��d�e�e�Z�Gd�d��d�e�e�Z�Gd�d��d�e�e�Z�Gd��d��de�e�Z�G�d�d��de�e�Z�G�d�d��de�Z�G�d�d��de�e��Z�G�d�d��de�e��Z�G�d	�d
��d
e�e��Z�G�d�d��de�e��Z�G�d
�d��de�e��Z�G�d�d��de�e��Z�G�d�d��de�e��Z�G�d�d��de�e��Z�G�d�d��de�Z�G�d�d��de�Z�G�d�d��de�Z�G�d�d��de�Z�efZe��dei�Z�G�d�d��de��Z�G�d �d!��d!e��Z�G�d"�d#��d#e��Z�G�d$�d%��d%e��Z�G�d&�d'��d'e��Z�G�d(�d)��d)e��Z�G�d*�d+��d+e��Z�G�d,�d-��d-e��Z�G�d.�d/��d/e��Z�G�d0�d1��d1e��Z�G�d2�d3��d3e��Z�G�d4�d5��d5e��Z�G�d6�d7��d7e��Z�G�d8�d9��d9e��Z�G�d:�d;��d;e��Z�G�d<�d=��d=e��Z�G�d>�d?��d?e��Z�G�d@�dA��dAe��Z�G�dB�dC��dCe��Z�G�dD�dE��dEe��Z�G�dF�dG��dGe��Z�G�dH�dI��dIe��Z�G�dJ�dK��dKe��Z�G�dL�dM��dMe��Z�G�dN�dO��dOe��Z�G�dP�dQ��dQe��Z�G�dR�dS��dSe��Z�G�dT�dU��dUe��Z�G�dV�dW��dWe��Z�G�dX�dY��dYe��Z�G�dZ�d[��d[e��Z�G�d\�d]��d]e��Z�G�d^�d_��d_e��Z�G�d`�da��dae��Z�G�db�dc��dce��Z�G�dd�de��dee��Z�G�df�dg��dge��Z�G�dh�di��die�Z�G�dj�dk��dke�Z�G�dl�dm��dme�Z�G�dn�do��doe�Z�G�dp�dq��dqe�Z�G�dr�ds��dse�Z�G�dt�du��due�Z�G�dv�dw��dwe�Z�G�dx�dy��dye�Z�G�dz�d{��d{e�Z�G�d|�d}��d}e�Z�G�d~�d��de�Z�G�d��d���d�e�Z�G�d��d���d�e�Z�G�d��d���d�e�Z�G�d��d���d�e�Z�G�d��d���d�e�Z�G�d��d���d�e�Z�G�d��d���d�e�Zېd��d��Z�eݐd�k�r�e܃dS(��N)�StringIO)�support)�mockc@seZdZdS)�StdIOBufferN��__name__�
__module__�__qualname__�r
r
�1/opt/cppython/lib/python3.8/test/test_argparse.pyrsrc@seZdZdd�ZdS)�TestCasecCs t��}d|d<|�|j�dS)NZ80�COLUMNS)r�EnvironmentVarGuard�
addCleanup�__exit__��self�envr
r
r�setUpszTestCase.setUpN)rrr	rr
r
r
rrsrc@s$eZdZdd�Zdd�Zdd�ZdS)�TempDirMixincCs$t��|_t��|_t�|j�dS�N)�tempfile�mkdtemp�temp_dir�os�getcwd�old_dir�chdir�rr
r
rr!s

zTempDirMixin.setUpcCs^t�|j�tj|jdd�D].\}}}|D]}t�tj�|j|�tj	�q*qt
�|jd�dS)NF)�topdownT)rrr�walkr�chmod�path�join�stat�S_IWRITE�shutil�rmtree)r�root�dirs�files�namer
r
r�tearDown&s
zTempDirMixin.tearDownc	CsBtj�|j|�}t|d��}|�|�W5QRXt�|tj�dS)N�w)	rr"r#r�open�writer!r$�S_IREAD)r�filenameZ	file_path�filer
r
r�create_readonly_file-sz!TempDirMixin.create_readonly_fileN)rrr	rr,r3r
r
r
rrsrc@seZdZdd�ZdS)�SigcOs||_||_dSr)�args�kwargs�rr5r6r
r
r�__init__5szSig.__init__N�rrr	r8r
r
r
rr43sr4c@s$eZdZdd�Zdd�Zdd�ZdS)�NScKs|j�|�dSr)�__dict__�update)rr6r
r
rr8<szNS.__init__cCs4t|j���}d�dd�|D��}dt|�j|fS)Nz, cSsg|]}d|�qS)z%s=%rr
)�.0�tupr
r
r�
<listcomp>AszNS.__repr__.<locals>.<listcomp>z%s(%s))�sortedr;�itemsr#�typer)rZsorted_itemsZ	kwarg_strr
r
r�__repr__?szNS.__repr__cCst|�t|�kSr)�vars�r�otherr
r
r�__eq__Dsz	NS.__eq__N)rrr	r8rCrGr
r
r
rr::sr:c@seZdZddd�ZdS)�ArgumentParserErrorNcCs,t�||||�||_||_||_||_dSr)�	Exceptionr8�message�stdout�stderr�
error_code)rrJrKrLrMr
r
rr8Js
zArgumentParserError.__init__)NNNr9r
r
r
rrHHsrHc
Os�ttjt�sttjt�r"|||�Stj}tj}t�t_t�t_z�z^|||�}tt|��D]<}t||�tjkrxt|||�t||�tjkrXt|||�qX|WW�JSt	k
r�t�
�dj}tj��}tj��}	t
d||	|��YnXW5|t_|t_XdS)N��
SystemExit)�
isinstance�sysrLrrK�listrD�getattr�setattrrO�exc_info�code�getvaluerH)
�
parse_argsr5r6Z
old_stdoutZ
old_stderr�result�keyrVrKrLr
r
r�stderr_to_parser_errorRs,




r[cs4eZdZ�fdd�Z�fdd�Z�fdd�Z�ZS)�ErrorRaisingArgumentParsercstt|�j}t|f|�|�Sr)�superr\rXr[)rr5r6rX��	__class__r
rrXtsz%ErrorRaisingArgumentParser.parse_argscstt|�j}t|f|�|�Sr)r]r\�exitr[)rr5r6r`r^r
rr`xszErrorRaisingArgumentParser.exitcstt|�j}t|f|�|�Sr)r]r\�errorr[)rr5r6rar^r
rra|sz ErrorRaisingArgumentParser.error)rrr	rXr`ra�
__classcell__r
r
r^rr\rsr\c@seZdZdZdd�ZdS)�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Cs�|dkrdSt|d�st�|_t|d�s.t|_dd�}dd�}dd	�}d
d�}dd
�}Gdd�dt�}	|||fD]}
||fD]}|	||
|�q|qpdS)N�ParserTestCase�parser_signature�parser_classcSs|D]}|j|j|j�qdS)z(Add all arguments directly to the parserN)�add_argumentr5r6)�parser�argument_signatures�sigr
r
r�	no_groups�sz1ParserTesterMetaclass.__init__.<locals>.no_groupscSs(|�d�}|D]}|j|j|j�qdS)z4Add all arguments under a single group in the parser�fooN)�add_argument_grouprgr5r6)rhri�grouprjr
r
r�	one_group�s
z1ParserTesterMetaclass.__init__.<locals>.one_groupcSs4t|�D]&\}}|�d|�}|j|j|j�qdS)z0Add each argument in its own group to the parserzfoo:%iN)�	enumeratermrgr5r6)rhri�irjrnr
r
r�many_groups�sz3ParserTesterMetaclass.__init__.<locals>.many_groupscSs
|�|�S)z#Parse the args by passing in a list)rX)rhr5r
r
r�listargs�sz0ParserTesterMetaclass.__init__.<locals>.listargscSs0tj}|dg|t_z|��W�S|t_XdS)z(Parse the args by defaulting to sys.argvrN)rQ�argvrX)rhr5Zold_sys_argvr
r
r�sysargs�s
z/ParserTesterMetaclass.__init__.<locals>.sysargsc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
z0ParserTesterMetaclass.__init__.<locals>.AddTestsc	Ss�||_||_|jj}|jj}|j|jfD]V}|j}|||f}d�|�}	|fdd�}
z
|	|
_Wntk
rpYnXt||	|
�q(dS)N�_cSs||�dSrr
�r�	test_funcr
r
r�wrapper�szJParserTesterMetaclass.__init__.<locals>.AddTests.__init__.<locals>.wrapper)�_add_arguments�_parse_argsr�
test_failures�test_successesr#�	TypeErrorrT)rZ
tester_cls�
add_argumentsrXZadd_arguments_nameZparse_args_namerx�	func_name�names�	test_nameryr
r
rr8�s


z9ParserTesterMetaclass.__init__.<locals>.AddTests.__init__cSs.|jj}|jj}|j||�}|�||j�|Sr)rer5r6rfrzri)r�testerr5r6rhr
r
r�_get_parser�s
z<ParserTesterMetaclass.__init__.<locals>.AddTests._get_parserc
SsF|�|�}|jD]0}|��}|jt|d��|�|�W5QRXqdS)N)�msg)r��failures�split�assertRaisesrHrX)rr�rh�args_strr5r
r
rr|�s


z>ParserTesterMetaclass.__init__.<locals>.AddTests.test_failurescSsH|�|�}|jD]2\}}t|t�r*|��}|�||�}|�||�qdSr)r��	successesrP�strr�r{�assertEqual)rr�rhr5�expected_nsZ	result_nsr
r
rr}�s

z?ParserTesterMetaclass.__init__.<locals>.AddTests.test_successesN)rrr	r8r�r|r}r
r
r
r�AddTests�sr�)�hasattrr4rer\rf�object)�clsr+�bases�bodydictrkrorrrsrur�rrXr
r
rr8�s

	-zParserTesterMetaclass.__init__N)rrr	�__doc__r8r
r
r
rrc�srcrdc@sheZdZdZed�gZdddddgZdedd	�fd
edd	�fdedd	�fded
d	�fded
d	�fgZdS)�TestOptionalsSingleDash�1Test an Optional with a single-dash option string�-x�a�--foo�-x --fooz-x -y�N��x�-x a�-xaz-x -1�-1z-x-1�	rrr	r�r4rir�r:r�r
r
r
rr��s
�r�c@seZdZdZeddd�edddd�ed	�gZd
ddd
dddddddgZdedddd�fdedddd�fdeddd
d�fdeddd
d�fdeddd
d�fdeddd
d�fdeddd
d�fdeddd
d�fd edddd�fdedddd�fd!eddd
d�fd"eddd
d�fgZdS)#�TestOptionalsSingleDashCombinedr�r��
store_true��actionz-yyy�store_const�*�r��const�-zr�r�r�r�z-x -zz-z -xz-yxz-yz az-yyyxz-yyyzaz-xyzar�FN)r��yyy�zT�-za�-z az-xzaz-xz az-x -zaz-x -z a�-yz-x -yyy -zaz-x -yyy -z ar�r
r
r
rr�s2
���r�c@sjeZdZdZed�gZddddddgZded	d
�fdedd
�fded
d
�fdedd
�fdedd
�fgZd	S)�TestOptionalsSingleDashLongzATest an Optional with a multi-character single-dash option string�-foor�r�z
-foo --fooz-foo -y�-fooar�N�rlz-foo az-foo -1r�z-fo a�-f ar�r
r
r
rr�!s
�r�c@s�eZdZdZed�ed�ed�gZdddddd	d
gZdedddd
�fdedddd
�fdedddd
�fdedddd
�fdedddd
�fdedddd
�fdedddd
�fgZdS)�&TestOptionalsSingleDashSubsetAmbiguousz=Test Optionals where option strings are subsets of each other�-f�-foobar�-foorabr��-fo�-foo bz-foobz-foobaz-foorar�N)�f�foobar�foorabr�r��-fa�-foaZoar�Zooa�	-foobar a�	-foorab ar�r
r
r
rr�/s�r�c@s�eZdZdZed�ed�gZdddddd	d
gZdeddd
�fdeddd
�fdeddd
�fdeddd
�fdeddd
�fdeddd
�fdeddd
�fgZdS)� TestOptionalsSingleDashAmbiguousz7Test Optionals that partially match but are not subsetsr�r�r�r�r�r�r�r�r�r�N)r�r�z-foob ar�z-foor az-fooba az-foora ar�r�r�r
r
r
rr�?s�r�c@sbeZdZdZeddd�gZdddddd	gZd
edd�fd
edd�fdedd�fdedd�fgZdS)�TestOptionalsNumericz(Test an Optional with a short opt stringr��one��destr�z-1 --fooz-1 -yz-1 -1z-1 -2r�N)r�z-1 az-1az-1-2�-2r�r
r
r
rr�Os�r�c@sjeZdZdZed�gZddddddgZded	d
�fdedd
�fdedd
�fd
edd
�fdedd
�fgZd	S)�TestOptionalsDoubleDashz1Test an Optional with a double-dash option stringr�r�r�r�z--foo -xz--foo --barr�Nr�z--foo az--foo=az
--foo -2.5z-2.5z
--foo=-2.5r�r
r
r
rr�\s
�r�c
@s�eZdZdZeddd�ed�gZdddd	d
dgZded
dd�fded
dd�fdeddd�fdeddd�fdeddd�fdeddd�fgZdS)�#TestOptionalsDoubleDashPartialMatchz7Tests partial matching with a double-dash option string�--badgerr�r�z--bat�--bar�--b�--ba�--b=2z--ba=4�	--badge 5r�FN)�badgerZbatz--bat X�X�--badT�--badg�--badger�r
r
r
rr�js
��r�c@s�eZdZdZeddd�ed�gZddddd	gZd
eddd
�fdeddd
�fdeddd
�fdeddd
�fdeddd
�fdeddd
�fdeddd
�fgZdS)�"TestOptionalsDoubleDashPrefixMatchz?Tests when one double-dash option string is a prefix of anotherr�r�r�r�r�r�r�r�r�FN)r�Zbaz--ba Xr�z--ba=Xr�Tr�r�r�r
r
r
rr�|s
��r�c@s�eZdZdZeddd�ed�edddd	�gZdd
ddd
dgZdedddd�fdedddd�fdedddd�fdedddd�fdedddd�fdedddd�fgZdS)�TestOptionalsSingleDoubleDashz<Test an Optional with single- and double-dash option stringsr�r�r�r��-bazr�r�r��-fbarz-fbazz-bazf�-b B�Br�FN�r��bar�bazTz--ba Bz
-f --bar Bz-f -bz-ba -fr�r
r
r
rr��s
��r�c@s�eZdZdZeddd�Zeddd�ed�ed	d
dd�gZd
dddddddddddgZdedddd�fdedddd�fdedddd�fdedddd�fdedddd�fd edddd�fgZ	dS)!�!TestOptionalsAlternatePrefixCharsz9Test an Optional with option strings with custom prefixes�+:/F��prefix_chars�add_help�+fr�r��::bar�/bazr�r�r�r�r�r�r�r��--bar Br��-h�--helpz+hz::helpz/helpr�Nr�T�::ba B�
+f ::bar B�+f /b�/ba +f�
rrr	r�r4rerir�r:r�r
r
r
rr��s
��r�c@s�eZdZdZeddd�Zeddd�ed�ed	d
dd�gZd
ddddddgZdedddd�fdedddd�fdedddd�fdedddd�fdedddd�fdedddd�fgZ	dS)�*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/issue9444r�Tr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�FNr�r�r�r�r�r�r
r
r
rr��s
��r�c	@s�eZdZdZeddd�Zeddd�eddd�ed	dd�gZd
ddd
dgZdedddd�fdedddd�fdedddd�fdedddd�fgZ	dS)�2TestOptionalsAlternatePrefixCharsMultipleShortArgsz@Verify that Optionals must be called with their defined prefixesz+-Fr�r�r�r�z+yz+z�-wz-xyzz+xr�z+xyzr��r��yr�Tz+y -xz+yz -xNr�r
r
r
rr��s"


���r�c@speZdZdZedddddd�gZdd	d
dgZded
d�fdedd�fdedd�fdedd�fdedd�fgZdS)�TestOptionalsShortLongz<Test a combination of single- and double-dash option strings�-vz	--verbosez-nz--noisyr�r�z
--x --verbosez-Nr�z-v xr�F)�verboseTNr�r
r
r
rr��s��r�c@sfeZdZdZed�eddd�gZdgZdedd	d
�fded	dd
�fd
eddd
�fdeddd
�fgZd	S)�TestOptionalsDestz*Tests various means of setting destinationz	--foo-bar�--baz�zabbazr�r�z--foo-bar fr�N)Zfoo_barr�z--baz g�gz--foo-bar h --baz i�hrqz--baz j --foo-bar k�k�jr�r
r
r
rr��s�r�c@sXeZdZdZed�eddd�gZdgZdeddd	�fd
eddd	�fdedd
d	�fgZdS)�TestOptionalsDefaultz*Tests specifying a default for an Optionalr�r�r���defaultr�r�N�r�r�z-xxr�z-yyr�r�r
r
r
rr�s�r�c@s>eZdZdZed�gZddgZdedd�fdedd�fgZdS)�TestOptionalsNargsDefaultz7Tests not specifying the number of args for an Optionalr�r�r�Nr�r�r�r
r
r
rrs
�rc@sDeZdZdZeddd�gZddgZdedd�fd	edgd�fgZdS)
�TestOptionalsNargs1z&Tests specifying 1 arg for an Optionalr�rN��nargsr�r�Nr�r�r�r
r
r
rrs�rc@sPeZdZdZeddd�gZdddddd	gZd
edd�fd
edddgd�fgZdS)�TestOptionalsNargs3z'Tests specifying 3 args for an Optionalr��rr�r��-x a b�a -x�a -x br�Nr�z-x a b c�b�cr�r
r
r
rr"s�rc@s�eZdZdZeddd�edddd�eddd	d
�eddedd
d�gZdgZdeddd	dd�fdeddd	dd�fdeddd	dd�fdeddd	dd�fdeddd	dd�fdeddddd�fdeddddd�fdeddd	dd�fdeddd	dd�fg	Z	dS)�TestOptionalsNargsOptionalz0Tests specifying an Optional arg for an Optionalr��?rr�r�)rr�r��spam�rr�r��42Z84)rrBr�r��2r�N�T�r-r�r�r�z-w 2z-x 2z-y 2z-z 2��
rrr	r�r4�intrir�r:r�r
r
r
rr-s"
��rc@s�eZdZdZeddd�edddd�gZdgZd	ed
dd�fdegdd�fdedgdd�fd
eddgdd�fded
gd�fded
dgd�fded
ddgd�fgZd
S)�TestOptionalsNargsZeroOrMore�?Tests specifying args for an Optional that accepts zero or morer��*rr�rrr�r�Nrr�rr
�-y a�-y a br�r
r
r
rrDs
��rc	@s�eZdZdZeddd�edddd�gZdddd	d
gZdeddd
�fdedgdd
�fdeddgdd
�fdeddgd
�fdedddgd
�fgZdS)�TestOptionalsNargsOneOrMorez>Tests specifying args for an Optional that accepts one or morer��+rr�rrr�rza -y br�Nrr�rr
rrr�r
r
r
rrWs
��rc
@s�eZdZdZeddd�edeed�d�gZdd	d
ddgZd
e	ddd�fde	ddd�fde	ddd�fde	ddd�fde	ddd�fde	ddd�fgZ
dS)�TestOptionalsChoicesz,Tests specifying the choices for an Optionalr��abc��choicesz-g��rBr!r�z-f dz-fadz-gaz-g 6r�N)r�r�r�z-f crz-g 0rz-g 03rz-fb -g4r
��rrr	r�r4r�rangerir�r:r�r
r
r
rrhs
��rc@sDeZdZdZededd�gZddgZdedd	�fd
edd	�fgZ	dS)
�TestOptionalsRequiredz)Tests an optional action that is requiredr�T�rB�requiredr�r��-x 1rNr�z-x42r�Nrr
r
r
rr'ys��r'c@sBeZdZdZeddd�gZddgZdedd	�fd
edd	�fgZdS)�TestOptionalsActionStorez&Tests the store action for an Optionalr��storer�r�rr�Nr�z-xfoorlr�r
r
r
rr+�s�r+c@sBeZdZdZedded�gZdgZdedd�fdeed�fgZ	dS)	�TestOptionalsActionStoreConstz,Tests the store_const action for an Optionalr�r�r�r�r�N�r�)
rrr	r�r4r�rir�r:r�r
r
r
rr-�s�r-c@sDeZdZdZeddd�gZdddgZded	d
�fdedd
�fgZdS)
�TestOptionalsActionStoreFalsez,Tests the store_false action for an Optionalr��store_falser�r�r�r�r�T)r�FNr�r
r
r
rr/�s
�r/c@sDeZdZdZeddd�gZdddgZded	d
�fdedd
�fgZdS)
�TestOptionalsActionStoreTruez+Tests the store_true action for an Optionalz--appler�r�r�z	--apple=bz	--apple br�F)ZappleTNr�r
r
r
rr1�s
�r1c@sXeZdZdZeddd�gZddddgZded	d
�fdedgd
�fdedd
gd
�fgZd	S)�TestOptionalsActionAppend�'Tests the append action for an Optionalr��appendr�r��a --baz�	--baz a br�N�r��--baz a�--baz a --baz br
r�r
r
r
rr2�s�r2c@sbeZdZdZedddgd�gZddddgZd	edgd
�fdeddgd
�fdeddd
gd
�fgZdS)�$TestOptionalsActionAppendWithDefaultr3r�r4r��r�r�r�r5r6r�r7r8r9r
Nr�r
r
r
rr:�s�r:c@sleZdZdZedded�edddd�gZd	dd
ddgZd
edd�fdeegd�fdeededgd�fgZ	dS)�TestOptionalsActionAppendConst�-Tests the append_const action for an Optional�-b�append_constr��-cr4r
�r�r�r��a -c�-bx�-b xr�N�r
�-b -cx -b -cyzr��yz�
rrr	r�r4rIrir�r:r�r
r
r
rr<�s��r<c	@sveZdZdZeddedgd�edddd	�gZd
dddd
gZdedgd�fdedegd�fdedededgd�fgZ	dS)�)TestOptionalsActionAppendConstWithDefaultr=r>r?r�)r�r�r�r@r4r
rAr�rBrCrDr�rErFr�rGNrHr
r
r
rrI�s��rIc@sFeZdZdZeddd�gZddddgZd	ed
d�fdedd�fgZd
S)
�TestOptionalsActionCountz&Tests the count action for an Optionalr��countr�r�r�z-x bz	-x a -x br�Nr�rNr�r
r
r
rrJ�s�rJc	@sveZdZdZed�ed�eddd�gZddgZd	ed
d
dd�fd
edd
dd�fded
ddd�fdedd
dd�fgZd
S)�"TestOptionalsAllowLongAbbreviationz2Allow long options to be abbreviated unambiguouslyr�z--foobazz--foobler�r�z--foob 5z--foobr�NF)rlZfoobazZfooblez--foo 7�7z	--fooba ar�z--foobl --foo gr�Tr�r
r
r
rrL�s
��rLc@steZdZdZedd�Zed�eddd�ed�gZd	d
ddgZd
edddd�fdedddd�fdedddd�fgZ	dS)�%TestOptionalsDisallowLongAbbreviation�1Do not allow abbreviations of long options at allF��allow_abbrevr�z--foodler�r�z--foonlyz-foon 3z--foon 3z--foodz--food --foo 2r�N�rlZfoodleZfoonlyz--foo 3�3z--foonly 7 --foodle --foo 2rTrMr�r
r
r
rrNs

��rNc@sveZdZdZeddd�Zed�eddd�ed	�gZd
ddd
gZdedddd�fdedddd�fdedddd�fgZ	dS)�0TestOptionalsDisallowLongAbbreviationPrefixCharszBDisallowing abbreviations works with alternative prefix charactersrF�r�rQz++fooz++foodler�r�z++foonlyz+foon 3z++foon 3z++foodz++food ++foo 2r�NrRz++foo 3rSz++foonly 7 ++foodle ++foo 2rTrMr�r
r
r
rrTs
��rTc
@s�eZdZdZedd�Zed�eddd�gZddgZd	ed
d
d�fded
d
d�fdedd
d�fded
dd�fded
dd�fdeddd�fgZ	d
S)�/TestDisallowLongAbbreviationAllowsShortGroupingrOFrPz-rr@rKr�z-c -rr�N��rrz-rar�z-rcc�ccz-ccrz-cc -raz-ccrccr�r
r
r
rrV&s

��rVc
@s�eZdZdZeddd�Zed�eddd�gZdd	gZd
eddd�fd
eddd�fdeddd�fdeddd�fdeddd�fdeddd�fgZ	dS)�5TestDisallowLongAbbreviationAllowsShortGroupingPrefixzEShort option grouping works with custom prefix and allow_abbrev=FalserFrUz+rz+crKr�z+c +rr�NrWz+rar�z+rccrYz+ccrz+cc +raz+ccrccr�r
r
r
rrZ9s
��rZc@s4eZdZdZed�gZdddgZdedd�fgZdS)	�TestPositionalsNargsNonez,Test a Positional that doesn't specify nargsrlr�r��a br�r�Nr�r
r
r
rr[Ps


�r[c@s:eZdZdZeddd�gZdddgZdedgd	�fgZd
S)�TestPositionalsNargs1z.Test a Positional that specifies an nargs of 1rlrNrr�r�r\r�r�Nr�r
r
r
rr]Zs

�r]c@s>eZdZdZeddd�gZddddgZd	edd
gd�fgZdS)
�TestPositionalsNargs2z.Test a Positional that specifies an nargs of 2rlrrr�r�r��a b cr\r
r�Nr�r
r
r
rr^ds
�r^c@sReZdZdZeddd�gZdgZdegd�fdedgd�fd	edd
gd�fgZdS)�TestPositionalsNargsZeroOrMorez0Test a Positional that specifies unlimited nargsrlrrr�r�r�r�r\r
Nr�r
r
r
rr`ns�r`c@sTeZdZdZedddd�gZdgZdedd�fd	ed	gd�fd
ed	dgd�fgZdS)
�%TestPositionalsNargsZeroOrMoreDefaultz>Test a Positional that specifies unlimited nargs and a defaultrlrr�rr�r�r�r�r\r
Nr�r
r
r
rrazs�rac@sHeZdZdZeddd�gZddgZdedgd�fd	edd
gd�fgZdS)�TestPositionalsNargsOneOrMorez2Test a Positional that specifies one or more nargsrlrrr�r�r�r�r\r
Nr�r
r
r
rrb�s�rbc@sBeZdZdZeddd�gZddgZdedd	�fd
ed
d	�fgZdS)�TestPositionalsNargsOptionalzTests an Optional Positionalrlr
rr�r\r�Nr�r�r�r
r
r
rrc�s�rcc@sDeZdZdZedddd�gZddgZdedd	�fd
ed
d	�fgZdS)�#TestPositionalsNargsOptionalDefaultz1Tests an Optional Positional with a default valuerlr
r�rr�r\r�r�r�Nr�r
r
r
rrd�s�rdc@sHeZdZdZeddedd�gZdddgZd	ed
d�fded
d�fgZ	dS)�,TestPositionalsNargsOptionalConvertedDefaultznTests an Optional Positional with a default value
    that needs to be converted to the appropriate type.
    rlr
r)rrBr�r�r\�1 2r�r�r��1rNNrr
r
r
rre�s�
�rec@s>eZdZdZed�ed�gZddddgZdedd	d
�fgZdS)�TestPositionalsNargsNoneNonez-Test two Positionals that don't specify nargsrlr�r�r�r�r_r\r
�rlr�Nr�r
r
r
rrh�s
�rhc@sDeZdZdZed�eddd�gZdddd	gZd
eddgd�fgZd
S)�TestPositionalsNargsNone1z6Test a Positional with no nargs followed by one with 1rlr�rNrr�r�r�r_r\r
riNr�r
r
r
rrj�s
�rjc@sHeZdZdZeddd�ed�gZdddd	d
gZdeddgd
d�fgZdS)�TestPositionalsNargs2Nonez8Test a Positional with 2 nargs followed by one with nonerlrrr�r�r�r�r\�a b c dr_r
rriNr�r
r
r
rrk�s
�rkc@s`eZdZdZed�eddd�gZddgZdedgd	�fd
eddgd	�fdeddd
gd	�fgZdS)�"TestPositionalsNargsNoneZeroOrMorez>Test a Positional with no nargs followed by one with unlimitedrlr�rrr�r�r�rir\r
r_rNr�r
r
r
rrm�s�rmc@sTeZdZdZed�eddd�gZdddgZd	edd
gd�fdedd
d
gd�fgZdS)�!TestPositionalsNargsNoneOneOrMorez@Test a Positional with no nargs followed by one with one or morerlr�rrr�r�r�r\r
rir_rNr�r
r
r
rrn�s
�rnc@sNeZdZdZed�eddd�gZdddgZd	ed	d
d�fded	d
d�fgZd
S)� TestPositionalsNargsNoneOptionalz@Test a Positional with no nargs followed by one with an Optionalrlr�r
rr�r�r_r�Nrir\r
r�r
r
r
rro�s
�roc@s`eZdZdZeddd�ed�gZddgZdegdd	�fd
edgdd	�fdeddgd
d	�fgZdS)�"TestPositionalsNargsZeroOrMoreNonez@Test a Positional with unlimited nargs followed by one with nonerlrrr�r�r�r�rir\r
r_rNr�r
r
r
rrp�s�rpc@sTeZdZdZeddd�ed�gZdddgZd	edgd
d�fdedd
gd
d�fgZdS)�!TestPositionalsNargsOneOrMoreNonezBTest a Positional with one or more nargs followed by one with nonerlrrr�r�r�r�r\r
rir_rNr�r
r
r
rrqs
�rqc@sPeZdZdZedddd�ed�gZddd	gZd
edd
d�fded
d
d�fgZdS)� TestPositionalsNargsOptionalNonezBTest a Positional with an Optional nargs followed by one with nonerlr
r�rr�r�r�r_r�rir\r
Nr�r
r
r
rrr
s
�rrc@s\eZdZdZeddd�eddd�gZddd	gZd
ed	dggd�fd
ed	dgdgd�fgZdS)�TestPositionalsNargs2ZeroOrMorez=Test a Positional with 2 nargs followed by one with unlimitedrlrrr�rr�r�r�r\r
rir_rNr�r
r
r
rrss
�rsc@sLeZdZdZeddd�eddd�gZddd	d
gZded	dgd
gd�fgZdS)�TestPositionalsNargs2OneOrMorez?Test a Positional with 2 nargs followed by one with one or morerlrrr�rr�r�r�r\r_r
rriNr�r
r
r
rrt#s
�rtc@s\eZdZdZeddd�eddd�gZddd	d
gZded	dgd
d�fded	dgdd�fgZd
S)�TestPositionalsNargs2Optionalz7Test a Positional with 2 nargs followed by one optionalrlrrr�r
r�r�r�rlr\r
Nrir_rr�r
r
r
rru-s�ruc@sjeZdZdZeddd�eddd�gZddgZd	egd	gd
�fded	gdgd
�fd
ed	dgdgd
�fgZdS)�TestPositionalsNargsZeroOrMore1z=Test a Positional with unlimited nargs followed by one with 1rlrrr�rNr�r�r�rir\r
r_rNr�r
r
r
rrv8s�rvc@s\eZdZdZeddd�eddd�gZddd	gZd
ed	gdgd�fd
ed	dgdgd�fgZdS)�TestPositionalsNargsOneOrMore1z?Test a Positional with one or more nargs followed by one with 1rlrrr�rNr�r�r�r\r
rir_rNr�r
r
r
rrwDs
�rwc@sVeZdZdZeddd�eddd�gZddd	gZd
edd
gd�fd
ed
dgd�fgZdS)�TestPositionalsNargsOptional1z?Test a Positional with an Optional nargs followed by one with 1rlr
rr�rNr�r�r_r�Nrir\r
r�r
r
r
rrxOs
�rxc@sbeZdZdZed�eddd�eddd�gZdd	d
gZded
gdgd
�fded
dgdgd
�fgZdS)�#TestPositionalsNargsNoneZeroOrMore1z=Test three Positionals: no nargs, unlimited nargs and 1 nargsrlr�rrr�rNr�r�r�r\r
�rlr�r�r_rNr�r
r
r
rryZs

�
�ryc@sheZdZdZed�eddd�eddd�gZdd	d
dgZded
dgd
gd�fded
dd
gdgd�fgZdS)�"TestPositionalsNargsNoneOneOrMore1z?Test three Positionals: no nargs, one or more nargs and 1 nargsrlr�rrr�rNr�r�r�r
r_rrzrl�dNr�r
r
r
rr{is

��r{c@sbeZdZdZed�edddd�eddd	�gZd
ddgZd
edddgd�fdedddgd�fgZdS)�!TestPositionalsNargsNoneOptional1z;Test three Positionals: no nargs, optional narg and 1 nargsrlr�r
��?rr�rNrr�r�r�r\r
rzr_rNr�r
r
r
rr}xs
�
�r}c@s`eZdZdZeddd�edddd�gZdd	gZd
eddd�fd
ed
dd�fded
dd�fgZdS)�$TestPositionalsNargsOptionalOptionalzTest two optional nargsrlr
rr�r�rr�r_r�Nrir�r\r
r�r
r
r
rr�s
��rc@speZdZdZeddd�eddd�gZdgZded	gd
�fdedgd
�fdedd
gd
�fdedd
dgd
�fgZd	S)�&TestPositionalsNargsOptionalZeroOrMorez1Test an Optional narg followed by unlimited nargsrlr
rr�rr�r�Nrir�r\r
r_rr�r
r
r
rr��s�r�c@sfeZdZdZeddd�eddd�gZddgZd	ed
d	gd�fded	d
gd�fded	d
dgd�fgZd
S)�%TestPositionalsNargsOptionalOneOrMorez3Test an Optional narg followed by one or more nargsrlr
rr�rr�r�r�Nrir\r
r_rr�r
r
r
rr��s�r�c@sLeZdZdZeded�d�gZddddd	gZd
ed
d�fdedd�fgZ	d
S)�TestPositionalsChoicesStringz&Test a set of single-character choicesrZabcdefgr r�r�r�r�efr��rr�N)
rrr	r�r4�setrir�r:r�r
r
r
rr��s�r�c@sNeZdZdZedeed�d�gZddddd	gZd
e	dd�fd
e	dd�fgZ
dS)�TestPositionalsChoicesIntzTest a set of integer choicesr�r#r�r�r�rr��4r$r��15�Nr%r
r
r
rr��s�r�c@sPeZdZdZeddd�edddd�gZddd	d
dgZded	d
dggd�fgZdS)�TestPositionalsActionAppendzTest the 'append' actionrr4r�r)r�rr�r�r�r\rlr_r
rr�Nr�r
r
r
rr��s
��r�c@sneZdZdZeddd�edddd�gZd	d
gZdedd
d�fdedd
d�fdeddd�fdeddd�fgZdS)�"TestOptionalsNumericAndPositionalsz;Tests negative number args when numeric options are presentr�r
rz-4r�r��r�r�r�z-315r�NFrr�Tz-4 ar�r
r
r
rr��s
��r�c	@szeZdZdZeddd�edddd�gZd	gZd
eddd
�fdeddd
�fdeddd
�fdeddd
�fdeddd
�fgZdS)�(TestOptionalsAlmostNumericAndPositionalszBTests negative number args when almost numeric options are presentr�r
rz-k4r�r�r�z-k3r�NFrr�r�Tz-k4 ar�r
r
r
rr��s
��r�c@s�eZdZeddd�edddd�gZdgZdgedd	d
�fdgedd	d
�fdgedd	d
�fddged	dd
�fddged	dd
�fddged	dd
�fd
ged	dd
�fdged	dd
�fgZd	S)�$TestEmptyAndSpaceContainingArgumentsr�r
rr�z--yyyr�r�r�Nrza badgerz	-a badgerz--yyy=a badgerz--yyy=-a badger)rrr	r4rir�r:r�r
r
r
rr��s
��r�c@s�eZdZedd�Zeddddd�edd	ed
d�edd
dd�gZddgZdedd
dd�fdedd
dd�fdedd
dd�fdedddd�fdedd
dd�fdedd
dd�fgZ	dS)� TestPrefixCharacterOnlyArgumentsz-+�r��-r�r
r�)r�rr�rr�r�)r�rBr�z-+-r�r�r�r�z+ -r�NFr�z- Xr�z+ -3���Tz- ===z===)
rrr	r4rerrir�r:r�r
r
r
rr�	s
��r�c@s�eZdZdZeddd�eddd�gZgZdedgd�fdeggd�fd	ed
ggd�fded
gdgd�fd
edd
gd�fd
egd
gd�fdedgd
gd�fgZdS)�TestNargsZeroOrMorerr�rrr�r�Nrr�r�z	-x a -- br
rr	r�r
r
r
rr�s�r�c	@s�eZdZdZed�eddd�ed�gZdddgZd	ed	gd
d�fded	gd
d�fded	dddd
gd
d�fded	ddgd
d�fgZd
S)�TestNargsRemainderz2Tests specifying a positional with nargs=REMAINDERr�r��...rr�r�z-z Zr�Nr�z-z Z X�Z�
X A B -z Z�Ar�z	X Y --foo�Yr�r�r
r
r
rr�,s
�r�c@seZdZdZeded�ededd�eddd	�gZdd
ddd
ddddddddg
Zdeddgd�fdeddgd�fdedddgd�fdeddgd�fdedd gd�fd!eddgd�fd"edddgd�fdedddgd�fd#ed$ddgd�fd%ed$ddgd�fd&edd$dgd�fgZ	dS)'�TestOptionLikez.Tests options that may or may not be argumentsr��rBz-3r�)rBr�r�rrz-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 ar�Nr�z-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�r4�floatrir�r:r�r
r
r
rr�9s8

���r�c@s�eZdZdZeddejd�eddejd�eddejd	�gZd
gZde	�fde	dd
�fde	ddgd�fde	dd�fde	ddd�fde	ddgdd�fgZ
dS)�TestDefaultSuppressz%Test actions with suppressed defaultsrlr
rr�rr�r�r;r�r�r�r�r\r
riTr7r5�rlr�r6rzN)rrr	r�r4�argparse�SUPPRESSrir�r:r�r
r
r
rr�Ts��r�c@s�eZdZdZeejd�Zeddd�eddd�edd	d
�gZdgZ	de
�fd
e
d
d�fde
d
dgd�fde
dd�fde
d
dd�fde
d
dgdd�fgZdS)�TestParserDefaultSuppressz4Test actions with a parser-level default of SUPPRESS��argument_defaultrlr
rr�rr�r�r�r�r�r�r�r\r
riTr7r5r�r6rzN)rrr	r�r4r�r�rerir�r:r�r
r
r
rr�gs


��r�c@s�eZdZdZedd�Zedddd�edd	d
�eddd
�ed
dd�gZdgZdeddddd�fdeddddd�fdeddgddd�fd
eddddd�fdeddddd�fdeddgddd�fgZ	dS)�TestParserDefault42z.Test actions with a parser-level default of 42r�r��	--version�version�1.0�r�r�rlr
rr�rr�r�r�r�r�)rlr�r�r�r�r\r
Tr5r6Nr�r
r
r
rr�{s



��r�cs�eZdZdZ�fdd�Zedd�Zed�ed�edd	d
�gZddd
ddgZde	dd
dgd�fde	dd
ddgd�fde	ddd
gd�fde	dd
dgd�fde	ddddgd�fde	dd
ddgd�fddd
dge	dd
dgd�fgZ
�ZS)�TestArgumentsFromFile�"Test reading arguments from a filec
sJtt|���dddg}|D](\}}t|d��}|�|�W5QRXqdS)N��helloz
hello world!
)�	recursivez-a
A
@hello)�invalidz@no-such-path
r-)r]r�rr.r/�rZ
file_textsr"�textr2r^r
rr�s�zTestArgumentsFromFile.setUp�@��fromfile_prefix_chars�-ar�r�rrr�r>r�z@invalidz@missingzX YNr�)r�r�r�z
X -a A Y Zr�r��@hello Xzhello world!zX @helloz-a B @recursive Y ZzX @recursive Z -a Br�)rrr	r�rr4rerir�r:r�rbr
r
r^rr��s 

��r�csfeZdZdZ�fdd�ZGdd�de�ZeZedd�Z	edd	d
�gZ
gZdedd
dgd�fgZ
�ZS)�TestArgumentsFromFileConverterr�c
sFtt|���dg}|D](\}}t|d��}|�|�W5QRXqdS)Nr�r-)r]r�rr.r/r�r^r
rr�s�z$TestArgumentsFromFileConverter.setUpc@seZdZdd�ZdS)z>TestArgumentsFromFileConverter.FromFileConverterArgumentParserccs"|��D]}|��sq|VqdSr)r��strip)r�arg_line�argr
r
r�convert_arg_line_to_args�szWTestArgumentsFromFileConverter.FromFileConverterArgumentParser.convert_arg_line_to_argsN)rrr	r�r
r
r
r�FromFileConverterArgumentParser�sr�r�r�r�rrr�r�zworld!r�r.)rrr	r�rr\r�rfr4rerir�r:r�rbr
r
r^rr��s	

��r�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�TestFileTypeReprcCst�d�}|�dt|��dS)NrXz
FileType('r')�r��FileTyper��repr�rrBr
r
r�test_r�s
zTestFileTypeRepr.test_rcCs t�dd�}|�dt|��dS)N�wbrNzFileType('wb', 1)r�r�r
r
r�	test_wb_1�szTestFileTypeRepr.test_wb_1cCs"tjddd�}|�dt|��dS)NrX�latin_1��encodingz!FileType('r', encoding='latin_1')r�r�r
r
r�test_r_latin�szTestFileTypeRepr.test_r_latincCs$tjdddd�}|�dt|��dS)Nr-�big5�ignore)r��errorsz/FileType('w', encoding='big5', errors='ignore')r�r�r
r
r�test_w_big5_ignore�s�z#TestFileTypeRepr.test_w_big5_ignorecCs$tjdddd�}|�dt|��dS)NrXrN�replace�r�z"FileType('r', 1, errors='replace')r�r�r
r
r�test_r_1_replace�sz!TestFileTypeRepr.test_r_1_replaceN)rrr	r�r�r�r�r�r
r
r
rr��s
r�c@seZdZdd�Zdd�ZdS)�StdStreamComparercCs
||_dSr)�attr)rr�r
r
rr8�szStdStreamComparer.__init__cCs|tt|j�kSr)rSrQr�rEr
r
rrG�szStdStreamComparer.__eq__N�rrr	r8rGr
r
r
rr��sr��stdinrKrLc@s eZdZiZdd�Zdd�ZdS)�RFilecCs
||_dSr�r+�rr+r
r
rr8�szRFile.__init__cCs`||jkr|j|}n|��}|j|<|��t|t�sD|�d�}|j|jkoZ|kSS)N�ascii)�seen�read�closerPr��decoder+�rrFr�r
r
rrG�s


zRFile.__eq__N)rrr	r�r8rGr
r
r
rr��sr�c	s�eZdZdZ�fdd�Zede��d�ede�d�d�gZddd	gZ	d
e
ded
�d�fd
e
ed
�ed�d�fde
ed
�ed�d�fde
eed�fde
ded�d�fgZ
�ZS)�
TestFileTypeR�8Test the FileType option/argument type for reading filesc
sRtt|���dD]0}ttj�|j|�d��}|�|�W5QRXq|�	d�dS)Nrir-�readonly)
r]r�rr.rr"r#rr/r3�r�	file_namer2r^r
rr
s
zTestFileTypeR.setUpr�r�rrXr�znon-existent-file.txtrlN�r�r�
-x foo barr��
bar -x foo�-x - -r��rrr	r�rr4r�r�rir�r:r��eq_stdinr�rbr
r
r^rr�s�
�r�csPeZdZdZ�fdd�Zede�d�dd�gZdgZ	d	e
ed
�d�fgZ�Z
S)�TestFileTypeDefaultsz<Test that a file is not created unless the default is neededcs:tt|���ttj�|jd�d�}|�d�|�	�dS)N�goodr-)
r]r�rr.rr"r#rr/r�)rr2r^r
rr s
zTestFileTypeDefaults.setUpr@rXzno-file.txt�rBr�r�z-c goodr�)r)rrr	r�rr4r�r�rir�r:r�r�rbr
r
r^rr�s�r�cs�eZdZdZ�fdd�Zede�d�d�ede�d�d�gZddgZ	d	e
d
ed	�d�fde
ed	�ed
�d�fde
ed	�ed
�d�fde
eed�fgZ
�ZS)�TestFileTypeRBr�c
sHtt|���dD]0}ttj�|j|�d��}|�|�W5QRXqdS)Nrir-)	r]r�rr.rr"r#rr/r�r^r
rr2szTestFileTypeRB.setUpr��rbr�rr�rlNr�r�r�r�r�r�r
r
r^rr�/s��r�c@s"eZdZe�Zdd�Zdd�ZdS)�WFilecCs
||_dSrr�r�r
r
rr8HszWFile.__init__cCsL||jkr@d}d|jkr"|�d�}|�|�|��|j�|�|j|jkS)NzCheck that file is writable.r
r�)r��mode�encoder/r��addr+r�r
r
rrGKs



zWFile.__eq__N)rrr	r�r�r8rGr
r
r
rr�Esr��geteuidznon-root user requiredcs�eZdZdZ�fdd�Zede�d�d�ede�d�d�gZddd	gZ	d
e
ded
�d�fd
e
ed
�ed�d�fde
ed
�ed�d�fde
eed�fgZ
�ZS)�
TestFileTypeWz8Test the FileType option/argument type for writing filescstt|���|�d�dS)Nr�)r]r�rr3rr^r
rr[szTestFileTypeW.setUpr�r-r�rr�r�rlNr�r�r�r�r�)rrr	r�rr4r�r�rir�r:r��	eq_stdoutr�rbr
r
r^rr�Vs�
�r�c@s�eZdZede�d�d�ede�d�d�gZddgZdede	d�d�fd	ee	d�e	d
�d�fdee	d�e	d
�d�fdee
e
d�fgZdS)
�TestFileTypeWBr�r�r�rr�rlNr�r�r�r�r�)rrr	r4r�r�rir�r:r�r�r�r
r
r
rr�ls��r�c@seZdZdZdd�ZdS)�TestFileTypeOpenArgsz0Test that open (the builtin) is correctly calledc	Cs�tj}|d�df|dd�df|ddd�df|d	d
d�df|dd
dd�dfg}t�d��*}|D]\}}|d�|jd|��q\W5QRXdS)Nr�)r����NNr-rN)r-rNNNr�r�)r-r�Nr�r�r�r�)r�r�r�Nr�l1�strict)r-rr�r�z
builtins.openrl)rl)r�r�rZpatchZassert_called_with)rZFTZcases�mrBr5r
r
r�test_open_args~s
�z#TestFileTypeOpenArgs.test_open_argsN)rrr	r�r�r
r
r
rr�{sr�c@seZdZdZdd�ZdS)�!TestFileTypeMissingInitializationzx
    Test that add_argument throws an error if FileType class
    object was passed instead of instance of FileType
    c	CsLt��}|�t��}|jdtjd�W5QRX|�dtjft|j��dS)Nr�r�z<%r is a FileType class object, instance of it must be passed)	r��ArgumentParserr��
ValueErrorrgr�r�r��	exception�rrh�cmr
r
r�test�s��z&TestFileTypeMissingInitialization.testN�rrr	r�rr
r
r
rr��sr�c@sbeZdZdZeded�eded�gZddddgZd	e	d
dd�fd
e	ddd�fde	ddd�fgZ
dS)�TestTypeCallablez,Test some callables as option/argument typesz--eggsr�rr�Z42jz--eggs az	--eggs 2iz--eggs=42 42r�gE@)�eggsrz--eggs 2j -- -1.5y@���z1024.675Ng3333��@)rrr	r�r4�complexr�rir�r:r�r
r
r
rr�s

��rc@sleZdZdZGdd�de�Zeded�eded�gZgZde	ed�ed	�d
�fde	ed�ed
�d
�fgZ
dS)�TestTypeUserDefinedz(Test a user-defined option/argument typec@seZdZdd�Zdd�ZdS)zTestTypeUserDefined.MyTypecCs
||_dSr��value�rrr
r
rr8�sz#TestTypeUserDefined.MyType.__init__cCst|�|jft|�|jfkSr�rBrrEr
r
rrG�sz!TestTypeUserDefined.MyType.__eq__Nr�r
r
r
r�MyType�srr�r�rr	r
r�r��-xf gr�r�N)rrr	r�rrr4rir�r:r�r
r
r
rr	�s	

��r	c@sjeZdZdZGdd�d�Zeded�eded�gZgZdeed�ed	�d
�fdeed�ed
�d
�fgZ	dS)�TestTypeClassicClasszTest a classic class typec@seZdZdd�Zdd�ZdS)zTestTypeClassicClass.CcCs
||_dSrr
rr
r
rr8�szTestTypeClassicClass.C.__init__cCst|�|jft|�|jfkSrr
rEr
r
rrG�szTestTypeClassicClass.C.__eq__Nr�r
r
r
r�C�srr�r�rr	r
r�r�rr�r�N)
rrr	r�rr4rir�r:r�r
r
r
rr�s	

��rc@seZdZdZdd�ZdS)�TestTypeRegistrationz*Test a user-defined type by registering itcCszdd�}t��}|�dd|�|jddd�|jddd�|�|�d���tdd	d
��|�|�d���td	dd
��dS)
NcSsd|S)Nzmy_type{%s}r
��stringr
r
r�get_my_type�sz.TestTypeRegistration.test.<locals>.get_my_typerBZmy_typer�r�r�rgz
my_type{1}rz-x 1 42zmy_type{42})r�r��registerrgr�rXr�r:)rrrhr
r
rr�s
�
�zTestTypeRegistration.testNrr
r
r
rr�src@s�eZdZdZGdd�dej�ZGdd�dej�Zeddee	dd	�ed
ee
ddd
�gZgZde
ddd�fde
ddd�fde
ddd�fde
ddd�fgZdS)�TestActionUserDefinedz*Test a user-defined option/argument actionc@seZdZddd�ZdS)z$TestActionUserDefined.OptionalActionNcCsxz:tdd�}|dkrd|_n|dkr,d|_ntd|��Wn,tk
rft��d}td	|��YnXt|d
|�dS)N��?r�)��?r~r)�@r�	value: %srNzopt_action failed: %sr)r:r��AssertionErrorrQrUrHrT�rrh�	namespacer�
option_stringr��er
r
r�__call__�s
z-TestActionUserDefined.OptionalAction.__call__)N�rrr	r!r
r
r
r�OptionalAction�sr#c@seZdZddd�ZdS)z&TestActionUserDefined.PositionalActionNcCs�zJtdd�}|dkrd|_n,|dkr,d|_n|dkr<d|_ntd	|��Wn,tk
rvt��d
}td|��YnXt|d|�dS)
Nr�r�)r�rr)rNr~)rrrrNzarg_action failed: %sr�)r:rrrQrUrHrTrr
r
rr!
s
z/TestActionUserDefined.PositionalAction.__call__)Nr"r
r
r
r�PositionalActionsr%z-srr)r�r�rBr�r�r
r)r�rBrr�z-s0.125r)rr�rr�z
-s 0.625 1r~rNz84 -s2rrN)rrr	r�r��Actionr#r%r4r�rrir�r:r�r
r
r
rr�s&����rc@s*eZdZdZGdd�dej�Zdd�ZdS)�TestActionRegistrationz5Test a user-defined action supplied by registering itc@seZdZddd�ZdS)zTestActionRegistration.MyActionNcCst||jd|�dS)Nzfoo[%s])rTr�)rrhr�valuesrr
r
rr!9sz(TestActionRegistration.MyAction.__call__)Nr"r
r
r
r�MyAction7sr)cCs^t��}|�dd|j�|jddd�|�|�dg�tdd��|�|�dg�td	d��dS)
Nr�Z	my_actionr�r�rgzfoo[1]r$rzfoo[42])r�r�rr)rgr�rXr:�rrhr
r
rr<s
zTestActionRegistration.testN)rrr	r�r�r&r)rr
r
r
rr'4sr'c@s:eZdZeddded�gZdZdeddd	d
gd�fgZdS)
�TestActionExtendr��extendr)r�rrBr
z--foo f1 --foo f2 f3 f4�f1�f2Zf3Zf4r�N)	rrr	r4r�rir�r:r�r
r
r
rr+Fs
��r+cs�eZdZdZdd�Zd4dd�Z�fdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Z�ZS)5�TestAddSubparserszTest the add_subparsers methodcOs|jtf|�|�dSr�r�rHr7r
r
r�assertArgumentParserErrorVsz+TestAddSubparsers.assertArgumentParserErrorFNc
Csz|r0tdd|d�}|j|dddddd	�ntddd
�}|jdddd	�|jdtd
d�ddi}|rzd|d<d|d<nd|d<|jf|�}|�|j�tdd�}|r�d|d<|r�ddg|d<|jd7|�}|jdtdd�|jd d!d"d#�td$d�}	|�rd%|	d<|jd8|	�}
|
jd'd(d)d#�|
jd*td+d,d-�td.d�}|�rJd/|d<|jd9|�}|jd1td2d�|jd3d4d5d6�|S):N�PROG�main description)�prog�descriptionr�rrrlr��foo help�r��help�r4r5r�r��bar help�rBr8r)FZCOMMAND�metavar�commands�title�command helpr8z
1 description�r5z1 helpZ1alias1Z1alias2�aliasesrgr�zw helpr�r�x help�r!r8z
2 descriptionz2 helprr�Z123�y helpr�rzz help)rBrr8z
3 descriptionz3 helprS�tzt help�ur�zu help�rr8)rg)r)rS)	r\rgr��add_subparsersr1�dict�
add_parserrr)
r�subparser_helpr�rArhZsubparsers_kwargs�
subparsersZparser1_kwargs�parser1Zparser2_kwargs�parser2Zparser3_kwargsZparser3r
r
rr�Ysj�����



zTestAddSubparsers._get_parsercs&t���|��|_|jdd�|_dS)NT)rK)r]rr�rh�command_help_parserrr^r
rr�s

zTestAddSubparsers.setUpcCs&dD]}|��}|�|jj|�qdS)N)r�r�za az0.5 az0.5 1z0.5 1 -yz0.5 2 -w)r�r1rhrX)rr�r5r
r
r�test_parse_args_failures�sz*TestAddSubparsers.test_parse_args_failurescCs�|�|j�d���tddddd��|�|j�d���tdd	d
ddgd
��|�|j�d���tddddd��|�|j�d���tddddddddgd��dS)N�0.5 1 b -w 7Fr��r
�rlr�r-r�z0.25 --foo 2 -y 2 3j -- -1jTrry@y��)rlr�r�r�z--foo 0.125 1 crrz-1.5 3 11 -- a --foo 7 -- br�r�r�rM�--)rlr�rErF)r�rhrXr�r:rr
r
r�test_parse_args�s ����z!TestAddSubparsers.test_parse_argsc	Cs�|�|j�d���tddddd�gf�|�|j�d���tddddd�dgf�|�|j�d	���tddddd�dgf�|�|j�d
���tddddd�ddgf�|�|j�d
���tddddd�ddddgf�dS)NrQFr�rRr
rSz0.5 -p 1 b -w 7z-pz0.5 1 b -w 7 -pz0.5 1 b -q -rs -w 7z-qz-rsz0.5 -W 1 b -X Y -w 7 Zz-Wz-Xr�r�)r�rh�parse_known_argsr�r:rr
r
r�test_parse_known_args�s(�����z'TestAddSubparsers.test_parse_known_argscCsXt�}|jddd�|jdd�}|�d�}|�d�|�tddd	d
�|�d����dS)Nr�r�r�r�r�rgr�Frrzrf)r\rgrHrJr�r:rXr�)rrhrLrMr
r
r�	test_dest�s

�zTestAddSubparsers.test_destcCs,|�dg�}|�|jd�|�|jd�dS)N�runr
)rXr��commandr1)rrh�retr
r
r�_test_required_subparsers�sz+TestAddSubparsers._test_required_subparserscCs0t�}|jdd�}d|_|�d�|�|�dS)Nr[r�TrZ)r\rHr)rJr]�rrhrLr
r
r�&test_required_subparsers_via_attribute�s

z8TestAddSubparsers.test_required_subparsers_via_attributecCs,t�}|jddd�}|�d�|�|�dS)Nr[T�r�r)rZ)r\rHrJr]r^r
r
r�"test_required_subparsers_via_kwarg�s
z4TestAddSubparsers.test_required_subparsers_via_kwargcCs6t�}|jdd�}|�d�|�d�}|�|j�dS)Nr[r�rZr
�r\rHrJrX�assertIsNoner[�rrhrLr\r
r
r� test_required_subparsers_default�s


z2TestAddSubparsers.test_required_subparsers_defaultcCs8t�}|jddd�}|�d�|�d�}|�|j�dS)Nr[Fr`rZr
rbrdr
r
r�test_optional_subparsers�s


z*TestAddSubparsers.test_optional_subparserscCs.|�|j��d�|�|j��t�d��dS)N�)usage: PROG [-h] [--foo] bar {1,2,3} ...
aJ            usage: PROG [-h] [--foo] bar {1,2,3} ...

            main description

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

            optional arguments:
              -h, --help  show this help message and exit
              --foo       foo help
            )r�rh�format_usage�format_help�textwrap�dedentrr
r
r�	test_help�s�zTestAddSubparsers.test_helpcCs6|jdd�}|�|��d�|�|��t�d��dS)Nz+:-r�z)usage: PROG [-h] [++foo] bar {1,2,3} ...
aJ            usage: PROG [-h] [++foo] bar {1,2,3} ...

            main description

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

            optional arguments:
              -h, --help  show this help message and exit
              ++foo       foo help
            �r�r�rhrirjrkr*r
r
r�test_help_extra_prefix_charss

�z.TestAddSubparsers.test_help_extra_prefix_charscCs6tddd�}|jdddd�|�|��t�d��dS)	Nr2r3r9z--non-breakingr0uRhelp message containing non-breaking spaces shall not wrap at non-breaking spacesr7uB            usage: PROG [-h] [--non-breaking]

            main description

            optional arguments:
              -h, --help      show this help message and exit
              --non-breaking  help message containing non-breaking spaces shall not
                              wrap at non-breaking spaces
        )r\rgr�rirjrkr*r
r
r�test_help_non_breaking_spacess��z/TestAddSubparsers.test_help_non_breaking_spacescCs6|jdd�}|�|��d�|�|��t�d��dS)Nr�r�z)usage: PROG [+h] [++foo] bar {1,2,3} ...
aJ            usage: PROG [+h] [++foo] bar {1,2,3} ...

            main description

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

            optional arguments:
              +h, ++help  show this help message and exit
              ++foo       foo help
            rmr*r
r
r� test_help_alternate_prefix_chars)s

�z2TestAddSubparsers.test_help_alternate_prefix_charscCs.|�|j��d�|�|j��t�d��dS)Nrga�            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

            optional arguments:
              -h, --help  show this help message and exit
              --foo       foo help
            )r�rOrhrirjrkrr
r
r�test_parser_command_help;s��z*TestAddSubparsers.test_parser_command_helpcCsxtddd�}|jdddd�|jdd	d
�|jddd
d�}|�d�}|�d�}|�|��d�|�|��t�d��dS)Nr2r3r9r�r�r6r7r�r:�r8�subcommandsr?zadditional text)r>r5r8rgrz'usage: PROG [-h] [--foo] bar {1,2} ...
a�            usage: PROG [-h] [--foo] bar {1,2} ...

            main description

            positional arguments:
              bar         bar help

            optional arguments:
              -h, --help  show this help message and exit
              --foo       foo help

            subcommands:
              command help

              {1,2}       additional text
            )	r\rgrHrJr�rhrirjrk)rrhrLrMrNr
r
r�test_subparser_title_helpPs��


�z+TestAddSubparsers.test_subparser_title_helpc	Cs:|�t��}|j�|���W5QRX|�||jj�dSr)r�rHrhrXr�r�rrK)rr�Z
expected_helprr
r
r�_test_subparser_helpnsz&TestAddSubparsers._test_subparser_helpcCs|�dt�d��dS)Nz5.0 1 -ha            usage: PROG bar 1 [-h] [-w W] {a,b,c}

            1 description

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

            optional arguments:
              -h, --help  show this help message and exit
              -w W        w help
            �rurjrkrr
r
r�test_subparser1_helpssz&TestAddSubparsers.test_subparser1_helpcCs|�dt�d��dS)Nz5.0 2 -ha#            usage: PROG bar 2 [-h] [-y {1,2,3}] [z [z ...]]

            2 description

            positional arguments:
              z           z help

            optional arguments:
              -h, --help  show this help message and exit
              -y {1,2,3}  y help
            rvrr
r
r�test_subparser2_help�sz&TestAddSubparsers.test_subparser2_helpc	Cs\|jdd�}|�|�d���tddddd�gf�|�|�d���tddddd�gf�dS)	NT�rAz
0.5 1alias1 bFr�r
rSz
0.5 1alias2 b)r�r�rWr�r:r*r
r
r�test_alias_invocation�s��z'TestAddSubparsers.test_alias_invocationcCs"|jdd�}|�|jd���dS)NTryz
0.5 1alias3 b)r�r1rXr�r*r
r
r�test_error_alias_invocation�s�z-TestAddSubparsers.test_error_alias_invocationcCs.|jddd�}d|_|�|��t�d��dS)NT)rArKa            usage: PROG [-h] [--foo] bar COMMAND ...

            main description

            positional arguments:
              bar                   bar help

            optional arguments:
              -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�ZmaxDiffr�rirjrkr*r
r
r�test_alias_help�sz!TestAddSubparsers.test_alias_help)FNF)rrr	r�r1r�rrPrVrXrYr]r_rarerfrlrnrorprqrtrurwrxrzr{r|rbr
r
r^rr/Ss6�
7	r/c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�TestPositionalsGroupsz@Tests that order of group positionals matches construction ordercCsZt�}|�d�|�d�}|�d�|�d�tdddd�}|�d	���}|�||�dS)
Nrlr�r�r�rgrrSrz�1 2 3)r\rgrmr:rXr�r��rrhrn�expectedrYr
r
r�test_nongroup_first�s



z)TestPositionalsGroups.test_nongroup_firstcCsZt�}|�d�}|�d�|�d�|�d�tdddd�}|�d	���}|�||�dS)
N�xxxrlr�r�rgrrSrzr~�r\rmrgr:rXr�r�rr
r
r�test_group_first�s



z&TestPositionalsGroups.test_group_firstcCspt�}|�d�}|�d�|�d�|�d�|�d�}|�d�tddd	d
d�}|�d���}|�||�dS)
Nr�rlr�r�r��frellrgrrSr�)rlr�r�r�z1 2 3 4r�rr
r
r�test_interleaved_groups�s





z-TestPositionalsGroups.test_interleaved_groupsN)rrr	r�r�r�r�r
r
r
rr}�s

r}cs�eZdZdZdd�Z�fdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Z�ZS) �TestParentParsersz5Tests that parsers can be created with parent parserscOs|jtf|�|�dSrr0r7r
r
rr1�sz+TestParentParsers.assertArgumentParserErrorcs�t���tdd�|_|j�d�|j�d�}|�d�|j�d�tdd�|_|j�d�|j�d�|j�d	�}|�d
�tdd�|_|j�d�tdd�|_|j�d�tdd�|_	|j	�
�}|jddd
�|jddd
�tj�
tjd�|_dS)NF�r�z--wr�r�r�r�r>rz--dr�r�r�r)r]rr\�wxyz_parentrgrm�abcd_parent�w_parent�z_parent�ab_mutex_parent�add_mutually_exclusive_grouprr"�basenamerQrt�main_program)rZx_group�c_grouprnr^r
rr�s(



zTestParentParsers.setUpcCs2t|jgd�}|�|�d���tdddd��dS)N��parentsz-y 1 2 --w 3rSrgr�r-r�r�)r\r�r�rXr�r:r*r
r
r�test_single_parent	s�z$TestParentParsers.test_single_parentcCs,|�|jj�t|jgd�}|�|j�dS�Nr�)�_test_mutex_abr�rXr\r*r
r
r�test_single_parent_mutex	sz*TestParentParsers.test_single_parent_mutexcCs0|jg}td|d�}t|gd�}|�|j�dS)NF)r�r�r�)r�r\r�rX�rr�rhr
r
r�test_single_granparent_mutex
	sz.TestParentParsers.test_single_granparent_mutexcCs�|�|g�tddd��|�|dg�tddd��|�|dg�tddd��|�|ddg�|�|ddg�|�|dg�|�|ddg�|�|ddg�dS)NF�r�r
r�Tr>r@)r�r:r1)rrXr
r
rr�	sz TestParentParsers._test_mutex_abcCs@|j|jg}t|d�}|�|�d���tddddddd��dS)Nr�z--d 1 --w 2 3 4rSrgrr�)r�r
r|r-r�r�)r�r�r\r�rXr�r:r�r
r
r�test_multiple_parents	s

�z'TestParentParsers.test_multiple_parentsc
Csb|j|jg}t|d�}|�|�d���tdddddd��|�|jd���|�|jd	���dS)
Nr�z
-a --w 2 3TFrrS)r�r
r-r�r�z
-a --w 2 3 -bz
-a -b --w 2 3)r�r�r\r�rXr�r:r1r�r
r
r�test_multiple_parents_mutex#	s
���z-TestParentParsers.test_multiple_parents_mutexcCs |jtjtj|j|jgd�dSr�)r�r��
ArgumentErrorr�r�r�rr
r
r�test_conflicting_parents-	s

�z*TestParentParsers.test_conflicting_parentscCs |jtjtj|j|jgd�dSr�)r�r�r�r�r�r�rr
r
r�test_conflicting_parents_mutex3	s

�z0TestParentParsers.test_conflicting_parents_mutexcCs:|j|jg}t|d�}|�|�d���tdddd��dS)Nr�rfrr�)r�r�r\r�rXr�r:r�r
r
r�test_same_argument_name_parents9	s

�z1TestParentParsers.test_same_argument_name_parentsc	CsPt�}|��}|jd|jgd�}|�d�|�|�d���tddddd	��dS)
Nr�r�r zbar -b 1 --d 2 3 4rSrgrr�)r�r
r|r )	r\rHrJr�rgr�rXr�r:)rrhrLZabcde_parserr
r
r�test_subparser_parents?	s
�z(TestParentParsers.test_subparser_parentscCs�t�}|��}|jg}|jd|d�}|�d�}|�d�|j|jg}|jd|d�}|�d�|�|�d�	��t
dd	d
d��|�|�d�	��t
d	dd
ddd
d��|�|jd�	��|�|jd�	��dS)Nrlr�r�rr�r zfoo -a 4TFr�)r�r
rzbar -b  --w 2 3 4rrS)r�r
r-r�r�r zfoo -a -b 4zbar -b -a 4)r\rHr�rJrmrgr�r�rXr�r:r1)rrhrLr�Z
abc_parserr�Zwxyzabe_parserr
r
r�test_subparser_parents_mutexG	s.


����z.TestParentParsers.test_subparser_parents_mutexc	CsJ|j|jg}t|d�}|��}|j}|�|t�d�||r<dnd���dS)Nr�aR            usage: {}{}[-h] [-b B] [--d D] [--w W] [-y Y] a z

            positional arguments:
              a
              z

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

            c:
              --d D

            x:
              -y Y
        � r�)	r�r�r\rir�r�rjrk�format)rr�rh�parser_help�prognamer
r
r�test_parent_helpZ	s

�z"TestParentParsers.test_parent_helpc	Cs�tdd�}|jddd�}|�d�|�d�|��}|�d�|�d	�t|gd
�}|�t|jddd	dg�|��}|j}|�	|t
�d
�||r�dnd���dS)NFr�r��gd�r>r5r�r�r�r�r�r�r�a	            usage: {}{}[-h] [-w W] [-x X] [-y Y | -z Z]

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

            g:
              gd

              -w W
              -x X
        r�r�)
r\rmrgr�r�rHrXrir�r�rjrkr�)r�parentr�r�rhr�r�r
r
r�test_groups_parentsr	s"






�

�z%TestParentParsers.test_groups_parents)rrr	r�r1rr�r�r�r�r�r�r�r�r�r�r�r�r�rbr
r
r^rr��s 

r�c@s$eZdZdd�Zdd�Zdd�ZdS)� TestMutuallyExclusiveGroupErrorscCs t�}|j}|t|jdd�dS)Nrl)r>)r\r�r~r�)rrh�raisesr
r
r�test_invalid_add_argument_group�	sz@TestMutuallyExclusiveGroupErrors.test_invalid_add_argument_groupcCslt�}|��}|j}|j}|t|ddd�|t|d�|t|ddd�|t|ddd�|t|dtjd�dS)Nr�T�r)r�rrrN)r\r�rgr�r�r��PARSER)rrhrnrgr�r
r
r�test_invalid_add_argument�	sz:TestMutuallyExclusiveGroupErrors.test_invalid_add_argumentcCsptdd�}|��}|jddd�|jddd�|��}|jddd�|jd	dd�d
}|�|��t�|��dS)Nr2�r4r�r�r�r�r0z--soupz--nutsz�            usage: PROG [-h] [--foo | --bar] [--soup | --nuts]

            optional arguments:
              -h, --help  show this help message and exit
              --foo
              --bar
              --soup
              --nuts
              )r\r�rgr�rirjrk)rrhZgroup1�group2r�r
r
rrl�	s

z*TestMutuallyExclusiveGroupErrors.test_helpN)rrr	r�r�rlr
r
r
rr��	sr�c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)�MEMixincCs4|jdd�j}t}|jD]}|�|||���qdS�NFr���
get_parserrXrHr�r�r��rrXra�args_stringr
r
r�test_failures_when_not_required�	s
z'MEMixin.test_failures_when_not_requiredcCs:|jdd�j}t}|jdgD]}|�|||���qdS)NTr�r�r�r�r
r
r�test_failures_when_required�	sz#MEMixin.test_failures_when_requiredcCsD|jdd�j}|j|j}|D] \}}||���}|�||�qdSr�)r�rXr��successes_when_not_requiredr�r�)rrXr�r�r��	actual_nsr
r
r� test_successes_when_not_required�	s
z(MEMixin.test_successes_when_not_requiredcCs:|jdd�j}|jD] \}}||���}|�||�qdS�NTr�)r�rXr�r�r�)rrXr�r�r�r
r
r�test_successes_when_required�	sz$MEMixin.test_successes_when_requiredcCs,|jdd�j}|j}|�|�t�|��dSr�)r�rh�usage_when_not_requiredr�rjrk�rrhZexpected_usager
r
r�test_usage_when_not_required�	sz$MEMixin.test_usage_when_not_requiredcCs,|jdd�j}|j}|�|�t�|��dSr�)r�rh�usage_when_requiredr�rjrkr�r
r
r�test_usage_when_required�	sz MEMixin.test_usage_when_requiredcCs2|jdd�j}|j|j}|�|�t�|��dSr�)r�rir�r8r�rjrk�rrir8r
r
r�test_help_when_not_required�	sz#MEMixin.test_help_when_not_requiredcCs2|jdd�j}|j|j}|�|�t�|��dSr�)r�rir�r8r�rjrkr�r
r
r�test_help_when_required�	szMEMixin.test_help_when_requiredN)rrr	r�r�r�r�r�r�r�r�r
r
r
rr��	sr�c@sxeZdZddd�ZddgZdeddd�fd	ed
dd�fdeddd�fd
edd
d�fgZdeddd�fgZdZdZ	dZ
dS)�TestMutuallyExclusiveSimpleNcCs:tdd�}|j|d�}|jddd�|jddd	d
d�|S)Nr2r�r�r�r:rrr�r
r��baz help)rr�r8�r\r�rg�rr)rhrnr
r
rr��	s

z&TestMutuallyExclusiveSimple.get_parser�--bar X --baz Yz
--bar X --baz�--bar Xr��r�r�z--bar X --bar Zr��--baz Yr�r�r�z;        usage: PROG [-h] [--bar BAR | --baz [BAZ]]
        z;        usage: PROG [-h] (--bar BAR | --baz [BAZ])
        z�
        optional arguments:
          -h, --help   show this help message and exit
          --bar BAR    bar help
          --baz [BAZ]  baz help
        )N�rrr	r�r�r:r�r�r�r�r8r
r
r
rr��	s
��r�c
@s�eZdZddd�ZdgZdeddddd�fded	dddd�fd
eddddd�fdedd	ddd�fgZdeddddd�fgZd
ZdZ	dZ
dS)�TestMutuallyExclusiveLongNcCsRtdd�}|jddd�|jddd�|j|d�}|jd	d
d�|jddd�|S)
Nr2r�z--abcdez
abcde helprrz--fghijz
fghij helpr�z--klmnoz
klmno helpz--pqrstz
pqrst help�r\rgr�r�r
r
rr�
s
z$TestMutuallyExclusiveLong.get_parserz--klmno X --pqrst Yz	--klmno Xr�)ZabcdeZfghijZklmnoZpqrstz--abcde Y --klmno Xr�z	--pqrst Xz--pqrst X --fghij Yr�zi    usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ]
                [--klmno KLMNO | --pqrst PQRST]
    zi    usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ]
                (--klmno KLMNO | --pqrst PQRST)
    z�
    optional arguments:
      -h, --help     show this help message and exit
      --abcde ABCDE  abcde help
      --fghij FGHIJ  fghij help
      --klmno KLMNO  klmno help
      --pqrst PQRST  pqrst help
    )Nr�r
r
r
rr�
s 
	���	�r�c@sfeZdZdd�ZdgZdeddd�fded	dd�fd
eddd�fgZd
eddd�fgZdZdZ	dZ
dS)�$TestMutuallyExclusiveFirstSuppressedcCs:tdd�}|j|d�}|jdtjd�|jdddd	�|S)
Nr2r�r�r�rrr�r0rDr7�r\r�rgr�r�r�r
r
rr�:
s

z/TestMutuallyExclusiveFirstSuppressed.get_parserz-x X -yz-x Xr�Trz	-x X -x Yr�r�NFr�z&        usage: PROG [-h] [-y]
        z$        usage: PROG [-h] -y
        zx
        optional arguments:
          -h, --help  show this help message and exit
          -y          y help
        r�r
r
r
rr�8
s��r�c	@s�eZdZdd�ZdddgZdedddd	�fd
edddd	�fdeddd
d	�fdedddd	�fgZdedddd	�fgZdZZ	dZ
dS)�#TestMutuallyExclusiveManySuppressedcCsNtdd�}|j|d�}|j}|ddtjd�|ddtjd�|d	tjd
�|S)Nr2r�r��--spamr�r7r�r0z	--bladderrrr�)rr)rhrnr�r
r
rr�[
s
z.TestMutuallyExclusiveManySuppressed.get_parserz--spam --badgerz--badger --bladder Bz--bladder B --spamr�TN)rr�Zbladderr�Fz--bladder Br�z
--spam --spamr�z!        usage: PROG [-h]
        �[
        optional arguments:
          -h, --help  show this help message and exit
        �rrr	r�r�r:r�r�r�r�r8r
r
r
rr�Y
s
���r�c
@s�eZdZdd�ZdddddgZded	d
dd�fd
edddd�fdedd
dgd�fdedd
dddgd�fgZdedd
dd�fgZdZdZ	dZ
d
S)�*TestMutuallyExclusiveOptionalAndPositionalcCsJtdd�}|j|d�}|jdddd�|jdd	d
�|jddd
dd�|S)Nr2r�r�r�r��FOOr7r��SPAMrrr�rr��BADGER�rr�r8r�r�r
r
rr�
s
z5TestMutuallyExclusiveOptionalAndPositional.get_parserz--foo --spam Sz
--spam S XzX --foozX Y Z --spam Sz	--foo X Yr�TNr�)rlrr�z--spam SF�SzX Y Zr�r�r�zM        usage: PROG [-h] [--foo | --spam SPAM | badger [badger ...]]
        zM        usage: PROG [-h] (--foo | --spam SPAM | badger [badger ...])
        z�
        positional arguments:
          badger       BADGER

        optional arguments:
          -h, --help   show this help message and exit
          --foo        FOO
          --spam SPAM  SPAM
        r�r
r
r
rr�}
s"	���r�c
@s�eZdZdd�ZddddgZdedd	d	d	d	d
�fded	dd	d	d	d
�fded	d	dd	d	d
�fd
edd	d	dd	d
�fded	dd	d	dd
�fded	d	dddd
�fgZded	d	d	d	d	d
�fded	d	d	dd	d
�fded	d	d	d	dd
�fgZdZZ	dZ
dS)�#TestMutuallyExclusiveOptionalsMixedcCsjtdd�}|jdddd�|j|d�}|jddd	d�|jd
ddd�|jddd
d�|jdddd�|S)Nr2r�r�r�rBr7r�r��a helpr>�b helpr�rDr@�c helpr�r�r
r
rr��
s
z.TestMutuallyExclusiveOptionalsMixed.get_parserz-a -b�-b -cz-a -cz-a -b -cr�TF�r�r
rr�r�r>r@z-a -xz-y -bz-x -y -cr�r�r�z:        usage: PROG [-h] [-x] [-a] [-b] [-y] [-c]
        z�
        optional arguments:
          -h, --help  show this help message and exit
          -x          x help
          -a          a help
          -b          b help
          -y          y help
          -c          c help
        Nr�r
r
r
rr��
s
�	�r�c@s\eZdZddd�ZddgZdeddd�fd	edd
d�fgZdeddd�fgZdZd
Z	dZ
dS)�TestMutuallyExclusiveInGroupNcCsDtdd�}|jddd�}|j|d�}|jddd	�|jd
dd	�|S)Nr2r�zTitled groupzGroup descriptionr�r�r�r:rrr�r�)r\rmr�rg)rr)rhZtitled_group�mutex_groupr
r
rr��
s
�
�z'TestMutuallyExclusiveInGroup.get_parserr�z--baz X --bar Yr�r�r�r�r�r�z9        usage: PROG [-h] [--bar BAR | --baz BAZ]
        z9        usage: PROG [-h] (--bar BAR | --baz BAZ)
        z�
        optional arguments:
          -h, --help  show this help message and exit

        Titled group:
          Group description

          --bar BAR   bar help
          --baz BAZ   baz help
        )Nr�r
r
r
rr��
s

��r�c@s�eZdZdd�ZdddgZdedddd	dd
�fdedd
dd	dd
�fdeddd
d	dd
�fdedddd	d
d
�fdedd
dd	d
d
�fgZd	edddd	dd
�fdedddd	d
d
�fgZdZZ	dZ
dS)�1TestMutuallyExclusiveOptionalsAndPositionalsMixedcCshtdd�}|jddd�|jdddd	�|j|d
�}|jddd
d�|jdddd	�|jdddd	�|S)Nr2r�r�rBrrr�r�rDr7r�r�r
r�rGr>r�r@r�r�r�r
r
rr��
s
z<TestMutuallyExclusiveOptionalsAndPositionalsMixed.get_parserzX A -br�z-c X AzX Ar�Fr�r�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

        optional arguments:
          -h, --help  show this help message and exit
          -y          y help
          -b          b help
          -c          c help
        r�r
r
r
rr��
s

��r�c@s0eZdZdd�ZdZdZdZdZdZdZ	dZ
dS)�TestMutuallyExclusiveNestedcCsntdd�}|j|d�}|�d�|�d�|j|d�}|�d�|�d�|j|d�}|�d�|�d	�|S)
Nr2r�r�r�r>r@z-dz-er�r�)rr)rhrnr�Zgroup3r
r
rr�'s






z&TestMutuallyExclusiveNested.get_parserzO        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�
        optional arguments:
          -h, --help  show this help message and exit
          -a A
          -b B
          -c C
          -d D
          -e E
          -f F
        N)rrr	r�r�r�r8r�r�r�r�r
r
r
rr�%s

r�cseZdZd�fdd�	Z�ZS)�MEPBaseNcs(tt|�j|d�}t|jd|gd�}|S)Nr�F)r4r�r�)r]r�r�r\r4)rr)r�rhr^r
rr�Ss�zMEPBase.get_parser)N)rrr	r�rbr
r
r^rr�Qsr�c@seZdZdS)�&TestMutuallyExclusiveGroupErrorsParentNrr
r
r
rr�Zsr�c@seZdZdS)�!TestMutuallyExclusiveSimpleParentNrr
r
r
rr�_sr�c@seZdZdS)�TestMutuallyExclusiveLongParentNrr
r
r
rr�dsr�c@seZdZdS)�*TestMutuallyExclusiveFirstSuppressedParentNrr
r
r
rr�isr�c@seZdZdS)�)TestMutuallyExclusiveManySuppressedParentNrr
r
r
rr�nsr�c@seZdZdS)�0TestMutuallyExclusiveOptionalAndPositionalParentNrr
r
r
rr�ssr�c@seZdZdS)�)TestMutuallyExclusiveOptionalsMixedParentNrr
r
r
rr�xsr�c@seZdZdS)�7TestMutuallyExclusiveOptionalsAndPositionalsMixedParentNrr
r
r
rr�}sr�c@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�TestSetDefaultsc
Cs�t�}|jdd�|jddd�|�tdddd�|�g��|�tdddd�|�gt���|�tdddd�|�gtdd���|�tdddd�|�gtddd	���dS)
Nrlr�r�rN)r�r�r�r�r)r�r��r\�set_defaultsr�r:rXr*r
r
r�test_set_defaults_no_args�s����z)TestSetDefaults.test_set_defaults_no_argsc	Cs�t�}|jddd�|jddd�|�tddd�|�g��|�tddd�|�gt���|�tddd�|�gtdd���|�td	dd�|�d
����|�td	dd�|�d
��t���|�td	dd�|�d
��tdd���dS)Nrlr�rr�Zxfooxr�r�r�rgr*)r\r�rgr�r:rXr�r*r
r
r�test_set_defaults_with_args�s*������z+TestSetDefaults.test_set_defaults_with_argscCsRt�}|jdd�|��}|�d�}|jdd�|�tddd�|�d����dS)Nrlr�r�r�r.r)r\r�rHrJr�r:rXr�)rrhrLZparser_ar
r
r�test_set_defaults_subparsers�s
�z,TestSetDefaults.test_set_defaults_subparserscCs>tdd�}|jdd�t|gd�}|�tdd�|�g��dS)NFr�rlr�r�r�)rr�rhr
r
r�test_set_defaults_parents�s
z)TestSetDefaults.test_set_defaults_parentscCsLt��}|���d�}|jdd�|jdd�|�tdd�|�dg��dS)Nr�rNr�r)r�r�rHrJr�r�r:rX)rrhZxparserr
r
r�)test_set_defaults_on_parent_and_subparser�s
z9TestSetDefaults.test_set_defaults_on_parent_and_subparsercCs�t�}|jddddd�|�d�|jddd	�|jd
dd�|jd
ddd�|�tddddd�|�g��|jddddd�|�tddddd�|�g��dS)N�Wr�r�r�rr�r��XXr�r�r
rr��ZZr�WW�YY)r\r�rgr�r:rXr*r
r
r�&test_set_defaults_same_as_add_argument�s
��z6TestSetDefaults.test_set_defaults_same_as_add_argumentcCs�t�}|jddddd�|�d�}|�d�|jdd	d
�|jddd
�|jdddd�|�tdd	ddd�|�g��|jddddd�|�tddddd�|�g��dS)Nr�r�r�r�rrlr�r�r�r�r�r
rr�r�rr�r)r\r�rmrgr�r:rX�rrhrnr
r
r�,test_set_defaults_same_as_add_argument_group�s

��z<TestSetDefaults.test_set_defaults_same_as_add_argument_groupN)
rrr	r�r�r�r�r�rrr
r
r
rr��s
	r�c@seZdZdd�ZdS)�TestGetDefaultcCs�t�}|�|�d��|�|�d��|�d�|�|�d��|�|�d��|jdtdd�|�|�d��|�d|�d��|jdd�|�d|�d��|�d|�d��dS)	Nrlr�r�r�r�r�r�r�)r\rc�get_defaultrgrr�r�r*r
r
r�test_get_default�s
zTestGetDefault.test_get_defaultN)rrr	rr
r
r
rr�src@seZdZdd�Zdd�ZdS)�TestNamespaceContainsSimplecCs$t��}|�d|�|�d|�dS)Nr�r�)r��	Namespace�assertNotIn�r�nsr
r
r�
test_empty�sz&TestNamespaceContainsSimple.test_emptycCsNtjddd�}|�d|�|�d|�|�d|�|�d|�|�d|�dS)	NrNrrr�r�r�Zxxr�)r�rr	�assertInr
r
r
r�test_non_emptysz*TestNamespaceContainsSimple.test_non_emptyN)rrr	rrr
r
r
rr�src@seZdZdd�ZdS)�TestHelpFormattingMetaclasscCs:|dkrdSGdd�dt�}dD]\}}||||�q dS)N�HelpTestCasec@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)z6TestHelpFormattingMetaclass.__init__.<locals>.AddTestsc	Ssl||_||_|j|j|jfD]J}d|j|f}|fdd�}z
||_Wntk
rXYnXt|||�qdS)Nz%s_%scSs||�dSrr
rwr
r
r�test_wrapperszUTestHelpFormattingMetaclass.__init__.<locals>.AddTests.__init__.<locals>.test_wrapper)�func_suffix�std_name�test_format�
test_print�test_print_filerr~rT)rZ
test_classrrrxr�rr
r
rr8s�
z?TestHelpFormattingMetaclass.__init__.<locals>.AddTests.__init__cSs�tj|jj|jj�}t|dg�D]}|j|j|j�q t|dg�}|D]2\}}|j|j|j�}|D]}|j|j|j�qbqFt|dg�}|r�|��}	|D]}
|	j	|
j|
j�q�|S)Nri�argument_group_signatures�subparsers_signatures)
r�r�rer5r6rSrgrmrHrJ)rr�rhZargument_sigZ
group_sigsZ	group_sigZ
argument_sigsrnZsubparsers_sigsrLZ
subparser_sigr
r
rr�&s2�����zBTestHelpFormattingMetaclass.__init__.<locals>.AddTests._get_parsercSs&t||j�}t�|�}|�||�dSr)rSrrjrkr�)rr��parser_textZ
expected_textr
r
r�_test<s
z<TestHelpFormattingMetaclass.__init__.<locals>.AddTests._testcSs,|�|�}t|d|j�}|�||��dS)Nz	format_%s)r�rSrr)rr�rhr�r
r
rrAs
zBTestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_formatc
Ssr|�|�}t|d|j�}tt|j�}tt|jt��z|�tt|j���}W5tt|j|�X|�||�dS�Nzprint_%s)	r�rSrrQrrTrrWr)rr�rh�print_Z
old_streamrr
r
rrFs
zATestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_printcSs@|�|�}t|d|j�}t�}||�|��}|�||�dSr)r�rSrrrWr)rr�rhrZsfilerr
r
rrRs
zFTestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_print_fileN)	rrr	r8r�rrrrr
r
r
rr�sr�))�usagerK)r8rK)r�)r�r+r�r�r�rrr
r
rr8s
Hz$TestHelpFormattingMetaclass.__init__Nr9r
r
r
rr
srrc@sneZdZdZedddd�Zedddd	d
�eddd
d�eddd�eddd�eddd�gZgZdZedZ	dZ
dS)�TestHelpBiggerOptionals�;Make sure that argument help aligns when options are longerr2�DESCRIPTION�EPILOG�r4r5�epilogr�r�r��0.1r�r�r��X HELPr7�--y�Y HELPrrrl�FOO HELPr��BAR HELPz;        usage: PROG [-h] [-v] [-x] [--y Y] foo bar
        ab
        DESCRIPTION

        positional arguments:
          foo            FOO HELP
          bar            BAR HELP

        optional arguments:
          -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�r4rerirrr8r�r
r
r
rrcs�


�rc@s<eZdZdZdd�ZejZejZejZdZ	e	dZ
ejZdS)�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.
    cCs$t��}|�dd�|�|j�dS)Nr
r�)rrr�rrrr
r
rr�szTestShortColumns.setUpz�        usage: PROG
               [-h]
               [-v]
               [-x]
               [--y Y]
               foo
               bar
        a�
        DESCRIPTION

        positional arguments:
          foo
            FOO HELP
          bar
            BAR HELP

        optional arguments:
          -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�rrrerirrr8r�r
r
r
rr,�s	r,c@s�eZdZdZedddd�Zedddd	d
�eddd
d�eddd�eddd�eddd�gZeddd�eddd�edddd�gfgZdZed Z	d!Z
d"S)#�TestHelpBiggerOptionalGroupsrr2r r!r"r�r�r�r$r�r�r�r%r7r&r'rrrlr(r�r)zGROUP TITLEzGROUP DESCRIPTIONr@r�zBAZ HELPr�rzZ HELPrGzN        usage: PROG [-h] [-v] [-x] [--y Y] [-z Z [Z ...]] foo bar baz
        a�
        DESCRIPTION

        positional arguments:
          foo            FOO HELP
          bar            BAR HELP

        optional arguments:
          -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
    r*Nr+r
r
r
rr-�s$�


�

��r-c@s^eZdZdZeddd�Zedddd�ed	d
d�edd
d�eddd�gZgZdZedZ	dZ
dS)�TestHelpBiggerPositionalsz4Make sure that help aligns when arguments are longer�USAGEr �rr5r�r�r%r7r&r'rrZekiekiekifekangzEKI HELPr�r)�        usage: USAGE
        a 
        DESCRIPTION

        positional arguments:
          ekiekiekifekang  EKI HELP
          bar              BAR HELP

        optional arguments:
          -h, --help       show this help message and exit
          -x               X HELP
          --y Y            Y HELP
        r�Nr+r
r
r
rr.�s


�r.c@sfeZdZdZeddd�Zedddd�ed	d
dd�gZedd
d�edddd�gfgZdZedZ	dZ
dS)�TestHelpReformatting�>Make sure that text after short names starts on the first liner2ze   oddly    formatted
description

that is so long that it should go onto multiple lines when wrappedr9r�r�zoddly
    formatted -x help�r<r8r�r�z
normal y helpr>z'
    oddly formatted group

descriptionr@r�r�z` oddly 
formatted    -a  help  
    again, so long that it should be wrapped over multiple linesr7�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

        optional arguments:
          -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
        r�Nr+r
r
r
rr2
s"��
���r2c@sbeZdZdZeddd�Zedddd�ed	d
dd�gZed�ed
ddd�gfgZdZedZ	dZ
dS)�TestHelpWrappingShortNamesr3r2zZD
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
Dr9r�r�zxXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXr4r�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 HHAr7r5a�
        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

        optional arguments:
          -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
        r�Nr+r
r
r
rr6@
s���r6c@s|eZdZdZeddd�Zeddddd	�ed
ddd
�edddd
�gZed�edddd
�edddd
�gfgZdZedZ	dZ
dS)�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 Dr0r�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 Vr�r��XXXXXXXXXXXXXXXXXXXXXXXXXzdXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHr4r�Zyyyyyyyyyyyyyyyyyyyyyyyyyr7r8r�ZAAAAAAAAAAAAAAAAAAAAAAAAAzdAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHr�ZzzzzzzzzzzzzzzzzzzzzzzzzzzdZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHr1ar
        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

        optional arguments:
          -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
        Nr+r
r
r
rr9h
s���r9c	@s�eZdZdZedd�Zedddd�edd	d
d�eddd�ed
d
dd�edddd�gZed�edddd�edddd�eddd	d�edddd�gfgZdZedZ	dZ
dS)�
TestHelpUsage�Test basic usage messagesr2r�r�rr-rGr�rr�r�rrr
r)r8rrr
rnr�r�r�rr�r|r z�        usage: PROG [-h] [-w W [W ...]] [-x [X [X ...]]] [-y [Y]] [-z Z Z Z]
                    a b b [c] [d [d ...]] e [e ...]
        a�
        positional arguments:
          a               a
          b               b
          c               c

        optional arguments:
          -h, --help      show this help message and exit
          -w W [W ...]    w
          -x [X [X ...]]  x

        group:
          -y [Y]          y
          -z Z Z Z        z
          d               d
          e               e
        r�Nr+r
r
r
rr;�
s$

���r;c@speZdZdZeddd�ZgZed�eddd�ed	d	d�gfed
�eddd�edd
d�gfgZdZedZ	dZ
dS)�TestHelpOnlyUserGroupsr<r2F�r4r�Zxxxxr�r�rrr�Zyyyyr
r�r�z.        usage: PROG [-x X] [-y Y] a b
        zn
        xxxx:
          -x X  x
          a     a

        yyyy:
          b     b
          -y Y  y
        r�Nr+r
r
r
rr=�
s

�

��

r=c@sReZdZdZedd�Zeddd�eddd�ed	�ed
�gZgZdZedZ	d
Z
dS)�TestHelpUsageLongProgz*Test usage messages where the prog is long�<PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPr�r�r��r<r�r�r�r
zz        usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               [-h] [-w W] [-x X] a b
        z�
        positional arguments:
          a
          b

        optional arguments:
          -h, --help  show this help message and exit
          -w W
          -x X
        r�Nr+r
r
r
rr?�
s


�r?c@sfeZdZdZedd�Zeddd�eddd�ed	d
d�eddd�ed
�ed�gZgZdZedZ	dZ
dS)� TestHelpUsageLongProgOptionsWrapzATest usage messages where the prog is long and the optionals wrapr@r�r��WWWWWWWWWWWWWWWWWWWWWWWWWrAr�r:r��YYYYYYYYYYYYYYYYYYYYYYYYYr��ZZZZZZZZZZZZZZZZZZZZZZZZZr�r
a        usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] [-x XXXXXXXXXXXXXXXXXXXXXXXXX]
               [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
               a b
        a8
        positional arguments:
          a
          b

        optional arguments:
          -h, --help            show this help message and exit
          -w WWWWWWWWWWWWWWWWWWWWWWWWW
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        r�Nr+r
r
r
rrBs




�
rBc@sFeZdZdZeddd�Zed�ed�ed�gZgZdZed	Z	d
Z
dS)�$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
        r�Nr+r
r
r
rrF*s�rFc@sleZdZdZedd�Zeddd�eddd�ed	d
d�eddd�ed
�ed�ed�gZgZdZedZ	dZ
dS)�TestHelpUsageOptionalsWrapz,Test usage messages where the optionals wrapr2r�r�rCrAr�r:r�rDr�rEr�r
rz�        usage: PROG [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] [-x XXXXXXXXXXXXXXXXXXXXXXXXX]
                    [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
                    a b c
        aD
        positional arguments:
          a
          b
          c

        optional arguments:
          -h, --help            show this help message and exit
          -w WWWWWWWWWWWWWWWWWWWWWWWWW
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        r�Nr+r
r
r
rrKCs




�	rKc@sVeZdZdZedd�Zed�ed�ed�ed�ed�ed	�gZgZd
ZedZ	dZ
d
S)�TestHelpUsagePositionalsWrapz.Test usage messages where the positionals wrapr2r�r�r�r�rGrHrIz�        usage: PROG [-h] [-x X] [-y Y] [-z Z]
                    aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
                    ccccccccccccccccccccccccc
        a
        positional arguments:
          aaaaaaaaaaaaaaaaaaaaaaaaa
          bbbbbbbbbbbbbbbbbbbbbbbbb
          ccccccccccccccccccccccccc

        optional arguments:
          -h, --help            show this help message and exit
          -x X
          -y Y
          -z Z
        r�Nr+r
r
r
rrLis
�
rLc@sbeZdZdZedd�Zeddd�eddd�ed	d
d�ed�ed�ed
�gZgZdZedZ	dZ
dS)�%TestHelpUsageOptionalsPositionalsWrapz<Test usage messages where the optionals and positionals wrapr2r�r�r:rAr�rDr�rErGrHrIa        usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] [-y YYYYYYYYYYYYYYYYYYYYYYYYY]
                    [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
                    aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
                    ccccccccccccccccccccccccc
        ae
        positional arguments:
          aaaaaaaaaaaaaaaaaaaaaaaaa
          bbbbbbbbbbbbbbbbbbbbbbbbb
          ccccccccccccccccccccccccc

        optional arguments:
          -h, --help            show this help message and exit
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        r�Nr+r
r
r
rrM�s



�
rMc@sPeZdZdZedd�Zeddd�eddd�ed	d
d�gZgZdZedZ	d
Z
dS)�TestHelpUsageOptionalsOnlyWrapz@Test usage messages where there are only optionals and they wrapr2r�r�r:rAr�rDr�rEz�        usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] [-y YYYYYYYYYYYYYYYYYYYYYYYYY]
                    [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
        z�
        optional arguments:
          -h, --help            show this help message and exit
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        r�Nr+r
r
r
rrN�s



�rNc@sFeZdZdZeddd�Zed�ed�ed�gZgZdZed	Z	d
Z
dS)� TestHelpUsagePositionalsOnlyWrapzBTest usage messages where there are only positionals and they wrapr2Fr>rGrHrIz~        usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
                    ccccccccccccccccccccccccc
        rJr�Nr+r
r
r
rrO�s�rOc
@s�eZdZdZedd�Zededd�eddd	d
dd�ed
ddd�eddddgddd�eddd�edddd�gZed�ed d!d�ed"d#d$d�gfgZd%Z	e	d&Z
d'Zd(S))�TestHelpVariableExpansionz:Test that variables are expanded properly in help messagesr2r�r�z"x %(prog)s %(default)s %(type)s %%r;r�r�r��XXXz y %(prog)s %(default)s %(const)s)r�r�r�r8r�rz$foo %(prog)s %(default)s %(choices)srCr�r�rNrZBBBz!bar %(prog)s %(default)s %(dest)s)r�r!r<r8rzspam %(prog)s %(default)srrr�r�zbadger %(prog)s %(default)s)r�r8rnr�za %(prog)s %(default)sr>r�zb %(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

        optional arguments:
          -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
        r�N)rrr	r�r4rerrirrr8r�r
r
r
rrP�s2
�
���
�

��rPc@s4eZdZdZeddd�ZgZgZdZedZ	dZ
dS)	�&TestHelpVariableExpansionUsageSuppliedz@Test that variables are expanded properly when usage= is presentr2z%(prog)s FOO�r4rz         usage: PROG FOO
        r�r�Nr+r
r
r
rrRsrRc@s0eZdZdZeddd�ZgZgZdZeZ	dZ
dS)�$TestHelpVariableExpansionNoArgumentsz;Test that variables are expanded properly with no argumentsr2Fr>z        usage: PROG
        r�Nr+r
r
r
rrT srTc@sFeZdZdZedejd�Zeddd�eddd�gZgZ	d	Z
d
Zd
ZdS)�TestHelpSuppressUsagez3Test that items can be suppressed in usage messagesr2rSr�r6rrr�	spam helpz�        positional arguments:
          spam        spam help

        optional arguments:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        r�N)
rrr	r�r4r�r�rerirr8rr�r
r
r
rrU-s

�rUc@sJeZdZdZeddd�Zedejd�eddd�gZgZ	d	Z
e
d
ZdZdS)
�TestHelpSuppressOptionalz?Test that optional arguments can be suppressed in help messagesr2Fr>r�rrrrVz!        usage: PROG spam
        zA
        positional arguments:
          spam  spam help
        r�N�
rrr	r�r4rer�r�rirrr8r�r
r
r
rrWBs
�rWc@s\eZdZdZedd�Zeddd�eddd�gZed	�ed
ejd�gfgZ	dZ
e
dZd
ZdS)�TestHelpSuppressOptionalGroupz<Test that optional groups can be suppressed in help messagesr2r�r�r6rrrrVrnr��2        usage: PROG [-h] [--foo FOO] spam
        ��
        positional arguments:
          spam        spam help

        optional arguments:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        r�N)
rrr	r�r4rerir�r�rrr8r�r
r
r
rrYVs


��	rYc@sHeZdZdZedd�Zeddd�edejd�gZgZ	dZ
e
d	Zd
ZdS)�TestHelpSuppressPositionalzATest that positional arguments can be suppressed in help messagesr2r�r�r6rrrz-        usage: PROG [-h] [--foo FOO]
        �z
        optional arguments:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        r�NrXr
r
r
rr\ps

�r\c@s>eZdZdZedd�Zedddd�gZgZdZed	Z	d
Z
dS)�TestHelpRequiredOptionalz.Test that required options don't look optionalr2r�r�Tr6)r)r8z+        usage: PROG [-h] --foo FOO
        r]r�Nr+r
r
r
rr^�s
�r^c@sNeZdZdZedddd�Zedddd	�ed
ddd
�gZgZdZedZ	dZ
dS)�TestHelpAlternatePrefixCharsz:Test that options display with different prefix charactersr2z^;F)r4r�r�z^^foor�r6r7z;bz;;barr:rrz-        usage: PROG [^^foo] [;b BAR]
        zq
        optional arguments:
          ^^foo              foo help
          ;b BAR, ;;bar BAR  bar help
        r�Nr+r
r
r
rr_�s�r_c@sHeZdZdZeddd�Zeddd�edd	d�gZgZd
ZedZ	dZ
d
S)�TestHelpNoHelpOptionalz=Test that the --help argument can be suppressed help messagesr2Fr>r�r6rrrrVz-        usage: PROG [--foo FOO] spam
        z�
        positional arguments:
          spam       spam help

        optional arguments:
          --foo FOO  foo help
        r�Nr+r
r
r
rr`�s

�r`c@s>eZdZdZedd�Zed�ed�gZgZdZedZ	dZ
d	S)
�TestHelpNonez1Test that no errors occur if no help is specifiedr2r�r�rrZz�
        positional arguments:
          spam

        optional arguments:
          -h, --help  show this help message and exit
          --foo FOO
        r�Nr+r
r
r
rra�s
�	rac	@sjeZdZdZedd�Zeddddd�ed	d
ddd�ed
dddd�eddddd�gZgZdZedZ	dZ
dS)�TestHelpTupleMetavarz"Test specifying metavar as a tupler2r�r�r-r)ZW1ZW2)r8rr<r�r�r)ZX1ZX2r�r�r)ZY1ZY2ZY3r�r�r
)ZZ1z]        usage: PROG [-h] [-w W1 [W2 ...]] [-x [X1 [X2 ...]]] [-y Y1 Y2 Y3] [-z [Z1]]
        z�
        optional arguments:
          -h, --help        show this help message and exit
          -w W1 [W2 ...]    w
          -x [X1 [X2 ...]]  x
          -y Y1 Y2 Y3       y
          -z [Z1]           z
        r�Nr+r
r
r
rrb�s
�	rbc@sdeZdZdZedejdd�Zeddd�edd	d�gZed
dd�ed
dd�gfgZ	dZ
e
dZdZdS)�TestHelpRawText�Test the RawTextHelpFormatterr2�7Keep the formatting
    exactly as it is written

here
�r4�formatter_classr5r�z-    foo help should also
appear as given hererrrrVr>�?    This text
  should be indented
    exactly like it is here
r@r�r:�>        usage: PROG [-h] [--foo FOO] [--bar BAR] spam
        a�
        Keep the formatting
            exactly as it is written

        here

        positional arguments:
          spam        spam help

        optional arguments:
          -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
        r�N)
rrr	r�r4r��RawTextHelpFormatterrerirrr8r�r
r
r
rrc�s �

�
��rcc@sdeZdZdZedejdd�Zeddd�edd	d�gZed
dd�ed
dd�gfgZ	dZ
e
dZdZdS)�TestHelpRawDescriptionrdr2rerfr�z4  foo help should not
    retain this odd formattingrrrrVr>rhr@r�r:ria�
        Keep the formatting
            exactly as it is written

        here

        positional arguments:
          spam        spam help

        optional arguments:
          -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
        r�N)
rrr	r�r4r��RawDescriptionHelpFormatterrerirrr8r�r
r
r
rrk)s �

�
��rkc	@s�eZdZdZedejdd�Zeddd�edd	d
d�edd
d�eddddd�gZeddd�ede	ddd�gfgZ
dZedZdZ
dS)�TestHelpArgumentDefaultsz&Test the ArgumentDefaultsHelpFormatterr2r5rfr�z)foo help - oh and by the way, %(default)srrr�r�r:r7rrVr�r
Zwoodenzbadger helpr�r>r@r�r�r�)rBr�r8zO        usage: PROG [-h] [--foo FOO] [--bar] [--baz BAZ] spam [badger]
        a�
        description

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

        optional arguments:
          -h, --help  show this help message and exit
          --foo FOO   foo help - oh and by the way, None
          --bar       bar help (default: False)

        title:
          description

          --baz BAZ   baz help (default: 42)
        r�N)rrr	r�r4r��ArgumentDefaultsHelpFormatterrerirrrr8r�r
r
r
rrmYs$�

�
��rmc@sBeZdZdZeddd�Zeddddd	�gZgZd
ZedZ	dZ
d
S)�TestHelpVersionActionz,Test the default help for the version actionr2r5r9�-Vr�r�z3.6r�z&        usage: PROG [-h] [-V]
        z�
        description

        optional arguments:
          -h, --help     show this help message and exit
          -V, --version  show program's version number and exit
        r�Nr+r
r
r
rro�sroc@sTeZdZdZedd�Zeddddejd�ed	d
d�edd
d�gZgZ	dZ
e
dZdS)�TestHelpVersionActionSuppresszCTest that the --version argument can be suppressed in help messagesr2r�r�r�r�r�)r�r�r8r�r6rrrrVrZr[N)rrr	r�r4rer�r�rirrr8r
r
r
rrq�s

�

�rqc@sLeZdZdZeddd�Zeddddd	�gZd
d�dD�Zd
ZedZ	dZ
dS)�TestHelpSubparsersOrdering�5Test ordering of subcommands in help matches the coder2�display some subcommandsr9r�r�r�r$r�cCsg|]}t|d��qS)r��r4)r=r+r
r
rr?�s�z%TestHelpSubparsersOrdering.<listcomp>)r�r
rr|r �6        usage: PROG [-h] [-v] {a,b,c,d,e} ...
        z�
        display some subcommands

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

        optional arguments:
          -h, --help     show this help message and exit
          -v, --version  show program's version number and exit
        r*N)rrr	r�r4rerirrr8r�r
r
r
rrr�s��rrc@sPeZdZdZeddd�Zeddddd	�gZd
Zdd�eD�Zd
Z	e	dZ
dZdS)�"TestHelpSubparsersWithHelpOrderingrsr2rtr9r�r�r�r$r�))r�za subcommand help)r
zb subcommand help)rzc subcommand help)r|zd subcommand help)r ze subcommand helpcCsg|]\}}t||d��qS))r+r8ru)r=r+r8r
r
rr?�s�z-TestHelpSubparsersWithHelpOrdering.<listcomp>rva�
        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

        optional arguments:
          -h, --help     show this help message and exit
          -v, --version  show program's version number and exit
        r*N)rrr	r�r4reriZsubcommand_datarrr8r�r
r
r
rrw�s��rwc@s\eZdZdd�Zeddejd�Zeded�eded�ed	e	d
d�gZ
gZdZed
Z
dZdS)�TestHelpMetavarTypeFormattercCs|Srr
rr
r
r�custom_type�sz(TestHelpMetavarTypeFormatter.custom_typer2r5)r4r5rgr�r�r>r@z
SOME FLOAT)rBr<zF        usage: PROG [-h] [-b custom_type] [-c SOME FLOAT] int
        z�
        description

        positional arguments:
          int

        optional arguments:
          -h, --help      show this help message and exit
          -b custom_type
          -c SOME FLOAT
        r�N)rrr	ryr4r��MetavarTypeHelpFormatterrerr�rirrr8r�r
r
r
rrx�s�

�rxc@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zd S)!�TestInvalidArgumentConstructorsz-Test a bunch of invalid Argument constructorscOs"t��}|jt|jf|�|�dSr)r�r�r�r~rg�rr5r6rhr
r
r�assertTypeErrors��z/TestInvalidArgumentConstructors.assertTypeErrorcOs"t��}|jt|jf|�|�dSr)r�r�r�r�rgr|r
r
r�assertValueErrors��z0TestInvalidArgumentConstructors.assertValueErrorcCs<|jddd�|jddd�|jddd�|jdid�dS)	Nr�)r�r�rl)�callbackr
)Z
callback_args)Zcallback_kwargs�r}rr
r
r�test_invalid_keyword_arguments$sz>TestInvalidArgumentConstructors.test_invalid_keyword_argumentscCs"|��dD]}|j|d�qdS)N)r4r,r�r��rr�r
r
r�test_missing_destination*sz8TestInvalidArgumentConstructors.test_missing_destinationcCs|�d�|�d�dS)NrUz---�r~rr
r
r�test_invalid_option_strings/s
z;TestInvalidArgumentConstructors.test_invalid_option_stringscCs$|jddd�|jdttfd�dS)Nr�rr�)r~rr�rr
r
r�test_invalid_type3sz1TestInvalidArgumentConstructors.test_invalid_typec	Csl|jddd�|jddd�|jddd�t��}|�t��}|jddd�W5QRX|�dt|j��dS)	Nr�rlr�r�r��r,r4z
store-truezunknown action)	r~r�r�r�r�rgr
r�rrr
r
r�test_invalid_action7sz3TestInvalidArgumentConstructors.test_invalid_actionc	CsNt��}|jdd�|�t��}|jddd�W5QRX|�dt|j��dS)Nrlr�r�r�z+dest supplied twice for positional argument)r�r�rgr�r�r
r�rrr
r
r�test_multiple_dest@s�z2TestInvalidArgumentConstructors.test_multiple_destcCsDdD]:}ttd�tdd�tdd�fD]}|jd	d|i|��q$qdS)
N)r�r�r0r?rKr�rr�abr r�r�)r�)rIrr})rr�Zattrsr
r
r�test_no_argument_actionsHs
�z8TestInvalidArgumentConstructors.test_no_argument_actionscCs.dD]$}|jdd|d�|jdd|d�qdS)N)r�r0rKr�rl)r�r�r�rr�r�r�r
r
r�!test_no_argument_no_const_actionsOszATestInvalidArgumentConstructors.test_no_argument_no_const_actionscCs\dD]R}|jdd|d�|jdd|d�dD](}|jdd||d�|jdd||d�q,qdS)	Nr�r�rr�r)rNrrrl)r�rr�r�)rr�rr
r
r�#test_more_than_one_argument_actionsYs��zCTestInvalidArgumentConstructors.test_more_than_one_argument_actionscCsdD]}|jdd|d�qdS)N)r�r?r�rr�r�r�r
r
r�test_required_const_actionsgsz;TestInvalidArgumentConstructors.test_required_const_actionscCs4|jddd�|jdddd�|jddtjd�dS)Nr[�parsersr�r2)r�r4)r�rf)r}r�r�rr
r
r�"test_parsers_action_missing_paramsms
�zBTestInvalidArgumentConstructors.test_parsers_action_missing_paramscCs|jddd�dS)NrlTr�r�rr
r
r�test_required_positionalssz8TestInvalidArgumentConstructors.test_required_positionalcs`Gdd�dt��G�fdd�dt�}t��}|j�|jd|��d�|j�|jd|��d�dS)Nc@seZdZdS)zITestInvalidArgumentConstructors.test_user_defined_action.<locals>.SuccessNrr
r
r
r�Successxsr�cs"eZdZd�fdd�	Zdd�ZdS)zHTestInvalidArgumentConstructors.test_user_defined_action.<locals>.ActionFcs"|dkr|�kr|�kr���dS)Nrr
)r�option_stringsr�r�r�r)�r�r
rr8}szQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__init__c_sdSrr
r7r
r
rr!�szQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__call__N)F)rrr	r8r!r
r�r
rr&{s�r&r�)r�r�r�r)rIr�r�r�r�rg)rr&rhr
r�r�test_user_defined_actionvs��z8TestInvalidArgumentConstructors.test_user_defined_actionN)rrr	r�r}r~r�r�r�r�r�r�r�r�r�r�r�r�r�r
r
r
rr{s 	
r{c@seZdZdd�Zdd�ZdS)�TestActionsReturnedcCsXt��}|�d�}|�|jd�|�dd�}|�|jd�|�dd�}|�|jd�dS)	Nr�rlr>r�r�r�r�r�)r�r�rgr�r��rrhr�r
r
rrY�s
zTestActionsReturned.test_destcCs�t��}|jddddtddgddd	d
�	}|�|jd�|�|jd�|�|jd�|�|jt�|�|j	ddg�|�|j
d�|�|jd�|�|jd	�dS)Nr�r
r�rrNrr�ZBARr�)rr�r�rBr!r8r<r�)
r�r�rgrr�rr�r�rBr!r8r<r�r�r
r
r�	test_misc�s"
�zTestActionsReturned.test_miscN)rrr	rYr�r
r
r
rr��s	r�c@s$eZdZdd�Zdd�Zdd�ZdS)�TestConflictHandlingcCs|jttjdd�dS)Nrl)�conflict_handler)r�r�r�r�rr
r
r�
test_bad_type�s
�z"TestConflictHandling.test_bad_typecCsDt��}|�d�|�tj|jd�|�d�|�tj|jd�dS)Nr�r�)r�r�rgr�r�r*r
r
r�test_conflict_error�s
�
�z(TestConflictHandling.test_conflict_errorcCsztj}|ddd�}|jddd�|jddd�|�|��t�d��|jd	d
d�|jd	dd�|�|��t�d
��dS)Nr2Zresolve)r4r�r�zOLD XrrzNEW Xz�            usage: PROG [-h] [-x X]

            optional arguments:
              -h, --help  show this help message and exit
              -x X        NEW X
            r�ZOLD_SPAMrAZNEW_SPAMz�            usage: PROG [-h] [-x X] [--spam NEW_SPAM]

            optional arguments:
              -h, --help       show this help message and exit
              -x X             NEW X
              --spam NEW_SPAM
            )r�r�rgr�rirjrk)rr�rhr
r
r�test_resolve_error�sz'TestConflictHandling.test_resolve_errorN)rrr	r�r�r�r
r
r
rr��s	r�c@sXeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�ZdS)�TestOptionalsHelpVersionActionsz!Test the help and version actionsc	Cs<|�t��}|�|���W5QRX|�|��|jj�dSr)r�rHrXr�r�rirrK)rrhr�rr
r
r�assertPrintHelpExit�sz3TestOptionalsHelpVersionActions.assertPrintHelpExitcGs|�t|j|�dSr)r�rHrX�rrhr5r
r
rr1�sz9TestOptionalsHelpVersionActions.assertArgumentParserErrorcCsDt�}|jddddd�|�|d�|�|d�|�tt|d�dS)	Nr�r�r�r�r�r�r��format_version�r\rgr�r��AttributeErrorrSr*r
r
r�test_version�s
z,TestOptionalsHelpVersionActions.test_versionc	CsRtdd�}|jddddd�|�t��}|�dg�W5QRX|�d|jj�dS)	NZPPPr�r�r�r�z%(prog)s 3.5r�zPPP 3.5
�r\rgr�rHrXr�rrKrr
r
r�test_version_format�s

z3TestOptionalsHelpVersionActions.test_version_formatcCsHtdd�}|jddddd�|�|d�|�|d	�|�tt|d
�dS)NFr�r�r�r�r�r�r�r�r�)r\rgr1r�r�rSr*r
r
r�test_version_no_help�s

z4TestOptionalsHelpVersionActions.test_version_no_helpc	CsPtdd�}|jdddd�|�t��}|�dg�W5QRX|�d|jj�dS)NrQr�rpr�z%(prog)s 3.7r�zXXX 3.7
r�rr
r
r�test_version_actions

z3TestOptionalsHelpVersionActions.test_version_actioncCs>tdd�}|�|d�|�|d�|�|d�|�|d�dS)NFr�r�r�r�r�)r\r1r*r
r
r�test_no_helps

z,TestOptionalsHelpVersionActions.test_no_helpcCsZt�}|jddd�|jddd�|�|d�|�|d�|�|d�|�tt|d�dS)	Nr�r8r�r�r�r�r�r�)r\rgr�r1r�r�rSr*r
r
r�test_alternate_help_versionsz;TestOptionalsHelpVersionActions.test_alternate_help_versioncCs�t�}|jdddd�|jddd�|�d�d	dd
ddg}|d
dg}|D]J}|D]}d||f}qT|�||d�|�||d�|�tt|d�qLdS)Nr�r�r�r�r�r�r�r�r�rlz-x barzbaz -xz--bad-optionzfoo bar bazz	%s %%s %sr�r�r�r�)rrhZvalid_prefixesZvalid_suffixes�prefix�suffixr�r
r
r�!test_help_version_extra_argumentss
zATestOptionalsHelpVersionActions.test_help_version_extra_argumentsN)
rrr	r�r�r1r�r�r�r�r�r�r�r
r
r
rr��s	r�c@sPeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�ZdS)�TestStringsz3Test str()  and repr() on Optionals and PositionalscCs"ttfD]}|�||�|�qdSr)r�r�r�)r�objZ
result_string�funcr
r
r�assertStringEqual/szTestStrings.assertStringEqualc
Cs:tjdddgdddddd	d
gddd
�}d}|�||�dS)Nr�r�r>r
rrr�rNrrZHELPZMETAVAR�r�r�rBrr�r!r8r<z�Action(option_strings=['--foo', '-a', '-b'], dest='b', nargs='+', const=None, default=42, type='int', choices=[1, 2, 3], help='HELP', metavar='METAVAR'))r�r&r�)r�optionrr
r
r�
test_optional3s�
�zTestStrings.test_optionalc
Cs8tjgdtdddddgddd�}d	t}|�||�dS)
Nr�r
r�r�g�?zH 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], help='H HH H', metavar='MV MV MV'))r�r&r�r�)r�argumentrr
r
r�
test_argumentCs�
��zTestStrings.test_argumentcCs"tjddd�}d}|�||�dS)Nr�rrizNamespace(bar='spam', foo=42)�r�rr��rrrr
r
r�test_namespaceSszTestStrings.test_namespacecCs$tjfddi�}d}|�||�dS)N�"�quotezNamespace(**{'"': 'quote'})r�r�r
r
r�'test_namespace_starkwargs_notidentifierXsz3TestStrings.test_namespace_starkwargs_notidentifiercCs,tjfddiddi��}d}|�||�dS)Nr�rNr�r�z Namespace(a=1, **{'"': 'quote'})r�r�r
r
r�2test_namespace_kwargs_and_starkwargs_notidentifier]sz>TestStrings.test_namespace_kwargs_and_starkwargs_notidentifiercCs$tjfddi�}d}|�||�dS)NZvalidTzNamespace(valid=True)r�r�r
r
r�$test_namespace_starkwargs_identifierbsz0TestStrings.test_namespace_starkwargs_identifiercCs&tjdd�}dtj}|�||�dS)Nr2r�zvArgumentParser(prog='PROG', usage=None, description=None, formatter_class=%r, conflict_handler='error', add_help=True))r�r��
HelpFormatterr�)rrhrr
r
r�test_parsergs��zTestStrings.test_parserN)rrr	r�r�r�r�r�r�r�r�r�r
r
r
rr�,sr�c@s$eZdZdd�Zdd�Zdd�ZdS)�
TestNamespacecCsFt��}|�tt|d�tjddd�}|�|jd�|�|jd�dS)Nr�r�rr�)r�rr�r�rSr�r�r
r
r
r
r�test_constructorus
zTestNamespace.test_constructorcCs�tjddd�}tjddd�}tjdd�}tjdd�}|�||�|�||�|�||�|�||�|�||�|�||k�|�||k�|�||k�|�||k�dS)NrNrr�)r
r�)r�rE)r�rr�ZassertNotEqual�
assertTrue)rZns1Zns2Zns3Zns4r
r
r�
test_equality}szTestNamespace.test_equalitycCs6tjddd�}|�|�d�t�|�|�d�t�dS)NrNrr�)r�rZassertIsrG�NotImplemented�__ne__r
r
r
r�$test_equality_returns_notimplemented�sz2TestNamespace.test_equality_returns_notimplementedN)rrr	r�r�r�r
r
r
rr�ssr�c@s$eZdZdd�Zdd�Zdd�ZdS)�TestEncodingc	Cs>tj�|�\}}|d7}t|ddd��}|��W5QRXdS)Nz.pyrXzutf-8r�)rr"�splitextr.r�)rr"rvr�r
r
r�_test_module_encoding�sz"TestEncoding._test_module_encodingcCs|�tj�dSr)r�r��__file__rr
r
r�test_argparse_module_encoding�sz*TestEncoding.test_argparse_module_encodingcCs|�t�dSr)r�r�rr
r
r�"test_test_argparse_module_encoding�sz/TestEncoding.test_test_argparse_module_encodingN)rrr	r�r�r�r
r
r
rr��sr�c@seZdZdd�ZdS)�TestArgumentErrorcCs$d}t�d|�}|�t|�|�dS)Nz
my error here)r�r�r�r�)rr�rar
r
r�test_argument_error�sz%TestArgumentError.test_argument_errorN)rrr	r�r
r
r
rr��sr�c@seZdZdd�ZdS)�TestArgumentTypeErrorc	CsXdd�}tddd�}|jd|d�|�t��}|�dg�W5QRX|�d	|jj�dS)
NcSst�d��dS)N�spam!)r��ArgumentTypeErrorrr
r
rr�sz<TestArgumentTypeError.test_argument_type_error.<locals>.spamr2Fr>r�r�rQz-usage: PROG x
PROG: error: argument x: spam!
)r\rgr�rHrXr�rrL)rrrhrr
r
r�test_argument_type_error�s�z.TestArgumentTypeError.test_argument_type_errorN)rrr	r�r
r
r
rr��sr�c@s$eZdZdd�Zdd�Zdd�ZdS)�TestMessageContentErrorc	Cs.tddd�}|jdtd�|jdtdd�|jd	td
d�|�t��}|�g�W5QRXt|j�}|�|d�|�|d�|�|d	�|�t��}|�d
g�W5QRXt|j�}|�	|d�|�|d�|�|d	�|�t��}|�d
dg�W5QRXt|j�}|�	|d�|�	|d�|�|d	�dS)Nr2r�rS�req_posr��-req_optTr(Zneed_oner)rBr�req_optZmyXargumentz
-req_opt=1)
r\rgr�rr�rHrXr�assertRegexr	�rrhrr�r
r
r�%test_missing_argument_name_in_message�s,


z=TestMessageContentError.test_missing_argument_name_in_messagec	Cs�tddd�}|jdtd�|jdtdd�|jd	td
dd�|�t��}|�g�W5QRXt|j�}|�	|d�|�	|d�|�
|d
�|�t��}|�dg�W5QRXt|j�}|�	|d�|�
|d�|�
|d
�dS)Nr2r�rSr�r�z	--req_optTr(z	--opt_optr
)rBrr�r�Zopt_optz--req_opt=1)r\rgr�r�boolr�rHrXrr�r	r�r
r
r�%test_optional_optional_not_in_message�s$
�

z=TestMessageContentError.test_optional_optional_not_in_messagec	Csltddd�}|�d�|jdddd�|�t��}|�g�W5QRXt|j�}|�|d�|�|d�dS)	Nr2r�rSr�Zoptional_positionalr
rr)	r\rgr�rHrXr�rr�r	r�r
r
r�'test_optional_positional_not_in_message�s

z?TestMessageContentError.test_optional_positional_not_in_messageN)rrr	r�r�r�r
r
r
rr��sr�c@seZdZdd�ZdS)�TestTypeFunctionCallOnlyOncecsH�fdd�}t��}|jd|dd�|�d���}��tdd�|�dS)	Ncs��|d�dS)Nr��
foo_converted�r�)Zstring_to_convertrr
rrszLTestTypeFunctionCallOnlyOnce.test_type_function_call_only_once.<locals>.spamr�r�r�z--foo spam!r�r�)r�r�rgrXr�r�r:�rrrhr5r
rr�!test_type_function_call_only_onces
z>TestTypeFunctionCallOnlyOnce.test_type_function_call_only_onceN)rrr	r�r
r
r
rr�sr�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TestTypeFunctionCalledOnDefaultcsD�fdd�}t��}|jd|dd�|�g�}��tdd�|�dS)Ncs��|d�dS)Nrr�r��Zint_to_convertrr
rrsz]TestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_default.<locals>.spamr�rr�r��r�r�rgrXr�r:r�r
rr�/test_type_function_call_with_non_string_defaults

zOTestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_defaultcCs@dd�}t��}|jd|dd�|�g�}|�tdd�|�dS)NcSsdS)Nr�r
r�r
r
rr"szYTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_default.<locals>.spamr��0r�r�r�r�r�r
r
r�+test_type_function_call_with_string_default!s

zKTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_defaultcCs@dd�}t��}|jd|dd�|�g�}|�tdd�|�dS)NcSs|dS)Nrr
)Zstr_to_convertr
r
rr,,szYTestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_default.<locals>.extend�--testrr�z**)rr�)rr,rhr5r
r
r�)test_no_double_type_conversion_of_default+s

zITestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_defaultcCs8t��}|jddtgdd�|�g�}|�|jg�dS)Nr�rr4)r�rBr�r�)r�r�rgr�rXr�rr�r
r
r�test_issue_159067s
�
z0TestTypeFunctionCalledOnDefault.test_issue_15906N)rrr	r�r�r�r�r
r
r
rr�s
r�c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�TestParseKnownArgscCst��}|�d�dS)Nr
�r�r�rXr*r
r
r�test_arguments_tupleGsz'TestParseKnownArgs.test_arguments_tuplecCst��}|�g�dSrr�r*r
r
r�test_arguments_listKsz&TestParseKnownArgs.test_arguments_listcCs t��}|�d�|�d�dS)Nr�r��r�r�rgrXr*r
r
r�test_arguments_tuple_positionalOs
z2TestParseKnownArgs.test_arguments_tuple_positionalcCs"t��}|�d�|�dg�dS)Nr�r�r*r
r
r�test_arguments_list_positionalTs
z1TestParseKnownArgs.test_arguments_list_positionalcCsJt��}|�d�|�d���\}}|�tdd�|�|�ddg|�dS)Nr�z--foo F --bar --baz�Fr�r�r�)r�r�rgrWr�r�r:)rrhr5�extrasr
r
r�test_optionalsYs

z!TestParseKnownArgs.test_optionalscCs|t��}|jdddtd�|jddd�|�d�d	d
dddd
g}|�|�\}}|�tddd	d�|�|�d
dd
g|�dS)Nr�r
rN)rr�rBr�r0r�r�r�rr�rSr�rT)�vrr�)r�r�rgrrWr�r:)rrhrtr5r�r
r
r�
test_mixed`s
zTestParseKnownArgs.test_mixedN)	rrr	r�r�r�r�r�r�r
r
r
rr�Esr�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TestIntermixedArgsc	Cstjdd�}|jddd�|jdddd	�}|�d
�|jddtd
�d��}|�|�}|�tdd
ddddgd�|�|�|�\}}|�tdd
dgd�|�|�dddg|�d��}|�	|�\}}|�tdd
ddgd�|�|�dddg|�|�
|j�|�|jd�dS)Nr2r�r�rlr�r�r�Tr`�cmd�restr)rrBzcmd --foo x 1 --bar y 2 3r�r�rNrr)r�r�rlr�rgrrSz!cmd --foo x 1 --error 2 --bar y 3z--error)
r�r�rgrr��parse_intermixed_argsr�r:rW�parse_known_intermixed_argsrcrr))rrhr�rtr5r�r
r
r�
test_basicps"

zTestIntermixedArgs.test_basicc	Csjtdd�}|�d�|�d�|jddd�d��}|�t��}|�|�W5QRX|�t|j�d	�dS)
Nr2r�r�r�r�r�rr�z\.\.\.)	r\rgr�r�r~r�r�r�r)rrhrtrr
r
r�test_remainder�s


z!TestIntermixedArgs.test_remaindercCs�tdd�}|jdd�}|jdddd�|jd	d
d�|jdd
ddd�|�d���}|�tddgddd�|�|�t|jd���|�|j	d�dS)Nr2r�Tr�r�r�r�r7r�r�rrr�rr�r�r�z	1 --foo 2rgr)r�rlrrf)
r\r�rgr�r�r�r:r�rHr))rrhrnr5r
r
r�test_exclusive�s
z!TestIntermixedArgs.test_exclusivecCshtdd�}|jdd�}|jdddd�|jd	d
d�|jdd
ddd�|�t|jg�|�|jd�dS)Nr2r�Tr�r�r�r�r7r�r�rrr�rr�r�r�)r\r�rgr�r~r�r�r)rr
r
r�test_exclusive_incompatible�s
z.TestIntermixedArgs.test_exclusive_incompatibleN)rrr	r�r�rrr
r
r
rr�os
r�c@seZdZdd�ZdS)�!TestIntermixedMessageContentErrorc	Cs�tddd�}|jdtd�|jdtdd�|�t��}|�g�W5QRXt|j�}|�|d�|�|d	�|�t��}|�	g�W5QRXt|j�}|�
|d�|�|d	�dS)
Nr2r�rSr�r�r�Tr(r�)r\rgr�rr�rHrXrr�r�ZassertNotRegexr�r
r
rr��s

zGTestIntermixedMessageContentError.test_missing_argument_name_in_messageN)rrr	r�r
r
r
rr�src@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Z d<d=�Z!d>d?�Z"d@dA�Z#dBdC�Z$dDdE�Z%dFdG�Z&dHdI�Z'dJdK�Z(dLdM�Z)dNdO�Z*dPdQ�Z+dRdS�Z,dTdU�Z-dVdW�Z.dXdY�Z/dZd[�Z0d\d]�Z1d^d_�Z2d`S)a�TestAddArgumentMetavarz,length of metavar tuple does not match nargscCst��}|jd||d�dS)Nr��rr<)r�r�rg)rrr<rhr
r
r�do_test_no_exception�sz+TestAddArgumentMetavar.do_test_no_exceptionc	CsHt��}|�t��}|jd||d�W5QRX|�|jjd|j�dS)Nr�rr)	r�r�r�r�rgr�rr5�EXPECTED_MESSAGE)rrr<rhrr
r
r�do_test_exception�sz(TestAddArgumentMetavar.do_test_exceptioncCs|jddd�dS)Nrgr�rrr
r
r�test_nargs_None_metavar_string�sz5TestAddArgumentMetavar.test_nargs_None_metavar_stringcCs|jdt�d�dS)Nr�r�tuplerr
r
r�test_nargs_None_metavar_length0�sz6TestAddArgumentMetavar.test_nargs_None_metavar_length0cCs|jddd�dS)N�rgrrrr
r
r�test_nargs_None_metavar_length1�sz6TestAddArgumentMetavar.test_nargs_None_metavar_length1cCs|jddd�dS)N�rgrr�rrr
r
r�test_nargs_None_metavar_length2�sz6TestAddArgumentMetavar.test_nargs_None_metavar_length2cCs|jddd�dS)N�rgrrSrrrr
r
r�test_nargs_None_metavar_length3�sz6TestAddArgumentMetavar.test_nargs_None_metavar_length3cCs|jddd�dS)Nr
rgrrrr
r
r�"test_nargs_optional_metavar_string�sz9TestAddArgumentMetavar.test_nargs_optional_metavar_stringcCs|jdt�d�dS)Nr
rr
rr
r
r�#test_nargs_optional_metavar_length0�sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length0cCs|jddd�dS)Nr
r
rrrr
r
r�#test_nargs_optional_metavar_length1�sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length1cCs|jddd�dS)Nr
rrrrr
r
r�#test_nargs_optional_metavar_length2�sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length2cCs|jddd�dS)Nr
rrrrr
r
r�#test_nargs_optional_metavar_length3�sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length3cCs|jddd�dS)Nrrgrrrr
r
r�$test_nargs_zeroormore_metavar_string�sz;TestAddArgumentMetavar.test_nargs_zeroormore_metavar_stringcCs|jdt�d�dS)Nrrr
rr
r
r�%test_nargs_zeroormore_metavar_length0�sz<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length0cCs|jddd�dS)Nrr
rrrr
r
r�%test_nargs_zeroormore_metavar_length1�sz<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length1cCs|jddd�dS)Nrrrrrr
r
r�%test_nargs_zeroormore_metavar_length2sz<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length2cCs|jddd�dS)Nrrrrrr
r
r�%test_nargs_zeroormore_metavar_length3sz<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length3cCs|jddd�dS)Nrrgrrrr
r
r�#test_nargs_oneormore_metavar_string	sz:TestAddArgumentMetavar.test_nargs_oneormore_metavar_stringcCs|jdt�d�dS)Nrrr
rr
r
r�$test_nargs_oneormore_metavar_length0sz;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length0cCs|jddd�dS)Nrr
rrrr
r
r�$test_nargs_oneormore_metavar_length1sz;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length1cCs|jddd�dS)Nrrrrrr
r
r�$test_nargs_oneormore_metavar_length2sz;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length2cCs|jddd�dS)Nrrrrrr
r
r�$test_nargs_oneormore_metavar_length3sz;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length3cCs|jddd�dS)Nr�rgrrrr
r
r�#test_nargs_remainder_metavar_stringsz:TestAddArgumentMetavar.test_nargs_remainder_metavar_stringcCs|jdt�d�dS)Nr�r)rrrr
r
r�$test_nargs_remainder_metavar_length0sz;TestAddArgumentMetavar.test_nargs_remainder_metavar_length0cCs|jddd�dS)Nr�r
rrrr
r
r�$test_nargs_remainder_metavar_length1 sz;TestAddArgumentMetavar.test_nargs_remainder_metavar_length1cCs|jddd�dS)Nr�rrrrr
r
r�$test_nargs_remainder_metavar_length2#sz;TestAddArgumentMetavar.test_nargs_remainder_metavar_length2cCs|jddd�dS)Nr�rrrrr
r
r�$test_nargs_remainder_metavar_length3&sz;TestAddArgumentMetavar.test_nargs_remainder_metavar_length3cCs|jddd�dS)N�A...rgrrrr
r
r� test_nargs_parser_metavar_string+sz7TestAddArgumentMetavar.test_nargs_parser_metavar_stringcCs|jdt�d�dS)Nr(rr
rr
r
r�!test_nargs_parser_metavar_length0.sz8TestAddArgumentMetavar.test_nargs_parser_metavar_length0cCs|jddd�dS)Nr(r
rrrr
r
r�!test_nargs_parser_metavar_length11sz8TestAddArgumentMetavar.test_nargs_parser_metavar_length1cCs|jddd�dS)Nr(rrrrr
r
r�!test_nargs_parser_metavar_length24sz8TestAddArgumentMetavar.test_nargs_parser_metavar_length2cCs|jddd�dS)Nr(rrrrr
r
r�!test_nargs_parser_metavar_length37sz8TestAddArgumentMetavar.test_nargs_parser_metavar_length3cCs|jddd�dS)NrNrgrrrr
r
r�test_nargs_1_metavar_string<sz2TestAddArgumentMetavar.test_nargs_1_metavar_stringcCs|jdt�d�dS)NrNrr
rr
r
r�test_nargs_1_metavar_length0?sz3TestAddArgumentMetavar.test_nargs_1_metavar_length0cCs|jddd�dS)NrNr
rrrr
r
r�test_nargs_1_metavar_length1Bsz3TestAddArgumentMetavar.test_nargs_1_metavar_length1cCs|jddd�dS)NrNrrrrr
r
r�test_nargs_1_metavar_length2Esz3TestAddArgumentMetavar.test_nargs_1_metavar_length2cCs|jddd�dS)NrNrrrrr
r
r�test_nargs_1_metavar_length3Hsz3TestAddArgumentMetavar.test_nargs_1_metavar_length3cCs|jddd�dS)Nrrgrrrr
r
r�test_nargs_2_metavar_stringMsz2TestAddArgumentMetavar.test_nargs_2_metavar_stringcCs|jdt�d�dS)Nrrr
rr
r
r�test_nargs_2_metavar_length0Psz3TestAddArgumentMetavar.test_nargs_2_metavar_length0cCs|jddd�dS)Nrr
rrrr
r
r�test_nargs_2_metavar_length1Ssz3TestAddArgumentMetavar.test_nargs_2_metavar_length1cCs|jddd�dS)Nrrrrrr
r
r�test_nargs_2_metavar_length2Vsz3TestAddArgumentMetavar.test_nargs_2_metavar_length2cCs|jddd�dS)Nrrrrrr
r
r�test_nargs_2_metavar_length3Ysz3TestAddArgumentMetavar.test_nargs_2_metavar_length3cCs|jddd�dS)Nrrgrrrr
r
r�test_nargs_3_metavar_string^sz2TestAddArgumentMetavar.test_nargs_3_metavar_stringcCs|jdt�d�dS)Nrrr
rr
r
r�test_nargs_3_metavar_length0asz3TestAddArgumentMetavar.test_nargs_3_metavar_length0cCs|jddd�dS)Nrr
rrrr
r
r�test_nargs_3_metavar_length1dsz3TestAddArgumentMetavar.test_nargs_3_metavar_length1cCs|jddd�dS)Nrrrrrr
r
r�test_nargs_3_metavar_length2gsz3TestAddArgumentMetavar.test_nargs_3_metavar_length2cCs|jddd�dS)Nrrrrrr
r
r�test_nargs_3_metavar_length3jsz3TestAddArgumentMetavar.test_nargs_3_metavar_length3N)3rrr	rrrr	rrrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r)r*r+r,r-r.r/r0r1r2r3r4r5r6r7r8r9r:r;r<r
r
r
rr�s`rc@s4eZdZdZdZdd�Zdd�Zdd�Zd	d
�ZdS)�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	CsFt��}|�t��}|jd|d�W5QRX|�|jjd|j�dS�Nr�rr)	r�r�r�r�rgr�rr5�EXPECTED_RANGE_MESSAGE�rrrhrr
r
r�do_test_range_exceptionusz(TestInvalidNargs.do_test_range_exceptionc	CsFt��}|�t��}|jd|d�W5QRX|�|jjd|j�dSr>)	r�r�r�r�rgr�rr5�EXPECTED_INVALID_MESSAGEr@r
r
r�do_test_invalid_exception{sz*TestInvalidNargs.do_test_invalid_exceptioncCs|jdd�|jdd�dS)Nr�rZabcd)rCrr
r
r�test_nargs_alphabetic�sz&TestInvalidNargs.test_nargs_alphabeticcCs|jdd�dS)Nrr)rArr
r
r�test_nargs_zero�sz TestInvalidNargs.test_nargs_zeroN)	rrr	rBr?rArCrDrEr
r
r
rr=nsr=c@seZdZdd�Zdd�ZdS)�TestImportStarcCs tjD]}|�tt|��qdSr)r��__all__r�r�r�r
r
rr�s
zTestImportStar.testcCs0dd�tt���D�}|�t|�ttj��dS)NcSs0g|](\}}|�d�s|dkst�|�s|�qS)rv�ngettext)�
startswith�inspectZismodule)r=r+rr
r
rr?�s


�zJTestImportStar.test_all_exports_everything_but_modules.<locals>.<listcomp>)rDr�rAr�r@rG)rrAr
r
r�'test_all_exports_everything_but_modules�s
�z6TestImportStar.test_all_exports_everything_but_modulesN)rrr	rrKr
r
r
rrF�srFcs$eZdZ�fdd�Zdd�Z�ZS)�TestWrappingMetavarcs,t���td�|_d}|jjd|d�dS)NZ9this_is_spammy_prog_with_a_long_name_sorry_about_the_namez<http[s]://example:1234>z--proxyrA)r]rr\rhrg)rr<r^r
rr�s
�zTestWrappingMetavar.setUpcCs |j��}|�|t�d��dS)Na(            usage: this_is_spammy_prog_with_a_long_name_sorry_about_the_name
                   [-h] [--proxy <http[s]://example:1234>]

            optional arguments:
              -h, --help            show this help message and exit
              --proxy <http[s]://example:1234>
            )rhrir�rjrk)r�	help_textr
r
r�test_help_with_metavar�s
z*TestWrappingMetavar.test_help_with_metavar)rrr	rrNrbr
r
r^rrL�s
rLcCst�t�it_t�t_dSr)rZrun_unittestrr�r�r�r�r
r
r
r�	test_main�s
rO�__main__)�rJrr&r$rQrjrZunittestr��iorrrrrrr�rr4r:rIrHr[r�r\rBrcr�rdr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrr'r+r-r/r1r2r:r<rIrJrLrNrTrVrZr[r]r^r`rarbrcrdrerhrjrkrmrnrorprqrrrsrtrurvrwrxryr{r}rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�Z	eq_stderrr�r�r�r�r�ZskipIfr�r�r�r�r�r�rr	rrrr'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�rrrrrr,r-r.r2r6r9r;r=r?rBrFrKrLrMrNrOrPrRrTrUrWrYr\r^r_r`rarbrcrkrmrorqrrrwrxr{r�r�r�r�r�r�r�r�r�r�r�r�r�rrr=rFrLrOrr
r
r
r�<module>s�
 q











""�C
i'4&0#+!$-*(),	��������^R$7/4(6,$&"$.
10(+!~-LG%=1*?) 

F1le Man4ger