Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib64/python3.5/test/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/test/__pycache__/test_argparse.cpython-35.opt-1.pyc



��Yf���@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZddlm
Z
ddlmZGdd�de�ZGdd�dej�ZGd	d
�d
e�ZGdd�de�ZGd
d�de�ZGdd�de�Zdd�ZGdd�de	j�ZGdd�de�ZefZedei�ZGdd�de�ZGdd�de�ZGdd�de�Z Gdd�de�Z!Gd d!�d!e�Z"Gd"d#�d#e�Z#Gd$d%�d%e�Z$Gd&d'�d'e�Z%Gd(d)�d)e�Z&Gd*d+�d+e�Z'Gd,d-�d-e�Z(Gd.d/�d/e�Z)Gd0d1�d1e�Z*Gd2d3�d3e�Z+Gd4d5�d5e�Z,Gd6d7�d7e�Z-Gd8d9�d9e�Z.Gd:d;�d;e�Z/Gd<d=�d=e�Z0Gd>d?�d?e�Z1Gd@dA�dAe�Z2GdBdC�dCe�Z3GdDdE�dEe�Z4GdFdG�dGe�Z5GdHdI�dIe�Z6GdJdK�dKe�Z7GdLdM�dMe�Z8GdNdO�dOe�Z9GdPdQ�dQe�Z:GdRdS�dSe�Z;GdTdU�dUe�Z<GdVdW�dWe�Z=GdXdY�dYe�Z>GdZd[�d[e�Z?Gd\d]�d]e�Z@Gd^d_�d_e�ZAGd`da�dae�ZBGdbdc�dce�ZCGddde�dee�ZDGdfdg�dge�ZEGdhdi�die�ZFGdjdk�dke�ZGGdldm�dme�ZHGdndo�doe�ZIGdpdq�dqe�ZJGdrds�dse�ZKGdtdu�due�ZLGdvdw�dwe�ZMGdxdy�dye�ZNGdzd{�d{e�ZOGd|d}�d}e�ZPGd~d�de�ZQGd�d��d�e�ZRGd�d��d�e�ZSGd�d��d�e�ZTGd�d��d�e�ZUGd�d��d�e�ZVGd�d��d�e�ZWGd�d��d�e�ZXGd�d��d�e�ZYGd�d��d�e�ZZGd�d��d�e�Z[Gd�d��d�e�Z\Gd�d��d�e�Z]Gd�d��d�e�Z^Gd�d��d�e�Z_Gd�d��d�e�Z`Gd�d��d�e�ZaGd�d��d�e�ZbGd�d��d�e�ZcGd�d��d�e�ZdGd�d��d�e�ZeGd�d��d�e�ZfGd�d��d�e�ZgGd�d��d�e�ZhGd�d��d�e�ZiGd�d��d�e�ZjGd�d��d�e�ZkGd�d��d�ee�ZlGd�d��d�ee�ZmGd�d��d�e�ZnGd�d��d�e�ZoGd�d��d�ee�ZpGd�d��d�ee�ZqGd�d��d�ee�ZrGd�d��d�e�Zsejteued��o	ejv�dkd��Gd�d��d�ee��ZwGd�d��d�ee�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�ZGd�d��d�e�Z�Gd�d��d�e�Z�Gd�d��d�e�Z�Gd�d��d�e�Z�Gd�d��d�e�Z�Gd�d��d�e�e�Z�Gd�d��d�e�e�Z�Gd�d��d�e�e�Z�Gd�d��d�e�e�Z�Gd�d��d�e�e�Z�Gd�d��d�e�e�Z�Gd�d��d�e�e�Z�Gd�d��d�e�e�Z�Gd�d��d�e�Z�Gd�d��d�e�e��Z�Gd�d��d�e�e��Z�Gd�d��d�e�e��Z�Gd�d��d�e�e��Z�Gd�d��d�e�e��Z�Gd�d��d�e�e��Z�Gdd�de�e��Z�Gdd�de�e��Z�Gdd�de�Z�Gdd�de�Z�Gdd	�d	e�Z�Gd
d�de�Z�efZe�dei�Z�Gd
d�de��Z�Gdd�de��Z�Gdd�de��Z�Gdd�de��Z�Gdd�de��Z�Gdd�de��Z�Gdd�de��Z�Gdd�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��Z�Gd=d>�d>e��Z�Gd?d@�d@e��Z�GdAdB�dBe��Z�GdCdD�dDe��Z�GdEdF�dFe��Z�GdGdH�dHe��Z�GdIdJ�dJe��Z�GdKdL�dLe��Z�GdMdN�dNe��Z�GdOdP�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�Z�Gd_d`�d`e�Z�Gdadb�dbe�Z�Gdcdd�dde�Z�Gdedf�dfe�Z�Gdgdh�dhe�Z�Gdidj�dje�Z�Gdkdl�dle�Z�Gdmdn�dne�Z�Gdodp�dpe�Z�Gdqdr�dre�Z�Gdsdt�dte�Z�dudv�Z�e�dwkre��dS(x�N)�StringIO)�support)�mockc@seZdZdS)�StdIOBufferN)�__name__�
__module__�__qualname__�r	r	�7/opt/alt/python35/lib64/python3.5/test/test_argparse.pyrsrc@seZdZdd�ZdS)�TestCasecCs-tj�}|jd�|j|j�dS)N�COLUMNS)r�EnvironmentVarGuardZunset�
addCleanup�__exit__)�self�envr	r	r
�setUps
zTestCase.setUpN)rrrrr	r	r	r
rsrc@s4eZdZdd�Zdd�Zdd�ZdS)�TempDirMixincCs2tj�|_tj�|_tj|j�dS)N)�tempfileZmkdtemp�temp_dir�os�getcwd�old_dir�chdir)rr	r	r
r"szTempDirMixin.setUpcCs�tj|j�x_tj|jdd�D]E\}}}x3|D]+}tjtjj|j|�tj	�q?Wq)Wt
j|jd�dS)N�topdownFT)rrr�walkr�chmod�path�join�stat�S_IWRITE�shutilZrmtree)r�root�dirs�files�namer	r	r
�tearDown's
(
-zTempDirMixin.tearDownc
CsUtjj|j|�}t|d��}|j|�WdQRXtj|tj�dS)N�w)	rrrr�open�writerr�S_IREAD)r�filenameZ	file_path�filer	r	r
�create_readonly_file.sz!TempDirMixin.create_readonly_fileN)rrrrr&r-r	r	r	r
r src@seZdZdd�ZdS)�SigcOs||_||_dS)N)�args�kwargs)rr/r0r	r	r
�__init__6s	zSig.__init__N)rrrr1r	r	r	r
r.4sr.c@s4eZdZdd�Zdd�Zdd�ZdS)�NScKs|jj|�dS)N)�__dict__�update)rr0r	r	r
r1=szNS.__init__cCsHt|jj��}djdd�|D��}dt|�j|fS)Nz, cSsg|]}d|�qS)z%s=%rr	)�.0�tupr	r	r
�
<listcomp>Bs	zNS.__repr__.<locals>.<listcomp>z%s(%s))�sortedr3�itemsr�typer)r�sorted_itemsZ	kwarg_strr	r	r
�__repr__@szNS.__repr__cCst|�t|�kS)N)�vars)r�otherr	r	r
�__eq__Esz	NS.__eq__N)rrrr1r<r?r	r	r	r
r2;sr2c@s%eZdZddddd�ZdS)�ArgumentParserErrorNcCs>tj||||�||_||_||_||_dS)N)�	Exceptionr1�message�stdout�stderr�
error_code)rrBrCrDrEr	r	r
r1Ks
			zArgumentParserError.__init__)rrrr1r	r	r	r
r@Isr@c
OsXttjt�s$ttjt�r1|||�Stj}tj}t�t_t�t_z�y�|||�}xjtt|��D]V}t||�tjkr�t|||�t||�tjkr�t|||�q�W|SWnXt	k
r<tj
�dj}tjj�}tjj�}	t
d||	|��YnXWd|t_|t_XdS)N��
SystemExit)�
isinstance�sysrDrrC�listr=�getattr�setattrrG�exc_info�code�getvaluer@)
�
parse_argsr/r0Z
old_stdoutZ
old_stderr�result�keyrNrCrDr	r	r
�stderr_to_parser_errorSs,$
		
	rScsFeZdZ�fdd�Z�fdd�Z�fdd�Z�S)�ErrorRaisingArgumentParsercs"tt|�j}t|||�S)N)�superrTrPrS)rr/r0rP)�	__class__r	r
rPusz%ErrorRaisingArgumentParser.parse_argscs"tt|�j}t|||�S)N)rUrT�exitrS)rr/r0rW)rVr	r
rWyszErrorRaisingArgumentParser.exitcs"tt|�j}t|||�S)N)rUrT�errorrS)rr/r0rX)rVr	r
rX}sz ErrorRaisingArgumentParser.error)rrrrPrWrXr	r	)rVr
rTssrTc@s"eZdZdZdd�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�|dkrdSt|d�s+t�|_t|d�sCt|_dd�}dd�}dd	�}d
d�}dd
�}Gdd�dt�}	x>|||gD]-}
x$||gD]}|	||
|�q�Wq�WdS)N�ParserTestCase�parser_signature�parser_classcSs+x$|D]}|j|j|j�qWdS)z(Add all arguments directly to the parserN)�add_argumentr/r0)�parser�argument_signatures�sigr	r	r
�	no_groups�s
z1ParserTesterMetaclass.__init__.<locals>.no_groupscSs:|jd�}x$|D]}|j|j|j�qWdS)z4Add all arguments under a single group in the parser�fooN)�add_argument_groupr]r/r0)r^r_�groupr`r	r	r
�	one_group�s
z1ParserTesterMetaclass.__init__.<locals>.one_groupcSsJxCt|�D]5\}}|jd|�}|j|j|j�q
WdS)z0Add each argument in its own group to the parserzfoo:%iN)�	enumeratercr]r/r0)r^r_�ir`rdr	r	r
�many_groups�sz3ParserTesterMetaclass.__init__.<locals>.many_groupscSs
|j|�S)z#Parse the args by passing in a list)rP)r^r/r	r	r
�listargs�sz0ParserTesterMetaclass.__init__.<locals>.listargscSs<tj}|dg|t_z|j�SWd|t_XdS)z(Parse the args by defaulting to sys.argvrN)rI�argvrP)r^r/Zold_sys_argvr	r	r
�sysargs�s
	z/ParserTesterMetaclass.__init__.<locals>.sysargsc@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
z0ParserTesterMetaclass.__init__.<locals>.AddTestsc
Ss�||_||_|jj}|jj}x�|j|jgD]n}|j}|||f}dj|�}	|dd�}
y
|	|
_Wntk
r�YnXt||	|
�q=WdS)N�_cSs||�dS)Nr	)r�	test_funcr	r	r
�wrapper�szJParserTesterMetaclass.__init__.<locals>.AddTests.__init__.<locals>.wrapper)�_add_arguments�_parse_argsr�
test_failures�test_successesr�	TypeErrorrL)rZ
tester_cls�
add_argumentsrPZadd_arguments_nameZparse_args_namermZ	func_name�names�	test_namernr	r	r
r1�s			

z9ParserTesterMetaclass.__init__.<locals>.AddTests.__init__cSsA|jj}|jj}|j||�}|j||j�|S)N)r[r/r0r\ror_)r�testerr/r0r^r	r	r
�_get_parser�s
z<ParserTesterMetaclass.__init__.<locals>.AddTests._get_parserc
Ss]|j|�}xG|jD]<}|j�}|jtd|��|j|�WdQRXqWdS)N�msg)rx�failures�split�assertRaisesr@rP)rrwr^�args_strr/r	r	r
rq�s
z>ParserTesterMetaclass.__init__.<locals>.AddTests.test_failurescSsj|j|�}xT|jD]I\}}t|t�r@|j�}|j||�}|j||�qWdS)N)rx�	successesrH�strr{rp�assertEqual)rrwr^r/�expected_nsZ	result_nsr	r	r
rr�sz?ParserTesterMetaclass.__init__.<locals>.AddTests.test_successesN)rrrr1rxrqrrr	r	r	r
�AddTests�sr�)�hasattrr.r[rTr\�object)�clsr%�bases�bodydictrarerhrirkr�rtrPr	r	r
r1�s		-zParserTesterMetaclass.__init__N)rrr�__doc__r1r	r	r	r
rY�srYrZc@s�eZdZdZed�gZdddddgZdedd	�fd
edd�fdedd�fdedd
�fdedd
�fgZd	S)�TestOptionalsSingleDashz1Test an Optional with a single-dash option stringz-x�az--fooz-x --fooz-x -y��xNz-x az-xaz-x -1z-1z-x-1)	rrrr�r.r_rzr2r~r	r	r	r
r��sr�c@s�eZdZdZeddd�eddddd�ed	�gZd
ddd
dddddddgZdedddddd�fdedddddd�fdedddddd
�fdedddddd
�fdedddddd
�fdedddddd
�fd edddddd
�fd!edddddd
�fd"edddddd�fdedddddd�fd#edddddd
�fd$edddddd
�fgZdS)%�TestOptionalsSingleDashCombinedz1Test an Optional with a single-dash option stringz-x�action�
store_truez-yyy�store_const�const�*z-zr�z--fooz-xaz-x --fooz-x -zz-z -xz-yxz-yz az-yyyxz-yyyzaz-xyzar�r�F�yyyN�zTz-zaz-z az-xzaz-xz az-x -zaz-x -z az-yz-x -yyy -zaz-x -yyy -z a)	rrrr�r.r_rzr2r~r	r	r	r
r�s$r�c@s�eZdZdZed�gZddddddgZded	d
�fded	d�fded	d
�fded	d�fded	d�fgZd
S)�TestOptionalsSingleDashLongzATest an Optional with a multi-character single-dash option stringz-foor�z--fooz
-foo --fooz-foo -yz-fooar�rbNz-foo az-foo -1z-1z-fo az-f a)	rrrr�r.r_rzr2r~r	r	r	r
r�"sr�c@s*eZdZdZed�ed�ed�gZdddddd	d
gZdedd
dd
dd
�fdedddd
dd
�fdedddd
dd
�fdedddd
dd
�fdedddd
dd
�fdedd
dddd
�fdedd
dd
dd�fgZd
S)�&TestOptionalsSingleDashSubsetAmbiguousz=Test Optionals where option strings are subsets of each otherz-fz-foobarz-foorabz-fooz-foz-foo bz-foobz-foobaz-foorar��fN�foobar�foorabz-f ar�z-faz-foaZoaz-fooaZooaz	-foobar az	-foorab a)	rrrr�r.r_rzr2r~r	r	r	r
r�0s!r�c@s�eZdZdZed�ed�gZdddddd	d
gZdedd
dd
�fdedddd
�fdedd
dd�fdedddd
�fdedd
dd�fdedddd
�fdedd
dd�fgZd
S)� TestOptionalsSingleDashAmbiguousz7Test Optionals that partially match but are not subsetsz-foobarz-foorabz-fz-f az-faz-foaz-fooz-foz-foo br�r�Nr�z-foob ar�z-foor az-fooba az-foora az	-foobar az	-foorab a)	rrrr�r.r_rzr2r~r	r	r	r
r�@sr�c@s�eZdZdZeddd�gZdddddd	gZd
edd�fdedd�fd
edd�fdedd�fgZdS)�TestOptionalsNumericz(Test an Optional with a short opt stringz-1�destZoner�z-1 --fooz-1 -yz-1 -1z-1 -2r�Nz-1 az-1az-1-2z-2)	rrrr�r.r_rzr2r~r	r	r	r
r�Psr�c@s�eZdZdZed�gZddddddgZded	d
�fded	d�fded	d�fd
ed	d�fded	d�fgZd
S)�TestOptionalsDoubleDashz1Test an Optional with a double-dash option stringz--fooz-fz-f ar�z--foo -xz--foo --barr�rbNz--foo az--foo=az
--foo -2.5z-2.5z
--foo=-2.5)	rrrr�r.r_rzr2r~r	r	r	r
r�]sr�c@s�eZdZdZeddd�ed�gZdddd	d
dgZded
ddd�fded
ddd�fded
ddd�fded
ddd�fded
ddd�fded
ddd�fgZdS)�#TestOptionalsDoubleDashPartialMatchz7Tests partial matching with a double-dash option stringz--badgerr�r�z--batz--barz--bz--baz--b=2z--ba=4z	--badge 5r��badgerFZbatNz--bat X�Xz--badTz--badgz--badge)	rrrr�r.r_rzr2r~r	r	r	r
r�ksr�c@s�eZdZdZeddd�ed�gZddddd	gZd
eddd
d�fdeddd
d�fdeddd
d�fdeddd
d�fdeddd
d�fdeddd
d�fdeddd
d�fgZdS)�"TestOptionalsDoubleDashPrefixMatchz?Tests when one double-dash option string is a prefix of anotherz--badgerr�r�z--baz--barz--bz--b=2z	--badge 5r�r�FZbaNz--ba Xr�z--ba=Xz--badTz--badgz--badge)	rrrr�r.r_rzr2r~r	r	r	r
r�}sr�c
@seZdZdZeddd�ed�eddddd	�gZdd
ddd
dgZdedddddd�fdedddddd�fdedddddd�fdedddddd�fdedddddd	�fdedddddd	�fgZdS)�TestOptionalsSingleDoubleDashz<Test an Optional with single- and double-dash option stringsz-fr�r�z--barz-bazr�r�r�z-fbarz-fbazz-bazfz-b B�Br�r�F�barN�bazTz--ba Bz
-f --bar Bz-f -bz-ba -f)	rrrr�r.r_rzr2r~r	r	r	r
r��s	r�c
@sBeZdZdZedddd�Zeddd�ed	�ed
dddd
�gZddddddddddddgZdedddddd�fdedddddd�fd edddddd�fd!edddddd�fd"edddddd
�fd#edddddd
�fgZ	dS)$�!TestOptionalsAlternatePrefixCharsz9Test an Optional with option strings with custom prefixes�prefix_charsz+:/�add_helpFz+fr�r�z::barz/bazr�r�r�z--barz-fbarz-b Br�z-fz--bar Bz-bazz-hz--helpz+hz::helpz/helpr�r�r�Nr�Tz::ba Bz
+f ::bar Bz+f /bz/ba +f)
rrrr�r.r[r_rzr2r~r	r	r	r
r��s	*r�c
@s3eZdZdZedddd�Zeddd�ed	�ed
dddd
�gZdddddddgZdedddddd�fdedddddd�fdedddddd�fdedddddd�fdedddddd
�fdedddddd
�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�z+:/r�Tz+fr�r�z::barz/bazr�r�r�z--barz-fbarz-b Br�z-fz--bar Bz-bazr�r�Fr�Nr�z::ba Bz
+f ::bar Bz+f /bz/ba +f)
rrrr�r.r[r_rzr2r~r	r	r	r
r��s	r�c@s�eZdZdZedddd�Zeddd�ed	dd�ed
dd�gZddd
ddgZdedddddd�fdedddddd�fdedddddd�fdedddddd�fgZ	dS)�2TestOptionalsAlternatePrefixCharsMultipleShortArgsz@Verify that Optionals must be called with their defined prefixesr�z+-r�Fz-xr�r�z+yz+zz-wz-xyzz+xz-yz+xyzr�r��yr�Tz+y -xz+yz -xN)
rrrr�r.r[r_rzr2r~r	r	r	r
r��s	r�c@s�eZdZdZedddddd�gZdd	d
dgZded
d�fded
d�fded
d�fded
d�fded
d�fgZdS)�TestOptionalsShortLongz<Test a combination of single- and double-dash option stringsz-vz	--verbosez-nz--noisyr�r�z
--x --verbosez-Nr�z-v xr��verboseFTN)	rrrr�r.r_rzr2r~r	r	r	r
r��sr�c	@s�eZdZdZed�eddd�gZdgZdedd	dd
�fdedd
dd�fd
edddd�fdedddd�fgZd
S)�TestOptionalsDestz*Tests various means of setting destinationz	--foo-barz--bazr�Zzabbazr�z--foo-bar fZfoo_barr�Nz--baz g�gz--foo-bar h --baz i�hrgz--baz j --foo-bar k�k�j)	rrrr�r.r_rzr2r~r	r	r	r
r��s	r�c@s�eZdZdZed�eddd�gZdgZdedd	d
d�fdeddd
d�fdedd	d
d
�fgZd	S)
�TestOptionalsDefaultz*Tests specifying a default for an Optionalz-xz-y�defaultr�r�r�r�Nr�z-xxz-yy)	rrrr�r.r_rzr2r~r	r	r	r
r�s	r�c@s[eZdZdZed�gZddgZdedd�fdedd�fgZdS)�TestOptionalsNargsDefaultz7Tests not specifying the number of args for an Optionalz-xr�r�r�Nz-x a)	rrrr�r.r_rzr2r~r	r	r	r
r�
s
r�c@sdeZdZdZeddd�gZddgZdedd�fd	eddg�fgZdS)
�TestOptionalsNargs1z&Tests specifying 1 arg for an Optionalz-x�nargsrFr�r�r�Nz-x a)	rrrr�r.r_rzr2r~r	r	r	r
r�s
r�c@sveZdZdZeddd�gZdddddd	gZd
edd�fd
eddddg�fgZdS)�TestOptionalsNargs3z'Tests specifying 3 args for an Optionalz-xr��r�z-x az-x a bza -xza -x br�r�Nz-x a b c�b�c)	rrrr�r.r_rzr2r~r	r	r	r
r�#s
r�c@s�eZdZdZeddd�eddddd�edddd	d
�eddddedd
d	d�gZdgZdedddddd
dd�fdedddddd
dd�fdedddddd
dd�fdedddddd
dd�fdedddddd
dd�fdedddddddd�fdedddddddd�fdedddddd
dd�fdedddddd
dd�fg	Z	dS)�TestOptionalsNargsOptionalz0Tests specifying an Optional arg for an Optionalz-wr��?z-xr�r�z-yr��spamz-zr:�42Z84�2r�r'Nr�r�r��Tz-w 2z-x 2z-y 2z-z 2�)
rrrr�r.�intr_rzr2r~r	r	r	r
r�.s'	$$$$$$$$r�c
@s	eZdZdZeddd�eddddd�gZdgZd	ed
ddd�fded
gdd�fd
ed
dgdd�fded
ddgdd�fded
ddg�fded
dddg�fded
ddddg�fgZdS)�TestOptionalsNargsZeroOrMorez?Tests specifying args for an Optional that accepts zero or morez-xr��*z-yr�r�r�r�r�Nr�z-x az-x a br�z-y az-y a b)	rrrr�r.r_rzr2r~r	r	r	r
r�Es	r�c@s�eZdZdZeddd�eddddd�gZdddd	d
gZdedd
dd�fdeddgdd�fdedddgdd�fdedd
ddg�fdedd
dddg�fgZd
S)�TestOptionalsNargsOneOrMorez>Tests specifying args for an Optional that accepts one or morez-xr��+z-yr�r�r�za -xza -y br�r�Nr�z-x az-x a br�z-y az-y a b)	rrrr�r.r_rzr2r~r	r	r	r
r�Xsr�c@s�eZdZdZeddd�eddeded��gZdd	d
ddgZd
e	dddd�fde	dddd�fde	dddd�fde	dddd�fde	dddd�fde	dddd�fgZ
dS)�TestOptionalsChoicesz,Tests specifying the choices for an Optionalz-f�choices�abcz-gr:�r�z-f dz-fadz-gaz-g 6r�r�Nr�z-f az-f cr�z-g 0rz-g 03r�z-fb -g4r��)rrrr�r.r��ranger_rzr2r~r	r	r	r
r�is!r�c@sgeZdZdZeddedd�gZddgZded	d
�fded	d�fgZ	d
S)�TestOptionalsRequiredz)Tests an optional action that is requiredz-xr:�requiredTr�r�z-x 1r�rFz-x42r�N)
rrrr�r.r�r_rzr2r~r	r	r	r
r�zs
r�c@saeZdZdZeddd�gZddgZdedd	�fd
edd�fgZd	S)�TestOptionalsActionStorez&Tests the store action for an Optionalz-xr��storer�za -xr�r�Nz-xfoorb)	rrrr�r.r_rzr2r~r	r	r	r
r��s
r�c@sdeZdZdZedddde�gZdgZdedd	�fdede�fgZ	d	S)
�TestOptionalsActionStoreConstz,Tests the store_const action for an Optionalz-yr�r�r�r�r�r�N)
rrrr�r.r�r_rzr2r~r	r	r	r
r��s
	r�c@sdeZdZdZeddd�gZdddgZded	d
