Your IP : 216.73.216.60


Current Path : /opt/alt/python39/lib64/python3.9/test/__pycache__/
Upload File :
Current File : //opt/alt/python39/lib64/python3.9/test/__pycache__/test_argparse.cpython-39.opt-1.pyc

a

XC?h���@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZddl	m
Z
Gdd�dej�ZGdd�de	j�ZGdd	�d	e�ZGd
d�de�ZGdd
�d
e�ZGdd�de�Zdd�ZGdd�de
j�ZGdd�de�ZefZedei�ZGdd�de�ZGdd�de�ZGdd�de�Z Gdd�de�Z!Gdd �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/d0�d0e�Z*Gd1d2�d2e�Z+Gd3d4�d4e�Z,Gd5d6�d6e�Z-Gd7d8�d8e�Z.Gd9d:�d:e�Z/Gd;d<�d<e�Z0Gd=d>�d>e�Z1Gd?d@�d@e�Z2GdAdB�dBe�Z3GdCdD�dDe�Z4GdEdF�dFe�Z5GdGdH�dHe�Z6GdIdJ�dJe�Z7GdKdL�dLe�Z8GdMdN�dNe�Z9GdOdP�dPe�Z:GdQdR�dRe�Z;GdSdT�dTe�Z<GdUdV�dVe�Z=GdWdX�dXe�Z>GdYdZ�dZe�Z?Gd[d\�d\e�Z@Gd]d^�d^e�ZAGd_d`�d`e�ZBGdadb�dbe�ZCGdcdd�dde�ZDGdedf�dfe�ZEGdgdh�dhe�ZFGdidj�dje�ZGGdkdl�dle�ZHGdmdn�dne�ZIGdodp�dpe�ZJGdqdr�dre�ZKGdsdt�dte�ZLGdudv�dve�ZMGdwdx�dxe�ZNGdydz�dze�ZOGd{d|�d|e�ZPGd}d~�d~e�ZQGdd��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�e�ZnGd�d��d�e�ZoGd�d��d�e�ZpGd�d��d�ee�ZqGd�d��d�ee�ZrGd�d„d�e�Zse�Zte�ZuGd�dĄdăZvevdŃZwevdƃZxevdǃZyevdȃZzevdɃZ{evdʃZ|Gd�d̄d�e�Z}Gd�d΄d�ee�Z~Gd�dЄd�ee�ZGd�d҄d�ee�Z�Gd�dԄd�e�Z�e	��e�edՃ�o.e���dkd֡Gd�d؄d�ee��Z�e	��e�edՃ�o`e���dkd֡Gd�dڄd�ee��Z�e	��e�edՃ�o�e���dkd֡Gd�d܄d�ee��Z�e	��e�edՃ�o�e���dkd֡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�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��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�e�Z�G�d	�d
��d
e�e�Z�G�d�d��de�e�Z�G�d
�d��de�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�e��Z�G�d�d��de�e��Z�G�d�d��de�e��Z�G�d�d��de�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�efZe��d'ei�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�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)�support)�mockcs*eZdZdZd�fdd�	Zdd�Z�ZS)	�StdIOBufferz�Replacement for writable io.StringIO that behaves more like real file

    Unlike StringIO, provides a buffer attribute that holds the underlying
    binary data, allowing it to replace sys.stdout/sys.stderr in more
    contexts.
    ��
cs,|�d�}t�jt�t�|��d|d�dS)N�utf-8)�newline)�encode�super�__init__�io�BufferedWriter�BytesIO)�selfZ
initial_valuer��	__class__��7/opt/alt/python39/lib64/python3.9/test/test_argparse.pyrs
�zStdIOBuffer.__init__cCs|��|jj���d�S)Nr)�flush�buffer�raw�getvalue�decode�rrrrr szStdIOBuffer.getvalue)rr)�__name__�
__module__�__qualname__�__doc__rr�
__classcell__rrrrrsrc@seZdZdd�ZdS)�TestCasecCs t��}d|d<|�|j�dS)NZ80�COLUMNS)r�EnvironmentVarGuard�
addCleanup�__exit__�r�envrrr�setUp'szTestCase.setUpN)rrrr&rrrrr%src@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TempDirMixincCs$t��|_t��|_t�|j�dS�N)�tempfileZmkdtemp�temp_dir�os�getcwd�old_dir�chdirrrrrr&2s

zTempDirMixin.setUpcCs^t�|j�tj|jdd�D].\}}}|D]}t�tj�|j|�tj	�q*qt
�|jd�dS)NF)�topdownT)r+r.r-�walkr*�chmod�path�join�stat�S_IWRITE�shutilZrmtree)r�root�dirs�files�namerrr�tearDown7s
zTempDirMixin.tearDowncCsHtj�|j|�}t|d��}|�|�Wd�n1s:0Y|S)N�w)r+r2r3r*�open�write)r�filenameZ	file_path�filerrr�create_writable_file>s(z!TempDirMixin.create_writable_filecCst�|�|�tj�dSr()r+r1rAr4�S_IREAD)rr?rrr�create_readonly_fileDsz!TempDirMixin.create_readonly_fileN)rrrr&r;rArCrrrrr'0sr'c@seZdZdd�ZdS)�SigcOs||_||_dSr()�args�kwargs�rrErFrrrrIszSig.__init__N�rrrrrrrrrDGsrDc@s$eZdZdd�Zdd�Zdd�ZdS)�NScKs|j�|�dSr()�__dict__�update)rrFrrrrPszNS.__init__cCs4t|j���}d�dd�|D��}dt|�j|fS)Nz, cSsg|]}d|�qS)z%s=%rr)�.0�tuprrr�
<listcomp>U�zNS.__repr__.<locals>.<listcomp>z%s(%s))�sortedrJ�itemsr3�typer)rZsorted_itemsZ	kwarg_strrrr�__repr__SszNS.__repr__cCst|�t|�kSr()�vars�r�otherrrr�__eq__Xsz	NS.__eq__N)rrrrrSrWrrrrrINsrIc@seZdZddd�ZdS)�ArgumentParserErrorNcCs,t�||||�||_||_||_||_dSr()�	Exceptionr�message�stdout�stderr�
error_code)rrZr[r\r]rrrr^s
zArgumentParserError.__init__)NNNrHrrrrrX\srXc
Osjttjt�sttjt�r&||i|��Stj}tj}t�t_t�t_�zz�||i|��}tt|��D]�}t||�}|tjur�t|||�qb|tjj	ur�t||t|dt
��qb|tjur�t|||�qb|tjj	urbt||t|dt��qb|WW|t_|t_St�yF}z6|j
}	tj��}
tj��}td|
||	�d�WYd}~n
d}~00W|t_|t_n|t_|t_0dS)Nr�
SystemExit)�
isinstance�sysr\rr[�listrT�getattr�setattrr�BIN_STDOUT_SENTINEL�BIN_STDERR_SENTINELr^�coderrX)�
parse_argsrErFZ
old_stdoutZ
old_stderr�result�key�attr�erfr[r\rrr�stderr_to_parser_errorfsH


�

���rlcs4eZdZ�fdd�Z�fdd�Z�fdd�Z�ZS)�ErrorRaisingArgumentParsercs"tt|�j}t|g|�Ri|��Sr()r
rmrgrl)rrErFrgrrrrg�sz%ErrorRaisingArgumentParser.parse_argscs"tt|�j}t|g|�Ri|��Sr()r
rm�exitrl)rrErFrnrrrrn�szErrorRaisingArgumentParser.exitcs"tt|�j}t|g|�Ri|��Sr()r
rm�errorrl)rrErFrorrrro�sz ErrorRaisingArgumentParser.error)rrrrgrnrorrrrrrm�srmc@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|ji|j��qdS)z(Add all arguments directly to the parserN)�add_argumentrErF)�parser�argument_signatures�sigrrr�	no_groups�sz1ParserTesterMetaclass.__init__.<locals>.no_groupscSs,|�d�}|D]}|j|ji|j��qdS)z4Add all arguments under a single group in the parser�fooN)�add_argument_grouprtrErF)rurv�grouprwrrr�	one_group�s
z1ParserTesterMetaclass.__init__.<locals>.one_groupcSs8t|�D]*\}}|�d|�}|j|ji|j��qdS)z0Add each argument in its own group to the parserzfoo:%iN)�	enumeraterzrtrErF)rurv�irwr{rrr�many_groups�sz3ParserTesterMetaclass.__init__.<locals>.many_groupscSs
|�|�S)z#Parse the args by passing in a list)rg)rurErrr�listargs�sz0ParserTesterMetaclass.__init__.<locals>.listargscSs4tj}|dg|t_z|��W|t_S|t_0dS)z(Parse the args by defaulting to sys.argvrN)r`�argvrg)rurEZold_sys_argvrrr�sysargs�s�z/ParserTesterMetaclass.__init__.<locals>.sysargsc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
z0ParserTesterMetaclass.__init__.<locals>.AddTestsc	Ss�||_||_|jj}|jj}|j|jfD]T}|j}|||f}d�|�}	|fdd�}
z
|	|
_WntynYn0t||	|
�q(dS)N�_cSs||�dSr(r�r�	test_funcrrr�wrapper�szJParserTesterMetaclass.__init__.<locals>.AddTests.__init__.<locals>.wrapper)�_add_arguments�_parse_argsr�
test_failures�test_successesr3�	TypeErrorrc)rZ
tester_cls�
add_argumentsrgZadd_arguments_nameZparse_args_namer�Z	func_name�names�	test_namer�rrrr�s


z9ParserTesterMetaclass.__init__.<locals>.AddTests.__init__cSs2|jj}|jj}|j|i|��}|�||j�|Sr()rrrErFrsr�rv)r�testerrErFrurrr�_get_parser�s
z<ParserTesterMetaclass.__init__.<locals>.AddTests._get_parserc	SsZ|�|�}|jD]D}|��}|jt|d��|�|�Wd�q1sJ0YqdS)N)�msg)r��failures�split�assertRaisesrXrg)rr�ru�args_strrErrrr��s


z>ParserTesterMetaclass.__init__.<locals>.AddTests.test_failurescSsH|�|�}|jD]2\}}t|t�r*|��}|�||�}|�||�qdSr()r��	successesr_�strr�r��assertEqual)rr�rurE�expected_nsZ	result_nsrrrr��s

z?ParserTesterMetaclass.__init__.<locals>.AddTests.test_successesN)rrrrr�r�r�rrrr�AddTests�sr�)�hasattrrDrrrmrs�object)�clsr:�bases�bodydictrxr|rr�r�r�r�rgrrrr�s

	-zParserTesterMetaclass.__init__N)rrrrrrrrrrp�srprqc@sbeZdZdZed�gZgd�Zdedd�fdedd�fd	edd�fd
edd�fdedd�fgZdS)
�TestOptionalsSingleDash�1Test an Optional with a single-dash option string�-x)r��a�--foo�-x --fooz-x -yrN��x�-x ar��-xaz-x -1�-1z-x-1�	rrrrrDrvr�rIr�rrrrr�s
�r�c@s�eZdZdZeddd�edddd�ed	�gZgd
�Zdedd
d
d�fdedd
d
d�fdedd
dd�fdedd
dd�fdedd
dd�fdedd
dd�fdedd
dd�fdedd
dd�fdeddd
d�fdeddd
d�fdedddd�fdedddd�fgZd
S)�TestOptionalsSingleDashCombinedr�r��
store_true��actionz-yyy�store_const�*�r��const�-z)r�r�r�r�z-x -zz-z -xz-yxz-yz az-yyyxz-yyyzaz-xyzarFN)r��yyy�zT�-zar��-z az-xzaz-xz az-x -zaz-x -z a�-yz-x -yyy -zaz-x -yyy -z ar�rrrrr�!s&
��r�c@sbeZdZdZed�gZgd�Zdedd�fdedd�fd	ed
d�fdedd�fdedd�fgZdS)
�TestOptionalsSingleDashLongzATest an Optional with a multi-character single-dash option string�-foo)r�r�r�z
-foo --fooz-foo -y�-fooarN�ryz-foo ar�z-foo -1r�z-fo a�-f ar�rrrrr�;s
�r�c@s�eZdZdZed�ed�ed�gZgd�Zdedddd�fd	ed
ddd�fded
ddd�fded
ddd�fdedddd�fdedd
dd�fdeddd
d�fgZdS)�&TestOptionalsSingleDashSubsetAmbiguousz=Test Optionals where option strings are subsets of each other�-f�-foobar�-foorab)r�r��-fo�-foo bz-foobz-foobaz-foorarN)�f�foobar�foorabr�r��-fa�-foaZoar�Zooa�	-foobar a�	-foorab ar�rrrrr�Is�r�c@s�eZdZdZed�ed�gZgd�Zdeddd�fded	dd�fd
edd	d�fded	dd�fdedd	d�fd
ed	dd�fdedd	d�fgZdS)� TestOptionalsSingleDashAmbiguousz7Test Optionals that partially match but are not subsetsr�r�)r�r�r�r�r�r�r�rN)r�r�z-foob ar�z-foor az-fooba az-foora ar�r�r�rrrrr�Ys�r�c@sZeZdZdZeddd�gZgd�Zdedd�fd	ed
d�fded
d�fded
d�fgZdS)�TestOptionalsNumericz(Test an Optional with a short opt stringr��one��dest)r�r�z-1 --fooz-1 -yz-1 -1z-1 -2rN)r�z-1 ar�z-1az-1-2�-2r�rrrrr�is�r�c@sbeZdZdZed�gZgd�Zdedd�fdedd�fd	edd�fd
edd�fdedd�fgZdS)
�TestOptionalsDoubleDashz1Test an Optional with a double-dash option stringr�)r�r�r�r�z--foo -xz--foo --barrNr�z--foo ar�z--foo=az
--foo -2.5z-2.5z
--foo=-2.5r�rrrrr�vs
�r�c
@s�eZdZdZeddd�ed�gZgd�Zdedd	d
�fdeddd
�fd
edd	d
�fdedd	d
�fdedd	d
�fdedd	d
�fgZd	S)�#TestOptionalsDoubleDashPartialMatchz7Tests partial matching with a double-dash option string�--badgerr�r�z--bat)�--bar�--b�--ba�--b=2z--ba=4�	--badge 5rFN)�badgerZbatz--bat X�X�--badT�--badg�--badger�rrrrr��s
��r�c@s�eZdZdZeddd�ed�gZgd�Zdedd	d
�fdeddd
�fd
eddd
�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�rFN)r�Zbaz--ba Xr�z--ba=Xr�Tr�r�r�rrrrr��s
��r�c@s�eZdZdZeddd�ed�edddd	�gZgd
�Zdedd
d
d�fdedd
d
d�fdeddd
d�fdeddd
d�fdedd
dd�fdedd
dd�fgZd
S)�TestOptionalsSingleDoubleDashz<Test an Optional with single- and double-dash option stringsr�r�r�r��-bazr�r�r�)r��-fbarz-fbazz-bazf�-b B�BrFN�r��bar�bazTz--ba Br�z
-f --bar Bz-f -bz-ba -fr�rrrrr��s
��r�c@s�eZdZdZeddd�Zeddd�ed�ed	d
dd�gZgd
�Zdedddd�fdedddd�fdedddd�fdedddd�fdedddd�fdedddd�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/helprNr�T�::ba Br��
+f ::bar B�+f /b�/ba +f�
rrrrrDrrrvr�rIr�rrrrr��s
��r�c@s�eZdZdZeddd�Zeddd�ed�ed	d
dd�gZgd
�Zdedddd�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�rFNr�r�r�r�r�r�r�rrrrr��s
��r�c	@s�eZdZdZeddd�Zeddd�eddd�ed	dd�gZgd
�Zdedddd�fded
ddd�fded
d
dd�fded
d
d
d�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�rrrrr��s