�fded	d�fgZdS)
�TestOptionalsActionStoreFalsez,Tests the store_false action for an Optionalz-zr��store_falser�z-zaz-z ar�r�TFN)	rrrr�r.r_rzr2r~r	r	r	r
r��s
r�c@sdeZdZdZeddd�gZdddgZded	d
�fded	d�fgZdS)
�TestOptionalsActionStoreTruez+Tests the store_true action for an Optionalz--appler�r�r�z	--apple=bz	--apple br�ZappleFTN)	rrrr�r.r_rzr2r~r	r	r	r
r��s
r�c@s�eZdZdZeddd�gZddddgZded	d
�fded	dg�fded	dd
g�fgZd
S)�TestOptionalsActionAppendz'Tests the append action for an Optionalz--bazr��appendr�za --bazz	--baz a br�r�Nz--baz az--baz a --baz br�)	rrrr�r.r_rzr2r~r	r	r	r
r��sr�c@s�eZdZdZedddddg�gZdddd	gZd
eddg�fdedddg�fd
eddddg�fgZdS)�$TestOptionalsActionAppendWithDefaultz'Tests the append action for an Optionalz--bazr�r�r�r�r�za --bazz	--baz a br�r�z--baz az--baz a --baz br�N)	rrrr�r.r_rzr2r~r	r	r	r
r��sr�c	@s�eZdZdZedddde�eddddd	�gZd
dddd
gZded	d�fded	eg�fded	ededg�fgZ	dS)�TestOptionalsActionAppendConstz-Tests the append_const action for an Optionalz-br��append_constr�z-cr�r�r�r�za -cz-bxz-b xr�Nz-b -cx -b -cyzr��yz)
rrrr�r.rAr_rzr2r~r	r	r	r
r��sr�c
@s�eZdZdZeddddeddg�eddd	d
d�gZddd
ddgZdeddg�fdeddeg�fdeddededg�fgZ	dS)�)TestOptionalsActionAppendConstWithDefaultz-Tests the append_const action for an Optionalz-br�r�r�r�r�z-cr�r�r�r�za -cz-bxz-b xr�z-b -cx -b -cyzr�r�N)
rrrr�r.rAr_rzr2r~r	r	r	r
r��sr�c@sgeZdZdZeddd�gZddddgZd	ed
d�fded
d�fgZdS)
�TestOptionalsActionCountz&Tests the count action for an Optionalz-xr��countr�z-x az-x bz	-x a -x br�r�NrF)	rrrr�r.r_rzr2r~r	r	r	r
r��s
r�c@s�eZdZdZed�ed�eddd�gZddgZd	ed
dddd
d�fded
dddd
d�fded
dddd
d�fded
dddd
d�fgZdS)�"TestOptionalsAllowLongAbbreviationz2Allow long options to be abbreviated unambiguouslyz--fooz--foobazz--foobler�r�z--foob 5z--foobr�rbNZfoobazZfoobleFz--foo 7�7z	--fooba ar�z--foobl --foo gr�T)	rrrr�r.r_rzr2r~r	r	r	r
r��s		r�c
@s�eZdZdZedd�Zed�eddd�ed�gZd	d
ddgZd
edddddd�fdedddddd�fdedddddd�fgZ	dS)�%TestOptionalsDisallowLongAbbreviationz1Do not allow abbreviations of long options at allZallow_abbrevFz--fooz--foodler�r�z--foonlyz-foon 3z--foon 3z--foodz--food --foo 2r�rbNZfoodleZfoonlyz--foo 3�3z--foonly 7 --foodle --foo 2r�Tr�)
rrrr�r.r[r_rzr2r~r	r	r	r
r�s	r�c@sLeZdZdZed�gZdddgZdedd�fgZdS)�TestPositionalsNargsNonez,Test a Positional that doesn't specify nargsrbr�z-xza br�N)	rrrr�r.r_rzr2r~r	r	r	r
r�sr�c@sUeZdZdZeddd�gZdddgZdeddg�fgZd	S)
�TestPositionalsNargs1z.Test a Positional that specifies an nargs of 1rbr�rFr�z-xza br�N)	rrrr�r.r_rzr2r~r	r	r	r
r�#sr�c@s[eZdZdZeddd�gZddddgZd	eddd
g�fgZdS)�TestPositionalsNargs2z.Test a Positional that specifies an nargs of 2rbr�r�r�r�z-xza b cza br�N)	rrrr�r.r_rzr2r~r	r	r	r
r�-sr�c@syeZdZdZeddd�gZdgZdedg�fdeddg�fdeddd	g�fgZd
S)�TestPositionalsNargsZeroOrMorez0Test a Positional that specifies unlimited nargsrbr�r�z-xr�r�za br�N)	rrrr�r.r_rzr2r~r	r	r	r
r�7s	r�c@seZdZdZeddddd�gZdgZdedd�fd	edd	g�fd
edd	dg�fgZdS)
�%TestPositionalsNargsZeroOrMoreDefaultz>Test a Positional that specifies unlimited nargs and a defaultrbr�r�r�r�z-xr�r�za br�N)	rrrr�r.r_rzr2r~r	r	r	r
r�Cs	r�c@sjeZdZdZeddd�gZddgZdeddg�fdeddd	g�fgZd
S)�TestPositionalsNargsOneOrMorez2Test a Positional that specifies one or more nargsrbr�r�r�z-xr�za br�N)	rrrr�r.r_rzr2r~r	r	r	r
r�Os
r�c@saeZdZdZeddd�gZddgZdedd�fd	edd	�fgZdS)
�TestPositionalsNargsOptionalzTests an Optional Positionalrbr�r�z-xza br�Nr�)	rrrr�r.r_rzr2r~r	r	r	r
r�Zs
r�c@sgeZdZdZeddddd�gZddgZd	edd�fd
edd
�fgZdS)�#TestPositionalsNargsOptionalDefaultz1Tests an Optional Positional with a default valuerbr�r�r�r�z-xza br�r�N)	rrrr�r.r_rzr2r~r	r	r	r
r�es
r�c@speZdZdZeddddedd�gZdd	d
gZdedd�fd
edd�fgZ	dS)�,TestPositionalsNargsOptionalConvertedDefaultznTests an Optional Positional with a default value
    that needs to be converted to the appropriate type.
    rbr�r�r:r�r�z-xza bz1 2r�r��1rFN)
rrrr�r.r�r_rzr2r~r	r	r	r
r�ps
!r�c@s^eZdZdZed�ed�gZddddgZdedddd	�fgZd
S)�TestPositionalsNargsNoneNonez-Test two Positionals that don't specify nargsrbr�r�z-xr�za b cza br�N)	rrrr�r.r_rzr2r~r	r	r	r
r�sr�c@sgeZdZdZed�eddd�gZdddd	gZd
eddddg�fgZdS)
�TestPositionalsNargsNone1z6Test a Positional with no nargs followed by one with 1rbr�r�rFr�z--foor�za b cza br�N)	rrrr�r.r_rzr2r~r	r	r	r
r��sr�c@smeZdZdZeddd�ed�gZdddd	d
gZdedddgdd
�fgZdS)�TestPositionalsNargs2Nonez8Test a Positional with 2 nargs followed by one with nonerbr�r�r�r�z--foor�za bza b c dza b cr�r�N)	rrrr�r.r_rzr2r~r	r	r	r
r��sr�c	@s�eZdZdZed�eddd�gZddgZdedddg�fd	edddd
g�fdedddd
dg�fgZd
S)�"TestPositionalsNargsNoneZeroOrMorez>Test a Positional with no nargs followed by one with unlimitedrbr�r�r�r�z--foor�za br�za b cr�N)	rrrr�r.r_rzr2r~r	r	r	r
r��sr�c@s�eZdZdZed�eddd�gZdddgZd	edddd
g�fdedddd
dg�fgZd
S)�!TestPositionalsNargsNoneOneOrMorez@Test a Positional with no nargs followed by one with one or morerbr�r�r�r�z--foor�za br�za b cr�N)	rrrr�r.r_rzr2r~r	r	r	r
r��s
r�c@syeZdZdZed�eddd�gZdddgZd	edd	dd
�fdedd	dd�fgZd
S)
� TestPositionalsNargsNoneOptionalz@Test a Positional with no nargs followed by one with an Optionalrbr�r�r�r�z--fooza b cr�Nza br�)	rrrr�r.r_rzr2r~r	r	r	r
r��s
r�c@s�eZdZdZeddd�ed�gZddgZdedgdd�fd	eddgdd
�fdeddd
gdd�fgZd
S)�"TestPositionalsNargsZeroOrMoreNonez@Test a Positional with unlimited nargs followed by one with nonerbr�r�r�r�z--foor�za br�za b cr�N)	rrrr�r.r_rzr2r~r	r	r	r
r��sr�c@s�eZdZdZeddd�ed�gZdddgZd	eddgdd
�fdeddd
gdd�fgZd
S)�!TestPositionalsNargsOneOrMoreNonezBTest a Positional with one or more nargs followed by one with nonerbr�r�r�r�z--foor�za br�za b cr�N)	rrrr�r.r_rzr2r~r	r	r	r
r��s
r�c@seZdZdZeddddd�ed�gZdd	d
gZdedddd�fdedddd
�fgZdS)� TestPositionalsNargsOptionalNonezBTest a Positional with an Optional nargs followed by one with nonerbr�r�r�r�r�r�z--fooza b cr�za br�N)	rrrr�r.r_rzr2r~r	r	r	r
r��s
$r�c@s�eZdZdZeddd�eddd�gZddd	gZd
edd	dgdg�fdedd	dgdd
g�fgZdS)�TestPositionalsNargs2ZeroOrMorez=Test a Positional with 2 nargs followed by one with unlimitedrbr�r�r�r�r�z--foor�za br�za b cr�N)	rrrr�r.r_rzr2r~r	r	r	r
r��s
$r�c@sseZdZdZeddd�eddd�gZddd	d
gZdedd	dgdd
g�fgZdS)�TestPositionalsNargs2OneOrMorez?Test a Positional with 2 nargs followed by one with one or morerbr�r�r�r�r�z--foor�za bza b cr�r�N)	rrrr�r.r_rzr2r~r	r	r	r
r��s$r�c@s�eZdZdZeddd�eddd�gZddd	d
gZdedd	dgdd
�fdedd	dgdd�fgZd
S)�TestPositionalsNargs2Optionalz7Test a Positional with 2 nargs followed by one optionalrbr�r�r�r�r�z--foor�za b c dza br�Nza b cr�)	rrrr�r.r_rzr2r~r	r	r	r
r��s
$r�c@s�eZdZdZeddd�eddd�gZddgZd	edgdd	g�fd
edd	gddg�fdedd	dgdd
g�fgZdS)�TestPositionalsNargsZeroOrMore1z=Test a Positional with unlimited nargs followed by one with 1rbr�r�r�rFr�z--foor�za br�za b cr�N)	rrrr�r.r_rzr2r~r	r	r	r
r�s$r�c@s�eZdZdZeddd�eddd�gZddd	gZd
edd	gddg�fdedd	dgdd
g�fgZdS)�TestPositionalsNargsOneOrMore1z?Test a Positional with one or more nargs followed by one with 1rbr�r�r�rFr�z--foor�za br�za b cr�N)	rrrr�r.r_rzr2r~r	r	r	r
r�
s
$r�c@s�eZdZdZeddd�eddd�gZddd	gZd
edddd
g�fdedd
dd
g�fgZdS)�TestPositionalsNargsOptional1z?Test a Positional with an Optional nargs followed by one with 1rbr�r�r�rFr�z--fooza b cr�Nza br�)	rrrr�r.r_rzr2r~r	r	r	r
r�s
$r�c	@s�eZdZdZed�eddd�eddd�gZdd	d
gZdedd
dgddg�fd
edd
ddgddg�fgZdS)�#TestPositionalsNargsNoneZeroOrMore1z=Test three Positionals: no nargs, unlimited nargs and 1 nargsrbr�r�r�r�rFr�z--foor�za br�za b cr�N)	rrrr�r.r_rzr2r~r	r	r	r
r�#s	!r�c	@s�eZdZdZed�eddd�eddd�gZdd	d
dgZdedd
ddgdd
g�fdedd
ddd
gddg�fgZdS)�"TestPositionalsNargsNoneOneOrMore1z?Test three Positionals: no nargs, one or more nargs and 1 nargsrbr�r�r�r�rFr�z--foor�r�za b cr�za b c d�dN)	rrrr�r.r_rzr2r~r	r	r	r
r�2s	$r�c	@s�eZdZdZed�eddddd�eddd	�gZd
ddgZd
eddddddg�fdeddddddg�fgZdS)�!TestPositionalsNargsNoneOptional1z;Test three Positionals: no nargs, optional narg and 1 nargsrbr�r�r�r�g�?r�rFr�z--foor�za br�za b cr�N)	rrrr�r.r_rzr2r~r	r	r	r
r�As	!r�c@s�eZdZdZeddd�eddddd�gZdd	gZd
edddd�fdedddd�fd
edddd�fgZdS)�$TestPositionalsNargsOptionalOptionalzTest two optional nargsrbr�r�r�r�r�z--fooza b cr�Nr�za br�)	rrrr�r.r_rzr2r~r	r	r	r
rPsrc
@s�eZdZdZeddd�eddd�gZdgZdedd	dg�fd
edd
dg�fdedd
ddg�fd
edd
dddg�fgZd	S)�&TestPositionalsNargsOptionalZeroOrMorez1Test an Optional narg followed by unlimited nargsrbr�r�r�r�z--foor�Nr�za br�za b cr�)	rrrr�r.r_rzr2r~r	r	r	r
r_s$	rc	@s�eZdZdZeddd�eddd�gZddgZd	edd
dd	g�fdedd	ddg�fd
edd	dddg�fgZd
S)�%TestPositionalsNargsOptionalOneOrMorez3Test an Optional narg followed by one or more nargsrbr�r�r�r�r�z--foor�Nza br�za b cr�)	rrrr�r.r_rzr2r~r	r	r	r
rls$rc@speZdZdZedded��gZddddd	gZd
edd
�fdedd�fgZ	dS)
�TestPositionalsChoicesStringz&Test a set of single-character choicesr�r�Zabcdefgr�z--foor�r��efr�r�N)
rrrr�r.�setr_rzr2r~r	r	r	r
rxs
rc@sveZdZdZeddeded��gZdddd	d
gZde	dd�fd
e	dd�fgZ
dS)�TestPositionalsChoicesIntzTest a set of integer choicesr�r:r��r�z--foor�r�r�4r��15�N)rrrr�r.r�r�r_rzr2r~r	r	r	r
r�s
!rc@syeZdZdZeddd�eddddd�gZddd	d
dgZdedd	d
dgg�fgZdS)�TestPositionalsActionAppendzTest the 'append' actionr�r�r�r�r�r�z--foor�za bza b c dza b cr�r�N)	rrrr�r.r_rzr2r~r	r	r	r
r�s
rc	@s�eZdZdZeddd�eddddd	�gZd
dgZdedd
dd�fdedddd�fdedd
dd�fdedddd�fgZd
S)�"TestOptionalsNumericAndPositionalsz;Tests negative number args when numeric options are presentr�r�r�z-4r�r�r�r�z-2z-315r�NFr�Tz-4 a)	rrrr�r.r_rzr2r~r	r	r	r
r�src
@s�eZdZdZeddd�eddddd	�gZd
gZdedddd
�fdedddd
�fdedddd
�fdedddd�fdedddd�fgZdS)�(TestOptionalsAlmostNumericAndPositionalszBTests negative number args when almost numeric options are presentr�r�r�z-k4r�r�r�r�z-k3r�NFz-2r�Tz-k4 a)	rrrr�r.r_rzr2r~r	r	r	r
r
�s	r
c
@s'eZdZeddd�edddd�gZdgZdgedddd	�fd
gedd
dd	�fdgedddd	�fddgedd	dd�fdd
gedd	dd
�fddgedd	dd�fdgedd	dd
�fd
gedd	dd�fgZd	S)�$TestEmptyAndSpaceContainingArgumentsr�r�r�z-yz--yyyr�r�r�Nza badgerz	-a badgerz--yyy=a badgerz--yyy=-a badger)rrrr.r_rzr2r~r	r	r	r
r�s	rc
@s6eZdZedd�Zeddddddd	�ed
ddded
d�eddddd�gZddgZdedddddd�fdedd	dddd�fdedddddd�fdedddddd�fdedddddd�fdedddddd�fgZ	dS) � TestPrefixCharacterOnlyArgumentsr�z-+�-r�r�r�r�r�r�r�r�r:r�r�z-+-r�r�r�z-yz+ -r�NFz- Xr�z+ -3r�Tz- ===z===���)
rrrr.r[r�r_rzr2r~r	r	r	r
r�src@seZdZdZeddd�eddd�gZgZdedddg�fdedgdg�fd	edd
gdg�fdedd
gddg�fd
edddd
g�fd
edgdd
g�fdeddgdd
g�fgZdS)�TestNargsZeroOrMorez?Tests specifying args for an Optional that accepts zero or morez-xr�r�r�r�r�Nz-x ar�z	-x a -- br�za -xza -x b)	rrrr�r.r_rzr2r~r	r	r	r
r�s$rc@s�eZdZdZed�eddd�ed�gZdddgZd	edd	dgd
d�fdedd	dgd
d
�fdedd	ddddd
gd
d�fdedd	dddgd
d�fgZdS)�TestNargsRemainderz2Tests specifying a positional with nargs=REMAINDERr�r�r�z...z-zr�z-z Zr�r�Nz-z Z X�Zz
X A B -z Z�Ar�z	X Y --foo�Yz--foo)	rrrr�r.r_rzr2r~r	r	r	r
r�s'*rc@s�eZdZdZedde�eddedd�eddd	�gZdd
ddd
ddddddddg
Zdedddddg�fdedddddg�fdeddddddg�fdedddddg�fdedddd&dg�fd edddddg�fd!eddddddg�fdeddddddg�fd"edd#ddddg�fd$edd#ddddg�fd%edddd#ddg�fgZ	dS)'�TestOptionLikez.Tests options that may or may not be argumentsz-xr:z-3r�r�r�r�r�z-y2.5z-xaz-x -az-x -3z-x -3.5z-3 -3.5z-x -2.5z	-x -2.5 az-3 -.5za x -1z-x -1 az-3 -1 ar�r�Nz-x 2.5g@z-x 2.5 ar�z-3.5g�?z-3-.5z-3 .5za -3.5za -x 1g�?z-x 1 az-3 1 ag�)
rrrr�r.�floatr_rzr2r~r	r	r	r
rs&		!!!!!rc
@s�eZdZdZeddddej�eddddej�edd	d
dej�gZdgZde	�fd
e	dd
�fde	dd
ddg�fde	dd�fde	dd
dd�fde	dd
ddgdd�fgZ
dS)�TestDefaultSuppressz%Test actions with suppressed defaultsrbr�r�r�r�r�z--bazr�r�z-xr�r�za br�r�Tza --bazz	--baz a bN)rrrr�r.�argparse�SUPPRESSr_rzr2r~r	r	r	r
rs	rc
@s�eZdZdZedej�Zeddd�eddd�edd	d
�gZdgZ	de
�fd
e
dd
�fde
dd
ddg�fde
dd�fde
dd
dd�fde
dd
ddgdd�fgZdS)�TestParserDefaultSuppressz4Test actions with a parser-level default of SUPPRESS�argument_defaultrbr�r�r�r�z--bazr�r�z-xr�r�za br�r�Tza --bazz	--baz a bN)rrrr�r.rrr[r_rzr2r~r	r	r	r
r0s	rc@sZeZdZdZedd�Zeddddd�edd	d
�edd	d�ed
dd�gZdgZdedddddddd�fdedddddddd�fdeddddgdddd�fd
edddddddd�fdedddddddd�fdeddddgdddd�fgZ	dS)�TestParserDefault42z.Test actions with a parser-level default of 42rr�z	--versionr��versionz1.0rbr�r�r�r�z--bazr�z-xr�r�r�za br�Tza --bazz	--baz a bN)
rrrr�r.r[r_rzr2r~r	r	r	r
rDs	$$'$$rcsueZdZdZ�fdd�Zedd�Zed�ed�edd	d
�gZddd
ddgZde	dddd
ddg�fde	dddd
dddg�fde	dddddd
g�fde	dddd
ddg�fde	dddddddg�fde	dddd
dddg�fddd
dge	dddd
ddg�fgZ
�S)�TestArgumentsFromFilez"Test reading arguments from a filecsctt|�j�dd	d
g}x:|D]2\}}t|d�}|j|�|j�q)WdS)N�hello�
hello world!
�	recursive�-a
A
@hello�invalid�@no-such-path
r')r!r")r#r$)r%r&)rUr rr(r)�close)r�
file_textsr�textr,)rVr	r
r\s	
zTestArgumentsFromFile.setUp�fromfile_prefix_chars�@z-ar�r�r�r�r�z-br�z@invalidz@missingzX Yr�Nrz
X -a A Y Zrrz@hello Xzhello world!zX @helloz-a B @recursive Y ZzX @recursive Z -a Br�)rrrr�rr.r[r_rzr2r~r	r	)rVr
r Ys		!$!!$$r cs�eZdZdZ�fdd�ZGdd�de�ZeZedd�Z	edd	d
�gZ
gZdeddd
dg�fgZ
�S)�TestArgumentsFromFileConverterz"Test reading arguments from a filecs]tt|�j�dg}x:|D]2\}}t|d�}|j|�|j�q#WdS)Nr!�
hello world!
r')r!r-)rUr,rr(r)r')rr(rr)r,)rVr	r
rs	
z$TestArgumentsFromFileConverter.setUpc@seZdZdd�ZdS)z>TestArgumentsFromFileConverter.FromFileConverterArgumentParserccs/x(|j�D]}|j�s"q
|Vq
WdS)N)r{�strip)rZarg_line�argr	r	r
�convert_arg_line_to_args�szWTestArgumentsFromFileConverter.FromFileConverterArgumentParser.convert_arg_line_to_argsN)rrrr0r	r	r	r
�FromFileConverterArgumentParser�sr1r*r+r�r�r�z@hello Xr!zworld!r�)rrrr�rrTr1r\r.r[r_rzr2r~r	r	)rVr
r,|s
r,c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�TestFileTypeReprcCs)tjd�}|jdt|��dS)N�rz
FileType('r'))r�FileTyper��repr)rr:r	r	r
�test_r�szTestFileTypeRepr.test_rcCs,tjdd�}|jdt|��dS)N�wbrFzFileType('wb', 1))rr4r�r5)rr:r	r	r
�	test_wb_1�szTestFileTypeRepr.test_wb_1cCs/tjddd�}|jdt|��dS)Nr3�encoding�latin_1z!FileType('r', encoding='latin_1'))rr4r�r5)rr:r	r	r
�test_r_latin�szTestFileTypeRepr.test_r_latincCs5tjddddd�}|jdt|��dS)Nr'r9�big5�errors�ignorez/FileType('w', encoding='big5', errors='ignore'))rr4r�r5)rr:r	r	r
�test_w_big5_ignore�s	z#TestFileTypeRepr.test_w_big5_ignorecCs2tjdddd�}|jdt|��dS)Nr3rFr=�replacez"FileType('r', 1, errors='replace'))rr4r�r5)rr:r	r	r
�test_r_1_replace�sz!TestFileTypeRepr.test_r_1_replaceN)rrrr6r8r;r?rAr	r	r	r
r2�s
r2c@s.eZdZiZdd�Zdd�ZdS)�RFilecCs
||_dS)N)r%)rr%r	r	r
r1�szRFile.__init__cCs|||jkr|j|}n!|j�}|j|<|j�t|t�s^|jd�}|j|jkoy|kSS)N�ascii)�seen�readr'rHr�decoder%)rr>r)r	r	r
r?�s
zRFile.__eq__N)rrrrDr1r?r	r	r	r
rB�srBcseZdZdZ�fdd�Zeddej��eddejd��gZddd	gZ	d
e
ddded
��fd
e
ded
�ded��fde
ded
�ded��fde
dej
dej
�fde
ddded��fgZ�S)�
TestFileTypeRz8Test the FileType option/argument type for reading filescsstt|�j�xLddgD]>}ttjj|j|�d�}|j|�|j	�q W|j
d�dS)Nrbr�r'�readonly)rUrGrr(rrrrr)r'r-)r�	file_namer,)rVr	r
r�s!
zTestFileTypeR.setUpz-xr:r�r3r�znon-existent-file.txtrbr�Nz
-x foo barr�z
bar -x fooz-x - -rH)rrrr�rr.rr4r_rzr2rBrI�stdinr~r	r	)rVr
rG�s	$$rGcsseZdZdZ�fdd�Zeddejd�dd�gZd	gZ	d
e
ded��fgZ�S)
�TestFileTypeDefaultsz<Test that a file is not created unless the default is neededcsOtt|�j�ttjj|jd�d�}|jd�|j	�dS)N�goodr')
rUrKrr(rrrrr)r')rr,)rVr	r
r�s!
zTestFileTypeDefaults.setUpz-cr:r3r�zno-file.txtr�z-c goodr�rL)
rrrr�rr.rr4r_rzr2rBr~r	r	)rVr
rK�s
$	rKc	s�eZdZdZ�fdd�Zeddejd��eddejd��gZddgZ	d	e
d
dded	��fde
d
ed	�ded
��fde
d
ed	�ded
��fde
d
ej
dej
�fgZ�S)�TestFileTypeRBz8Test the FileType option/argument type for reading filescsftt|�j�xLddgD]>}ttjj|j|�d�}|j|�|j	�q WdS)Nrbr�r')
rUrMrr(rrrrr)r')rrIr,)rVr	r
r�s
!
zTestFileTypeRB.setUpz-xr:�rbr�r�rbr�Nz
-x foo barr�z
bar -x fooz-x - -)rrrr�rr.rr4r_rzr2rBrIrJr~r	r	)rVr
rM�s$$rMc@s1eZdZe�Zdd�Zdd�ZdS)�WFilecCs
||_dS)N)r%)rr%r	r	r
r1szWFile.__init__cCsj||jkrZd}d|jkr3|jd�}|j|�|j�|jj|�|j|jkS)NzCheck that file is writable.r�rC)rD�mode�encoder)r'�addr%)rr>r)r	r	r
r?s