��r�c@sleZdZdZedddddd�gZgd�Zd	ed
d�fdedd�fdedd�fdedd�fdedd�fgZd
S)�TestOptionalsShortLongz<Test a combination of single- and double-dash option strings�-vz	--verbosez-nz--noisyr�r�)z
--x --verbosez-Nr�z-v xrF)�verboseTNr�rrrrr��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_barrz--baz g�gz--foo-bar h --baz i�hr~z--baz j --foo-bar k�k�jr�rrrrr
s�rc@sXeZdZdZed�eddd�gZdgZdeddd	�fd
eddd	�fdedd
d	�fgZdS)�TestOptionalsDefaultz*Tests specifying a default for an Optionalr�r�r���defaultr�rN�r�r�z-xxr�z-yyr�r�rrrrrs�rc@s>eZdZdZed�gZddgZdedd�fdedd�fgZdS)�TestOptionalsNargsDefaultz7Tests not specifying the number of args for an Optionalr�r�rNr�r�r�rrrrr&s
�rc@sDeZdZdZeddd�gZddgZdedd�fd	edgd�fgZdS)
�TestOptionalsNargs1z&Tests specifying 1 arg for an Optionalr����nargsr�rNr�r�r�rrrrr1s�rc@sFeZdZdZeddd�gZgd�Zdedd�fd	egd
�d�fgZdS)�TestOptionalsNargs3z'Tests specifying 3 args for an Optionalr��r)r�r�r��-x a b�a -x�a -x brNr�z-x a b c�r��b�cr�rrrrr<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)rrRr�r	�2rN�T�r<r�r�r�z-w 2z-x 2z-y 2z-z 2��
rrrrrD�intrvr�rIr�rrrrrGs"
��rc@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�rNr
r�rr�-y a�-y a br�rrrrr#^s
��r#c	@s�eZdZdZeddd�edddd�gZgd�Zd	ed
dd�fded
gdd�fded
dgdd�fded
d
gd�fded
d
dgd�fgZd
S)�TestOptionalsNargsOneOrMorez>Tests specifying args for an Optional that accepts one or morer��+rr�rr)r�r�r�rza -y brNr
r�r�rrr&r'r�rrrrr(qs
��r(c
@s�eZdZdZeddd�edeed�d�gZgd�Zd	e	d
d
d�fde	d
d
d�fde	dd
d�fde	d
dd�fde	d
dd�fde	ddd�fgZ
d
S)�TestOptionalsChoicesz,Tests specifying the choices for an Optionalr��abc��choicesz-g��rRr-)r�z-f dz-fadz-gaz-g 6rN)r�rr�r�z-f crz-g 0rz-g 03rz-fb -g4r��rrrrrDr"�rangervr�rIr�rrrrr*�s
��r*c@sDeZdZdZededd�gZddgZdedd	�fd
edd	�fgZ	dS)
�TestOptionalsRequiredz)Tests an optional action that is requiredr�T�rR�requiredr�r�-x 1r
r�z-x42r�Nr!rrrrr3�s��r3c@sBeZdZdZeddd�gZddgZdedd	�fd
edd	�fgZdS)�TestOptionalsActionStorez&Tests the store action for an Optionalr��storer�r�rrNr�z-xfooryr�rrrrr7�s�r7c@sBeZdZdZedded�gZdgZdedd�fdeed�fgZ	dS)	�TestOptionalsActionStoreConstz,Tests the store_const action for an Optionalr�r�r�r�rN�r�)
rrrrrDr�rvr�rIr�rrrrr9�s�r9c@sBeZdZdZeddd�gZgd�Zdedd�fded	d�fgZd
S)�TestOptionalsActionStoreFalsez,Tests the store_false action for an Optionalr��store_falser�)r�r�r�rT)r�FNr�rrrrr;�s�r;c@sBeZdZdZeddd�gZgd�Zdedd�fded	d�fgZd
S)�TestOptionalsActionStoreTruez+Tests the store_true action for an Optionalz--appler�r�)r�z	--apple=bz	--apple brF)ZappleTNr�rrrrr=�s�r=c@speZdZdZedejd�gZddgZde	dd�fde	d	d�fd
e	dd�fde	dd�fd
e	d	d�fgZ
dd�ZdS)�TestBooleanOptionalActionzTests BooleanOptionalActionr�r�z	--foo barz	--foo=barrNr�T�--no-fooFz--foo --no-fooz--no-foo --foocCsZt��}|�t��"}|jddtjd�Wd�n1s:0Y|�dt|j��dS)Nr�T�r�r�z*got an unexpected keyword argument 'const')	�argparse�ArgumentParserr�r�rt�BooleanOptionalAction�assertInr��	exception�rru�cmrrr�
test_const�s0z$TestBooleanOptionalAction.test_const)rrrrrDrArCrvr�rIr�rHrrrrr>�s�r>c@sDeZdZdZeddejd�gZdgZde	dd�fde	dd�fgZ
d	S)
�!TestBooleanOptionalActionRequiredz$Tests BooleanOptionalAction requiredr�T)r5r�rr�r?FN)rrrrrDrArCrvr�rIr�rrrrrI�s��rIc@sTeZdZdZeddd�gZgd�Zdedd�fd	ed
gd�fded
dgd�fgZdS)
�TestOptionalsActionAppend�'Tests the append action for an Optionalr�appendr��r�r�a --baz�	--baz a brN�r��--baz ar��--baz a --baz brr�rrrrrJ�s�rJc@s\eZdZdZedddgd�gZgd�Zdedgd�fd	edd
gd�fdegd�d�fgZd
S)�$TestOptionalsActionAppendWithDefaultrKrrLr��r�r	rMrrPrQr�rR)r�r�rNr�rrrrrS�s�rSc@sfeZdZdZedded�edddd�gZgd	�Zd
edd�fdeegd�fd
eededgd�fgZ	dS)�TestOptionalsActionAppendConst�-Tests the append_const action for an Optional�-b�append_constr��-crLr�r�r��r�rYza -cz-bxz-b xrN�r�-b -cx -b -cyzr��yz�
rrrrrDrYrvr�rIr�rrrrrUs��rUc	@speZdZdZeddedgd�edddd	�gZgd
�Zdedgd�fdedegd�fd
edededgd�fgZ	dS)�)TestOptionalsActionAppendConstWithDefaultrVrWrXr�)r�r�r	rYrLrrZr[rr\r]r�r^Nr_rrrrr`s��r`c@sBeZdZdZeddd�gZgd�Zdedd�fded	d�fgZdS)
�TestOptionalsActionCountz&Tests the count action for an Optionalr��countr�)r�r�z-x bz	-x a -x brNr�r
r�rrrrra"s�rac	@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--foobrNF)ryZfoobazZfooblez--foo 7�7z	--fooba ar�z--foobl --foo grTr�rrrrrc-s
��rcc@speZdZdZedd�Zed�eddd�ed�gZgd	�Zd
edddd�fd
edddd�fdedddd�fgZ	dS)�%TestOptionalsDisallowLongAbbreviation�1Do not allow abbreviations of long options at allF��allow_abbrevr�z--foodler�r�z--foonly)z-foon 3z--foon 3z--foodz--food --foo 2rN�ryZfoodleZfoonlyz--foo 3�3z--foonly 7 --foodle --foo 2rTrdr�rrrrre>s

��rec@sreZdZdZeddd�Zed�eddd�ed	�gZgd
�Zdedddd
�fdedddd
�fdedddd
�fgZ	dS)�0TestOptionalsDisallowLongAbbreviationPrefixCharszBDisallowing abbreviations works with alternative prefix charactersr)F�r�rhz++fooz++foodler�r�z++foonly)z+foon 3z++foon 3z++foodz++food ++foo 2rNriz++foo 3rjz++foonly 7 ++foodle ++foo 2rTrdr�rrrrrkOs
��rkc
@s�eZdZdZedd�Zed�eddd�gZddgZd	ed
d
d�fded
d
d�fdedd
d�fded
dd�fded
dd�fdeddd�fgZ	d
S)�/TestDisallowLongAbbreviationAllowsShortGroupingrfFrgz-rrYrbr�z-c -rrN��rrz-rar�z-rcc�ccz-ccr z-cc -raz-ccrccr�rrrrrm`s

��rmc
@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=Falser)Frlz+rz+crbr�z+c +rrNrnz+rar�z+rccrpz+ccr z+cc +raz+ccrccr�rrrrrqss
��rqc@s2eZdZdZed�gZgd�Zdedd�fgZdS)�TestPositionalsNargsNonez,Test a Positional that doesn't specify nargsry�rr��a br�r�Nr�rrrrrr�s

�rrc@s8eZdZdZeddd�gZgd�Zdedgd�fgZdS)	�TestPositionalsNargs1z.Test a Positional that specifies an nargs of 1ryr
rrsr�r�Nr�rrrrru�s
�ruc@s:eZdZdZeddd�gZgd�Zdeddgd	�fgZd
S)�TestPositionalsNargs2z.Test a Positional that specifies an nargs of 2ryr r)rr�r��a b crtr�rr�Nr�rrrrrv�s
�rvc@sReZdZdZeddd�gZdgZdegd�fdedgd�fd	edd
gd�fgZdS)�TestPositionalsNargsZeroOrMorez0Test a Positional that specifies unlimited nargsryr%rr�rr�r�rtrNr�rrrrrx�s�rxc@sTeZdZdZedddd�gZdgZdedd�fd	ed	gd�fd
ed	dgd�fgZdS)
�%TestPositionalsNargsZeroOrMoreDefaultz>Test a Positional that specifies unlimited nargs and a defaultryr%r�rr�rr�r�rtrNr�rrrrry�s�ryc@sHeZdZdZeddd�gZddgZdedgd�fd	edd
gd�fgZdS)�TestPositionalsNargsOneOrMorez2Test a Positional that specifies one or more nargsryr)rrr�r�r�rtrNr�rrrrrz�s�rzc@sBeZdZdZeddd�gZddgZdedd	�fd
ed
d	�fgZdS)�TestPositionalsNargsOptionalzTests an Optional Positionalryrrr�rtrNr�r�r�rrrrr{�s�r{c@sDeZdZdZedddd�gZddgZdedd	�fd
ed
d	�fgZdS)�#TestPositionalsNargsOptionalDefaultz1Tests an Optional Positional with a default valueryrr�rr�rtrr�r�Nr�rrrrr|�s�r|c@sFeZdZdZeddedd�gZgd�Zdedd	�fd
edd	�fgZ	dS)
�,TestPositionalsNargsOptionalConvertedDefaultznTests an Optional Positional with a default value
    that needs to be converted to the appropriate type.
    ryrr)rrRr	)r�rt�1 2rr�r��1r
Nr!rrrrr}�s��r}c@s:eZdZdZed�ed�gZgd�Zdeddd�fgZd	S)
�TestPositionalsNargsNoneNonez-Test two Positionals that don't specify nargsryr�)rr�r�rwrtr�r�ryr�Nr�rrrrr��s
�r�c@s@eZdZdZed�eddd�gZgd�Zdedd	gd
�fgZdS)�TestPositionalsNargsNone1z6Test a Positional with no nargs followed by one with 1ryr�r
r)rr�r�rwrtr�rr�Nr�rrrrr��s
�r�c@sBeZdZdZeddd�ed�gZgd�Zdedd	gd
d�fgZdS)
�TestPositionalsNargs2Nonez8Test a Positional with 2 nargs followed by one with noneryr rr��rr�r�rt�a b c drwr�rrr�Nr�rrrrr�s
�r�c@s`eZdZdZed�eddd�gZddgZdedgd	�fd
eddgd	�fdeddd
gd	�fgZdS)�"TestPositionalsNargsNoneZeroOrMorez>Test a Positional with no nargs followed by one with unlimitedryr�r%rrr�r�r�rtrrwrNr�rrrrr�s�r�c@sReZdZdZed�eddd�gZgd�Zdedd	gd
�fdedd	dgd
�fgZd
S)�!TestPositionalsNargsNoneOneOrMorez@Test a Positional with no nargs followed by one with one or moreryr�r)r�rr�r�rtr�rr�rwrNr�rrrrr�s�r�c@sLeZdZdZed�eddd�gZgd�Zdeddd	�fd
eddd	�fgZdS)� TestPositionalsNargsNoneOptionalz@Test a Positional with no nargs followed by one with an Optionalryr�rr�rr�rwr�Nr�rtrr�rrrrr�%s�r�c@s`eZdZdZeddd�ed�gZddgZdegdd	�fd
edgdd	�fdeddgd
d	�fgZdS)�"TestPositionalsNargsZeroOrMoreNonez@Test a Positional with unlimited nargs followed by one with noneryr%rr�rr�r�r�rtrrwrNr�rrrrr�0s�r�c@sReZdZdZeddd�ed�gZgd�Zdedgd	d
�fdedd	gdd
�fgZd
S)�!TestPositionalsNargsOneOrMoreNonezBTest a Positional with one or more nargs followed by one with noneryr)rr�r�rtr�rr�rwrNr�rrrrr�<s�r�c@sNeZdZdZedddd�ed�gZgd�Zdeddd	�fd
eddd	�fgZdS)
� TestPositionalsNargsOptionalNonezBTest a Positional with an Optional nargs followed by one with noneryrr�rr�r�r�r�rtrNr�rrrrr�Gs�r�c@sZeZdZdZeddd�eddd�gZgd�Zded	d
ggd�fded	d
gd
gd�fgZdS)�TestPositionalsNargs2ZeroOrMorez=Test a Positional with 2 nargs followed by one with unlimitedryr rr�r%r�rtr�rr�rwrNr�rrrrr�Rs�r�c@sHeZdZdZeddd�eddd�gZgd�Zded	d
gdgd�fgZd
S)�TestPositionalsNargs2OneOrMorez?Test a Positional with 2 nargs followed by one with one or moreryr rr�r))rr�r�rtrwr�rrr�Nr�rrrrr�]s
�r�c@sXeZdZdZeddd�eddd�gZgd�Zded	d
gdd�fd
ed	d
gdd�fgZdS)�TestPositionalsNargs2Optionalz7Test a Positional with 2 nargs followed by one optionalryr rr�r)rr�r�r�rtr�rNr�rwrr�rrrrr�gs�r�c@sjeZdZdZeddd�eddd�gZddgZd	egd	gd
�fded	gdgd
�fd
ed	dgdgd
�fgZdS)�TestPositionalsNargsZeroOrMore1z=Test a Positional with unlimited nargs followed by one with 1ryr%rr�r
rr�r�r�rtrrwrNr�rrrrr�rs�r�c@sZeZdZdZeddd�eddd�gZgd�Zded	gd
gd�fded	d
gd
gd�fgZdS)�TestPositionalsNargsOneOrMore1z?Test a Positional with one or more nargs followed by one with 1ryr)rr�r
r�rtr�rr�rwrNr�rrrrr�~s�r�c@sTeZdZdZeddd�eddd�gZgd�Zded	dgd
�fdeddgd
�fgZd	S)
�TestPositionalsNargsOptional1z?Test a Positional with an Optional nargs followed by one with 1ryrrr�r
r�r�Nr�rtrr�rrrrr��s�r�c@s`eZdZdZed�eddd�eddd�gZgd�Zd	ed
gdgd�fd
ed
dgdgd�fgZdS)�#TestPositionalsNargsNoneZeroOrMore1z=Test three Positionals: no nargs, unlimited nargs and 1 nargsryr�r%rr�r
r�rtr�r�ryr�r�rwrNr�rrrrr��s