zWFile.__eq__N)rrrrrDr1r?r	r	r	r
rOs	rO�geteuidznon-root user requiredc	s�eZdZdZ�fdd�Zeddejd��eddejd��gZddd	gZ	d
e
ddded
��fd
e
ded
�ded��fde
ded
�ded��fde
dej
dej
�fgZ�S)�
TestFileTypeWz8Test the FileType option/argument type for writing filescs$tt|�j�|jd�dS)NrH)rUrTrr-)r)rVr	r
rszTestFileTypeW.setUpz-xr:r'r�r�rHrbr�Nz
-x foo barr�z
bar -x fooz-x - -)rrrr�rr.rr4r_rzr2rOrIrCr~r	r	)rVr
rTs$$rTc	@s�eZdZeddejd��eddejd��gZddgZdeddde	d��fd	ede	d�de	d
��fdede	d�de	d
��fdede
jde
j�fgZdS)
�TestFileTypeWBz-xr:r7r�r�rbr�Nz
-x foo barr�z
bar -x fooz-x - -)
rrrr.rr4r_rzr2rOrIrCr~r	r	r	r
rU/s$$rUc@s"eZdZdZdd�ZdS)�TestFileTypeOpenArgsz0Test that open (the builtin) is correctly calledcCs�tj}|d�df|dd�df|ddd�df|ddd�df|dd	d
d�dfg}tjd��8}x.|D]&\}}|d
�|jd
|�q�WWdQRXdS)NrNrFr'r=r@r7r9r<r�l1�strictz
builtins.openrb���)rNrYNN)r'rFNNrY)r'rYNr@rY)r7rYr<N)r'rrWrX)rr4rZpatchZassert_called_with)rZFTZcases�mr:r/r	r	r
�test_open_argsAs	
z#TestFileTypeOpenArgs.test_open_argsN)rrrr�r[r	r	r	r
rV>srVc@s�eZdZdZedde�edde�gZddddgZd	e	d
ddd�fd
e	d
ddd�fde	d
ddd�fgZ
dS)�TestTypeCallablez,Test some callables as option/argument typesz--eggsr:r�r�Z42jz--eggs az	--eggs 2iz--eggs=42 42�eggsr�gE@z--eggs 2j -- -1.5y@g�?z1024.675Ng3333��@g��)rrrr�r.�complexrr_rzr2r~r	r	r	r
r\Psr\c@s�eZdZdZGdd�de�Zedde�edde�gZgZde	ded	�ded
��fde	ded�ded
��fgZ
dS)�TestTypeUserDefinedz(Test a user-defined option/argument typec@s(eZdZdd�Zdd�ZdS)zTestTypeUserDefined.MyTypecCs
||_dS)N)�value)rr`r	r	r
r1dsz#TestTypeUserDefined.MyType.__init__cCs(t|�|jft|�|jfkS)N)r:r`)rr>r	r	r
r?gsz!TestTypeUserDefined.MyType.__eq__N)rrrr1r?r	r	r	r
�MyTypebsraz-xr:r�za -x br�r�r�z-xf gr�r�N)rrrr�rrar.r_rzr2r~r	r	r	r
r__s	$r_c@s�eZdZdZGdd�d�Zedde�edde�gZgZdeded	�ded
��fdeded�ded
��fgZ	dS)�TestTypeClassicClasszTest a classic class typec@s(eZdZdd�Zdd�ZdS)zTestTypeClassicClass.CcCs
||_dS)N)r`)rr`r	r	r
r1zszTestTypeClassicClass.C.__init__cCs(t|�|jft|�|jfkS)N)r:r`)rr>r	r	r
r?}szTestTypeClassicClass.C.__eq__N)rrrr1r?r	r	r	r
�Cxsrcz-xr:r�za -x br�r�r�z-xf gr�r�N)
rrrr�rcr.r_rzr2r~r	r	r	r
rbus	$rbc@s"eZdZdZdd�ZdS)�TestTypeRegistrationz*Test a user-defined type by registering itcCs�dd�}tj�}|jdd|�|jddd�|jddd�|j|jdj��tdddd	��|j|jd
j��tdd	dd��dS)NcSsd|S)Nzmy_type{%s}r	)�stringr	r	r
�get_my_type�sz.TestTypeRegistration.test.<locals>.get_my_typer:Zmy_typez-xr�r�r�z
my_type{1}z-x 1 42zmy_type{42})r�ArgumentParser�registerr]r�rPr{r2)rrfr^r	r	r
�test�szTestTypeRegistration.testN)rrrr�rir	r	r	r
rd�srdc@s�eZdZdZGdd�dej�ZGdd�dej�Zedddd	ed
e	dd�ed
d	ed
e
dddd�gZgZde
ddd
d�fde
ddd
d�fde
ddd
d�fde
ddd
d�fgZdS)�TestActionUserDefinedz*Test a user-defined option/argument actionc@seZdZddd�ZdS)z$TestActionUserDefined.OptionalActionNcCs�yStdd�}|dkr*d|_n(|dkrBd|_ntd|��Wn2tk
r�tj�d	}td
|��YnXt|d|�dS)
Nr�g�?��?��?r��@r�z	value: %srFzopt_action failed: %s)rkrl)rm)r2r��AssertionErrorrIrMr@rL)rr^�	namespacer`�
option_stringr��er	r	r
�__call__�s
z-TestActionUserDefined.OptionalAction.__call__)rrrrrr	r	r	r
�OptionalAction�srsc@seZdZddd�ZdS)z&TestActionUserDefined.PositionalActionNcCs�yktdd�}|dkr*d|_n@|dkrBd|_n(|d
krZd|_ntd	|��Wn2tk
r�tj�d}td
|��YnXt|d|�dS)Nr�r�r�r�g�?rFg�?g�?z	value: %szarg_action failed: %s)r�r�)rF)r�)r2r�rnrIrMr@rL)rr^ror`rpr�rqr	r	r
rr�s
z/TestActionUserDefined.PositionalAction.__call__)rrrrrr	r	r	r
�PositionalAction�srtz-sr�r�r�r:r�g�?r�r�r�r�z-s0.125g�?r�r�z
-s 0.625 1g�?rFz84 -s2g@r�N)rrrr�r�Actionrsrtr.rr�r_rzr2r~r	r	r	r
rj�srjc@s;eZdZdZGdd�dej�Zdd�ZdS)�TestActionRegistrationz5Test a user-defined action supplied by registering itc@seZdZddd�ZdS)zTestActionRegistration.MyActionNcCst||jd|�dS)Nzfoo[%s])rLr�)rr^ro�valuesrpr	r	r
rr�sz(TestActionRegistration.MyAction.__call__)rrrrrr	r	r	r
�MyAction�srxcCs�tj�}|jdd|j�|jddd�|j|jdg�tdd��|j|jdg�tdd��dS)Nr�Z	my_actionr�r�zfoo[1]r�zfoo[42])rrgrhrxr]r�rPr2)rr^r	r	r
ri�s
%zTestActionRegistration.testN)rrrr�rrurxrir	r	r	r
rv�srvcs	eZdZdZdd�Zddddd�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)�Z�S)*�TestAddSubparserszTest the add_subparsers methodcOs|jt||�dS)N)r|r@)rr/r0r	r	r
�assertArgumentParserError�sz+TestAddSubparsers.assertArgumentParserErrorFNc
Cs%|rItddddd|�}|j|dddd	d
dd�n.tdddd�}|jd
d	d
dd�|jddtdd�i}|r�d|d<d|d<n
d|d<|j|�}|j|j�tdd�}|r�d|d<|rddg|d<|jd|�}|jddtdd�|jddd dd!�tdd"�}	|rtd#|	d<|jd$|	�}
|
jd%dd&dd'�|
jd(dtd)d*dd+�tdd,�}|r�d-|d<|jd.|�}|jd/dtdd0�|jd1d)d2dd3�|S)4N�prog�PROG�descriptionzmain descriptionr�rr�rbr�r��helpzfoo helpz--foor�r:zbar helpZCOMMAND�metavarZcommands�titlezcommand helpz
1 descriptionz1 helpZ1alias1Z1alias2�aliasesr�z-wzw helpr�r�r�zx helpz
2 descriptionz2 helpr�z-yZ123zy helpr�r�r�zz helpz
3 descriptionz3 helpr��tzt help�uz...zu help)	rTr]r�add_subparsersrz�dict�
add_parserr�r^)
r�subparser_helpr�r�r^Zsubparsers_kwargs�
subparsersZparser1_kwargs�parser1Zparser2_kwargs�parser2Zparser3_kwargsZparser3r	r	r
rxsN"





zTestAddSubparsers._get_parsercs5t�j�|j�|_|jdd�|_dS)Nr�T)rUrrxr^�command_help_parser)r)rVr	r
r8s
zTestAddSubparsers.setUpcCsLxEdddddddgD](}|j�}|j|jj|�qWdS)Nr�r�za az0.5 az0.5 1z0.5 1 -yz0.5 2 -w)r{rzr^rP)rr}r/r	r	r
�test_parse_args_failures=sz*TestAddSubparsers.test_parse_args_failurescCs
|j|jjdj��tdddddddd	��|j|jjd
j��tddddd
ddddg��|j|jjdj��tdddddddd��|j|jjdj��tdddddddddddd	g��dS) Nz0.5 1 b -w 7rbFr�g�?r'�r�r�z0.25 --foo 2 -y 2 3j -- -1jTg�?r�r�r�y@y�?z--foo 0.125 1 cg�?r�z-1.5 3 11 -- a --foo 7 -- bg�?r��r�r�z--foor�z--y��g��)r�r^rPr{r2)rr	r	r
�test_parse_argsDs"("z!TestAddSubparsers.test_parse_argscCsk|j|jjdj��tdddddddd	�gf�|j|jjd
j��tdddddddd	�dgf�|j|jjdj��tdddddddd	�dgf�|j|jjd
j��tdddddddd	�ddgf�|j|jjdj��tdddddddd	�ddddgf�dS)Nz0.5 1 b -w 7rbFr�g�?r'r�r�r�z0.5 -p 1 b -w 7z-pz0.5 1 b -w 7 -pz0.5 1 b -q -rs -w 7z-qz-rsz0.5 -W 1 b -X Y -w 7 Zz-Wz-Xrr)r�r^�parse_known_argsr{r2)rr	r	r
�test_parse_known_argsWs(++.z'TestAddSubparsers.test_parse_known_argscCs�t�}|jddd�|jdd�}|jd�}|jd�|jtdd	dddd
�|jdj���dS)Nz--foor�r�r�r�r�r�rbFr�z1 2)rTr]r�r�r�r2rPr{)rr^r�r�r	r	r
�	test_destms	
zTestAddSubparsers.test_destcCs?|j|jj�d�|j|jj�tjd��dS)Nz)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^�format_usage�format_help�textwrap�dedent)rr	r	r
�	test_helpvszTestAddSubparsers.test_helpcCsK|jdd�}|j|j�d�|j|j�tjd��dS)Nr�z+:-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
            )rxr�r�r�r�r�)rr^r	r	r
�test_help_extra_prefix_chars�s
z.TestAddSubparsers.test_help_extra_prefix_charscCsQtdddd�}|jddddd	�|j|j�tjd
��dS)Nr{r|r}zmain descriptionz--non-breakingr�r�r~uRhelp message containing non-breaking spaces shall not wrap at non-breaking spacesuB            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
        )rTr]r�r�r�r�)rr^r	r	r
�test_help_non_breaking_spaces�s	z/TestAddSubparsers.test_help_non_breaking_spacescCsK|jdd�}|j|j�d�|j|j�tjd��dS)Nr�z+:/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
            )rxr�r�r�r�r�)rr^r	r	r
� test_help_alternate_prefix_chars�s
z2TestAddSubparsers.test_help_alternate_prefix_charscCs?|j|jj�d�|j|jj�tjd��dS)Nz)usage: PROG [-h] [--foo] bar {1,2,3} ...
a�            usage: PROG [-h] [--foo] bar {1,2,3} ...

            main description

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

            optional arguments:
              -h, --help  show this help message and exit
              --foo       foo help
            )r�r�r�r�r�r�)rr	r	r
�test_parser_command_help�s
z*TestAddSubparsers.test_parser_command_helpcCs�tdddd�}|jddddd	�|jd
dd�|jdd
dddd�}|jd�}|jd�}|j|j�d�|j|j�tjd��dS)Nr{r|r}zmain descriptionz--foor�r�r~zfoo helpr�zbar helpr�Zsubcommandszcommand helpzadditional textr�r�z'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
            )	rTr]r�r�r�r�r�r�r�)rr^r�r�r�r	r	r
�test_subparser_title_help�s		z+TestAddSubparsers.test_subparser_title_helpc
CsI|jt��}|jj|j��WdQRX|j||jj�dS)N)r|r@r^rPr{r��	exceptionrC)rr}Z
expected_help�cmr	r	r
�_test_subparser_help�sz&TestAddSubparsers._test_subparser_helpcCs|jdtjd��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�)rr	r	r
�test_subparser1_help�sz&TestAddSubparsers.test_subparser1_helpcCs|jdtjd��dS)Nz5.0 2 -ha#            usage: PROG bar 2 [-h] [-y {1,2,3}] [z [z ...]]

            2 description

            positional arguments:
              z           z help

            optional arguments:
              -h, --help  show this help message and exit
              -y {1,2,3}  y help
            )r�r�r�)rr	r	r
�test_subparser2_helpsz&TestAddSubparsers.test_subparser2_helpcCs�|jdd�}|j|jdj��tddddddd	d
�gf�|j|jdj��tddddddd	d
�gf�dS)Nr�Tz
0.5 1alias1 brbFr�g�?r'r�r�z
0.5 1alias2 b)rxr�r�r{r2)rr^r	r	r
�test_alias_invocations(z'TestAddSubparsers.test_alias_invocationcCs/|jdd�}|j|jdj��dS)Nr�Tz
0.5 1alias3 b)rxrzrPr{)rr^r	r	r
�test_error_alias_invocationsz-TestAddSubparsers.test_error_alias_invocationcCsD|jdddd�}d|_|j|j�tjd��dS)Nr�Tr�a            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
            )rxZmaxDiffr�r�r�r�)rr^r	r	r
�test_alias_help"s	z!TestAddSubparsers.test_alias_help)rrrr�rzrxrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r	r	)rVr
ry�s*6	ryc@s:eZdZdZdd�Zdd�Zdd�ZdS)	�TestPositionalsGroupsz@Tests that order of group positionals matches construction ordercCs�t�}|jd�|jd�}|jd�|jd�tdddddd�}|jdj��}|j||�dS)	Nrbr�r�r�r�r�r�z1 2 3)rTr]rcr2rPr{r�)rr^rd�expectedrQr	r	r
�test_nongroup_first@s	


z)TestPositionalsGroups.test_nongroup_firstcCs�t�}|jd�}|jd�|jd�|jd�tdddddd�}|jdj��}|j||�dS)	N�xxxrbr�r�r�r�r�z1 2 3)rTrcr]r2rPr{r�)rr^rdr�rQr	r	r
�test_group_firstJs	


z&TestPositionalsGroups.test_group_firstc	Cs�t�}|jd�}|jd�|jd�|jd�|jd�}|jd�tdddddd	dd
�}|jdj��}|j||�dS)Nr�rbr�r�r�Zfrellr�r�r�rz1 2 3 4)rTrcr]r2rPr{r�)rr^rdr�rQr	r	r
�test_interleaved_groupsTs	



!z-TestPositionalsGroups.test_interleaved_groupsN)rrrr�r�r�r�r	r	r	r
r�=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�S) �TestParentParsersz5Tests that parsers can be created with parent parserscOs|jt||�dS)N)r|r@)rr/r0r	r	r
rzgsz+TestParentParsers.assertArgumentParserErrorcsZt�j�tdd�|_|jjd�|jjd�}|jd�|jjd�tdd�|_|jjd�|jjd�|jjd	�}|jd
�tdd�|_|jjd�tdd�|_|jjd�tdd�|_	|j	j
�}|jddd
�|jddd
�tjj
tjd�|_dS)Nr�Fz--wr�z-yr�r�z-br�z--dz-ar�r�r)rUrrT�wxyz_parentr]rc�abcd_parent�w_parent�z_parent�ab_mutex_parent�add_mutually_exclusive_grouprr�basenamerIrj�main_program)rZx_group�c_grouprd)rVr	r
rjs(


zTestParentParsers.setUpc	CsMtd|jg�}|j|jdj��tdddddd��dS)	N�parentsz-y 1 2 --w 3r'r�r�r�r�r�)rTr�r�rPr{r2)rr^r	r	r
�test_single_parent�sz$TestParentParsers.test_single_parentcCs<|j|jj�td|jg�}|j|j�dS)Nr�)�_test_mutex_abr�rPrT)rr^r	r	r
�test_single_parent_mutex�sz*TestParentParsers.test_single_parent_mutexcCsG|jg}tddd|�}td|g�}|j|j�dS)Nr�Fr�)r�rTr�rP)rr�r^r	r	r
�test_single_granparent_mutex�sz.TestParentParsers.test_single_granparent_mutexcCs�|j|g�tdddd��|j|dg�tdddd��|j|dg�tdddd��|j|ddg�|j|ddg�|j|dg�|j|ddg�|j|ddg�dS)Nr�Fr�z-aTz-bz-c)r�r2rz)rrPr	r	r
r��s%((z TestParentParsers._test_mutex_abcCsk|j|jg}td|�}|j|jdj��tdddddddd	d
ddd��dS)
Nr�z--d 1 --w 2 3 4r�r�r�r�r�r'r�r�r�r)r�r�rTr�rPr{r2)rr�r^r	r	r
�test_multiple_parents�sz'TestParentParsers.test_multiple_parentsc
Cs�|j|jg}td|�}|j|jdj��tddddddd	dd
d��|j|jdj��|j|jd
j��dS)Nr�z
-a --w 2 3r�Tr�Fr'r�r�r�r�z
-a --w 2 3 -bz
-a -b --w 2 3)r�r�rTr�rPr{r2rz)rr�r^r	r	r
�test_multiple_parents_mutex�s(z-TestParentParsers.test_multiple_parents_mutexcCs,|jtjtjd|j|jg�dS)Nr�)r|r�
ArgumentErrorrgr�r�)rr	r	r
�test_conflicting_parents�s	z*TestParentParsers.test_conflicting_parentscCs,|jtjtjd|j|jg�dS)Nr�)r|rr�rgr�r�)rr	r	r
�test_conflicting_parents_mutex�s	z0TestParentParsers.test_conflicting_parents_mutexc	CsY|j|jg}td|�}|j|jdj��tdddddd��dS)Nr�z1 2r'r�r�r�)r�r�rTr�rPr{r2)rr�r^r	r	r
�test_same_argument_name_parents�sz1TestParentParsers.test_same_argument_name_parentscCs{t�}|j�}|jdd|jg�}|jd�|j|jdj��tddddd	d
dd��dS)Nr�r�rqzbar -b 1 --d 2 3 4r�r�r�r�r�r�r)	rTr�r�r�r]r�rPr{r2)rr^r�Zabcde_parserr	r	r
�test_subparser_parents�s	
z(TestParentParsers.test_subparser_parentscCs6t�}|j�}|jg}|jdd|�}|jd�}|jd�|j|jg}|jdd|�}|jd�|j|jdj	��t
dd	d
ddd��|j|jd
j	��t
ddd
d	dddddddd��|j|jdj	��|j|jdj	��dS)Nrbr�r�r�r�rqzfoo -a 4r�Tr�Frzbar -b  --w 2 3 4r'r�r�r�r�zfoo -a -b 4zbar -b -a 4)rTr�r�r�rcr]r�r�rPr{r2rz)rr^r�r�Z
abc_parserr�Zwxyzabe_parserr	r	r
�test_subparser_parents_mutex�s"	

.z.TestParentParsers.test_subparser_parents_mutexcCsk|j|jg}td|�}|j�}|j}|j|tjdj||rZdnd���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�rTr�r�r�r�r��format)rr�r^�parser_help�prognamer	r	r
�test_parent_help�s	z"TestParentParsers.test_parent_helpcCs�tdd�}|jdddd�}|jd�|jd�|j�}|jd	�|jd
�td|g�}|jt|jd	dd
d
g�|j�}|j}|j	|t
jdj||r�dnd���dS)Nr�Fr�r�r}Zgdz-wz-xz-yz-zr�rra	            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�)
rTrcr]r�r|r@rPr�r�r�r�r�r�)r�parentr�rZr^r�r�r	r	r
�test_groups_parents�s



	
z%TestParentParsers.test_groups_parents)rrrr�rzrr�r�r�r�r�r�r�r�r�r�r�r�r�r	r	)rVr
r�ds 

r�c@s4eZdZdd�Zdd�Zdd�ZdS)� TestMutuallyExclusiveGroupErrorscCs,t�}|j}|t|jdd�dS)Nr�rb)rTr|rsr�)rr^�raisesr	r	r
�test_invalid_add_argument_group	s		z@TestMutuallyExclusiveGroupErrors.test_invalid_add_argument_groupcCs�t�}|j�}|j}|j}|t|ddd�|t|d�|t|ddd�|t|ddd�|t|ddtj�dS)Nz--foor�Tr�r�r�rF)rTr�r]r|�
ValueErrorrZPARSER)rr^rdr]r�r	r	r
�test_invalid_add_argument	s			z:TestMutuallyExclusiveGroupErrors.test_invalid_add_argumentcCs�tdd�}|j�}|jddd�|jddd�|j�}|jddd�|jd	dd�d
}|j|j�tj|��dS)Nr{r|z--foor�r�z--barr�z--soupz--nutsz�            usage: PROG [-h] [--foo | --bar] [--soup | --nuts]

            optional arguments:
              -h, --help  show this help message and exit
              --foo
              --bar
              --soup
              --nuts
              )rTr�r]r�r�r�r�)rr^Zgroup1Zgroup2r�r	r	r
r�)	s
z*TestMutuallyExclusiveGroupErrors.test_helpN)rrrr�r�r�r	r	r	r
r�	sr�c@speZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)�MEMixincCsL|jdd�j}t}x*|jD]}|j|||j��q%WdS)Nr�F)�
get_parserrPr@rzr|r{)rrPrX�args_stringr	r	r
�test_failures_when_not_required?	sz'MEMixin.test_failures_when_not_requiredcCsS|jdd�j}t}x1|jdgD]}|j|||j��q,WdS)Nr�Tr�)r�rPr@rzr|r{)rrPrXr�r	r	r
�test_failures_when_requiredE	sz#MEMixin.test_failures_when_requiredcCsb|jdd�j}|j|j}x6|D].\}}||j��}|j||�q,WdS)Nr�F)r�rPr~�successes_when_not_requiredr{r�)rrPr~r�r��	actual_nsr	r	r
� test_successes_when_not_requiredK	s
z(MEMixin.test_successes_when_not_requiredcCsU|jdd�j}x9|jD].\}}||j��}|j||�qWdS)Nr�T)r�rPr~r{r�)rrPr�r�r�r	r	r
�test_successes_when_requiredR	sz$MEMixin.test_successes_when_requiredcCs>|jdd�j}|j}|j|�tj|��dS)Nr�F)r�r��usage_when_not_requiredr�r�r�)rr��expected_usager	r	r
�test_usage_when_not_requiredX	s	z$MEMixin.test_usage_when_not_requiredcCs>|jdd�j}|j}|j|�tj|��dS)Nr�T)r�r��usage_when_requiredr�r�r�)rr�r�r	r	r
�test_usage_when_required]	s	z MEMixin.test_usage_when_requiredcCsE|jdd�j}|j|j}|j|�tj|��dS)Nr�F)r�r�r�r~r�r�r�)rr�r~r	r	r
�test_help_when_not_requiredb	sz#MEMixin.test_help_when_not_requiredcCsE|jdd�j}|j|j}|j|�tj|��dS)Nr�T)r�r�r�r~r�r�r�)rr�r~r	r	r
�test_help_when_requiredg	szMEMixin.test_help_when_requiredN)rrrr�r�r�r�r�r�r�r�r	r	r	r
r�=	sr�c	@s�eZdZddd�ZddgZdeddd	d�fd
eddd	d�fdeddd	d
�fdeddd	d�fgZdeddd	d�fgZdZdZ	dZ
dS)�TestMutuallyExclusiveSimpleNcCsWtdd�}|jd|�}|jddd�|jddd	d
ddd�|S)
Nr{r|r�z--barr~zbar helpz--bazr�r�r�rzbaz help)rTr�r])rr�r^rdr	r	r
r�o	s
z&TestMutuallyExclusiveSimple.get_parserz--bar X --baz Yz
--bar X --bazz--bar Xr�r�r�z--bar X --bar Zrz--baz Yrz--bazr�z;        usage: PROG [-h] [--bar BAR | --baz [BAZ]]
        z;        usage: PROG [-h] (--bar BAR | --baz [BAZ])
        z�
        optional arguments:
          -h, --help   show this help message and exit
          --bar BAR    bar help
          --baz [BAZ]  baz help
        )rrrr�rzr2r~r�r�r�r~r	r	r	r
r�m	sr�c
@s�eZdZddd�ZdgZdedddddd	d
d�fdedddddd	d
d�fd
eddddddd
d	�fdeddddddd
d	�fgZdeddddddd
d�fgZdZdZ	dZ
dS)�TestMutuallyExclusiveLongNcCsqtdd�}|jddd�|jddd�|jd|�}|jd	dd
�|jddd�|S)
Nr{r|z--abcder~z
abcde helpz--fghijz
fghij helpr�z--klmnoz
klmno helpz--pqrstz
pqrst help)rTr]r�)rr�r^rdr	r	r
r��	sz$TestMutuallyExclusiveLong.get_parserz--klmno X --pqrst Yz	--klmno XZabcdeZfghijZklmnor�Zpqrstz--abcde Y --klmno Xrz	--pqrst Xz--pqrst X --fghij Yr�zi    usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ]
                [--klmno KLMNO | --pqrst PQRST]
    zi    usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ]
                (--klmno KLMNO | --pqrst PQRST)
    z�
    optional arguments:
      -h, --help     show this help message and exit
      --abcde ABCDE  abcde help
      --fghij FGHIJ  fghij help
      --klmno KLMNO  klmno help
      --pqrst PQRST  pqrst help
    )rrrr�rzr2r~r�r�r�r~r	r	r	r
r��	s		$!$'*	r�c@s�eZdZdd�ZdgZdedddd�fd	edd
dd�fdedddd
�fgZdedddd�fgZdZdZ	dZ
dS)�$TestMutuallyExclusiveFirstSuppressedcCsTtdd�}|jd|�}|jddtj�|jddddd	�|S)
Nr{r|r�z-xr~z-yr�r�zy help)rTr�r]rr)rr�r^rdr	r	r
r��	s
z/TestMutuallyExclusiveFirstSuppressed.get_parserz-x X -yz-x Xr�r�r�Tz	-x X -x Yrz-yNFr�z&        usage: PROG [-h] [-y]
        z$        usage: PROG [-h] -y
        zx
        optional arguments:
          -h, --help  show this help message and exit
          -y          y help
        )rrrr�rzr2r~r�r�r�r~r	r	r	r
r��	s	r�c@s�eZdZdd�ZdddgZdeddd	dd
d�fdedd
d	d
d
d�fdedd
d	dd
d�fdeddd	dd
d�fgZdedd
d	dd
d�fgZdZZ	dZ
dS)�#TestMutuallyExclusiveManySuppressedcCsstdd�}|jd|�}|j}|ddddtj�|ddd	dtj�|d
dtj�|S)Nr{r|r�z--spamr�r�r~z--badgerr�z	--bladder)rTr�r]rr)rr�r^rdrRr	r	r
r��	s	z.TestMutuallyExclusiveManySuppressed.get_parserz--spam --badgerz--badger --bladder Bz--bladder B --spamz--spamr�Tr�ZbladderNz--badgerFz--bladder Br�z
--spam --spamr�z!        usage: PROG [-h]
        z[
        optional arguments:
          -h, --help  show this help message and exit
        )rrrr�rzr2r~r�r�r�r~r	r	r	r
r��	s
	$$
r�c
@s�eZdZdd�ZdddddgZded	d
ddd
d�fded	dddd
d�fded	dddd
dg�fded	dddd
dddg�fgZded	dddd
d�fgZdZdZ	dZ
dS)�*TestMutuallyExclusiveOptionalAndPositionalcCsptdd�}|jd|�}|jddddd�|jd	dd
�|jddd
dddd�|S)Nr{r|r�z--foor�r�r~�FOOz--spamZSPAMr�r�r�r�r�ZBADGER)rTr�r])rr�r^rdr	r	r
r�
sz5TestMutuallyExclusiveOptionalAndPositional.get_parserz--foo --spam Sz
--spam S XzX --foozX Y Z --spam Sz	--foo X Yz--foorbTr�Nr�r�z--spam SF�SzX Y Zrrr�zM        usage: PROG [-h] [--foo | --spam SPAM | badger [badger ...]]
        zM        usage: PROG [-h] (--foo | --spam SPAM | badger [badger ...])
        z�
        positional arguments:
          badger       BADGER

        optional arguments:
          -h, --help   show this help message and exit
          --foo        FOO
          --spam SPAM  SPAM
        )rrrr�rzr2r~r�r�r�r~r	r	r	r
r�
s		!-$
r�c@s�eZdZdd�ZddddgZdedd	d
dddd
ddd�fdeddd
d	ddd
ddd�fdeddd
ddd	d
ddd�fdedd	d
dddd
d	dd�fdeddd
d	ddd
ddd	�fdeddd
ddd	d
d	dd	�fgZdeddd
dddd
ddd�fdeddd
dddd
d	dd�fdeddd
dddd
ddd	�fgZdZZ	dZ
dS)�#TestMutuallyExclusiveOptionalsMixedcCs�tdd�}|jddddd�|jd|�}|jd	dddd
�|jddddd�|jd
dddd�|jddddd�|S)Nr{r|z-xr�r�r~zx helpr�z-aza helpz-bzb helpz-yzy helpz-czc help)rTr]r�)rr�r^rdr	r	r
r�/
sz.TestMutuallyExclusiveOptionalsMixed.get_parserz-a -bz-b -cz-a -cz-a -b -cz-ar�Tr�Fr�r�r�z-bz-cz-a -xz-y -bz-x -y -cr�z-xz-yz:        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
        N)rrrr�rzr2r~r�r�r�r~r	r	r	r
r�-
s
*****0**0

r�c@s�eZdZddd�ZddgZdeddd	d�fd
eddd	d�fgZdeddd	d�fgZd
ZdZ	dZ
dS)�TestMutuallyExclusiveInGroupNcCsctdd�}|jdddd�}|jd|�}|jdd	d
�|jdd	d�|S)
Nr{r|r�zTitled groupr}zGroup descriptionr�z--barr~zbar helpz--bazzbaz help)rTrcr�r])rr�r^Ztitled_groupZmutex_groupr	r	r
r�Y
s	z'TestMutuallyExclusiveInGroup.get_parserz--bar X --baz Yz--baz X --bar Yz--bar Xr�r�r�z--baz Yrr�z9        usage: PROG [-h] [--bar BAR | --baz BAZ]
        z9        usage: PROG [-h] (--bar BAR | --baz BAZ)
        z�
        optional arguments:
          -h, --help  show this help message and exit

        Titled group:
          Group description

          --bar BAR   bar help
          --baz BAZ   baz help
        )rrrr�rzr2r~r�r�r�r~r	r	r	r
r�W
s
r�c@smeZdZdd�ZdddgZdeddd	d
dd
dd
dd
�fdeddd	ddd
dd
dd
�fdeddd	d
dddd
dd
�fdeddd	d
dd
dd
dd�fdeddd	ddd
dd
dd�fgZd
eddd	d
dd
dd
dd
�fdeddd	d
dd
dd
dd�fgZdZZ	dZ
dS)�1TestMutuallyExclusiveOptionalsAndPositionalsMixedcCs�tdd�}|jddd�|jddddd	�|jd
|�}|jddd
dd�|jddddd�|jddddd�|S)Nr{r|r�r~zx helpz-yr�r�zy helpr�r�r�r�za helpz-bzb helpz-czc help)rTr]r�)rr�r^rdr	r	r
r��
sz<TestMutuallyExclusiveOptionalsAndPositionalsMixed.get_parserzX A -bz-b -cz-c X AzX Ar�rr�Fr�r�r�r�zX -bNTzX -czX A -yzX -y -bzX -yz6        usage: PROG [-h] [-y] [-b] [-c] x [a]
        a
        positional arguments:
          x           x help
          a           a help

        optional arguments:
          -h, --help  show this help message and exit
          -y          y help
          -b          b help
          -c          c help
        )rrrr�rzr2r~r�r�r�r~r	r	r	r
r�
s
****0*0
r�cs%eZdZd�fdd�Z�S)�MEPBaseNcs@tt|�jd|�}td|jddd|g�}|S)Nr�r{r�Fr�)rUr�r�rTr{)rr�r�r^)rVr	r
r��
szMEPBase.get_parser)rrrr�r	r	)rVr
r��
sr�c@seZdZdS)�&TestMutuallyExclusiveGroupErrorsParentN)rrrr	r	r	r
r��
sr�c@seZdZdS)�!TestMutuallyExclusiveSimpleParentN)rrrr	r	r	r
r��
sr�c@seZdZdS)�TestMutuallyExclusiveLongParentN)rrrr	r	r	r
r��
sr�c@seZdZdS)�*TestMutuallyExclusiveFirstSuppressedParentN)rrrr	r	r	r
r��
sr�c@seZdZdS)�)TestMutuallyExclusiveManySuppressedParentN)rrrr	r	r	r
r��
sr�c@seZdZdS)�0TestMutuallyExclusiveOptionalAndPositionalParentN)rrrr	r	r	r
r��
sr�c@seZdZdS)�)TestMutuallyExclusiveOptionalsMixedParentN)rrrr	r	r	r
r��
sr�c@seZdZdS)�7TestMutuallyExclusiveOptionalsAndPositionalsMixedParentN)rrrr	r	r	r
r��
sr�c@sdeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�TestSetDefaultsc	Cst�}|jdd�|jdddd�|jtdddddd�|jg��|jtdddddd�|jgt���|jtdddddd�|jgtdd���|jtdddddd�|jgtdddd���dS)	Nr�rbr�r�r�rFr�r�)rT�set_defaultsr�r2rP)rr^r	r	r
�test_set_defaults_no_args�
s	z)TestSetDefaults.test_set_defaults_no_argscCs\t�}|jdddd�|jddd�|jtdddd�|jg��|jtdddd�|jgt���|jtdddd�|jgtdd���|jtdd	dd�|jd
j���|jtdd	dd�|jd
j�t���|jtdd	dd�|jd
j�tdd���dS)Nr�rbr�r�z-xr�Zxfooxr�r�z-x 1)rTr�r]r�r2rPr{)rr^r	r	r
�test_set_defaults_with_args�
s	z+TestSetDefaults.test_set_defaults_with_argscCsvt�}|jdd�|j�}|jd�}|jdd�|jtdddd�|jdj���dS)Nr�rbr�r�r�)rTr�r�r�r�r2rPr{)rr^r�Zparser_ar	r	r
�test_set_defaults_subparserss	z,TestSetDefaults.test_set_defaults_subparserscCsWtdd�}|jdd�td|g�}|jtdd�|jg��dS)Nr�Fr�rbr�)rTr�r�r2rP)rr�r^r	r	r
�test_set_defaults_parents	sz)TestSetDefaults.test_set_defaults_parentscCsjtj�}|j�jd�}|jdd�|jdd�|jtdd�|jdg��dS)Nr�rbrFr�)rrgr�r�r�r�r2rP)rr^Zxparserr	r	r
�)test_set_defaults_on_parent_and_subparsers
z9TestSetDefaults.test_set_defaults_on_parent_and_subparserc
Cst�}|jdddddddd�|jd	�|jd
dd�|jdd
d�|jdd
ddd�|jtdddddddd�|jg��|jdddddddd�|jtdddddddd�|jg��dS)Nr'�Wr�r�r�rr�rz-wz-xr��XXr�r��ZZ�WW�YY)rTr�r]r�r2rP)rr^r	r	r
�&test_set_defaults_same_as_add_arguments	"
$"$z6TestSetDefaults.test_set_defaults_same_as_add_argumentc
Cst�}|jdddddddd�|jd	�}|jd
�|jddd
�|jddd�|jddddd�|jtdddd
dddd�|jg��|jdddddddd�|jtdddddddd�|jg��dS)Nr'r�r�r�r�rr�rrbz-wz-xr�r�r�r�r�r�r�)rTr�rcr]r�r2rP)rr^rdr	r	r
�,test_set_defaults_same_as_add_argument_group's	"
$"$z<TestSetDefaults.test_set_defaults_same_as_add_argument_groupN)
rrrr�r�r�r�r�r�r�r	r	r	r
r��
s
	r�c@seZdZdd�ZdS)�TestGetDefaultcCs�t�}|j|jd��|j|jd��|jd�|j|jd��|j|jd��|jddtdd�|j|jd��|jd|jd��|jdd�|jd|jd��|jd|jd��dS)	Nrbr�z--fooz--barr:r�r�r�)rTZassertIsNoneZget_defaultr]r�r�r�)rr^r	r	r
�test_get_default@s	
zTestGetDefault.test_get_defaultN)rrrrr	r	r	r
r�>sr�c@s(eZdZdd�Zdd�ZdS)�TestNamespaceContainsSimplecCs0tj�}|jd|�|jd|�dS)Nr�r�)r�	Namespace�assertNotIn)r�nsr	r	r
�
test_emptyWsz&TestNamespaceContainsSimple.test_emptycCsltjdddd�}|jd|�|jd|�|jd|�|jd|�|jd|�dS)Nr�rFr�r�r�Zxxr�)rrr�assertIn)rrr	r	r
�test_non_empty\sz*TestNamespaceContainsSimple.test_non_emptyN)rrrrrr	r	r	r
rUsrc@seZdZdd�ZdS)�TestHelpFormattingMetaclasscCsW|dkrdSGdd�dt�}x*ddgD]\}}||||�q3WdS)	N�HelpTestCasec@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)z6TestHelpFormattingMetaclass.__init__.<locals>.AddTestsc
Ss�||_||_xt|j|j|jgD]Z}d|j|f}|dd�}y
||_Wntk
rtYnXt|||�q+WdS)Nz%s_%scSs||�dS)Nr	)rrmr	r	r
�test_wrapperyszUTestHelpFormattingMetaclass.__init__.<locals>.AddTests.__init__.<locals>.test_wrapper)�func_suffix�std_name�test_format�
test_print�test_print_filerrsrL)rZ
test_classrrrmrvr
r	r	r
r1ps			

z?TestHelpFormattingMetaclass.__init__.<locals>.AddTests.__init__cSstj|jj|jj�}x0t|dg�D]}|j|j|j�q1Wt|dg�}xS|D]K\}}|j|j|j�}x$|D]}|j|j|j�q�WqjWt|dg�}|r|j�}	x$|D]}
|	j	|
j|
j�q�W|S)Nr_�argument_group_signatures�subparsers_signatures)
rrgr[r/r0rKr]rcr�r�)rrwr^Zargument_sigZ
group_sigsZ	group_sigZ
argument_sigsrdZsubparsers_sigsr�Z
subparser_sigr	r	r
rx�s(	

zBTestHelpFormattingMetaclass.__init__.<locals>.AddTests._get_parsercSs5t||j�}tj|�}|j||�dS)N)rKrr�r�r�)rrw�parser_textZ
expected_textr	r	r
�_test�sz<TestHelpFormattingMetaclass.__init__.<locals>.AddTests._testcSs<|j|�}t|d|j�}|j||��dS)Nz	format_%s)rxrKrr)rrwr^r�r	r	r
r
�szBTestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_formatc
Ss�|j|�}t|d|j�}tt|j�}tt|jt��z#|�tt|j�j�}Wdtt|j|�X|j||�dS)Nzprint_%s)	rxrKrrIrrLrrOr)rrwr^�print_Z
old_streamrr	r	r
r�szATestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_printcSsX|j|�}t|d|j�}t�}||�|j�}|j||�dS)Nzprint_%s)rxrKrrrOr)rrwr^rZsfilerr	r	r
r�s	
zFTestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_print_fileN)	rrrr1rxrr
rrr	r	r	r
r�nsr��usagerCr~)rrC)r~rC)r�)r�r%r�r�r�rrr	r	r
r1jsHz$TestHelpFormattingMetaclass.__init__N)rrrr1r	r	r	r
rhsrr	c@s�eZdZdZedddddd�Zedd	d
ddd�ed
d
ddd�eddd�eddd�eddd�gZgZdZedZ	dZ
dS)�TestHelpBiggerOptionalsz;Make sure that argument help aligns when options are longerr{r|r}�DESCRIPTION�epilog�EPILOGz-vz	--versionr�rz0.1z-xr�r~zX HELPz--yzY HELPrbzFOO HELPr�zBAR 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
    z        0.1
        N)rrrr�r.r[r_rrr~rr	r	r	r
r�s	rc@sVeZdZdZdd�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.
    cCs0tj�}|jdd�|j|j�dS)Nrr	)rr
rrr)rrr	r	r
r�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)rrrr�rrr[r_rrr~rr	r	r	r
r�s				rc@s�eZdZdZedddddd�Zedd	d
ddd�ed
d
ddd�eddd�eddd�eddd�gZeddd�eddd�eddddd�gfgZdZed Z	d!Z
d"S)#�TestHelpBiggerOptionalGroupsz;Make sure that argument help aligns when options are longerr{r|r}rrrz-vz	--versionr�rz0.1z-xr�r~zX HELPz--yzY HELPrbzFOO HELPr�zBAR HELPzGROUP TITLEzGROUP DESCRIPTIONr�zBAZ HELPz-zr�r�zZ HELPzN        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
    z        0.1
        N)rrrr�r.r[r_rrr~rr	r	r	r
rs	!rc@s�eZdZdZedddd�Zedddd	d
�edd	d�ed
d	d�edd	d�gZgZdZedZ	dZ
dS)�TestHelpBiggerPositionalsz4Make sure that help aligns when arguments are longerr�USAGEr}rz-xr�r�r~zX HELPz--yzY HELPZekiekiekifekangzEKI HELPr�zBAR HELPz        usage: USAGE
        a 
        DESCRIPTION

        positional arguments:
          ekiekiekifekang  EKI HELP
          bar              BAR HELP

        optional arguments:
          -h, --help       show this help message and exit
          -x               X HELP
          --y Y            Y HELP
        r�N)rrrr�r.r[r_rrr~rr	r	r	r
rHsrc@s�eZdZdZedddd�Zedddd	d
�edddd	d
�gZeddd�edddd	d�gfgZdZedZ	dZ
dS)�TestHelpReformattingz>Make sure that text after short names starts on the first liner{r|r}ze   oddly    formatted
description

that is so long that it should go onto multiple lines when wrappedz-xrr�r~zoddly
    formatted -x helpr�r�z
normal y helpr�z'
    oddly formatted group

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

        positional arguments:
          yyy         normal y help

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

        title:
          oddly formatted group description

          -a          oddly formatted -a help again, so long that it should be wrapped
                      over multiple lines
        r�N)rrrr�r.r[r_rrr~rr	r	r	r
rgs	rc@s�eZdZdZeddddd�Zeddd	d
dd�ed
ddd
dd�gZed�edddd
dd�gfgZdZedZ	dZ
dS)�TestHelpWrappingShortNamesz>Make sure that text after short names starts on the first liner{r|r}zD
D�z-xrr�r~zXHH HXrr�r�zYH YH�ALPHASz-ar�r�zAHHH HHA�
z2        usage: PROG [-h] [-x XX] [-a] yyy
        a�
        D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD
        DD DD DD DD D

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

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

        ALPHAS:
          -a          AHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH
                      HHAAHHH HHAAHHH HHA
        r�N)rrrr�r.r[r_rrr~rr	r	r	r
r�s	%rc	@s�eZdZdZeddddd�Zeddd	d
d
dd�edd
ddddd�edd
ddddd�gZed�edd
ddddd�edd
ddddd�gfgZdZedZ	dZ
dS)�TestHelpWrappingLongNamesz<Make sure that text after long names starts on the next linerrr}zD Dr z-vz	--versionr�rzV Vz-xrr��r~zXH XHrr�zYH YHr!z-arzAH AHr�zZH ZHz        usage: USAGE
        ar
        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
        N)rrrr�r.r[r_rrr~rr	r	r	r
r#�s#	)r#c
@s
eZdZdZedd�Zeddddd�ed	dd
dd�eddd�ed
dd
dd�eddddd�gZed�eddddd�eddddd�eddddd
�eddddd�gfgZdZedZ	dZ
dS)�
TestHelpUsagezTest basic usage messagesr{r|z-wr�r�r~r'z-xr�r�r�r�r�r�r�rdz-yr�z-zr�r�r�rqz�        usage: PROG [-h] [-w W [W ...]] [-x [X [X ...]]] [-y [Y]] [-z Z Z Z]
                    a b b [c] [d [d ...]] e [e ...]
        a�
        positional arguments:
          a               a
          b               b
          c               c

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

        group:
          -y [Y]          y
          -z Z Z Z        z
          d               d
          e               e
        r�N)rrrr�r.r[r_rrr~rr	r	r	r
r%�s 	!r%c@s�eZdZdZedddd�ZgZed�eddd	�ed
dd
�gfed�eddd�ed
dd�gfgZdZedZ	dZ
dS)�TestHelpOnlyUserGroupszTest basic usage messagesr{r|r�FZxxxxz-xr~r�r�Zyyyyr�z-yr�z.        usage: PROG [-x X] [-y Y] a b
        zn
        xxxx:
          -x X  x
          a     a

        yyyy:
          b     b
          -y Y  y
        r�N)rrrr�r.r[r_rrr~rr	r	r	r
r&%
s			r&c@s{eZdZdZeddd�Zeddd�eddd	�ed
�ed�gZgZdZed
Z	dZ
dS)�TestHelpUsageLongProgz*Test usage messages where the prog is longr{�P�<z-wrr�z-xr�r�r�zz        usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               [-h] [-w W] [-x X] a b
        z�
        positional arguments:
          a
          b

        optional arguments:
          -h, --help  show this help message and exit
          -w W
          -x X
        r�N)rrrr�r.r[r_rrr~rr	r	r	r
r'D
s	
r'c@s�eZdZdZeddd�Zedddd�ed	dd
d�edddd�ed
ddd�ed�ed�gZgZdZedZ	dZ
dS)� TestHelpUsageLongProgOptionsWrapzATest usage messages where the prog is long and the optionals wrapr{r(r)z-wrr�r$z-xr�z-yrz-zrr�r�a        usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] [-x XXXXXXXXXXXXXXXXXXXXXXXXX]
               [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
               a b
        a8
        positional arguments:
          a
          b

        optional arguments:
          -h, --help            show this help message and exit
          -w WWWWWWWWWWWWWWWWWWWWWWWWW
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        r�N)rrrr�r.r[r_rrr~rr	r	r	r
r*a
s	r*c@sxeZdZdZeddddd�Zedd�ed	d�ed
d�gZgZdZedZ	d
Z
dS)�$TestHelpUsageLongProgPositionalsWrapzCTest usage messages where the prog is long and the positionals wrapr{r(r)r�Fr�r$r�r�z�        usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
               ccccccccccccccccccccccccc
        z�
        positional arguments:
          aaaaaaaaaaaaaaaaaaaaaaaaa
          bbbbbbbbbbbbbbbbbbbbbbbbb
          ccccccccccccccccccccccccc
        r�N)rrrr�r.r[r_rrr~rr	r	r	r
r+�
s

r+c@s�eZdZdZedd�Zedddd�eddd	d�ed
ddd�eddd
d�ed�ed�ed�gZgZdZedZ	dZ
dS)�TestHelpUsageOptionalsWrapz,Test usage messages where the optionals wrapr{r|z-wrr�r$z-xr�z-yrz-zrr�r�r�z�        usage: PROG [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] [-x XXXXXXXXXXXXXXXXXXXXXXXXX]
                    [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
                    a b c
        aD
        positional arguments:
          a
          b
          c

        optional arguments:
          -h, --help            show this help message and exit
          -w WWWWWWWWWWWWWWWWWWWWWWWWW
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        r�N)rrrr�r.r[r_rrr~rr	r	r	r
r,�
s		
r,c@s�eZdZdZedd�Zed�ed�ed�edd�ed	d�ed
d�gZgZdZedZ	d
Z
dS)�TestHelpUsagePositionalsWrapz.Test usage messages where the positionals wrapr{r|z-xz-yz-zr�r$r�r�z�        usage: PROG [-h] [-x X] [-y Y] [-z Z]
                    aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
                    ccccccccccccccccccccccccc
        a
        positional arguments:
          aaaaaaaaaaaaaaaaaaaaaaaaa
          bbbbbbbbbbbbbbbbbbbbbbbbb
          ccccccccccccccccccccccccc

        optional arguments:
          -h, --help            show this help message and exit
          -x X
          -y Y
          -z Z
        r�N)rrrr�r.r[r_rrr~rr	r	r	r
r-�
s			

r-c@s�eZdZdZedd�Zedddd�eddd	d�ed
ddd�edd�ed
d�edd�gZgZdZedZ	dZ
dS)�%TestHelpUsageOptionalsPositionalsWrapz<Test usage messages where the optionals and positionals wrapr{r|z-xrr�r$z-yrz-zrr�r�r�a        usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] [-y YYYYYYYYYYYYYYYYYYYYYYYYY]
                    [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
                    aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
                    ccccccccccccccccccccccccc
        ae
        positional arguments:
          aaaaaaaaaaaaaaaaaaaaaaaaa
          bbbbbbbbbbbbbbbbbbbbbbbbb
          ccccccccccccccccccccccccc

        optional arguments:
          -h, --help            show this help message and exit
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        r�N)rrrr�r.r[r_rrr~rr	r	r	r
r.�
s

r.c@s�eZdZdZedd�Zedddd�eddd	d�ed
ddd�gZgZdZed
Z	dZ
dS)�TestHelpUsageOptionalsOnlyWrapz@Test usage messages where there are only optionals and they wrapr{r|z-xrr�r$z-yrz-zrz�        usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] [-y YYYYYYYYYYYYYYYYYYYYYYYYY]
                    [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
        z�
        optional arguments:
          -h, --help            show this help message and exit
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        r�N)rrrr�r.r[r_rrr~rr	r	r	r
r/
sr/c@steZdZdZedddd�Zedd�edd�ed	d�gZgZd
ZedZ	dZ
d
S)� TestHelpUsagePositionalsOnlyWrapzBTest usage messages where there are only positionals and they wrapr{r|r�Fr�r$r�r�z~        usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
                    ccccccccccccccccccccccccc
        z�
        positional arguments:
          aaaaaaaaaaaaaaaaaaaaaaaaa
          bbbbbbbbbbbbbbbbbbbbbbbbb
          ccccccccccccccccccccccccc
        r�N)rrrr�r.r[r_rrr~rr	r	r	r
r0$s

r0c
@seZdZdZedd�Zeddedd�edd	d
ddd
ddd�eddddd�eddddddgdddd�eddd�eddddd�gZed �ed!dd"�ed#dd)dd$�gfgZd%Z	e	d&Z
d'Zd(S)*�TestHelpVariableExpansionz:Test that variables are expanded properly in help messagesr{r|z-xr:r~z"x %(prog)s %(default)s %(type)s %%z-yr�r�r�r�r��XXXz y %(prog)s %(default)s %(const)sz--foor�r�z$foo %(prog)s %(default)s %(choices)sz--barr�rFr�rZBBBz!bar %(prog)s %(default)s %(dest)sr�zspam %(prog)s %(default)sr�g�?zbadger %(prog)s %(default)srdz-aza %(prog)s %(default)sz-bzb %(prog)s %(default)szw        usage: PROG [-h] [-x X] [-y] [--foo {a,b,c}] [--bar BBB] [-a A] [-b B]
                    spam badger
        a�
        positional arguments:
          spam           spam PROG None
          badger         badger PROG 0.5

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

        group:
          -a A           a PROG None
          -b B           b PROG -1
        r�NrY)rrrr�r.r[r�r_rrr~rr	r	r	r
r1<s&!	!r1c@sMeZdZdZedddd�ZgZgZdZedZ	dZ
d	S)
�&TestHelpVariableExpansionUsageSuppliedz@Test that variables are expanded properly when usage= is presentr{r|rz%(prog)s FOOz         usage: PROG FOO
        z[
        optional arguments:
          -h, --help  show this help message and exit
        r�N)rrrr�r.r[r_rrr~rr	r	r	r
r3jsr3c@sIeZdZdZedddd�ZgZgZdZeZ	dZ
dS)	�$TestHelpVariableExpansionNoArgumentsz;Test that variables are expanded properly with no argumentsr{r|r�Fz        usage: PROG
        r�N)rrrr�r.r[r_rrr~rr	r	r	r
r4{sr4c@sjeZdZdZedddej�Zeddd�eddd	�gZgZ	d
Z
dZdZdS)
�TestHelpSuppressUsagez3Test that items can be suppressed in usage messagesr{r|rz--foor~zfoo helpr�z	spam helpz�        positional arguments:
          spam        spam help

        optional arguments:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        r�N)
rrrr�r.rrr[r_rr~rrr	r	r	r
r5�sr5c@sneZdZdZedddd�Zeddej�eddd	�gZgZ	d
Z
e
dZdZd
S)�TestHelpSuppressOptionalz?Test that optional arguments can be suppressed in help messagesr{r|r�Fz--foor~r�z	spam helpz!        usage: PROG spam
        zA
        positional arguments:
          spam  spam help
        r�N)
rrrr�r.r[rrr_rrr~rr	r	r	r
r6�sr6c@s�eZdZdZedd�Zeddd�eddd�gZed	�ed
dej�gfgZ	dZ
e
dZd
ZdS)�TestHelpSuppressOptionalGroupz<Test that optional groups can be suppressed in help messagesr{r|z--foor~zfoo helpr�z	spam helprdz--barz2        usage: PROG [-h] [--foo FOO] spam
        z�
        positional arguments:
          spam        spam help

        optional arguments:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        r�N)
rrrr�r.r[r_rrrrr~rr	r	r	r
r7�s'r7c@sheZdZdZedd�Zeddd�eddej�gZgZ	dZ
e
d	Zd
ZdS)�TestHelpSuppressPositionalzATest that positional arguments can be suppressed in help messagesr{r|z--foor~zfoo helpr�z-        usage: PROG [-h] [--foo FOO]
        zz
        optional arguments:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        r�N)
rrrr�r.r[rrr_rrr~rr	r	r	r
r8�sr8c@s\eZdZdZedd�Zeddddd�gZgZd	Zed
Z	dZ
dS)
�TestHelpRequiredOptionalz.Test that required options don't look optionalr{r|z--foor�Tr~zfoo helpz+        usage: PROG [-h] --foo FOO
        zz
        optional arguments:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        r�N)rrrr�r.r[r_rrr~rr	r	r	r
r9�sr9c@szeZdZdZedddddd�Zedd	d
dd�ed
ddd�gZgZdZedZ	dZ
dS)�TestHelpAlternatePrefixCharsz:Test that options display with different prefix charactersr{r|r�z^;r�Fz^^foor�r�r~zfoo helpz;bz;;barzbar helpz-        usage: PROG [^^foo] [;b BAR]
        zq
        optional arguments:
          ^^foo              foo help
          ;b BAR, ;;bar BAR  bar help
        r�N)rrrr�r.r[r_rrr~rr	r	r	r
r:�sr:c@skeZdZdZedddd�Zeddd�ed	dd
�gZgZdZedZ	d
Z
dS)�TestHelpNoHelpOptionalz=Test that the --help argument can be suppressed help messagesr{r|r�Fz--foor~zfoo helpr�z	spam helpz-        usage: PROG [--foo FOO] spam
        z�
        positional arguments:
          spam       spam help

        optional arguments:
          --foo FOO  foo help
        r�N)rrrr�r.r[r_rrr~rr	r	r	r
r;	sr;c@sYeZdZdZedd�Zed�ed�gZgZdZedZ	dZ
d	S)
�TestHelpNonez1Test that no errors occur if no help is specifiedr{r|z--foor�z2        usage: PROG [-h] [--foo FOO] spam
        z�
        positional arguments:
          spam

        optional arguments:
          -h, --help  show this help message and exit
          --foo FOO
        r�N)rrrr�r.r[r_rrr~rr	r	r	r
r< s	r<c@s�eZdZdZedd�Zedddddd	d�eddd
ddd	d �edddddd	d!�edddddd	d"�gZgZdZedZ	dZ
dS)#�TestHelpTupleMetavarz"Test specifying metavar as a tupler{r|z-wr~r'r�r�r�W1�W2z-xr�r��X1�X2z-yr�r��Y1�Y2�Y3z-zr�r��Z1z]        usage: PROG [-h] [-w W1 [W2 ...]] [-x [X1 [X2 ...]]] [-y Y1 Y2 Y3] [-z [Z1]]
        z�
        optional arguments:
          -h, --help        show this help message and exit
          -w W1 [W2 ...]    w
          -x [X1 [X2 ...]]  x
          -y Y1 Y2 Y3       y
          -z [Z1]           z
        r�N)r>r?)r@rA)rBrCrD)rE)rrrr�r.r[r_rrr~rr	r	r	r
r=8s!r=c@s�eZdZdZedddejdd�Zeddd	�ed
dd�gZeddd
�eddd�gfgZ	dZ
e
dZdZdS)�TestHelpRawTextzTest the RawTextHelpFormatterr{r|�formatter_classr}z7Keep the formatting
    exactly as it is written

here
z--foor~z-    foo help should also
appear as given herer�z	spam helpr�z?    This text
  should be indented
    exactly like it is here
z--barzbar helpz>        usage: PROG [-h] [--foo FOO] [--bar BAR] spam
        a�
        Keep the formatting
            exactly as it is written

        here

        positional arguments:
          spam        spam help

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

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

          --bar BAR   bar help
        r�N)
rrrr�r.rZRawTextHelpFormatterr[r_rrr~rr	r	r	r
rFSs	rFc@s�eZdZdZedddejdd�Zeddd	�ed
dd�gZeddd
�eddd�gfgZ	dZ
e
dZdZdS)�TestHelpRawDescriptionzTest the RawTextHelpFormatterr{r|rGr}z7Keep the formatting
    exactly as it is written

here
z--foor~z4  foo help should not
    retain this odd formattingr�z	spam helpr�z?    This text
  should be indented
    exactly like it is here
z--barzbar helpz>        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 not retain this odd formatting

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

          --bar BAR   bar help
        r�N)
rrrr�r.rZRawDescriptionHelpFormatterr[r_rrr~rr	r	r	r
rH�s	rHc@s�eZdZdZedddejdd�Zeddd�ed	d
ddd�ed
dd�eddddddd�gZeddd�edde	dddd�gfgZ
dZedZdZ
dS)�TestHelpArgumentDefaultsz&Test the ArgumentDefaultsHelpFormatterr{r|rGr}z--foor~z)foo help - oh and by the way, %(default)sz--barr�r�zbar helpr�z	spam helpr�r�r�r�Zwoodenzbadger helpr�z--bazr:r�zbaz helpzO        usage: PROG [-h] [--foo FOO] [--bar] [--baz BAZ] spam [badger]
        a�
        description

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

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

        title:
          description

          --baz BAZ   baz help (default: 42)
        r�N)rrrr�r.rZArgumentDefaultsHelpFormatterr[r_r�rrr~rr	r	r	r
rI�s	!'rIc@seeZdZdZedddd�Zedddddd	�gZgZd
ZedZ	dZ
d
S)�TestHelpVersionActionz,Test the default help for the version actionr{r|r}z-Vz	--versionr�rz3.6z&        usage: PROG [-h] [-V]
        z�
        description

        optional arguments:
          -h, --help     show this help message and exit
          -V, --version  show program's version number and exit
        r�N)rrrr�r.r[r_rrr~rr	r	r	r
rJ�srJc	@s�eZdZdZedd�Zeddddddd	ej�ed
d	d�edd	d
�gZgZ	dZ
e
dZdS)�TestHelpVersionActionSuppresszCTest that the --version argument can be suppressed in help messagesr{r|z-vz	--versionr�rz1.0r~z--foozfoo helpr�z	spam helpz2        usage: PROG [-h] [--foo FOO] spam
        z�
        positional arguments:
          spam        spam help

        optional arguments:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        N)rrrr�r.r[rrr_rrr~r	r	r	r
rK�s	rKc@sreZdZdZedddd�Zedddd	d	d
�gZdd�dD�ZdZedZ	dZ
dS)�TestHelpSubparsersOrderingz5Test ordering of subcommands in help matches the coder{r|r}zdisplay some subcommandsz-vz	--versionr�rz0.1cCsg|]}td|��qS)r%)r.)r5r%r	r	r
r7s	z%TestHelpSubparsersOrdering.<listcomp>r�r�r�r�rqz6        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
        z        0.1
        N)r�r�r�r�rq)rrrr�r.r[r_rrr~rr	r	r	r
rL	s		

rLc@sxeZdZdZedddd�Zedddd	d	d
�gZd Zdd�eD�ZdZ	e	dZ
dZdS)!�"TestHelpSubparsersWithHelpOrderingz5Test ordering of subcommands in help matches the coder{r|r}zdisplay some subcommandsz-vz	--versionr�rz0.1r��a subcommand helpr��b subcommand helpr��c subcommand helpr��d subcommand helprq�e subcommand helpcCs+g|]!\}}td|d|��qS)r%r~)r.)r5r%r~r	r	r
r73s	z-TestHelpSubparsersWithHelpOrdering.<listcomp>z6        usage: PROG [-h] [-v] {a,b,c,d,e} ...
        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
        z        0.1
        N�r�rN�r�rO�r�rP�r�rQ�rqrR)rSrTrUrVrW)rrrr�r.r[r_Zsubcommand_datarrr~rr	r	r	r
rM&s		
rMc@s�eZdZdZdd�Zedddddej�Zedd	e	�ed
d	e�edd	e
dd
�gZgZdZ
e
dZdZdS)�TestHelpMetavarTypeFormatterr�cCs|S)Nr	)rer	r	r
�custom_typeTsz(TestHelpMetavarTypeFormatter.custom_typer{r|r}rGr�r:z-bz-crz
SOME FLOATzF        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
        N)rrrr�rYr.rZMetavarTypeHelpFormatterr[r�rr_rrr~rr	r	r	r
rXQsrXc@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zd S)!�TestInvalidArgumentConstructorsz-Test a bunch of invalid Argument constructorscOs)tj�}|jt|j||�dS)N)rrgr|rsr])rr/r0r^r	r	r
�assertTypeErrorvsz/TestInvalidArgumentConstructors.assertTypeErrorcOs)tj�}|jt|j||�dS)N)rrgr|r�r])rr/r0r^r	r	r
�assertValueError{sz0TestInvalidArgumentConstructors.assertValueErrorcCsP|jddd�|jddd�|jddf�|jddi�dS)Nz-xr�z-y�callbackrbZ
callback_argsZcallback_kwargs)r[)rr	r	r
�test_invalid_keyword_arguments�sz>TestInvalidArgumentConstructors.test_invalid_keyword_argumentscCs5|j�x$ddgD]}|jd|�qWdS)Nr�r�r�)r[)rr�r	r	r
�test_missing_destination�s
z8TestInvalidArgumentConstructors.test_missing_destinationcCs|jd�|jd�dS)Nz--z---)r\)rr	r	r
�test_invalid_option_strings�s
z;TestInvalidArgumentConstructors.test_invalid_option_stringscCs0|jddd�|jddttf�dS)Nz--foor:r�)r\r�r)rr	r	r
�test_invalid_type�sz1TestInvalidArgumentConstructors.test_invalid_typecCs�|jddd�|jddd�|jddd
�tj�}|jt��}|jddd�WdQRX|jd	t|j��dS)Nz-xr�rbr�z--foor�r�z
store-truezunknown action)r�r�)	r\rrgr|r�r]rrr�)rr^r�r	r	r
�test_invalid_action�sz3TestInvalidArgumentConstructors.test_invalid_actioncCsetj�}|jdd�|jt��}|jddd�WdQRX|jdt|j��dS)Nr�rbr�r�z+dest supplied twice for positional argument)rrgr]r|r�rrr�)rr^r�r	r	r
�test_multiple_dest�s	z2TestInvalidArgumentConstructors.test_multiple_destcCsoxhdddddgD]Q}xHtdt�tdd�td	d
�gD]}|jdd||�qGWqWdS)
Nr�r�r�r�r�r:r�r�r�Zabz-xr�)r�r�r[)rr�Zattrsr	r	r
�test_no_argument_actions�s
z8TestInvalidArgumentConstructors.test_no_argument_actionscCsPxIdddgD]8}|jdddd|�|jddd	d|�qWdS)
Nr�r�r�z-xr�rbr�r�r�)r[)rr�r	r	r
�!test_no_argument_no_const_actions�szATestInvalidArgumentConstructors.test_no_argument_no_const_actionsc
Cs�x�ddgD]�}|jdddd|�|jdddd|�xUdd	d
gD]D}|jdddd|d|�|jdddd|d|�qUWq
WdS)
Nr�r�z-xr�rr�r�rFr�r�r�rb)r\)rr�r�r	r	r
�#test_more_than_one_argument_actions�s
zCTestInvalidArgumentConstructors.test_more_than_one_argument_actionscCs4x-ddgD]}|jdddd|�q
WdS)Nr�r�z-xr�r�r�)r[)rr�r	r	r
�test_required_const_actions�sz;TestInvalidArgumentConstructors.test_required_const_actionscCsL|jddd�|jddddd�|jddddtj�dS)NZcommandr�Zparsersr{r|r\)r[rrg)rr	r	r
�"test_parsers_action_missing_params�szBTestInvalidArgumentConstructors.test_parsers_action_missing_paramscCs|jddd�dS)Nrbr�T)r[)rr	r	r
�test_required_positional�sz8TestInvalidArgumentConstructors.test_required_positionalc
s�Gdd�dt��G�fdd�dt�}tj�}|j�|jdd|d�d��|j�|jd	d|d�d��dS)
Nc@seZdZdS)zITestInvalidArgumentConstructors.test_user_defined_action.<locals>.SuccessN)rrrr	r	r	r
�Success�srjcs1eZdZd�fdd�Zdd�ZdS)zHTestInvalidArgumentConstructors.test_user_defined_action.<locals>.ActionFcs1|dkr-|�kr-|�kr-���dS)Nr�r	)r�option_stringsr�r�r�r�)rjr	r
r1�szQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__init__c_sdS)Nr	)rr/r0r	r	r
rr�szQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__call__N)rrrr1rrr	)rjr	r
ru�sruz--spamr�r�r�r�)rAr�rrgr|r])rrur^r	)rjr
�test_user_defined_action�sz8TestInvalidArgumentConstructors.test_user_defined_actionN)rrrr�r[r\r^r_r`rarbrcrdrerfrgrhrirlr	r	r	r
rZss 	
rZc@s(eZdZdd�Zdd�ZdS)�TestActionsReturnedcCs|tj�}|jd�}|j|jd�|jdd�}|j|jd�|jdd�}|j|jd�dS)	Nz--foorbz-bz--barr�z-xz-yr�)rrgr]r�r�)rr^r�r	r	r
r��szTestActionsReturned.test_destcCs�tj�}|jddddddddtd	d
dgdd
dddd�}|j|jd�|j|jd�|j|jd�|j|jt�|j|j	d
dg�|j|j
d
�|j|jd�|j|jd�dS)Nz--foor�r�r�r�r�r�r:r�rFr�r~r�rZBARr�r�)
rrgr]r�r�r�r�r�r:r�r~rr�)rr^r�r	r	r
�	test_misc�szTestActionsReturned.test_miscN)rrrr�rnr	r	r	r
rm�s	rmc@s4eZdZdd�Zdd�Zdd�ZdS)�TestConflictHandlingcCs|jttjdd�dS)N�conflict_handlerrb)r|r�rrg)rr	r	r
�
test_bad_typesz"TestConflictHandling.test_bad_typecCs\tj�}|jd�|jtj|jd�|jd�|jtj|jd�dS)Nz-xz--spam)rrgr]r|r�)rr^r	r	r
�test_conflict_errors


z(TestConflictHandling.test_conflict_errorcCs�tj}|dddd�}|jddd�|jddd�|j|j�tjd	��|jd
dd�|jd
dd
�|j|j�tjd��dS)Nr{r|rpZresolvez-xr~zOLD XzNEW Xz�            usage: PROG [-h] [-x X]

            optional arguments:
              -h, --help  show this help message and exit
              -x X        NEW X
            z--spamrZOLD_SPAMZNEW_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
            )rrgr]r�r�r�r�)rr�r^r	r	r
�test_resolve_errors	
z'TestConflictHandling.test_resolve_errorN)rrrrqrrrsr	r	r	r
ros	roc@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�ZdS)�TestOptionalsHelpVersionActionsz!Test the help and version actionsc
CsL|jt��}|j|j��WdQRX|j|j�|jj�dS)N)r|r@rPr{r�r�r�rC)rr^r}r�r	r	r
�assertPrintHelpExit?sz3TestOptionalsHelpVersionActions.assertPrintHelpExitcGs|jt|j|�dS)N)r|r@rP)rr^r/r	r	r
rzDsz9TestOptionalsHelpVersionActions.assertArgumentParserErrorcCs_t�}|jdddddd�|j|d�|j|d�|jtt|d�dS)	Nz-vz	--versionr�rz1.0z-hz--help�format_version)rTr]rur|�AttributeErrorrK)rr^r	r	r
�test_versionGs
	z,TestOptionalsHelpVersionActions.test_versionc