��r�c@sdeZdZdZed�eddd�eddd�gZgd�Zd	ed
dgdgd
�fded
ddgdgd
�fgZdS)�"TestPositionalsNargsNoneOneOrMore1z?Test three Positionals: no nargs, one or more nargs and 1 nargsryr�r)rr�r
)rr�r�rrwr�rrr�r��dNr�rrrrr��s

��r�c@s`eZdZdZed�edddd�eddd	�gZgd
�Zdeddd
gd�fdedd
dgd�fgZdS)�!TestPositionalsNargsNoneOptional1z;Test three Positionals: no nargs, optional narg and 1 nargsryr�r��?rr�r
rr�rtr�rr�rwrNr�rrrrr��s
��r�c@s`eZdZdZeddd�edddd�gZdd	gZd
eddd�fd
ed
dd�fded
dd�fgZdS)�$TestPositionalsNargsOptionalOptionalzTest two optional nargsryrrr�r�rr�rwrNr�r�rtrr�rrrrr��s
��r�c@speZdZdZeddd�eddd�gZdgZded	gd
�fdedgd
�fdedd
gd
�fdedd
dgd
�fgZd	S)�&TestPositionalsNargsOptionalZeroOrMorez1Test an Optional narg followed by unlimited nargsryrrr�r%r�rNr�r�rtrrwrr�rrrrr��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 nargsryrrr�r)rr�r�Nr�rtrrwrr�rrrrr��s�r�c@sFeZdZdZeded�d�gZgd�Zdedd�fdedd�fgZ	d	S)
�TestPositionalsChoicesStringz&Test a set of single-character choicesrZabcdefgr,�rr�rrZefr��rrN)
rrrrrD�setrvr�rIr�rrrrr��s�r�c@sHeZdZdZedeed�d�gZgd�Zde	dd�fd	e	d
d�fgZ
dS)�TestPositionalsChoicesIntzTest a set of integer choicesr�r/r��4r0r��15�Nr1rrrrr��s�r�c@sJeZdZdZeddd�edddd�gZgd�Zded	d
dggd�fgZd
S)�TestPositionalsActionAppendzTest the 'append' actionrrLr�r )r�rr�rwr�rrr�Nr�rrrrr��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�rrz-4r�r��r�r�r�z-315rNFr
r�Tz-4 ar�rrrrr�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�rrz-k4r�r�r�z-k3rNFr
r�r�Tz-k4 ar�rrrrr�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�rrr�z--yyyr�r�rNr
za badgerz	-a badgerz--yyy=a badgerz--yyy=-a badger)rrrrDrvr�rIr�rrrrr�0s
��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�rr�)r�rr�r)r�r�)r�rRr	z-+-r�r�r�r�z+ -rNFr�z- Xr�z+ -3���Tz- ===z===)
rrrrDrrr"rvr�rIr�rrrrr�Cs
��r�c@s�eZdZdZeddd�eddd�gZgZdedgd�fdeggd�fd	ed
ggd�fded
gdgd�fd
edd
gd�fd
egd
gd�fdedgd
gd�fgZdS)�TestNargsZeroOrMorer$r�r%rr�rNr
r�r�z	-x a -- brrrr�rrrrr�Vs�r�c	@s~eZdZdZed�eddd�ed�gZgd�Zdedgd	d
�fdedgdd
�fd
edgd�d	d
�fdedddgd	d
�fgZd	S)�TestNargsRemainderz2Tests specifying a positional with nargs=REMAINDERr�r��...rr�)rr�z-z Zr�Nr�z-z Z X�Z�
X A B -z Z)�Ar�r�r�z	X Y --foo�Yr�r�rrrrr�fs�r�c@s�eZdZdZeded�ededd�eddd	�gZgd
�Zdeddgd
�fdeddgd
�fdedddgd
�fdeddgd
�fdeddgd
�fdeddgd
�fdedddgd
�fdedddgd
�fdedddgd
�fdedddgd
�fdedddgd
�fgZ	dS)�TestOptionLikez.Tests options that may or may not be argumentsr��rRz-3r�)rRr�r�r%r)
r�z-y2.5r�z-x -az-x -3z-x -3.5z-3 -3.5z-x -2.5z	-x -2.5 az-3 -.5za x -1z-x -1 az-3 -1 arNr�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)
rrrrrD�floatrvr�rIr�rrrrr�ss$

��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 defaultsryrrr�r%rr�rTr�rr�r�rtrr�TrPrN�ryr�rOr�N)rrrrrDrA�SUPPRESSrvr�rIr�rrrrr��s��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�Zargument_defaultryrrr�r%rr�r�r�rr�r�rtrr�TrPrNr�rOr�N)rrrrrDrAr�rrrvr�rIr�rrrrr��s


��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�ryrrr�r%rr�r�r�r)ryr�r�r�r�rtrTrNrONr�rrrrr��s



��r�cs�eZdZdZ�fdd�Zedd�Zed�ed�edd	d
�gZgd�Zde	d
ddgd�fde	ddddgd�fde	d
ddgd�fde	d
ddgd�fde	ddddgd�fde	ddddgd�fgd�e	dddgd�fgZ
�ZS)�TestArgumentsFromFile�"Test reading arguments from a filec	s\tt|���gd�}|D]<\}}t|d��}|�|�Wd�q1sL0YqdS)N)��helloz
hello world!
)�	recursivez-a
A
@hello)Zinvalidz@no-such-path
r<)r
r�r&r=r>�rZ
file_textsr2�textr@rrrr&�s
zTestArgumentsFromFile.setUp�@�Zfromfile_prefix_chars�-ar�r�r)r)rrWr�z@invalidz@missingzX YNr�r�)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�)r�rr�r�r)rrrrr&rDrrrvr�rIr�rrrrrr��s 

��r�csdeZdZdZ�fdd�ZGdd�de�ZeZedd�Z	edd	d
�gZ
gZdegd�d
�fgZ
�ZS)�TestArgumentsFromFileConverterr�c	sZtt|���dg}|D]<\}}t|d��}|�|�Wd�q1sJ0YqdS)Nr�r<)r
r�r&r=r>r�rrrr&�s�z$TestArgumentsFromFileConverter.setUpc@seZdZdd�ZdS)z>TestArgumentsFromFileConverter.FromFileConverterArgumentParserccs"|��D]}|��sq|VqdSr()r��strip)rZarg_line�argrrr�convert_arg_line_to_args�szWTestArgumentsFromFileConverter.FromFileConverterArgumentParser.convert_arg_line_to_argsN)rrrr�rrrr�FromFileConverterArgumentParser�sr�r�r�r�r)rr�)r�zworld!r�r:)rrrrr&rmr�rsrDrrrvr�rIr�rrrrrr��s	

��r�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�TestFileTypeReprcCst�d�}|�dt|��dS)Nroz
FileType('r')�rA�FileTyper��repr�rrRrrr�test_rs
zTestFileTypeRepr.test_rcCs t�dd�}|�dt|��dS)N�wbr
zFileType('wb', 1)r�r�rrr�	test_wb_1szTestFileTypeRepr.test_wb_1cCs"tjddd�}|�dt|��dS)Nro�latin_1��encodingz!FileType('r', encoding='latin_1')r�r�rrr�test_r_latinszTestFileTypeRepr.test_r_latincCs$tjdddd�}|�dt|��dS)Nr<�big5�ignore)r��errorsz/FileType('w', encoding='big5', errors='ignore')r�r�rrr�test_w_big5_ignores�z#TestFileTypeRepr.test_w_big5_ignorecCs$tjdddd�}|�dt|��dS)Nror
�replace�r�z"FileType('r', 1, errors='replace')r�r�rrr�test_r_1_replace!sz!TestFileTypeRepr.test_r_1_replaceN)rrrr�r�r�r�r�rrrrr�s
r�c@seZdZdd�Zdd�ZdS)�StdStreamComparercCs8t�|�|_|dkrt|_n|dkr,t|_nt�|_dS)N�
stdout.buffer�
stderr.buffer)�operator�
attrgetterrbrd�
backupattrrer�)rrjrrrr+szStdStreamComparer.__init__cCs2z||�t�kWSty,||jkYS0dSr()rbr`�AttributeErrorr�rUrrrrW9szStdStreamComparer.__eq__N�rrrrrWrrrrr�*sr��stdinr[r\zstdin.bufferr�r�c@s eZdZiZdd�Zdd�ZdS)�RFilecCs
||_dSr(�r:�rr:rrrrKszRFile.__init__cCs`||jvr|j|}n|��}|j|<|��t|t�sD|�d�}|j|jkoZ|kSS)N�ascii)�seen�read�closer_r�rr:�rrVr�rrrrWNs


zRFile.__eq__N)rrrr�rrWrrrrr�Hsr�c	s�eZdZdZ�fdd�Zede��d�ede�d�d�gZgd�Z	d	e
d
ed	�d�fde
ed	�ed
�d�fde
ed	�ed
�d�fde
eed�fde
d
ed�d�fgZ
�ZS)�
TestFileTypeR�8Test the FileType option/argument type for reading filesc	sftt|���dD]D}ttj�|j|�d��}|�|�Wd�q1sL0Yq|�	d�dS)Nr�r<�readonly)
r
r�r&r=r+r2r3r*r>rC�r�	file_namer@rrrr&\s
*zTestFileTypeR.setUpr�r�rro)r�rznon-existent-file.txtryN�r�r�
-x foo barr��
bar -x foo�-x - -r�)rrrrr&rDrAr�rvr�rIr��eq_stdinr�rrrrrr�Ys��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
rr&r=r+r2r3r*r>r�)rr@rrrr&rs
zTestFileTypeDefaults.setUprYrozno-file.txt�rRr	rz-c goodr)r)rrrrr&rDrAr�rvr�rIr�r�rrrrrrps�rcs�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	s\tt|���dD]D}ttj�|j|�d��}|�|�Wd�q1sL0YqdS)Nr�r<)	r
rr&r=r+r2r3r*r>r�rrrr&�szTestFileTypeRB.setUpr��rbr�rrryNr�r�r�rr)rrrrr&rDrAr�rvr�rIr��	eq_bstdinr�rrrrrr�s��rc@s"eZdZe�Zdd�Zdd�ZdS)�WFilecCs
||_dSr(r�r�rrrr�szWFile.__init__cCsL||jvr@d}d|jvr"|�d�}|�|�|��|j�|�|j|jkS)NzCheck that file is writable.rr�)r��moder	r>r��addr:r�rrrrW�s



zWFile.__eq__N)rrrr�r�rrWrrrrr	�sr	�geteuidznon-root user requiredc	s�eZdZdZ�fdd�Zede�d�d�ede�d�d�gZgd�Z	d	e
d
ed	�d�fde
d
ed�d�fd
e
ed	�ed�d�fde
ed	�ed�d�fde
eed�fgZ
�ZS)�
TestFileTypeWz8Test the FileType option/argument type for writing filescs"t���|�d�|�d�dS�Nr��writable�r
r&rCrArrrrr&�s

zTestFileTypeW.setUpr�r<r�r)r�rr�ryNr�rr�r�rr�rrrrr&rDrAr�rvr�rIr	�	eq_stdoutr�rrrrrr
�s��r
csteZdZdZ�fdd�Zede�d�d�ede�d�d�gZgd�Z	d	e
ed
�ed�d�fd
e
eed�fgZ
�ZS)�
TestFileTypeXzATest the FileType option/argument type for writing new files onlycs"t���|�d�|�d�dSrrrrrrr&�s