Csntdd�}|jdddddd�|jt��}|jdg�WdQRX|jd|jj�dS)	Nr{ZPPPz-vz	--versionr�rz%(prog)s 3.5zPPP 3.5
)rTr]r|r@rPr�r�rC)rr^r�r	r	r
�test_version_formatNs
z3TestOptionalsHelpVersionActions.test_version_formatcCsetdd�}|jdddddd�|j|d�|j|d	�|jtt|d
�dS)Nr�Fz-vz	--versionr�rz1.0z-hz--helprv)rTr]rzr|rwrK)rr^r	r	r
�test_version_no_helpUs
z4TestOptionalsHelpVersionActions.test_version_no_helpc
Csktdd�}|jddddd�|jt��}|jdg�WdQRX|jd|jj�dS)Nr{r2z-Vr�rz%(prog)s 3.7zXXX 3.7
)rTr]r|r@rPr�r�rC)rr^r�r	r	r
�test_version_action\s
z3TestOptionalsHelpVersionActions.test_version_actioncCsStdd�}|j|d�|j|d�|j|d�|j|d�dS)Nr�Fz-hz--helpz-vz	--version)rTrz)rr^r	r	r
�test_no_helpcs
z,TestOptionalsHelpVersionActions.test_no_helpcCsyt�}|jddd�|jddd�|j|d�|j|d�|j|d�|jtt|d�dS)	Nz-xr�r~z-yrz-vz	--versionrv)rTr]rurzr|rwrK)rr^r	r	r
�test_alternate_help_versionjs	z;TestOptionalsHelpVersionActions.test_alternate_help_versioncCs�t�}|jddddd�|jddd�|jd�ddd	d
dg}|dd
g}xm|D]e}x|D]}d||f}q{W|j||d�|j||d�|jtt|d�qnWdS)Nz	--versionr�rz1.0z-xr�r�r�rbz-x barzbaz -xz--bad-optionzfoo bar bazz	%s %%s %sz-hz--helprv)rTr]rur|rwrK)rr^Zvalid_prefixesZvalid_suffixes�prefix�suffixr�r	r	r
�!test_help_version_extra_argumentsss	