zTestFileTypeX.setUpr�r�r�r)r�rr�rr�ryr�r�rrrrrrr�s��rc@s�eZdZdZede�d�d�ede�d�d�gZddgZde	de
d�d	�fd
e	e
d�e
d�d	�fde	e
d�e
d�d	�fd
e	eed	�fgZdS)�TestFileTypeWBz?Test the FileType option/argument type for writing binary filesr�r�r�rrryNr�r�r�rr)
rrrrrDrAr�rvr�rIr	�
eq_bstdoutr�rrrrr�s��rc@s\eZdZdZede�d�d�ede�d�d�gZdee	d�e	d�d	�fd
ee
e
d	�fgZdS)�TestFileTypeXBzHTest the FileType option/argument type for writing new binary files onlyr�Zxbr�rr�ryr�r�rN)rrrrrDrAr�rvrIr	rr�rrrrr�s��rc@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��8}|D]"\}}|d�|jdg|�R�q\Wd�n1s�0YdS)Nr)r���NNr<r
)r<r
NNr�r�)r<rNr�r�r�r�)r�rr�Nr�l1�strict)r<rrrz
builtins.openry)rAr�rZpatchZassert_called_with)rZFTZcases�mrRrErrr�test_open_args�s
�z#TestFileTypeOpenArgs.test_open_argsN)rrrrrrrrrr�src@seZdZdZdd�ZdS)�!TestFileTypeMissingInitializationzx
    Test that add_argument throws an error if FileType class
    object was passed instead of instance of FileType
    cCs`t��}|�t�� }|jdtjd�Wd�n1s80Y|�dtjft|j��dS)Nr�r�z<%r is a FileType class object, instance of it must be passed)	rArBr��
ValueErrorrtr�r�r�rErFrrr�test
s.��z&TestFileTypeMissingInitialization.testN�rrrrrrrrrrsrc@s^eZdZdZeded�eded�gZgd�Zde	ddd	�fd
e	ddd	�fd
e	ddd	�fgZ
dS)�TestTypeCallablez,Test some callables as option/argument typesz--eggsr�r)r�Z42jz--eggs az	--eggs 2iz--eggs=42 42r�gE@)�eggsrz--eggs 2j -- -1.5y@���z1024.675Ng3333��@)rrrrrD�complexr�rvr�rIr�rrrrr!s

��r!c@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�rr'rrrr-sz#TestTypeUserDefined.MyType.__init__cCst|�|jft|�|jfkSr(�rRr'rUrrrrW0sz!TestTypeUserDefined.MyType.__eq__Nr�rrrr�MyType+sr*r�r�rrrr�r��-xf gr�rN)rrrrrr*rDrvr�rIr�rrrrr%(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
||_dSr(r&r(rrrrCszTestTypeClassicClass.C.__init__cCst|�|jft|�|jfkSr(r)rUrrrrWFszTestTypeClassicClass.C.__eq__Nr�rrrr�CAsr-r�r�rrrr�r�r+r�rN)
rrrrr-rDrvr�rIr�rrrrr,>s	

��r,c@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��stringrrr�get_my_typeYsz.TestTypeRegistration.test.<locals>.get_my_typerRZmy_typer�r�r�rz
my_type{1}r
z-x 1 42zmy_type{42})rArB�registerrtr�rgr�rI)rr1rurrrrWs
�
�zTestTypeRegistration.testNr rrrrr.Tsr.c@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.OptionalActionNc
Cs|z:tdd�}|dvrd|_n|dvr,d|_ntd|��Wn0tyj}ztd|��WYd}~n
d}~00t|d	|�dS)
N��?r�)��?r�r )�@r�	value: %szopt_action failed: %sr)rIr��AssertionErrorrXrc�rru�	namespacer'�
option_stringr�rkrrr�__call__ps
"z-TestActionUserDefined.OptionalAction.__call__)N�rrrr<rrrr�OptionalActionnsr>c@seZdZddd�ZdS)z&TestActionUserDefined.PositionalActionNc
Cs�zJtdd�}|dvrd|_n,|dvr,d|_n|dvr<d|_ntd	|��Wn0tyz}ztd
|��WYd}~n
d}~00t|d|�dS)Nr �r�)r�rr4)r
r�)r r5r7zarg_action failed: %sr�)rIrr8rXrcr9rrrr<�s
"z/TestActionUserDefined.PositionalAction.__call__)Nr=rrrr�PositionalAction�sr@z-srr4)r�r�rRr	r�rr )r�rRrr	z-s0.125r5)rr�rr�z
-s 0.625 1r�r
z84 -s2r6rN)rrrrrA�Actionr>r@rDr�r"rvr�rIr�rrrrr3ks ����r3c@s*eZdZdZGdd�dej�Zdd�ZdS)�TestActionRegistrationz5Test a user-defined action supplied by registering itc@seZdZddd�ZdS)zTestActionRegistration.MyActionNcCst||jd|�dS)Nzfoo[%s])rcr�)rrur:�valuesr;rrrr<�sz(TestActionRegistration.MyAction.__call__)Nr=rrrr�MyAction�srDcCs^t��}|�dd|j�|jddd�|�|�dg�tdd��|�|�dg�td	d��dS)
Nr�Z	my_actionr�r�rzfoo[1]r?rzfoo[42])rArBr2rDrtr�rgrI�rrurrrr�s
zTestActionRegistration.testN)rrrrrArArDrrrrrrB�srBc@s6eZdZeddded�gZdZdegd�d�fgZd	S)
�TestActionExtendr��extendr))r�rrRrz--foo f1 --foo f2 f3 f4)�f1�f2Zf3Zf4r�N)	rrrrDr�rvr�rIr�rrrrrF�s
��rFcs�eZdZdZdd�Zd:dd�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�Zd4d5�Zd6d7�Zd8d9�Z�ZS);�TestAddSubparserszTest the add_subparsers methodcOs|jtg|�Ri|��dSr(�r�rXrGrrr�assertArgumentParserError�sz+TestAddSubparsers.assertArgumentParserErrorFNc
Cs�|r0tdd|d�}|j|dddddd	�ntddd
�}|jdddd	�|jdtd
d�ddi}|rzd|d<d|d<nd|d<|jfi|��}|�|j�tdd�}|r�d|d<|r�ddg|d<|jd7i|��}|jdtdd�|jd d!d"d#�td$d�}	|�rd%|	d<|jd8i|	��}
|
jd'd(d)d#�|
jd*td+d,d-�td.d�}|�rVd/|d<|jd9i|��}|jd1td2d�|jd3d4d5d6�|S):N�PROG�main description)�prog�descriptionr�rr ryr��foo help�r��help�rOrPr�r��bar help�rRrSr5FZCOMMAND�metavarZcommands�title�command helprSz
1 description�rPz1 helpZ1alias1Z1alias2�aliasesrr�zw helpr�r+�x help�r-rSz
2 descriptionz2 helprr�Z123�y helpr�r%zz help)rRrrSz
3 descriptionz3 helprj�tzt help�ur�zu help�rrS)r)r)rj)	rmrtr��add_subparsersrL�dict�
add_parserr"r$)
r�subparser_helpr�r[ruZsubparsers_kwargs�
subparsersZparser1_kwargs�parser1Zparser2_kwargs�parser2Zparser3_kwargsZparser3rrrr��sX�����



zTestAddSubparsers._get_parsercs&t���|��|_|jdd�|_dS)NT)re)r
r&r�ru�command_help_parserrrrrr&s

zTestAddSubparsers.setUpcCs&dD]}|��}|�|jj|�qdS)N)rr�za az0.5 az0.5 1z0.5 1 -yz0.5 2 -w)r�rLrurg)rr�rErrr�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���tdddgd�d��dS)N�0.5 1 b -w 7Fr��r�ryr�r<r�z0.25 --foo 2 -y 2 3j -- -1jTr4ry@y��)ryr�r�r�z--foo 0.125 1 cr5rz-1.5 3 11 -- a --foo 7 -- br#�)r�r�rd�--r)ryr�r_r`)r�rurgr�rIrrrr�test_parse_argss ����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�gd�f�dS)NrkFr�rlrrmz0.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 Z)z-Wz-Xr�r�)r�ru�parse_known_argsr�rIrrrr�test_parse_known_args's(�����z'TestAddSubparsers.test_parse_known_argscCsXt�}|jddd�|jdd�}|�d�}|�d�|�tddd	d
�|�d����dS)Nr�r�r�r�r�rr�Frr�r~)rmrtrbrdr�rIrgr�)rrurfrgrrr�	test_dest=s

�zTestAddSubparsers.test_destcCs,|�dg�}|�|jd�|�|jd�dS)N�runr)rgr��commandrL)rru�retrrr�_test_required_subparsersFsz+TestAddSubparsers._test_required_subparserscCs0t�}|jdd�}d|_|�d�|�|�dS)Nrur�Trt)rmrbr5rdrw�rrurfrrr�&test_required_subparsers_via_attributeNs

z8TestAddSubparsers.test_required_subparsers_via_attributecCs,t�}|jddd�}|�d�|�|�dS)NruT�r�r5rt)rmrbrdrwrxrrr�"test_required_subparsers_via_kwargUs
z4TestAddSubparsers.test_required_subparsers_via_kwargcCs6t�}|jdd�}|�d�|�d�}|�|j�dS)Nrur�rtr�rmrbrdrg�assertIsNoneru�rrurfrvrrr� test_required_subparsers_default[s


z2TestAddSubparsers.test_required_subparsers_defaultcCsnt�}|jdd�}|�d�|�d�|�t��}|�d�Wd�n1sP0Y|�|jjd�dS)NT�r5ryr�rz8error: the following arguments are required: {foo,bar}
$�	rmrbrdr�rXrg�assertRegexrEr\�rrurf�excinforrr�-test_required_subparsers_no_destination_errorcs

(�z?TestAddSubparsers.test_required_subparsers_no_destination_errorcCsnt�}|jdd�}|�d�|�d�|�t��}|�d�Wd�n1sP0Y|�|jjd�dS)NTr�ryr�rPzPerror: argument {foo,bar}: invalid choice: 'baz' \(choose from 'foo', 'bar'\)\n$r�r�rrr�3test_wrong_argument_subparsers_no_destination_erroros

(�zETestAddSubparsers.test_wrong_argument_subparsers_no_destination_errorcCs8t�}|jddd�}|�d�|�d�}|�|j�dS)NruFrzrtrr|r~rrr�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�ru�format_usage�format_help�textwrap�dedentrrrr�	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�r�r�r�r�rErrr�test_help_extra_prefix_chars�s

�z.TestAddSubparsers.test_help_extra_prefix_charscCs6tddd�}|jdddd�|�|��t�d��dS)	NrMrNrTz--non-breakingr<uRhelp message containing non-breaking spaces shall not wrap at non-breaking spacesrRuB            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
        �rmrtr�r�r�r�rErrr�test_help_non_breaking_spaces�s��z/TestAddSubparsers.test_help_non_breaking_spacescCsftddd�}|jddd�|�|��t�d��tddd�}|jdgdd	�|�|��t�d
��dS)NrMrNrTryz    �rSz�            usage: PROG [-h] foo

            main description

            positional arguments:
              foo         

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

            main description

            positional arguments:
              {}          

            optional arguments:
              -h, --help  show this help message and exit
        r�rErrr�test_help_blank�s ��
��z!TestAddSubparsers.test_help_blankcCs6|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
            r�rErrr� test_help_alternate_prefix_chars�s

�z2TestAddSubparsers.test_help_alternate_prefix_charscCs.|�|j��d�|�|j��t�d��dS)Nr�a�            usage: PROG [-h] [--foo] bar {1,2,3} ...

            main description

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

            optional arguments:
              -h, --help  show this help message and exit
              --foo       foo help
            )r�rir�r�r�r�rrrr�test_parser_command_help�s��z*TestAddSubparsers.test_parser_command_helpcCsxtddd�}|jdddd�|jdd	d
�|jddd
d�}|�d�}|�d�}|�|��d�|�|��t�d��dS)NrMrNrTr�r�rQrRr�rUr�ZsubcommandsrYzadditional text)rXrPrSrrz'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
            )	rmrtrbrdr�r�r�r�r�)rrurfrgrhrrr�test_subparser_title_help	s��


�z+TestAddSubparsers.test_subparser_title_helpcCsN|�t�� }|j�|���Wd�n1s00Y|�||jj�dSr()r�rXrurgr�r�rEr[)rr�Z
expected_helprGrrr�_test_subparser_help$	s.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
            �r�r�r�rrrr�test_subparser1_help)	sz&TestAddSubparsers.test_subparser1_helpcCs|�dt�d��dS)Nz5.0 2 -ha            usage: PROG bar 2 [-h] [-y {1,2,3}] [z ...]

            2 description

            positional arguments:
              z           z help

            optional arguments:
              -h, --help  show this help message and exit
              -y {1,2,3}  y help
            r�rrrr�test_subparser2_help7	sz&TestAddSubparsers.test_subparser2_helpc	Cs\|jdd�}|�|�d���tddddd�gf�|�|�d���tddddd�gf�dS)	NT�r[z
0.5 1alias1 bFr�rrmz
0.5 1alias2 b)r�r�rqr�rIrErrr�test_alias_invocationE	s��z'TestAddSubparsers.test_alias_invocationcCs"|jdd�}|�|jd���dS)NTr�z
0.5 1alias3 b)r�rLrgr�rErrr�test_error_alias_invocationP	s�z-TestAddSubparsers.test_error_alias_invocationcCs.|jddd�}d|_|�|��t�d��dS)NT)r[rea            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�r�r�r�rErrr�test_alias_helpU	sz!TestAddSubparsers.test_alias_help)FNF) rrrrrLr�r&rjrprrrsrwryr{rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrJ�s<�
7	&rJc@s(eZdZdZdd�Zdd�Zdd�ZdS)	�TestPositionalsGroupsz@Tests that order of group positionals matches construction ordercCsZt�}|�d�|�d�}|�d�|�d�tdddd�}|�d	���}|�||�dS)
Nryrr�r�rrrjr��1 2 3)rmrtrzrIrgr�r��rrur{�expectedrhrrr�test_nongroup_firsts	s



z)TestPositionalsGroups.test_nongroup_firstcCsZt�}|�d�}|�d�|�d�|�d�tdddd�}|�d	���}|�||�dS)
N�xxxryr�r�rrrjr�r��rmrzrtrIrgr�r�r�rrr�test_group_first}	s



z&TestPositionalsGroups.test_group_firstcCspt�}|�d�}|�d�|�d�|�d�|�d�}|�d�tddd	d
d�}|�d���}|�||�dS)
Nr�ryr�r�r��frellrrrjr�)ryr�r�r�z1 2 3 4r�r�rrr�test_interleaved_groups�	s