zATestOptionalsHelpVersionActions.test_help_version_extra_argumentsN)
rrrr�rurzrxryrzr{r|r}r�r	r	r	r
rt<s	rtc@sReZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�TestStringsz3Test str()  and repr() on Optionals and PositionalscCs1x*ttgD]}|j||�|�q
WdS)N)rr5r�)r�objZ
result_string�funcr	r	r
�assertStringEqual�szTestStrings.assertStringEqualcCshtjddddgddddd	d
ddd
dddgdddd�}d}|j||�dS)Nrkz--fooz-az-br�r�r:r�r�r�r�r�r�rFr�r�r~ZHELPrZMETAVARz�Action(option_strings=['--foo', '-a', '-b'], dest='b', nargs='+', const=None, default=42, type='int', choices=[1, 2, 3], help='HELP', metavar='METAVAR'))rrur�)rZoptionrer	r	r
�
test_optional�s		zTestStrings.test_optionalcCsctjdgdddtddddd	d
ddgdd
dd�}dt}|j||�dS)Nrkr�r�r:r�r�r�g@r�g�?g�?r~zH HH HrzMV MV MVz�Action(option_strings=[], dest='x', nargs='?', const=None, default=2.5, type=%r, choices=[0.5, 1.5, 2.5], help='H HH H', metavar='MV MV MV'))rrurr�)rZargumentrer	r	r
�
test_argument�s		zTestStrings.test_argumentcCs2tjdddd�}d}|j||�dS)Nrbr�r�r�zNamespace(bar='spam', foo=42))rrr�)rrrer	r	r
�test_namespace�szTestStrings.test_namespacecCs3tjdd�}dtj}|j||�dS)Nr{r|zvArgumentParser(prog='PROG', usage=None, description=None, formatter_class=%r, conflict_handler='error', add_help=True))rrgZ
HelpFormatterr�)rr^rer	r	r
�test_parser�s
zTestStrings.test_parserN)	rrrr�r�r�r�r�r�r	r	r	r
r��sr�c@s4eZdZdd�Zdd�Zdd�ZdS)�
TestNamespacecCsdtj�}|jtt|d�tjdddd�}|j|jd�|j|jd�dS)Nr�r�r�r�r�)rrr|rwrKr�r�r�)rrr	r	r
�test_constructor�s
zTestNamespace.test_constructorcCs�tjdddd�}tjdddd�}tjdd�}tjdd�}|j||�|j||�|j||�|j||�|j||�|j||k�|j||k�|j||k�|j||k�dS)Nr�rFr�r�)rrr�ZassertNotEqual�
assertTrue)rZns1Zns2Zns3Zns4r	r	r
�
test_equality�szTestNamespace.test_equalitycCsNtjdddd�}|j|jd�t�|j|jd�t�dS)Nr�rFr�r�)rrZassertIsr?�NotImplemented�__ne__)rrr	r	r
�$test_equality_returns_notimplemented�sz2TestNamespace.test_equality_returns_notimplementedN)rrrr�r�r�r	r	r	r
r��sr�c@s4eZdZdd�Zdd�Zdd�ZdS)�TestEncodingc	CsOtjj|�\}}|d7}tj|dd��}|j�WdQRXdS)Nz.pyr3zutf-8)rr�splitext�codecsr(rE)rrrlr�r	r	r
�_test_module_encoding�s
z"TestEncoding._test_module_encodingcCs|jtj�dS)N)r�r�__file__)rr	r	r
�test_argparse_module_encoding�sz*TestEncoding.test_argparse_module_encodingcCs|jt�dS)N)r�r�)rr	r	r
�"test_test_argparse_module_encoding�sz/TestEncoding.test_test_argparse_module_encodingN)rrrr�r�r�r	r	r	r
r��sr�c@seZdZdd�ZdS)�TestArgumentErrorcCs2d}tjd|�}|jt|�|�dS)Nz
my error here)rr�r�r)rryrXr	r	r
�test_argument_error�sz%TestArgumentError.test_argument_errorN)rrrr�r	r	r	r
r��sr�c@seZdZdd�ZdS)�TestArgumentTypeErrorc
Cswdd�}tdddd�}|jdd|�|jt��}|jd	g�WdQRX|jd
|jj�dS)NcSstjd��dS)Nzspam!)rZArgumentTypeError)rer	r	r
r�sz<TestArgumentTypeError.test_argument_type_error.<locals>.spamr{r|r�Fr�r:r2z-usage: PROG x
PROG: error: argument x: spam!
)rTr]r|r@rPr�r�rD)rr�r^r�r	r	r
�test_argument_type_errors	z.TestArgumentTypeError.test_argument_type_errorN)rrrr�r	r	r	r
r�sr�c@s4eZdZdd�Zdd�Zdd�ZdS)�TestMessageContentErrorcCs�tdddd�}|jddt�|jddtdd	�|jd
dtdd�|jt��}|jg�WdQRXt|j�}|j|d�|j|d
�|j|d
�|jt��}|jdg�WdQRXt|j�}|j	|d�|j|d
�|j|d
�|jt��}|jddg�WdQRXt|j�}|j	|d�|j	|d
�|j|d
�dS)Nr{r|rr��req_posr:z-req_optr�TZneed_oner�r��req_optZmyXargumentz
-req_opt=1)
rTr]rr�r|r@rPr��assertRegexr)rr^r�ryr	r	r
�%test_missing_argument_name_in_messages,z=TestMessageContentError.test_missing_argument_name_in_messagecCs1tdddd�}|jddt�|jddtdd	�|jd
dtddd
d	�|jt��}|jg�WdQRXt|j�}|j	|d�|j	|d�|j
|d�|jt��}|jdg�WdQRXt|j�}|j	|d�|j
|d�|j
|d�dS)Nr{r|rr�r�r:z	--req_optr�Tz	--opt_optr�r�r�r�Zopt_optz--req_opt=1)rTr]rr��boolr|r@rPr�r�r)rr^r�ryr	r	r
�%test_optional_optional_not_in_message/s"z=TestMessageContentError.test_optional_optional_not_in_messagec
Cs�tdddd�}|jd�|jdddd	d
�|jt��}|jg�WdQRXt|j�}|j|d�|j|d�dS)Nr{r|rr�r�Zoptional_positionalr�r�r�r])	rTr]r|r@rPrr�r�r)rr^r�ryr	r	r
�'test_optional_positional_not_in_messageBs
z?TestMessageContentError.test_optional_positional_not_in_messageN)rrrr�r�r�r	r	r	r
r�sr�c@seZdZdd�ZdS)�TestTypeFunctionCallOnlyOncecsi�fdd�}tj�}|jdd|dd�|jdj��}�jtdd	�|�dS)
Ncs�j|d�dS)Nzspam!�
foo_converted)r�)Zstring_to_convert)rr	r
r�TszLTestTypeFunctionCallOnlyOnce.test_type_function_call_only_once.<locals>.spamz--foor:r�r�z--foo spam!rbr�)rrgr]rPr{r�r2)rr�r^r/r	)rr
�!test_type_function_call_only_onceSs
z>TestTypeFunctionCallOnlyOnce.test_type_function_call_only_onceN)rrrr�r	r	r	r
r�Qsr�c@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TestTypeFunctionCalledOnDefaultcsc�fdd�}tj�}|jdd|dd�|jg�}�jtdd�|�dS)Ncs�j|d�dS)Nrr�)r�)�int_to_convert)rr	r
r�dsz]TestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_default.<locals>.spamz--foor:r�rrb)rrgr]rPr�r2)rr�r^r/r	)rr
�/test_type_function_call_with_non_string_defaultcs
zOTestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_defaultcCs]dd�}tj�}|jdd|dd�|jg�}|jtdd�|�dS)	NcSsdS)Nr�r	)r�r	r	r
r�oszYTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_default.<locals>.spamz--foor:r��0rbr�)rrgr]rPr�r2)rr�r^r/r	r	r
�+test_type_function_call_with_string_defaultns
zKTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_defaultcCs]dd�}tj�}|jdd|dd�|jg�}|jtdd�|�dS)	NcSs|dS)Nr�r	)Zstr_to_convertr	r	r
�extendyszYTestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_default.<locals>.extendz--testr:r�r�riz**)rrgr]rPr�r2)rr�r^r/r	r	r
�)test_no_double_type_conversion_of_defaultxs
zITestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_defaultc
CsWtj�}|jddddtdgdd�|jg�}|j|jg�dS)Nz--testr�rir:r�r�r�)rrgr]rrPr�ri)rr^r/r	r	r
�test_issue_15906�s