z-TestPositionalsGroups.test_interleaved_groupsN)rrrrr�r�r�rrrrr�p	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|jtg|�Ri|��dSr(rKrGrrrrL�	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�rWrz--dr�r�r�r)r
r&rm�wxyz_parentrtrz�abcd_parent�w_parent�z_parent�ab_mutex_parent�add_mutually_exclusive_groupr+r2�basenamer`r��main_program)rZx_group�c_groupr{rrrr&�	s(



zTestParentParsers.setUpcCs2t|jgd�}|�|�d���tdddd��dS)N��parentsz-y 1 2 --w 3rjrr�r<r�r�)rmr�r�rgr�rIrErrr�test_single_parent�	s�z$TestParentParsers.test_single_parentcCs,|�|jj�t|jgd�}|�|j�dS�Nr�)�_test_mutex_abr�rgrmrErrr�test_single_parent_mutex�	sz*TestParentParsers.test_single_parent_mutexcCs0|jg}td|d�}t|gd�}|�|j�dS)NF)r�r�r�)r�rmr�rg�rr�rurrr�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�rr�TrWrY)r�rIrL)rrgrrrr��	sz TestParentParsers._test_mutex_abcCs@|j|jg}t|d�}|�|�d���tddddddd��dS)Nr�z--d 1 --w 2 3 4rjrrr�)r�rr�r<r�r�)r�r�rmr�rgr�rIr�rrr�test_multiple_parents�	s

�z'TestParentParsers.test_multiple_parentsc
Csb|j|jg}t|d�}|�|�d���tdddddd��|�|jd���|�|jd	���dS)
Nr�z
-a --w 2 3TFrrj)r�rr<r�r�z
-a --w 2 3 -bz
-a -b --w 2 3)r�r�rmr�rgr�rIrLr�rrr�test_multiple_parents_mutex�	s
�
�
�z-TestParentParsers.test_multiple_parents_mutexcCs |jtjtj|j|jgd�dSr�)r�rA�
ArgumentErrorrBr�r�rrrr�test_conflicting_parents�	s

�z*TestParentParsers.test_conflicting_parentscCs |jtjtj|j|jgd�dSr�)r�rAr�rBr�r�rrrr�test_conflicting_parents_mutex�	s

�z0TestParentParsers.test_conflicting_parents_mutexcCs:|j|jg}t|d�}|�|�d���tdddd��dS)Nr�r~rr�)r�r�rmr�rgr�rIr�rrr�test_same_argument_name_parents�	s

�z1TestParentParsers.test_same_argument_name_parentsc	CsPt�}|��}|jd|jgd�}|�d�|�|�d���tddddd	��dS)
Nr�r�rkzbar -b 1 --d 2 3 4rjrrr�)r�rr�rk)	rmrbrdr�rtr�rgr�rI)rrurfZabcde_parserrrr�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)Nryr�r�rr�rkzfoo -a 4TFr�rzbar -b  --w 2 3 4rrj)r�rr<r�r�rkzfoo -a -b 4zbar -b -a 4)rmrbr�rdrzrtr�r�rgr�rIrL)rrurfr�Z
abc_parserr�Zwxyzabe_parserrrr�test_subparser_parents_mutex�	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�rmr�r�r�r�r��format)rr�ru�parser_help�prognamerrr�test_parent_help
s
�z"TestParentParsers.test_parent_helpc	Cs�tdd�}|jddd�}|�d�|�d�|��}|�d�|�d	�t|gd
�}|�t|jgd��|��}|j}|�	|t
�d�||r�d
nd���dS)NFr�rZgd�rXrPr�r�r�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)
rmrzrtr�r�rXrgr�r�r�r�r�r�)r�parentrrrur�r�rrr�test_groups_parents(
s 





�
�z%TestParentParsers.test_groups_parents)rrrrrLr&r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrr��	s 

r�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
� TestMutuallyExclusiveGroupErrorscCs t�}|j}|t|jdd�dS)Nry)rX)rmr�r�r�)rru�raisesrrr�test_invalid_add_argument_groupL
sz@TestMutuallyExclusiveGroupErrors.test_invalid_add_argument_groupcCslt�}|��}|j}|j}|t|ddd�|t|d�|t|ddd�|t|ddd�|t|dtjd�dS)Nr�Tr�r�r)rr
)rmr�rtr�rrAZPARSER)rrur{rtr�rrr�test_invalid_add_argumentQ
sz:TestMutuallyExclusiveGroupErrors.test_invalid_add_argumentcCsptdd�}|��}|jddd�|jddd�|��}|jddd�|jd	dd�d
}|�|��t�|��dS)NrM�rOr�r�r�r�r<z--soupz--nutsz�            usage: PROG [-h] [--foo | --bar] [--soup | --nuts]

            optional arguments:
              -h, --help  show this help message and exit
              --foo
              --bar
              --soup
              --nuts
              )rmr�rtr�r�r�r�)rruZgroup1�group2r�rrrr�\
s

z*TestMutuallyExclusiveGroupErrors.test_helpcCsJt��}|��}|�t��|�dg�Wd�n1s<0YdS)Nr�)rArBr�r�rrg�rrur{rrr�test_empty_groupp
sz1TestMutuallyExclusiveGroupErrors.test_empty_groupN)rrrr�r�r�r�rrrrr�J
sr�c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)�MEMixincCs4|jdd�j}t}|jD]}|�|||���qdS�NFr���
get_parserrgrXr�r�r��rrgro�args_stringrrr�test_failures_when_not_requiredy
s
z'MEMixin.test_failures_when_not_requiredcCs:|jdd�j}t}|jdgD]}|�|||���qdS)NTr�rr�r�rrr�test_failures_when_required
sz#MEMixin.test_failures_when_requiredcCsD|jdd�j}|j|j}|D] \}}||���}|�||�qdSr�)r�rgr��successes_when_not_requiredr�r�)rrgr�r�r��	actual_nsrrr� test_successes_when_not_required�
s
z(MEMixin.test_successes_when_not_requiredcCs:|jdd�j}|jD] \}}||���}|�||�qdS�NTr�)r�rgr�r�r�)rrgr�r�r�rrr�test_successes_when_required�
sz$MEMixin.test_successes_when_requiredcCs,|jdd�j}|j}|�|�t�|��dSr�)r�r��usage_when_not_requiredr�r�r��rr�Zexpected_usagerrr�test_usage_when_not_required�
sz$MEMixin.test_usage_when_not_requiredcCs,|jdd�j}|j}|�|�t�|��dSr�)r�r��usage_when_requiredr�r�r�r�rrr�test_usage_when_required�
sz MEMixin.test_usage_when_requiredcCs2|jdd�j}|j|j}|�|�t�|��dSr�)r�r�r�rSr�r�r��rr�rSrrr�test_help_when_not_required�
sz#MEMixin.test_help_when_not_requiredcCs2|jdd�j}|j|j}|�|�t�|��dSr�)r�r�r�rSr�r�r�r�rrr�test_help_when_required�
szMEMixin.test_help_when_requiredN)rrrr�r�r�r�r�r�r�r�rrrrr�w
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)NrMr�r�r�rUr�rrr��baz help)rr�rS�rmr�rt�rr5rur{rrrr��
s

z&TestMutuallyExclusiveSimple.get_parser�--bar X --baz Yz
--bar X --baz�--bar Xr��r�r�z--bar X --bar Zr��--baz Yr�rrz;        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�rrrr�r�rIr�r�r�r�rSrrrrr��
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)
NrMr�z--abcdez
abcde helpr�z--fghijz
fghij helpr�z--klmnoz
klmno helpz--pqrstz
pqrst help�rmrtr�r�rrrr��
s
z$TestMutuallyExclusiveLong.get_parserz--klmno X --pqrst Yz	--klmno Xr�)ZabcdeZfghijZklmnoZpqrstz--abcde Y --klmno Xr�z	--pqrst Xz--pqrst X --fghij Yrzi    usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ]
                [--klmno KLMNO | --pqrst PQRST]
    zi    usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ]
                (--klmno KLMNO | --pqrst PQRST)
    z�
    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�rrrrr��
s 
	���	�r�c@sfeZdZdd�ZdgZdeddd�fded	dd�fd
eddd�fgZd
eddd�fgZdZdZ	dZ
dS)�$TestMutuallyExclusiveFirstSuppressedcCs:tdd�}|j|d�}|jdtjd�|jdddd	�|S)
NrMr�r�r�r�r�r<r^rR�rmr�rtrAr�r�rrrr��
s

z/TestMutuallyExclusiveFirstSuppressed.get_parserz-x X -yz-x Xr�Tr
z	-x X -x Yr�r�NFrz&        usage: PROG [-h] [-y]
        z$        usage: PROG [-h] -y
        zx
        optional arguments:
          -h, --help  show this help message and exit
          -y          y help
        r�rrrrr��
s��r�c	@s�eZdZdd�Zgd�Zdedddd�fded	d	dd�fd
ed	ddd�fdedddd�fgZd
ed	ddd�fgZdZZ	dZ
dS)�#TestMutuallyExclusiveManySuppressedcCsNtdd�}|j|d�}|j}|ddtjd�|ddtjd�|d	tjd
�|S)NrMr�r��--spamr�rRr�r<z	--bladderr�r�)rr5rur{rrrrr�s
z.TestMutuallyExclusiveManySuppressed.get_parser)z--spam --badgerz--badger --bladder Bz--bladder B --spamr�TN)rr�Zbladderr�Fz--bladder Br�z
--spam --spamrz!        usage: PROG [-h]
        �[
        optional arguments:
          -h, --help  show this help message and exit
        �rrrr�r�rIr�r�r�r�rSrrrrr�s	��r�c	@s�eZdZdd�Zgd�Zdedddd�fd	ed
ddd�fded
ddgd�fded
dgd
�d�fgZded
ddd�fgZdZdZ	dZ
dS)�*TestMutuallyExclusiveOptionalAndPositionalcCsJtdd�}|j|d�}|jdddd�|jdd	d
�|jddd
dd�|S)NrMr�r�r�r��FOOrRr��SPAMr�r�r%r��BADGER�rr	rSr�r�rrrr�<s
z5TestMutuallyExclusiveOptionalAndPositional.get_parser)z--foo --spam Sz
--spam S XzX --foozX Y Z --spam Sz	--foo X Yr�TNr�)ryrr�z--spam SF�SzX Y Z)r�r�r�rzD        usage: PROG [-h] [--foo | --spam SPAM | badger ...]
        zD        usage: PROG [-h] (--foo | --spam SPAM | badger ...)
        z�
        positional arguments:
          badger       BADGER

        optional arguments:
          -h, --help   show this help message and exit
          --foo        FOO
          --spam SPAM  SPAM
        r�rrrrr�:s��r�c
@s�eZdZdd�Zgd�Zdedddddd�fdedddddd�fd	edddddd�fd
edddddd�fdedddddd�fdedddddd�fgZd
edddddd�fdedddddd�fdedddddd�fgZdZZ	dZ
dS)�#TestMutuallyExclusiveOptionalsMixedcCsjtdd�}|jdddd�|j|d�}|jddd	d�|jd
ddd�|jddd
d�|jdddd�|S)NrMr�r�r�r\rRr�r��a helprW�b helpr�r^rY�c helpr�r�rrrr�is
z.TestMutuallyExclusiveOptionalsMixed.get_parser)z-a -b�-b -cz-a -cz-a -b -cr�TF�r�rrr�r�rWrYz-a -xz-y -bz-x -y -crr�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�rrrrrgs
�	�rc@s\eZdZddd�ZddgZdeddd�fd	edd
d�fgZdeddd�fgZdZd
Z	dZ
dS)�TestMutuallyExclusiveInGroupNcCsDtdd�}|jddd�}|j|d�}|jddd	�|jd
dd	�|S)NrMr�zTitled groupzGroup descriptionr�r�r�rUr�rr�)rmrzr�rt)rr5ruZtitled_groupZmutex_grouprrrr��s
�
�z'TestMutuallyExclusiveInGroup.get_parserr�z--baz X --bar Yr�r�r�r�r�rz9        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�rrrrr�s

��rc@s�eZdZdd�Zgd�Zdedddddd�fd	ed
ddddd�fded
ddddd�fd
edddddd�fded
ddddd�fgZded
ddddd�fded
ddddd�fgZdZZ	dZ
d
S)�1TestMutuallyExclusiveOptionalsAndPositionalsMixedcCshtdd�}|jddd�|jdddd	�|j|d
�}|jddd
d�|jdddd	�|jdddd	�|S)NrMr�r�r\r�r�r�r^rRr�r�rrrarWrrYrr�r�rrrr��s
z<TestMutuallyExclusiveOptionalsAndPositionalsMixed.get_parser)zX A -brz-c X AzX Ar�Fr�rzX -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�rrrrr	�s
��r	c@s0eZdZdd�ZdZdZdZdZdZdZ	dZ
dS)�TestMutuallyExclusiveNestedcCsntdd�}|j|d�}|�d�|�d�|j|d�}|�d�|�d�|j|d�}|�d�|�d	�|S)
NrMr�r�r�rWrYz-dz-er�r�)rr5rur{r�Zgroup3rrrr��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)rrrr�r�r�rSr�r�r�r�rrrrr
�s

r
cseZdZd�fdd�	Z�ZS)�MEPBaseNcs(tt|�j|d�}t|jd|gd�}|S)Nr�F)rOr�r�)r
rr�rmrO)rr5r�rurrrr�s

�zMEPBase.get_parser)N)rrrr�rrrrrrsrc@seZdZdS)�&TestMutuallyExclusiveGroupErrorsParentN�rrrrrrrrsrc@seZdZdS)�!TestMutuallyExclusiveSimpleParentNr
rrrrrsrc@seZdZdS)�TestMutuallyExclusiveLongParentNr
rrrrr!src@seZdZdS)�*TestMutuallyExclusiveFirstSuppressedParentNr
rrrrr&src@seZdZdS)�)TestMutuallyExclusiveManySuppressedParentNr
rrrrr+src@seZdZdS)�0TestMutuallyExclusiveOptionalAndPositionalParentNr
rrrrr0src@seZdZdS)�)TestMutuallyExclusiveOptionalsMixedParentNr
rrrrr5src@seZdZdS)�7TestMutuallyExclusiveOptionalsAndPositionalsMixedParentNr
rrrrr:src@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)
Nryr�r�r
)r�r�r�r�r )r�r��rm�set_defaultsr�rIrgrErrr�test_set_defaults_no_argsD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)Nryr�r
r�Zxfooxrr�r�rr6)rmrrtr�rIrgr�rErrr�test_set_defaults_with_argsQs*������z+TestSetDefaults.test_set_defaults_with_argscCsRt�}|jdd�|��}|�d�}|jdd�|�tddd�|�d����dS)Nryr�r�r�r:r
)rmrrbrdr�rIrgr�)rrurfZparser_arrr�test_set_defaults_subparsersbs
�z,TestSetDefaults.test_set_defaults_subparserscCs>tdd�}|jdd�t|gd�}|�tdd�|�g��dS)NFr�ryr�r�r)rr�rurrr�test_set_defaults_parentsks
z)TestSetDefaults.test_set_defaults_parentscCsLt��}|���d�}|jdd�|jdd�|�tdd�|�dg��dS)Nr�r
r�r )rArBrbrdrr�rIrg)rruZxparserrrr�)test_set_defaults_on_parent_and_subparserq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��XXrr�rrr��ZZr�WW�YY)rmrrtr�rIrgrErrr�&test_set_defaults_same_as_add_argumentx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)Nrr�r�r�rryr�r�rrr�rrr�rrr r!)rmrrzrtr�rIrgr�rrr�,test_set_defaults_same_as_add_argument_group�s

��z<TestSetDefaults.test_set_defaults_same_as_add_argument_groupN)
rrrrrrrrr"r#rrrrrBs
	rc@seZdZdd�ZdS)�TestGetDefaultcCs�t�}|�|�d��|�|�d��|�d�|�|�d��|�|�d��|jdtdd�|�|�d��|�d|�d��|jdd�|�d|�d��|�d|�d��dS)	Nryr�r�r�r�rr�r�)rmr}Zget_defaultrtr"r�rrErrr�test_get_default�s
zTestGetDefault.test_get_defaultN)rrrr%rrrrr$�sr$c@seZdZdd�Zdd�ZdS)�TestNamespaceContainsSimplecCs$t��}|�d|�|�d|�dS)Nrr�)rA�	Namespace�assertNotIn�r�nsrrr�
test_empty�sz&TestNamespaceContainsSimple.test_emptycCsNtjddd�}|�d|�|�d|�|�d|�|�d|�|�d|�dS)	Nr
r r
rr�r�Zxxr�)rAr'r(rDr)rrr�test_non_empty�sz*TestNamespaceContainsSimple.test_non_emptyN)rrrr+r,rrrrr&�sr&c@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	Ssj||_||_|j|j|jfD]H}d|j|f}|fdd�}z
||_WntyVYn0t|||�qdS)Nz%s_%scSs||�dSr(rr�rrr�test_wrapper�szUTestHelpFormattingMetaclass.__init__.<locals>.AddTests.__init__.<locals>.test_wrapper)�func_suffix�std_name�test_format�
test_print�test_print_filerr�rc)rZ
test_classr0r1r�r�r/rrrr�s�
z?TestHelpFormattingMetaclass.__init__.<locals>.AddTests.__init__cSs�tj|jji|jj��}t|dg�D]}|j|ji|j��q$t|dg�}|D]:\}}|j|ji|j��}|D]}|j|ji|j��qnqNt|dg�}|r�|��}	|D]}
|	j	|
ji|
j��q�|S)Nrv�argument_group_signatures�subparsers_signatures)
rArBrrrErFrbrtrzrbrd)rr�ruZargument_sigZ
group_sigsZ	group_sigZ
argument_sigsr{Zsubparsers_sigsrfZ
subparser_sigrrrr��s4��
�
�
�

�zBTestHelpFormattingMetaclass.__init__.<locals>.AddTests._get_parsercSs&t||j�}t�|�}|�||�dSr()rbr0r�r�r�)rr��parser_textZ
expected_textrrr�_test�s
z<TestHelpFormattingMetaclass.__init__.<locals>.AddTests._testcSs,|�|�}t|d|j�}|�||��dS)Nz	format_%s)r�rbr0r8)rr�rur�rrrr2�s
zBTestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_formatc
Ss�|�|�}t|d|j�}tt|j�}tt|jt��z(|�tt|j���}Wtt|j|�ntt|j|�0|�||�dS�Nzprint_%s)	r�rbr0r`r1rcrrr8)rr�ru�print_Z
old_streamr7rrrr3
s
 zATestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_printcSs@|�|�}t|d|j�}t�}||�|��}|�||�dSr9)r�rbr0rrr8)rr�rur:Zsfiler7rrrr4
s
zFTestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_print_fileN)	rrrrr�r8r2r3r4rrrrr��sr�))�usager[)rSr[)r�)r�r:r�r�r�r0r1rrrr�s
Hz$TestHelpFormattingMetaclass.__init__NrHrrrrr-�sr-r.c@sneZdZdZedddd�Zedddd	d
�eddd
d�eddd�eddd�eddd�gZgZdZedZ	dZ
dS)�TestHelpBiggerOptionals�;Make sure that argument help aligns when options are longerrM�DESCRIPTION�EPILOG�rOrPZepilogr�r�r��0.1r�r�r��X HELPrR�--y�Y HELPr�ry�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�rrrrrDrrrvr5r;rSr�rrrrr< 
s�


�r<c@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�)rr!r�r"r#r$rrrr&J
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)rrrrr&r<rrrvr5r;rSr�rrrrrID
s	rIc@s�eZdZdZedddd�Zedddd	d
�eddd
d�eddd�eddd�eddd�gZeddd�eddd�edddd�gfgZdZed Z	d!Z
d"S)#�TestHelpBiggerOptionalGroupsr=rMr>r?r@r�r�r�rAr�r�r�rBrRrCrDr�ryrEr�rFzGROUP TITLEzGROUP DESCRIPTIONrZr�zBAZ HELPr�r)zZ HELPrazN        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
    rGNrHrrrrrJ{
s$�


�

��rJc@s^eZdZdZeddd�Zedddd�ed	d
d�edd
d�eddd�gZgZdZedZ	dZ
dS)�TestHelpBiggerPositionalsz4Make sure that help aligns when arguments are longer�USAGEr>�r;rPr�r�rBrRrCrDr�ZekiekiekifekangzEKI HELPr�rF�        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
        rNrHrrrrrK�
s


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

that is so long that it should go onto multiple lines when wrappedrTr�rzoddly
    formatted -x help�rWrSr�r�z
normal y helprXz'
    oddly formatted group

descriptionrZr�r�z` oddly 
formatted    -a  help  
    again, so long that it should be wrapped over multiple linesrR�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
        rNrHrrrrrO�
s"��
���rOc@sbeZdZdZeddd�Zedddd�ed	d
dd�gZed�ed
ddd�gfgZdZedZ	dZ
dS)�TestHelpWrappingShortNamesrPrMzZD
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
DrTr�rzxXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXrQr�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 HHArRrRa�
        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
        rNrHrrrrrS�
s���rSc@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 linerLzZD 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 DrMr�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 XHrQr�ZyyyyyyyyyyyyyyyyyyyyyyyyyrTrUr�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 ZHrNar
        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
        NrHrrrrrV%s���rVc@s�eZdZdZedd�Zedddd�edd	d
d�eddd�ed
d
dd�edddd�eddejd�edddejd�edddejd�edejejdd�g	Z	ed �ed!dd"d�ed#d$d%d�ed&d&d	d�ed'd'dd�gfgZ
d(Zed)Zd*Z
d+S),�
TestHelpUsage�Test basic usage messagesrMr�r�r)r<rar�r%r�r�r�rr )rSrrrr�zWhether to foo)rSr�r�zWhether to barT)rSr	r�r�z--foobarz--barfoor�z--bazzzBazz!)r�r	rSr{r�r�r�rr�r�rka/        usage: PROG [-h] [-w W [W ...]] [-x [X ...]] [--foo | --no-foo]
                    [--bar | --no-bar]
                    [-f | --foobar | --no-foobar | --barfoo | --no-barfoo]
                    [--bazz | --no-bazz] [-y [Y]] [-z Z Z Z]
                    a b b [c] [d ...] e [e ...]
        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
          --foo, --no-foo       Whether to foo
          --bar, --no-bar       Whether to bar (default: True)
          -f, --foobar, --no-foobar, --barfoo, --no-barfoo
          --bazz, --no-bazz     Bazz!

        group:
          -y [Y]                y
          -z Z Z Z              z
          d                     d
          e                     e
        rN)rrrrrDrrrArCr�rvr5r;rSr�rrrrrX[s4

�����rXc@speZdZdZeddd�ZgZed�eddd�ed	d	d�gfed
�eddd�edd
d�gfgZdZedZ	dZ
dS)�TestHelpOnlyUserGroupsrYrMF�rOr�Zxxxxr�r�r�r�Zyyyyrr�r�z.        usage: PROG [-x X] [-y Y] a b
        zn
        xxxx:
          -x X  x
          a     a

        yyyy:
          b     b
          -y Y  y
        rNrHrrrrrZ�s

�

��

rZc@sReZdZdZedd�Zeddd�eddd�ed	�ed
�gZgZdZedZ	d
Z
dS)�TestHelpUsageLongProgz*Test usage messages where the prog is long�<PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPr�r�r�rWr�r�r�rzz        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
        rNrHrrrrr\�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��WWWWWWWWWWWWWWWWWWWWWWWWWr^r�rWr��YYYYYYYYYYYYYYYYYYYYYYYYYr��ZZZZZZZZZZZZZZZZZZZZZZZZZr�ra        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
        rNrHrrrrr_�s




�
r_c@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
        rNrHrrrrrc�s�rcc@sleZdZdZedd�Zeddd�eddd�ed	d
d�eddd�ed
�ed�ed�gZgZdZedZ	dZ
dS)�TestHelpUsageOptionalsWrapz,Test usage messages where the optionals wraprMr�r�r`r^r�rWr�rar�rbr�rrz�        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
        rNrHrrrrrh
s




�	rhc@sVeZdZdZedd�Zed�ed�ed�ed�ed�ed	�gZgZd
ZedZ	dZ
d
S)�TestHelpUsagePositionalsWrapz.Test usage messages where the positionals wraprMr�r�r�r�rdrerfz�        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
        rNrHrrrrri3s
�
ric@sbeZdZdZedd�Zeddd�eddd�ed	d
d�ed�ed�ed
�gZgZdZedZ	dZ
dS)�%TestHelpUsageOptionalsPositionalsWrapz<Test usage messages where the optionals and positionals wraprMr�r�rWr^r�rar�rbrdrerfa        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
        rNrHrrrrrjUs



�
rjc@sPeZdZdZedd�Zeddd�eddd�ed	d
d�gZgZdZedZ	d
Z
dS)�TestHelpUsageOptionalsOnlyWrapz@Test usage messages where there are only optionals and they wraprMr�r�rWr^r�rar�rbz�        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
        rNrHrrrrrkys



�rkc@sFeZdZdZeddd�Zed�ed�ed�gZgZdZed	Z	d
Z
dS)� TestHelpUsagePositionalsOnlyWrapzBTest usage messages where there are only positionals and they wraprMFr[rdrerfz~        usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
                    ccccccccccccccccccccccccc
        rgrNrHrrrrrl�s�rlc
@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 messagesrMr�r�z"x %(prog)s %(default)s %(type)s %%rVr�r�r��XXXz y %(prog)s %(default)s %(const)s)r�r	r�rSr�r+z$foo %(prog)s %(default)s %(choices)sr]r�r�r
r ZBBBz!bar %(prog)s %(default)s %(dest)s)r	r-rWrSrzspam %(prog)s %(default)sr�r�r�zbadger %(prog)s %(default)s)r	rSr{r�za %(prog)s %(default)srWrzb %(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
        rN)rrrrrDrrr"rvr5r;rSr�rrrrrm�s2
�
���
�

��rmc@s4eZdZdZeddd�ZgZgZdZedZ	dZ
dS)	�&TestHelpVariableExpansionUsageSuppliedz@Test that variables are expanded properly when usage= is presentrMz%(prog)s FOO�rOr;z         usage: PROG FOO
        r�rNrHrrrrro�sroc@s0eZdZdZeddd�ZgZgZdZeZ	dZ
dS)�$TestHelpVariableExpansionNoArgumentsz;Test that variables are expanded properly with no argumentsrMFr[z        usage: PROG
        rNrHrrrrrq�srqc@sFeZdZdZedejd�Zeddd�eddd�gZgZ	d	Z
d
Zd
ZdS)�TestHelpSuppressUsagez3Test that items can be suppressed in usage messagesrMrpr�rQr�r�	spam helpz�        positional arguments:
          spam        spam help

        optional arguments:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        rN)
rrrrrDrAr�rrrvr5rSr;r�rrrrrr�s

�rrc@sJeZdZdZeddd�Zedejd�eddd�gZgZ	d	Z
e
d
ZdZdS)
�TestHelpSuppressOptionalz?Test that optional arguments can be suppressed in help messagesrMFr[r�r�rrsz!        usage: PROG spam
        zA
        positional arguments:
          spam  spam help
        rN�
rrrrrDrrrAr�rvr5r;rSr�rrrrrts
�rtc@s\eZdZdZedd�Zeddd�eddd�gZed	�ed
ejd�gfgZ	dZ
e
dZd
ZdS)�TestHelpSuppressOptionalGroupz<Test that optional groups can be suppressed in help messagesrMr�r�rQr�rrsr{r��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
        rN)
rrrrrDrrrvrAr�r5r;rSr�rrrrrv s


��	rvc@sHeZdZdZedd�Zeddd�edejd�gZgZ	dZ
e
d	Zd
ZdS)�TestHelpSuppressPositionalzATest that positional arguments can be suppressed in help messagesrMr�r�rQr�rz-        usage: PROG [-h] [--foo FOO]
        �z
        optional arguments:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        rNrurrrrry:s

�ryc@s>eZdZdZedd�Zedddd�gZgZdZed	Z	d
Z
dS)�TestHelpRequiredOptionalz.Test that required options don't look optionalrMr�r�TrQ)r5rSz+        usage: PROG [-h] --foo FOO
        rzrNrHrrrrr{Os
�r{c@sNeZdZdZedddd�Zedddd	�ed
ddd
�gZgZdZedZ	dZ
dS)�TestHelpAlternatePrefixCharsz:Test that options display with different prefix charactersrMz^;F)rOr�r�z^^foor�rQrRz;bz;;barrUr�z-        usage: PROG [^^foo] [;b BAR]
        zq
        optional arguments:
          ^^foo              foo help
          ;b BAR, ;;bar BAR  bar help
        rNrHrrrrr|cs�r|c@sHeZdZdZeddd�Zeddd�edd	d�gZgZd
ZedZ	dZ
d
S)�TestHelpNoHelpOptionalz=Test that the --help argument can be suppressed help messagesrMFr[r�rQr�rrsz-        usage: PROG [--foo FOO] spam
        z�
        positional arguments:
          spam       spam help

        optional arguments:
          --foo FOO  foo help
        rNrHrrrrr}xs

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

        optional arguments:
          -h, --help  show this help message and exit
          --foo FOO
        rNrHrrrrr~�s
�	r~c	@sjeZdZdZedd�Zeddddd�ed	d
ddd�ed
dddd�eddddd�gZgZdZedZ	dZ
dS)�TestHelpTupleMetavarz"Test specifying metavar as a tuplerMr�r�r<r))ZW1ZW2)rSrrWr�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
        rNrHrrrrr�s
�	rc@sdeZdZdZedejdd�Zeddd�edd	d�gZed
dd�ed
dd�gfgZ	dZ
e
dZdZdS)�TestHelpRawText�Test the RawTextHelpFormatterrM�7Keep the formatting
    exactly as it is written

here
�rO�formatter_classrPr�z-    foo help should also
appear as given herer�rrsrX�?    This text
  should be indented
    exactly like it is here
rZr�rU�>        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
        rN)
rrrrrDrAZRawTextHelpFormatterrrrvr5r;rSr�rrrrr��s�

�
��r�c@sdeZdZdZedejdd�Zeddd�edd	d�gZed
dd�ed
dd�gfgZ	dZ
e
dZdZdS)�TestHelpRawDescriptionr�rMr�r�r�z4  foo help should not
    retain this odd formattingr�rrsrXr�rZr�rUr�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 not retain this odd formatting

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

          --bar BAR   bar help
        rN)
rrrrrDrAZRawDescriptionHelpFormatterrrrvr5r;rSr�rrrrr��s�

�
��r�c@s�eZdZdZedejdd�Zeddd�edd	d
d�edejd
dd�edddd�eddd�eddddd�gZ	eddd�ede
ddd�gfgZd Zed!Z
d"Zd#S)$�TestHelpArgumentDefaultsz&Test the ArgumentDefaultsHelpFormatterrMrPr�r�z)foo help - oh and by the way, %(default)sr�r�r�rUrRz--tazzWhether to taz itT)r�rSr	z--quuxzSet the quuxr�)rSr	rrsr�rZwoodenzbadger helprrXrZrr�)rRr	rSz�        usage: PROG [-h] [--foo FOO] [--bar] [--taz | --no-taz] [--quux QUUX]
                    [--baz BAZ]
                    spam [badger]
        a1
        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)
          --taz, --no-taz  Whether to taz it (default: True)
          --quux QUUX      Set the quux (default: 42)

        title:
          description

          --baz BAZ        baz help (default: 42)
        rN)rrrrrDrAZArgumentDefaultsHelpFormatterrrrCrvr"r5r;rSr�rrrrr�#s*�
�
�

��r�c@sBeZdZdZeddd�Zeddddd	�gZgZd
ZedZ	dZ
d
S)�TestHelpVersionActionz,Test the default help for the version actionrMrPrT�-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
        rNrHrrrrr�Rsr�c@sTeZdZdZedd�Zeddddejd�ed	d
d�edd
d�gZgZ	dZ
e
dZdS)�TestHelpVersionActionSuppresszCTest that the --version argument can be suppressed in help messagesrMr�r�r�r�r�)r�r�rSr�rQr�rrsrwrxN)rrrrrDrrrAr�rvr5r;rSrrrrr�fs

�

�r�c@sLeZdZdZeddd�Zeddddd	�gZd
d�dD�Zd
ZedZ	dZ
dS)�TestHelpSubparsersOrdering�5Test ordering of subcommands in help matches the coderM�display some subcommandsrTr�r�r�rAr�cCsg|]}t|d��qS)r��rD)rLr:rrrrN�s�z%TestHelpSubparsersOrdering.<listcomp>)r�rrr�rk�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
        rGN)rrrrrDrrrvr6r;rSr�rrrrr�s��r�c@sPeZdZdZeddd�Zeddddd	�gZd
Zdd�eD�Zd
Z	e	dZ
dZdS)�"TestHelpSubparsersWithHelpOrderingr�rMr�rTr�r�r�rAr�))r�za subcommand help)rzb subcommand help)rzc subcommand help)r�zd subcommand help)rkze subcommand helpcCsg|]\}}t||d��qS))r:rSr�)rLr:rSrrrrN�s�z-TestHelpSubparsersWithHelpOrdering.<listcomp>r�a�
        display some subcommands

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

        optional arguments:
          -h, --help     show this help message and exit
          -v, --version  show program's version number and exit
        rGN)rrrrrDrrrvZsubcommand_datar6r;rSr�rrrrr��s��r�c@s\eZdZdd�Zeddejd�Zeded�eded�ed	e	d
d�gZ
gZdZed
Z
dZdS)�TestHelpMetavarTypeFormattercCs|Sr(rr/rrr�custom_type�sz(TestHelpMetavarTypeFormatter.custom_typerMrP)rOrPr�r�r�rWrYz
SOME FLOAT)rRrWzF        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
        rN)rrrr�rDrAZMetavarTypeHelpFormatterrrr"r�rvr5r;rSr�rrrrr��s�

�r�c@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|jg|�Ri|��dSr()rArBr�r�rt�rrErFrurrr�assertTypeError�s��z/TestInvalidArgumentConstructors.assertTypeErrorcOs(t��}|jt|jg|�Ri|��dSr()rArBr�rrtr�rrr�assertValueError�s��z0TestInvalidArgumentConstructors.assertValueErrorcCs<|jddd�|jddd�|jddd�|jdid�dS)	Nr�)r�r�ry)�callbackr)Z
callback_args)Zcallback_kwargs�r�rrrr�test_invalid_keyword_arguments�sz>TestInvalidArgumentConstructors.test_invalid_keyword_argumentscCs"|��dD]}|j|d�qdS)N)rLr8r�r��rr�rrr�test_missing_destination�sz8TestInvalidArgumentConstructors.test_missing_destinationcCs|�d�|�d�dS)Nroz---�r�rrrr�test_invalid_option_stringss
z;TestInvalidArgumentConstructors.test_invalid_option_stringscCs$|jddd�|jdttfd�dS)Nr�r"r�)r�r"r�rrrr�test_invalid_typesz1TestInvalidArgumentConstructors.test_invalid_typecCs�|jddd�|jddd�|jddd�t��}|�t��}|jddd�Wd�n1s`0Y|�dt|j��dS)	Nr�ryr�r�r��r8rLz
store-truezunknown action)	r�rArBr�rrtrDr�rErFrrr�test_invalid_actions,z3TestInvalidArgumentConstructors.test_invalid_actioncCsbt��}|jdd�|�t��}|jddd�Wd�n1sB0Y|�dt|j��dS)Nryr�r�r�z+dest supplied twice for positional argument)rArBrtr�rrDr�rErFrrr�test_multiple_dests,�z2TestInvalidArgumentConstructors.test_multiple_destcCsDdD]:}ttd�tdd�tdd�fD]}|jd	d|i|��q$qdS)
N)r�r�r<rXrbr�r)rZabr,r�r�)r�)rcr"r�)rr��attrsrrr�test_no_argument_actionss
�z8TestInvalidArgumentConstructors.test_no_argument_actionscCs.dD]$}|jdd|d�|jdd|d�qdS)N)r�r<rbr�ryr@r%�rr�r�r�rrr�!test_no_argument_no_const_actions szATestInvalidArgumentConstructors.test_no_argument_no_const_actionscCs\dD]R}|jdd|d�|jdd|d�dD](}|jdd||d�|jdd||d�q,qdS)	Nr�r�rr�r)r
r%r)ry)r�rr�r�)rr�rrrr�#test_more_than_one_argument_actions*s��zCTestInvalidArgumentConstructors.test_more_than_one_argument_actionscCsdD]}|jdd|d�qdS)N)r�rXr�r)r�r�r�rrr�test_required_const_actions8sz;TestInvalidArgumentConstructors.test_required_const_actionscCs4|jddd�|jdddd�|jddtjd�dS)NruZparsersr�rM)r�rO)r�rs)r�rArBrrrr�"test_parsers_action_missing_params>s
�zBTestInvalidArgumentConstructors.test_parsers_action_missing_paramscCs|jddd�dS)NryTr�r�rrrr�test_required_positionalDsz8TestInvalidArgumentConstructors.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>.SuccessNr
rrrr�SuccessIsr�cs"eZdZd�fdd�	Zdd�ZdS)zHTestInvalidArgumentConstructors.test_user_defined_action.<locals>.ActionFcs"|dkr|�ur|�ur���dS)Nrr)r�option_stringsr�r�r	r5�r�rrrNszQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__init__c_sdSr(rrGrrrr<YszQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__call__N)F)rrrrr<rr�rrrALs�rAr�)r�r	r�r)rYr�rArBr�rt)rrArurr�r�test_user_defined_actionGs��z8TestInvalidArgumentConstructors.test_user_defined_actionN)rrrrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr��s 	
r�c@seZdZdd�Zdd�ZdS)�TestActionsReturnedcCsXt��}|�d�}|�|jd�|�dd�}|�|jd�|�dd�}|�|jd�dS)	Nr�ryrWr�r�r�r�r�)rArBrtr�r��rrur�rrrrshs
zTestActionsReturned.test_destcCs�t��}|jddddtddgddd	d
�	}|�|jd�|�|jd�|�|jd�|�|jt�|�|j	ddg�|�|j
d�|�|jd�|�|jd	�dS)Nr�rr�rr
r r�ZBARr�)rr�r	rRr-rSrWr�)
rArBrtr"r�rr�r	rRr-rSrWr�r�rrr�	test_miscqs

�zTestActionsReturned.test_miscN)rrrrsr�rrrrr�fs	r�c@s$eZdZdd�Zdd�Zdd�ZdS)�TestConflictHandlingcCs|jttjdd�dS)Nry)�conflict_handler)r�rrArBrrrr�
test_bad_type�s
�z"TestConflictHandling.test_bad_typecCsDt��}|�d�|�tj|jd�|�d�|�tj|jd�dS)Nr�r�)rArBrtr�r�rErrr�test_conflict_error�s
�
�z(TestConflictHandling.test_conflict_errorcCsztj}|ddd�}|jddd�|jddd�|�|��t�d��|jd	d
d�|jd	dd�|�|��t�d
��dS)NrMZresolve)rOr�r�zOLD Xr�zNEW Xz�            usage: PROG [-h] [-x X]

            optional arguments:
              -h, --help  show this help message and exit
              -x X        NEW X
            r�ZOLD_SPAMr^ZNEW_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
            )rArBrtr�r�r�r�)rr�rurrr�test_resolve_error�sz'TestConflictHandling.test_resolve_errorN)rrrr�r�r�rrrrr��s	r�c@sXeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�ZdS)�TestOptionalsHelpVersionActionsz!Test the help and version actionscCsP|�t��}|�|���Wd�n1s.0Y|�|��|jj�dSr()r�rXrgr�r�r�rEr[)rrur�rGrrr�assertPrintHelpExit�s,z3TestOptionalsHelpVersionActions.assertPrintHelpExitcGs|�t|j|�dSr()r�rXrg�rrurErrrrL�sz9TestOptionalsHelpVersionActions.assertArgumentParserErrorcCsDt�}|jddddd�|�|d�|�|d�|�tt|d�dS)	Nr�r�r�r�r�r�r��format_version�rmrtr�r�r�rbrErrr�test_version�s
z,TestOptionalsHelpVersionActions.test_versioncCsftdd�}|jddddd�|�t��}|�dg�Wd�n1sH0Y|�d|jj�dS)	NZPPPr�r�r�r�z%(prog)s 3.5r�zPPP 3.5
�rmrtr�rXrgr�rEr[rFrrr�test_version_format�s

*z3TestOptionalsHelpVersionActions.test_version_formatcCsHtdd�}|jddddd�|�|d�|�|d	�|�tt|d
�dS)NFr�r�r�r�r�r�r�r�r�)rmrtrLr�r�rbrErrr�test_version_no_help�s

z4TestOptionalsHelpVersionActions.test_version_no_helpcCsdtdd�}|jdddd�|�t��}|�dg�Wd�n1sF0Y|�d|jj�dS)Nrnr�r�r�z%(prog)s 3.7r�zXXX 3.7
r�rFrrr�test_version_action�s

*z3TestOptionalsHelpVersionActions.test_version_actioncCs>tdd�}|�|d�|�|d�|�|d�|�|d�dS)NFr�r�r�r�r�)rmrLrErrr�test_no_help�s

z,TestOptionalsHelpVersionActions.test_no_helpcCsZt�}|jddd�|jddd�|�|d�|�|d�|�|d�|�tt|d�dS)	Nr�rSr�r�r�r�r�r�)rmrtr�rLr�r�rbrErrr�test_alternate_help_version�sz;TestOptionalsHelpVersionActions.test_alternate_help_versioncCs�t�}|jdddd�|jddd�|�d�gd	�}|d
dg}|D]J}|D]}d||f}qN|�||d
�|�||d�|�tt|d�qFdS)Nr�r�r�r�r�r�r�r�)rr�ryz-x barzbaz -xz--bad-optionzfoo bar bazz	%s %%s %sr�r�r�r�)rruZvalid_prefixesZvalid_suffixes�prefix�suffixr�rrr�!test_help_version_extra_arguments�s
zATestOptionalsHelpVersionActions.test_help_version_extra_argumentsN)
rrrrr�rLr�r�r�r�r�r�r�rrrrr��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�funcrrr�assertStringEqualszTestStrings.assertStringEqualcCs8tjgd�ddddgd�ddd	d
�	}d}|�||�dS)N)r�r�rWrr"r)r��r
r rFZHELPZMETAVAR�	r�r�rRrr	r-r5rSrWz�Action(option_strings=['--foo', '-a', '-b'], dest='b', nargs='+', const=None, default=42, type='int', choices=[1, 2, 3], required=False, help='HELP', metavar='METAVAR'))rArAr�)rZoptionr0rrr�
test_optionals��zTestStrings.test_optionalcCs8tjgdtddgd�dddd�	}d	t}|�||�dS)
Nr�rr�)r�g�?r�TzH HH HzMV MV MVr�z�Action(option_strings=[], dest='x', nargs='?', const=None, default=2.5, type=%r, choices=[0.5, 1.5, 2.5], required=True, help='H HH H', metavar='MV MV MV'))rArAr�r�)rZargumentr0rrr�
test_arguments ���zTestStrings.test_argumentcCs"tjddd�}d}|�||�dS)Nr�rr�zNamespace(foo=42, bar='spam')�rAr'r��rr*r0rrr�test_namespace&szTestStrings.test_namespacecCs(tjfiddi��}d}|�||�dS)N�"�quotezNamespace(**{'"': 'quote'})r�r�rrr�'test_namespace_starkwargs_notidentifier+sz3TestStrings.test_namespace_starkwargs_notidentifiercCs,tjfddiddi��}d}|�||�dS)Nr�r
r�r�z Namespace(a=1, **{'"': 'quote'})r�r�rrr�2test_namespace_kwargs_and_starkwargs_notidentifier0sz>TestStrings.test_namespace_kwargs_and_starkwargs_notidentifiercCs(tjfiddi��}d}|�||�dS)NZvalidTzNamespace(valid=True)r�r�rrr�$test_namespace_starkwargs_identifier5sz0TestStrings.test_namespace_starkwargs_identifiercCs&tjdd�}dtj}|�||�dS)NrMr�zvArgumentParser(prog='PROG', usage=None, description=None, formatter_class=%r, conflict_handler='error', add_help=True))rArBZ
HelpFormatterr�)rrur0rrr�test_parser:s��zTestStrings.test_parserN)rrrrr�r�r�r�r�r�r�r�rrrrr��sr�c@s$eZdZdd�Zdd�Zdd�ZdS)�
TestNamespacecCsFt��}|�tt|d�tjddd�}|�|jd�|�|jd�dS)Nr�r�rr�)rAr'r�r�rbr�r�rr)rrr�test_constructorHs
zTestNamespace.test_constructorcCs�tjddd�}tjddd�}tjdd�}tjdd�}|�||�|�||�|�||�|�||�|�||�|�||k�|�||k�|�||k�|�||k�dS)Nr
r r�)rr�)r�r\)rAr'r�ZassertNotEqual�
assertTrue)rZns1Zns2Zns3Zns4rrr�
test_equalityPszTestNamespace.test_equalitycCs6tjddd�}|�|�d�t�|�|�d�t�dS)Nr
r r�)rAr'ZassertIsrW�NotImplemented�__ne__r)rrr�$test_equality_returns_notimplemented`sz2TestNamespace.test_equality_returns_notimplementedN)rrrr�r�r�rrrrr�Fsr�c@s$eZdZdd�Zdd�Zdd�ZdS)�TestEncodingcCsRtj�|�\}}|d7}t|ddd��}|��Wd�n1sD0YdS)Nz.pyrorr�)r+r2�splitextr=r�)rr2r�r�rrr�_test_module_encodingmsz"TestEncoding._test_module_encodingcCs|�tj�dSr()r�rA�__file__rrrr�test_argparse_module_encodingssz*TestEncoding.test_argparse_module_encodingcCs|�t�dSr()r�r�rrrr�"test_test_argparse_module_encodingvsz/TestEncoding.test_test_argparse_module_encodingN)rrrr�r�r�rrrrr�ksr�c@seZdZdd�ZdS)�TestArgumentErrorcCs$d}t�d|�}|�t|�|�dS)Nz
my error here)rAr�r�r�)rr�rorrr�test_argument_errorsz%TestArgumentError.test_argument_errorN)rrrr�rrrrr�}sr�c@seZdZdd�ZdS)�TestArgumentTypeErrorcCsldd�}tddd�}|jd|d�|�t��}|�dg�Wd�n1sN0Y|�d	|jj�dS)
NcSst�d��dS)N�spam!)rAZArgumentTypeErrorr/rrrr�sz<TestArgumentTypeError.test_argument_type_error.<locals>.spamrMFr[r�r�rnz-usage: PROG x
PROG: error: argument x: spam!
)rmrtr�rXrgr�rEr\)rrrurGrrr�test_argument_type_error�s*�z.TestArgumentTypeError.test_argument_type_errorN)rrrr�rrrrr��sr�c@s$eZdZdd�Zdd�Zdd�ZdS)�TestMessageContentErrorcCsltddd�}|jdtd�|jdtdd�|jd	td
d�|�t��}|�g�Wd�n1sd0Yt|j�}|�|d�|�|d�|�|d	�|�t��}|�d
g�Wd�n1s�0Yt|j�}|�	|d�|�|d�|�|d	�|�t��}|�d
dg�Wd�n1�s00Yt|j�}|�	|d�|�	|d�|�|d	�dS)NrMrrp�req_posr��-req_optTr4Zneed_oner))rRr�req_optZmyXargumentz
-req_opt=1)
rmrtr�r"r�rXrgrEr�r(�rrurGr�rrr�%test_missing_argument_name_in_message�s,(
*
.
z=TestMessageContentError.test_missing_argument_name_in_messagecCstddd�}|jdtd�|jdtdd�|jd	td
dd�|�t��}|�g�Wd�n1sf0Yt|j�}|�	|d�|�	|d�|�
|d
�|�t��}|�dg�Wd�n1s�0Yt|j�}|�	|d�|�
|d�|�
|d
�dS)NrMrrpr�r�z	--req_optTr4z	--opt_optr)rRrr	r�Zopt_optz--req_opt=1)rmrtr�r"�boolr�rXrgrEr�r(r�rrr�%test_optional_optional_not_in_message�s$
�(
*
z=TestMessageContentError.test_optional_optional_not_in_messagecCs�tddd�}|�d�|jdddd�|�t��}|�g�Wd�n1sP0Yt|j�}|�|d�|�|d�dS)	NrMrrpr�Zoptional_positionalrr"r)	rmrtr�rXrgr�rEr�r(r�rrr�'test_optional_positional_not_in_message�s
(
z?TestMessageContentError.test_optional_positional_not_in_messageN)rrrr�r�r�rrrrr��sr�c@seZdZdd�ZdS)�TestTypeFunctionCallOnlyOncecsH�fdd�}t��}|jd|dd�|�d���}��tdd�|�dS)	Ncs��|d�dS)Nr��
foo_converted�r�)Zstring_to_convertrrrr�szLTestTypeFunctionCallOnlyOnce.test_type_function_call_only_once.<locals>.spamr�r�rz--foo spam!r�r�)rArBrtrgr�r�rI�rrrurErrr�!test_type_function_call_only_once�s
z>TestTypeFunctionCallOnlyOnce.test_type_function_call_only_onceN)rrrr�rrrrr��sr�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TestTypeFunctionCalledOnDefaultcsD�fdd�}t��}|jd|dd�|�g�}��tdd�|�dS)Ncs��|d�dS)Nrr�r��Zint_to_convertrrrr�sz]TestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_default.<locals>.spamr�rrr��rArBrtrgr�rIr�rrr�/test_type_function_call_with_non_string_default�s

zOTestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_defaultcCs@dd�}t��}|jd|dd�|�g�}|�tdd�|�dS)NcSsdS)Nr�rr�rrrr�szYTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_default.<locals>.spamr��0rr�r�r�r�rrr�+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)Nr%r)Zstr_to_convertrrrrG�szYTestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_default.<locals>.extend�--testr%rz**)rr�)rrGrurErrr�)test_no_double_type_conversion_of_default�s

zITestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_defaultcCs8t��}|jddtgdd�|�g�}|�|jg�dS)Nr�rrL)r�rRr	r�)rArBrtr�rgr�rr�rrr�test_issue_15906
s
�
z0TestTypeFunctionCalledOnDefault.test_issue_15906N)rrrr�r�r�r�rrrrr��s
r�c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�TestParseKnownArgscCst��}|�d�dS)Nr�rArBrgrErrr�test_arguments_tuplesz'TestParseKnownArgs.test_arguments_tuplecCst��}|�g�dSr(rrErrr�test_arguments_listsz&TestParseKnownArgs.test_arguments_listcCs t��}|�d�|�d�dS)Nr�r��rArBrtrgrErrr�test_arguments_tuple_positional"s
z2TestParseKnownArgs.test_arguments_tuple_positionalcCs"t��}|�d�|�dg�dS)Nr�rrErrr�test_arguments_list_positional's
z1TestParseKnownArgs.test_arguments_list_positionalcCsJt��}|�d�|�d���\}}|�tdd�|�|�ddg|�dS)Nr�z--foo F --bar --baz�Fr�r�r)rArBrtrqr�r�rI)rrurE�extrasrrr�test_optionals,s

z!TestParseKnownArgs.test_optionalscCsrt��}|jdddtd�|jddd�|�d�gd	�}|�|�\}}|�td
ddd
�|�|�gd�|�dS)Nr�rr
)rr�rRr�r<r�r�)r�r-r�r�rjr�rTr�)�vrr�)r-r�r�)rArBrtr"rqr�rI)rrur�rErrrr�
test_mixed3s
zTestParseKnownArgs.test_mixedN)	rrrrrrrr	rrrrrrsrc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TestIntermixedArgscCstjdd�}|jddd�|jdddd	�}|�d
�|jddtd
�d��}|�|�}|�tdd
dgd�d�|�|�|�\}}|�tdd
dgd�|�|�gd�|�d��}|�	|�\}}|�tdd
ddgd�|�|�gd�|�|�
|j�|�|jd�dS)NrMr�r�ryr�r�r�Trz�cmd�restr%)rrRzcmd --foo x 1 --bar y 2 3r�r�r�)r�r
ryr�rrrjz!cmd --foo x 1 --error 2 --bar y 3r
)z--errorrrj)
rArBrtr"r��parse_intermixed_argsr�rIrqZparse_known_intermixed_argsr}r;r5)rrur�r�rErrrr�
test_basicCs"

zTestIntermixedArgs.test_basiccCs~tdd�}|�d�|�d�|jddd�d��}|�t��}|�|�Wd�n1s^0Y|�t|j�d	�dS)
NrMr�r�r�r�r�rr�z\.\.\.)	rmrtr�r�r�rr�r�rE)rrur�rGrrr�test_remainder^s


(z!TestIntermixedArgs.test_remaindercCs�tdd�}|jdd�}|jdddd�|jd	d
d�|jdd
ddd�|�d���}|�tddgddd�|�|�t|jd���|�|j	d�dS)NrMr�Tr�r�r�r�rRr�r�r�r�r%r�r�rz	1 --foo 2rr)r�ryrr~)
rmr�rtrr�r�rIr�rXr5)rrur{rErrr�test_exclusiveks
z!TestIntermixedArgs.test_exclusivecCshtdd�}|jdd�}|jdddd�|jd	d
d�|jdd
ddd�|�t|jg�|�|jd�dS)NrMr�Tr�r�r�r�rRr�r�r�r�r%r�r�r)rmr�rtr�r�rr�r5r�rrr�test_exclusive_incompatiblews
z.TestIntermixedArgs.test_exclusive_incompatibleN)rrrrrrrrrrrrBs
rc@seZdZdd�ZdS)�!TestIntermixedMessageContentErrorcCs�tddd�}|jdtd�|jdtdd�|�t��}|�g�Wd�n1sT0Yt|j�}|�|d�|�|d	�|�t��}|�	g�Wd�n1s�0Yt|j�}|�
|d�|�|d	�dS)
NrMrrpr�r�r�Tr4r�)rmrtr�r"r�rXrgrEr�rZassertNotRegexr�rrrr��s(
(
zGTestIntermixedMessageContentError.test_missing_argument_name_in_messageN)rrrr�rrrrr�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��rrW)rArBrt)rrrWrurrr�do_test_no_exception�sz+TestAddArgumentMetavar.do_test_no_exceptioncCs\t��}|�t�� }|jd||d�Wd�n1s80Y|�|jjd|j�dS)Nr�rr)	rArBr�rrtr�rErE�EXPECTED_MESSAGE)rrrWrurGrrr�do_test_exception�s.z(TestAddArgumentMetavar.do_test_exceptioncCs|jddd�dS)Nrr�rrrrr�test_nargs_None_metavar_string�sz5TestAddArgumentMetavar.test_nargs_None_metavar_stringcCs|jdt�d�dS)Nr�r�tuplerrrr�test_nargs_None_metavar_length0�sz6TestAddArgumentMetavar.test_nargs_None_metavar_length0cCs|jddd�dS)N�rrrrrrr�test_nargs_None_metavar_length1�sz6TestAddArgumentMetavar.test_nargs_None_metavar_length1cCs|jddd�dS)N�rrr�rrrrr�test_nargs_None_metavar_length2�sz6TestAddArgumentMetavar.test_nargs_None_metavar_length2cCs|jddd�dS)Nrrr#rrrr�test_nargs_None_metavar_length3�sz6TestAddArgumentMetavar.test_nargs_None_metavar_length3cCs|jddd�dS)Nrrrrrrrr�"test_nargs_optional_metavar_string�sz9TestAddArgumentMetavar.test_nargs_optional_metavar_stringcCs|jdt�d�dS)Nrrrrrrr�#test_nargs_optional_metavar_length0�sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length0cCs|jddd�dS)Nrr rrrrrr�#test_nargs_optional_metavar_length1�sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length1cCs|jddd�dS)Nrr"rr#rrrr�#test_nargs_optional_metavar_length2�sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length2cCs|jddd�dS)Nrrrr#rrrr�#test_nargs_optional_metavar_length3�sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length3cCs|jddd�dS)Nr%rrrrrrr�$test_nargs_zeroormore_metavar_string�sz;TestAddArgumentMetavar.test_nargs_zeroormore_metavar_stringcCs|jdt�d�dS)Nr%rrrrrr�%test_nargs_zeroormore_metavar_length0�sz<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length0cCs|jddd�dS)Nr%r rrrrrr�%test_nargs_zeroormore_metavar_length1�sz<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length1cCs|jddd�dS)Nr%r"rrrrrr�%test_nargs_zeroormore_metavar_length2�sz<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length2cCs|jddd�dS)Nr%rrr#rrrr�%test_nargs_zeroormore_metavar_length3�sz<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length3cCs|jddd�dS)Nr)rrrrrrr�#test_nargs_oneormore_metavar_string�sz:TestAddArgumentMetavar.test_nargs_oneormore_metavar_stringcCs|jdt�d�dS)Nr)rrrrrr�$test_nargs_oneormore_metavar_length0�sz;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length0cCs|jddd�dS)Nr)r rr#rrrr�$test_nargs_oneormore_metavar_length1�sz;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length1cCs|jddd�dS)Nr)r"rrrrrr�$test_nargs_oneormore_metavar_length2�sz;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length2cCs|jddd�dS)Nr)rrr#rrrr�$test_nargs_oneormore_metavar_length3�sz;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length3cCs|jddd�dS)Nr�rrrrrrr�#test_nargs_remainder_metavar_string�sz:TestAddArgumentMetavar.test_nargs_remainder_metavar_stringcCs|jdt�d�dS)Nr�r)rrrrrr�$test_nargs_remainder_metavar_length0�sz;TestAddArgumentMetavar.test_nargs_remainder_metavar_length0cCs|jddd�dS)Nr�r rrrrrr�$test_nargs_remainder_metavar_length1�sz;TestAddArgumentMetavar.test_nargs_remainder_metavar_length1cCs|jddd�dS)Nr�r"rrrrrr�$test_nargs_remainder_metavar_length2�sz;TestAddArgumentMetavar.test_nargs_remainder_metavar_length2cCs|jddd�dS)Nr�rrrrrrr�$test_nargs_remainder_metavar_length3�sz;TestAddArgumentMetavar.test_nargs_remainder_metavar_length3cCs|jddd�dS)N�A...rrrrrrr� test_nargs_parser_metavar_string�sz7TestAddArgumentMetavar.test_nargs_parser_metavar_stringcCs|jdt�d�dS)Nr:rrrrrr�!test_nargs_parser_metavar_length0sz8TestAddArgumentMetavar.test_nargs_parser_metavar_length0cCs|jddd�dS)Nr:r rrrrrr�!test_nargs_parser_metavar_length1sz8TestAddArgumentMetavar.test_nargs_parser_metavar_length1cCs|jddd�dS)Nr:r"rr#rrrr�!test_nargs_parser_metavar_length2sz8TestAddArgumentMetavar.test_nargs_parser_metavar_length2cCs|jddd�dS)Nr:rrr#rrrr�!test_nargs_parser_metavar_length3
sz8TestAddArgumentMetavar.test_nargs_parser_metavar_length3cCs|jddd�dS)Nr
rrrrrrr�test_nargs_1_metavar_stringsz2TestAddArgumentMetavar.test_nargs_1_metavar_stringcCs|jdt�d�dS)Nr
rrrrrr�test_nargs_1_metavar_length0sz3TestAddArgumentMetavar.test_nargs_1_metavar_length0cCs|jddd�dS)Nr
r rrrrrr�test_nargs_1_metavar_length1sz3TestAddArgumentMetavar.test_nargs_1_metavar_length1cCs|jddd�dS)Nr
r"rr#rrrr�test_nargs_1_metavar_length2sz3TestAddArgumentMetavar.test_nargs_1_metavar_length2cCs|jddd�dS)Nr
rrr#rrrr�test_nargs_1_metavar_length3sz3TestAddArgumentMetavar.test_nargs_1_metavar_length3cCs|jddd�dS)Nr rrrrrrr�test_nargs_2_metavar_string sz2TestAddArgumentMetavar.test_nargs_2_metavar_stringcCs|jdt�d�dS)Nr rrrrrr�test_nargs_2_metavar_length0#sz3TestAddArgumentMetavar.test_nargs_2_metavar_length0cCs|jddd�dS)Nr r rr#rrrr�test_nargs_2_metavar_length1&sz3TestAddArgumentMetavar.test_nargs_2_metavar_length1cCs|jddd�dS)Nr r"rrrrrr�test_nargs_2_metavar_length2)sz3TestAddArgumentMetavar.test_nargs_2_metavar_length2cCs|jddd�dS)Nr rrr#rrrr�test_nargs_2_metavar_length3,sz3TestAddArgumentMetavar.test_nargs_2_metavar_length3cCs|jddd�dS)Nrrrrrrrr�test_nargs_3_metavar_string1sz2TestAddArgumentMetavar.test_nargs_3_metavar_stringcCs|jdt�d�dS)Nrrrrrrr�test_nargs_3_metavar_length04sz3TestAddArgumentMetavar.test_nargs_3_metavar_length0cCs|jddd�dS)Nrr rr#rrrr�test_nargs_3_metavar_length17sz3TestAddArgumentMetavar.test_nargs_3_metavar_length1cCs|jddd�dS)Nrr"rr#rrrr�test_nargs_3_metavar_length2:sz3TestAddArgumentMetavar.test_nargs_3_metavar_length2cCs|jddd�dS)Nrrrrrrrr�test_nargs_3_metavar_length3=sz3TestAddArgumentMetavar.test_nargs_3_metavar_length3N)3rrrrrrrrr!r$r%r&r'r(r)r*r+r,r-r.r/r0r1r2r3r4r5r6r7r8r9r;r<r=r>r?r@rArBrCrDrErFrGrHrIrJrKrLrMrNrrrrr�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 appropriatecCsZt��}|�t��}|jd|d�Wd�n1s60Y|�|jjd|j�dS�Nr�rr)	rArBr�rrtr�rErE�EXPECTED_RANGE_MESSAGE�rrrurGrrr�do_test_range_exceptionHs,z(TestInvalidNargs.do_test_range_exceptioncCsZt��}|�t��}|jd|d�Wd�n1s60Y|�|jjd|j�dSrP)	rArBr�rrtr�rErE�EXPECTED_INVALID_MESSAGErRrrr�do_test_invalid_exceptionNs,z*TestInvalidNargs.do_test_invalid_exceptioncCs|jdd�|jdd�dS)Nr�rZabcd)rUrrrr�test_nargs_alphabeticVsz&TestInvalidNargs.test_nargs_alphabeticcCs|jdd�dS)Nrr)rSrrrr�test_nargs_zeroZsz TestInvalidNargs.test_nargs_zeroN)	rrrrTrQrSrUrVrWrrrrrOAsrOc@seZdZdd�Zdd�ZdS)�TestImportStarcCs tjD]}|�tt|��qdSr()rA�__all__r�r�r�rrrrcs
zTestImportStar.testcCs0dd�tt���D�}|�t|�ttj��dS)NcSs0g|](\}}|�d�s|dkst�|�s|�qS)r�Zngettext)�
startswith�inspectZismodule)rLr:r'rrrrNhs
�zJTestImportStar.test_all_exports_everything_but_modules.<locals>.<listcomp>)rTrArQr�rPrY)rrQrrr�'test_all_exports_everything_but_modulesgs
�z6TestImportStar.test_all_exports_everything_but_modulesN)rrrrr\rrrrrXasrXcs$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--proxyr^)r
r&rmrurt)rrWrrrr&ss
�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>
            )rur�r�r�r�)rZ	help_textrrr�test_help_with_metavar}s
z*TestWrappingMetavar.test_help_with_metavar)rrrr&r^rrrrrr]qs
r]c@s$eZdZdd�Zdd�Zdd�ZdS)�TestExitOnErrorcCs$tjdd�|_|jjddtd�dS)NF)Z
exit_on_errorz
--integers�N)rWrR)rArBrurtr"rrrrr&�szTestExitOnError.setUpcCs(|j�d���}|�|tjdd��dS)Nz--integers 4r0)Zintegers)rurgr�r�rAr'r)rrr�!test_exit_on_error_with_good_args�sz1TestExitOnError.test_exit_on_error_with_good_argscCs@|�tj�� |j�d���Wd�n1s20YdS)Nz--integers a)r�rAr�rurgr�rrrr� test_exit_on_error_with_bad_args�sz0TestExitOnError.test_exit_on_error_with_bad_argsN)rrrr&rarbrrrrr_�sr_cCsit_t�t_dSr()r�r�r�r	rrrr�tearDownModule�src�__main__)�r[rr�r+r6r4r`r�r)ZunittestrArrr�
TextIOWrapperrrr�r'rDrIrYrXrlrBrmrRrpr�rqr�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrr#r(r*r3r7r9r;r=r>rIrJrSrUr`rarcrerkrmrqrrrurvrxryrzr{r|r}r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rdrer�rrZ	eq_stderrrrZ
eq_bstderrr�r�rrr	ZskipIfr�rr
rrrrrr!r%r,r.r3rBrFrJr�r�r�r�r�r�r�r�r�rrr	r
rrrrrrrrrrr$r&r-r.r<rIrJrKrOrSrVrXrZr\r_rcrhrirjrkrlrmrorqrrrtrvryr{r|r}r~rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrOrXr]r_rcr�mainrrrr�<module>s
&q












""����
A
('4-0#+!$-*(),	��������^R$7/4(69$&"$.
10/+!~-LI%=1*?)