z0TestTypeFunctionCalledOnDefault.test_issue_15906N)rrrr�r�r�r�r	r	r	r
r�as
r�c@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�TestParseKnownArgscCstj�}|jf�dS)N)rrgrP)rr^r	r	r
�test_arguments_tuple�sz'TestParseKnownArgs.test_arguments_tuplecCstj�}|jg�dS)N)rrgrP)rr^r	r	r
�test_arguments_list�sz&TestParseKnownArgs.test_arguments_listcCs*tj�}|jd�|jd�dS)Nr�)r�)rrgr]rP)rr^r	r	r
�test_arguments_tuple_positional�s
z2TestParseKnownArgs.test_arguments_tuple_positionalcCs-tj�}|jd�|jdg�dS)Nr�)rrgr]rP)rr^r	r	r
�test_arguments_list_positional�s
z1TestParseKnownArgs.test_arguments_list_positionalcCsgtj�}|jd�|jdj��\}}|jtdd�|�|jddg|�dS)Nz--fooz--foo F --bar --bazrb�Fz--barz--baz)rrgr]r�r{r�r2)rr^r/�extrasr	r	r
�test_optionals�s

z!TestParseKnownArgs.test_optionalscCs�tj�}|jddddddt�|jddd	�|jd
�ddd
dddg}|j|�\}}|jtddddd
d�|�|jdd
dg|�dS)Nz-vr�r�r�rFr:z--spamr�r�r�r�rcz--foor�r�vr�r�T)rrgr]r�r�r�r2)rr^rjr/r�r	r	r
�
test_mixed�s
%zTestParseKnownArgs.test_mixedN)	rrrr�r�r�r�r�r�r	r	r	r
r��sr�c@sJeZdZdZdd�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 nargscCs)tj�}|jdd|d|�dS)Nz--foor�r)rrgr])rr�rr^r	r	r
�do_test_no_exception�sz+TestAddArgumentMetavar.do_test_no_exceptionc
Cs_tj�}|jt�� }|jdd|d|�WdQRX|j|jjd|j�dS)Nz--foor�rr)	rrgr|r�r]r�r�r/�EXPECTED_MESSAGE)rr�rr^r�r	r	r
�do_test_exception�s z(TestAddArgumentMetavar.do_test_exceptioncCs|jdddd�dS)Nr�rr�)r�)rr	r	r
�test_nargs_None_metavar_string�sz5TestAddArgumentMetavar.test_nargs_None_metavar_stringcCs|jdddt��dS)Nr�r)r��tuple)rr	r	r
�test_nargs_None_metavar_length0�sz6TestAddArgumentMetavar.test_nargs_None_metavar_length0cCs|jdddd�dS)Nr�rr�)r�)rr	r	r
�test_nargs_None_metavar_length1�sz6TestAddArgumentMetavar.test_nargs_None_metavar_length1cCs|jdddd�dS)Nr�rr�r�)r�r�)r�)rr	r	r
�test_nargs_None_metavar_length2�sz6TestAddArgumentMetavar.test_nargs_None_metavar_length2cCs|jdddd�dS)Nr�rr�r�r�)r�r�r�)r�)rr	r	r
�test_nargs_None_metavar_length3�sz6TestAddArgumentMetavar.test_nargs_None_metavar_length3cCs|jdddd�dS)Nr�r�rr�)r�)rr	r	r
�"test_nargs_optional_metavar_string�sz9TestAddArgumentMetavar.test_nargs_optional_metavar_stringcCs|jdddt��dS)Nr�r�r)r�r�)rr	r	r
�#test_nargs_optional_metavar_length0�sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length0cCs|jdddd�dS)Nr�r�rr�)r�)rr	r	r
�#test_nargs_optional_metavar_length1�sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length1cCs|jdddd�dS)Nr�r�rr�r�)r�r�)r�)rr	r	r
�#test_nargs_optional_metavar_length2�sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length2cCs|jdddd�dS)Nr�r�rr�r�r�)r�r�r�)r�)rr	r	r
�#test_nargs_optional_metavar_length3�sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length3cCs|jdddd�dS)Nr�r�rr�)r�)rr	r	r
�$test_nargs_zeroormore_metavar_string�sz;TestAddArgumentMetavar.test_nargs_zeroormore_metavar_stringcCs|jdddt��dS)Nr�r�r)r�r�)rr	r	r
�%test_nargs_zeroormore_metavar_length0�sz<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length0cCs|jdddd�dS)Nr�r�rr�)r�)rr	r	r
�%test_nargs_zeroormore_metavar_length1�sz<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length1cCs|jdddd�dS)Nr�r�rr�r�)r�r�)r�)rr	r	r
�%test_nargs_zeroormore_metavar_length2�sz<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length2cCs|jdddd�dS)Nr�r�rr�r�r�)r�r�r�)r�)rr	r	r
�%test_nargs_zeroormore_metavar_length3�sz<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length3cCs|jdddd�dS)Nr�r�rr�)r�)rr	r	r
�#test_nargs_oneormore_metavar_string�sz:TestAddArgumentMetavar.test_nargs_oneormore_metavar_stringcCs|jdddt��dS)Nr�r�r)r�r�)rr	r	r
�$test_nargs_oneormore_metavar_length0sz;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length0cCs|jdddd�dS)Nr�r�rr�)r�)rr	r	r
�$test_nargs_oneormore_metavar_length1sz;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length1cCs|jdddd�dS)Nr�r�rr�r�)r�r�)r�)rr	r	r
�$test_nargs_oneormore_metavar_length2sz;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length2cCs|jdddd�dS)Nr�r�rr�r�r�)r�r�r�)r�)rr	r	r
�$test_nargs_oneormore_metavar_length3sz;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length3cCs|jdddd�dS)Nr�z...rr�)r�)rr	r	r
�#test_nargs_remainder_metavar_stringsz:TestAddArgumentMetavar.test_nargs_remainder_metavar_stringcCs|jdddt��dS)Nr�z...r)r�r�)rr	r	r
�$test_nargs_remainder_metavar_length0sz;TestAddArgumentMetavar.test_nargs_remainder_metavar_length0cCs|jdddd�dS)Nr�z...rr�)r�)rr	r	r
�$test_nargs_remainder_metavar_length1sz;TestAddArgumentMetavar.test_nargs_remainder_metavar_length1cCs|jdddd�dS)Nr�z...rr�r�)r�r�)r�)rr	r	r
�$test_nargs_remainder_metavar_length2sz;TestAddArgumentMetavar.test_nargs_remainder_metavar_length2cCs|jdddd�dS)Nr�z...rr�r�r�)r�r�r�)r�)rr	r	r
�$test_nargs_remainder_metavar_length3sz;TestAddArgumentMetavar.test_nargs_remainder_metavar_length3cCs|jdddd�dS)Nr�zA...rr�)r�)rr	r	r
� test_nargs_parser_metavar_string!sz7TestAddArgumentMetavar.test_nargs_parser_metavar_stringcCs|jdddt��dS)Nr�zA...r)r�r�)rr	r	r
�!test_nargs_parser_metavar_length0$sz8TestAddArgumentMetavar.test_nargs_parser_metavar_length0cCs|jdddd�dS)Nr�zA...rr�)r�)rr	r	r
�!test_nargs_parser_metavar_length1'sz8TestAddArgumentMetavar.test_nargs_parser_metavar_length1cCs|jdddd�dS)Nr�zA...rr�r�)r�r�)r�)rr	r	r
�!test_nargs_parser_metavar_length2*sz8TestAddArgumentMetavar.test_nargs_parser_metavar_length2cCs|jdddd�dS)Nr�zA...rr�r�r�)r�r�r�)r�)rr	r	r
�!test_nargs_parser_metavar_length3-sz8TestAddArgumentMetavar.test_nargs_parser_metavar_length3cCs|jdddd�dS)Nr�rFrr�)r�)rr	r	r
�test_nargs_1_metavar_string2sz2TestAddArgumentMetavar.test_nargs_1_metavar_stringcCs|jdddt��dS)Nr�rFr)r�r�)rr	r	r
�test_nargs_1_metavar_length05sz3TestAddArgumentMetavar.test_nargs_1_metavar_length0cCs|jdddd�dS)Nr�rFrr�)r�)rr	r	r
�test_nargs_1_metavar_length18sz3TestAddArgumentMetavar.test_nargs_1_metavar_length1cCs|jdddd�dS)Nr�rFrr�r�)r�r�)r�)rr	r	r
�test_nargs_1_metavar_length2;sz3TestAddArgumentMetavar.test_nargs_1_metavar_length2cCs|jdddd�dS)Nr�rFrr�r�r�)r�r�r�)r�)rr	r	r
�test_nargs_1_metavar_length3>sz3TestAddArgumentMetavar.test_nargs_1_metavar_length3cCs|jdddd�dS)Nr�r�rr�)r�)rr	r	r
�test_nargs_2_metavar_stringCsz2TestAddArgumentMetavar.test_nargs_2_metavar_stringcCs|jdddt��dS)Nr�r�r)r�r�)rr	r	r
�test_nargs_2_metavar_length0Fsz3TestAddArgumentMetavar.test_nargs_2_metavar_length0cCs|jdddd�dS)Nr�r�rr�)r�)rr	r	r
�test_nargs_2_metavar_length1Isz3TestAddArgumentMetavar.test_nargs_2_metavar_length1cCs|jdddd�dS)Nr�r�rr�r�)r�r�)r�)rr	r	r
�test_nargs_2_metavar_length2Lsz3TestAddArgumentMetavar.test_nargs_2_metavar_length2cCs|jdddd�dS)Nr�r�rr�r�r�)r�r�r�)r�)rr	r	r
�test_nargs_2_metavar_length3Osz3TestAddArgumentMetavar.test_nargs_2_metavar_length3cCs|jdddd�dS)Nr�r�rr�)r�)rr	r	r
�test_nargs_3_metavar_stringTsz2TestAddArgumentMetavar.test_nargs_3_metavar_stringcCs|jdddt��dS)Nr�r�r)r�r�)rr	r	r
�test_nargs_3_metavar_length0Wsz3TestAddArgumentMetavar.test_nargs_3_metavar_length0cCs|jdddd�dS)Nr�r�rr�)r�)rr	r	r
�test_nargs_3_metavar_length1Zsz3TestAddArgumentMetavar.test_nargs_3_metavar_length1cCs|jdddd�dS)Nr�r�rr�r�)r�r�)r�)rr	r	r
�test_nargs_3_metavar_length2]sz3TestAddArgumentMetavar.test_nargs_3_metavar_length2cCs|jdddd�dS)Nr�r�rr�r�r�)r�r�r�)r�)rr	r	r
�test_nargs_3_metavar_length3`sz3TestAddArgumentMetavar.test_nargs_3_metavar_length3N)3rrrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r	r	r	r
r��s`r�c@s(eZdZdd�Zdd�ZdS)�TestImportStarcCs.x'tjD]}|jtt|��q
WdS)N)r�__all__r�r�)rr%r	r	r
riiszTestImportStar.testcCsBdd�tt�j�D�}|jt|�ttj��dS)NcSsFg|]<\}}|jd�p*|dkstj|�s|�qS)rlZngettext)�
startswith�inspectZismodule)r5r%r`r	r	r
r7os		zJTestImportStar.test_all_exports_everything_but_modules.<locals>.<listcomp>)r=rr9r�r8r�)rr9r	r	r
�'test_all_exports_everything_but_modulesms	z6TestImportStar.test_all_exports_everything_but_modulesN)rrrrir�r	r	r	r
r�gsr�cCs&tjt�it_t�t_dS)N)rZrun_unittestrrBrDrrOr	r	r	r
�	test_mainvs
	r��__main__)�r�r�rr!rrIr�rZunittestr�iorrirrrrr�rr.r2rAr@rSrgrTr:rYr�rZr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrr
rrrrrrrrr r,r2rBrGrKrMrOZskipIfr�rSrTrUrVr\r_rbrdrjrvryr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr	rrrrrrr#r%r&r'r*r+r,r-r.r/r0r1r3r4r5r6r7r8r9r:r;r<r=rFrHrIrJrKrLrMrXrZrmrortr�r�r�r�r�r�r�r�r�r�r�r�rr	r	r	r
�<module>s�
 q	








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