Your IP : 216.73.216.213


Current Path : /opt/alt/python34/lib64/python3.4/test/__pycache__/
Upload File :
Current File : //opt/alt/python34/lib64/python3.4/test/__pycache__/test_argparse.cpython-34.pyc

�
f f���@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	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�ee�ZjGd�d��d�ee�ZkGd�d��d�e�ZlGd�d��d�e�ZmGd�d��d�ee�ZnGd�d��d�ee�ZoGd�d��d�ee�ZpGd�d��d�e�Zqejresed��o�ejt�dkd��Gd�d��d�ee��ZuGd�d��d�ee�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�ZGd�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�Gd�d��d�e�e��Z�Gd�d��d�e�e��Z�Gdd�de�Z�Gdd�de�Z�Gdd�de�Z�Gdd�de�Z�efZe�dei�Z�Gd	d
�d
e��Z�Gdd�de��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�dqdr�Z�e�dskr�e��ndS(t�N)�StringIO)�support)�mockc@seZdZdS)�StdIOBufferN)�__name__�
__module__�__qualname__�r	r	�7/opt/alt/python34/lib64/python3.4/test/test_argparse.pyrsrcs.eZdZ�fdd�Zdd�Z�S)�TestCasecsj||krMtd�tt|��tt|��t|�t|�ntt|�j||�dS)N�)�print�repr�superr�assertEqual)�selfZobj1Zobj2)�	__class__r	r
rs


zTestCase.assertEqualcCs-tj�}|jd�|j|j�dS)N�COLUMNS)r�EnvironmentVarGuardZunset�
addCleanup�__exit__)r�envr	r	r
�setUp s
zTestCase.setUp)rrrrrr	r	)rr
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
�tearDown0s
(
-zTempDirMixin.tearDownc	CsTtjj|j|�}t|d��}|j|�WdQXtj|tj�dS)N�w)	rr#r$r�open�writer"r%�S_IREAD)r�filenameZ	file_path�filer	r	r
�create_readonly_file7sz!TempDirMixin.create_readonly_fileN)rrrrr,r3r	r	r	r
r)src@seZdZdd�ZdS)�SigcOs||_||_dS)N)�args�kwargs)rr5r6r	r	r
�__init__?s	zSig.__init__N)rrrr7r	r	r	r
r4=sr4c@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�NScKs|jj|�dS)N)�__dict__�update)rr6r	r	r
r7FszNS.__init__cCsHt|jj��}djdd�|D��}dt|�j|fS)Nz, cSsg|]}d|�qS)z%s=%rr	)�.0�tupr	r	r
�
<listcomp>Ks	zNS.__repr__.<locals>.<listcomp>z%s(%s))�sortedr9�itemsr$�typer)r�sorted_itemsZ	kwarg_strr	r	r
�__repr__IszNS.__repr__cCst|�t|�kS)N)�vars)r�otherr	r	r
�__eq__Nsz	NS.__eq__cCs||kS)Nr	)rrDr	r	r
�__ne__Qsz	NS.__ne__N)rrrr7rBrErFr	r	r	r
r8Dsr8c@s%eZdZddddd�ZdS)�ArgumentParserErrorNcCs>tj||||�||_||_||_||_dS)N)�	Exceptionr7�message�stdout�stderr�
error_code)rrIrJrKrLr	r	r
r7Ws
			zArgumentParserError.__init__)rrrr7r	r	r	r
rGUsrGc
Os^ttjt�s$ttjt�r1|||�Stj}tj}t�t_t�t_z�y�|||�}xptt|��D]\}t||�tjkr�t|||�nt||�tjkr�t|||�q�q�W|SWnXt	k
rBtj
�dj}tjj�}tjj�}	t
d||	|��YnXWd|t_|t_XdS)N��
SystemExit)�
isinstance�sysrKrrJ�listrC�getattr�setattrrN�exc_info�code�getvaluerG)
�
parse_argsr5r6Z
old_stdoutZ
old_stderr�result�keyrUrJrKr	r	r
�stderr_to_parser_error_s,$
		
	rZcsFeZdZ�fdd�Z�fdd�Z�fdd�Z�S)�ErrorRaisingArgumentParsercs"tt|�j}t|||�S)N)rr[rWrZ)rr5r6rW)rr	r
rW�sz%ErrorRaisingArgumentParser.parse_argscs"tt|�j}t|||�S)N)rr[�exitrZ)rr5r6r\)rr	r
r\�szErrorRaisingArgumentParser.exitcs"tt|�j}t|||�S)N)rr[�errorrZ)rr5r6r])rr	r
r]�sz ErrorRaisingArgumentParser.error)rrrrWr\r]r	r	)rr
r[sr[c@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�|_nt|d�sIt|_ndd�}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_argumentr5r6)�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_grouprbr5r6)rcrd�grouprer	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)�	enumeraterhrbr5r6)rcrd�irerir	r	r
�many_groups�sz3ParserTesterMetaclass.__init__.<locals>.many_groupscSs
|j|�S)z#Parse the args by passing in a list)rW)rcr5r	r	r
�listargs�sz0ParserTesterMetaclass.__init__.<locals>.listargscSs<tj}|dg|t_z|j�SWd|t_XdS)z(Parse the args by defaulting to sys.argvrN)rP�argvrW)rcr5Z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$�	TypeErrorrS)rZ
tester_cls�
add_argumentsrWZadd_arguments_nameZparse_args_namerrZ	func_name�names�	test_namersr	r	r
r7�s			

z9ParserTesterMetaclass.__init__.<locals>.AddTests.__init__cSsA|jj}|jj}|j||�}|j||j�|S)N)r`r5r6rartrd)r�testerr5r6rcr	r	r
�_get_parser�s
z<ParserTesterMetaclass.__init__.<locals>.AddTests._get_parserc
Ss\|j|�}xF|jD];}|j�}|jtd|��|j|�WdQXqWdS)N�msg)r}�failures�split�assertRaisesrGrW)rr|rc�args_strr5r	r	r
rv�s
z>ParserTesterMetaclass.__init__.<locals>.AddTests.test_failurescSsm|j|�}xW|jD]L\}}t|t�rC|j�}n|j||�}|j||�qWdS)N)r}�	successesrO�strr�rur)rr|rcr5�expected_nsZ	result_nsr	r	r
rw�sz?ParserTesterMetaclass.__init__.<locals>.AddTests.test_successesN)rrrr7r}rvrwr	r	r	r
�AddTests�sr�)�hasattrr4r`r[ra�object)�clsr+�bases�bodydictrfrjrmrnrpr�ryrWr	r	r
r7�s	-zParserTesterMetaclass.__init__N)rrr�__doc__r7r	r	r	r
r^�sr^r_c@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 -yr�xNz-x az-xaz-x -1z-1z-x-1)	rrrr�r4rdrr8r�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�r4rdrr8r�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rgNz-foo az-foo -1z-1z-fo az-f a)	rrrr�r4rdrr8r�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�r4rdrr8r�r	r	r	r
r�<s!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�r4rdrr8r�r	r	r	r
r�Ls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�r4rdrr8r�r	r	r	r
r�\s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rgNz--foo az--foo=az
--foo -2.5z-2.5z
--foo=-2.5)	rrrr�r4rdrr8r�r	r	r	r
r�is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�r4rdrr8r�r	r	r	r
r�ws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�r4rdrr8r�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�r4rdrr8r�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�r4r`rdrr8r�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�r4r`rdrr8r�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�r4r`rdrr8r�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�r4rdrr8r�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�hrlz--baz j --foo-bar k�k�j)	rrrr�r4rdrr8r�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�r4rdrr8r�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�r4rdrr8r�r	r	r	r
r�s
r�c@sdeZdZdZeddd�gZddgZdedd�fd	eddg�fgZdS)
�TestOptionalsNargs1z*Tests specifying the 1 arg for an Optionalz-x�nargsrMr�rr�Nz-x a)	rrrr�r4rdrr8r�r	r	r	r
r�$s
r�c@sveZdZdZeddd�gZdddddd	gZd
edd�fd
eddddg�fgZdS)�TestOptionalsNargs3z+Tests specifying the 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�r4rdrr8r�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�r4�intrdrr8r�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)�TestOptionalsNargsZeroOrMorezBTests specifying an 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�r4rdrr8r�r	r	r	r
r�Qs	r�c@s�eZdZdZeddd�eddddd�gZdddd	d
gZdedd
dd�fdeddgdd�fdedddgdd�fdedd
ddg�fdedd
dddg�fgZd
S)�TestOptionalsNargsOneOrMorezATests specifying an 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�r4rdrr8r�r	r	r	r
r�ds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�r4r��rangerdrr8r�r	r	r	r
r�us!r�c@sgeZdZdZeddedd�gZddgZded	d
�fded	d�fgZ	d
S)�TestOptionalsRequiredz)Tests an optional action that is requiredz-xr@�requiredTr�rz-x 1r�rMz-x42r�N)
rrrr�r4r�rdrr8r�r	r	r	r
r��s
r�c@saeZdZdZeddd�gZddgZdedd	�fd
edd�fgZd	S)�TestOptionalsActionStorez&Tests the store action for an Optionalz-xr��storer�za -xrr�Nz-xfoorg)	rrrr�r4rdrr8r�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�r4r�rdrr8r�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�r4rdrr8r�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�r4rdrr8r�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�r4rdrr8r�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�r4rdrr8r�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�r4rHrdrr8r�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�r4rHrdrr8r�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�NrM)	rrrr�r4rdrr8r�r	r	r	r
r��s
r�c@sLeZdZdZed�gZdddgZdedd�fgZdS)�TestPositionalsNargsNonez,Test a Positional that doesn't specify nargsrgrz-xza br�N)	rrrr�r4rdrr8r�r	r	r	r
r�sr�c@sUeZdZdZeddd�gZdddgZdeddg�fgZd	S)
�TestPositionalsNargs1z.Test a Positional that specifies an nargs of 1rgr�rMrz-xza br�N)	rrrr�r4rdrr8r�r	r	r	r
r�sr�c@s[eZdZdZeddd�gZddddgZd	eddd
g�fgZdS)�TestPositionalsNargs2z.Test a Positional that specifies an nargs of 2rgr�r�rr�z-xza b cza br�N)	rrrr�r4rdrr8r�r	r	r	r
r�sr�c@syeZdZdZeddd�gZdgZdedg�fdeddg�fdeddd	g�fgZd
S)�TestPositionalsNargsZeroOrMorez0Test a Positional that specifies unlimited nargsrgr�r�z-xrr�za br�N)	rrrr�r4rdrr8r�r	r	r	r
r�"s	r�c@seZdZdZeddddd�gZdgZdedd�fd	edd	g�fd
edd	dg�fgZdS)
�%TestPositionalsNargsZeroOrMoreDefaultz>Test a Positional that specifies unlimited nargs and a defaultrgr�r�r�r�z-xrr�za br�N)	rrrr�r4rdrr8r�r	r	r	r
r�.s	r�c@sjeZdZdZeddd�gZddgZdeddg�fdeddd	g�fgZd
S)�TestPositionalsNargsOneOrMorez2Test a Positional that specifies one or more nargsrgr�r�rz-xr�za br�N)	rrrr�r4rdrr8r�r	r	r	r
r�:s
r�c@saeZdZdZeddd�gZddgZdedd�fd	edd	�fgZdS)
�TestPositionalsNargsOptionalzTests an Optional Positionalrgr�r�z-xza brNr�)	rrrr�r4rdrr8r�r	r	r	r
r�Es
r�c@sgeZdZdZeddddd�gZddgZd	edd�fd
edd
�fgZdS)�#TestPositionalsNargsOptionalDefaultz1Tests an Optional Positional with a default valuergr�r�r�r�z-xza brr�N)	rrrr�r4rdrr8r�r	r	r	r
r�Ps
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.
    rgr�r�r@r�r�z-xza bz1 2rr��1rMN)
rrrr�r4r�rdrr8r�r	r	r	r
r�[s
!r�c@s^eZdZdZed�ed�gZddddgZdedddd	�fgZd
S)�TestPositionalsNargsNoneNonez-Test two Positionals that don't specify nargsrgr�rz-xr�za b cza br�N)	rrrr�r4rdrr8r�r	r	r	r
r�jsr�c@sgeZdZdZed�eddd�gZdddd	gZd
eddddg�fgZdS)
�TestPositionalsNargsNone1z6Test a Positional with no nargs followed by one with 1rgr�r�rMrz--foor�za b cza br�N)	rrrr�r4rdrr8r�r	r	r	r
r�tsr�c@smeZdZdZeddd�ed�gZdddd	d
gZdedddgdd
�fgZdS)�TestPositionalsNargs2Nonez8Test a Positional with 2 nargs followed by one with nonergr�r�r�rz--foor�za bza b c dza b cr�r�N)	rrrr�r4rdrr8r�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 unlimitedrgr�r�r�rz--foor�za br�za b cr�N)	rrrr�r4rdrr8r�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 morergr�r�r�rz--foor�za br�za b cr�N)	rrrr�r4rdrr8r�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 Optionalrgr�r�r�rz--fooza b cr�Nza br�)	rrrr�r4rdrr8r�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 nonergr�r�r�rz--foor�za br�za b cr�N)	rrrr�r4rdrr8r�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 nonergr�r�r�rz--foor�za br�za b cr�N)	rrrr�r4rdrr8r�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 nonergr�r�r�r�r�rz--fooza b cr�za br�N)	rrrr�r4rdrr8r�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 unlimitedrgr�r�r�r�rz--foor�za br�za b cr�N)	rrrr�r4rdrr8r�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 morergr�r�r�r�rz--foor�za bza b cr�r�N)	rrrr�r4rdrr8r�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 optionalrgr�r�r�r�rz--foor�za b c dza br�Nza b cr�)	rrrr�r4rdrr8r�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 1rgr�r�r�rMrz--foor�za br�za b cr�N)	rrrr�r4rdrr8r�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 1rgr�r�r�rMrz--foor�za br�za b cr�N)	rrrr�r4rdrr8r�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 1rgr�r�r�rMrz--fooza b cr�Nza br�)	rrrr�r4rdrr8r�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 nargsrgr�r�r�r�rMrz--foor�za br�za b cr�N)	rrrr�r4rdrr8r�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 nargsrgr�r�r�r�rMrz--foor�r�za b cr�za b c d�dN)	rrrr�r4rdrr8r�r	r	r	r
r�s	$r�c	@s�eZdZdZed�eddddd�eddd	�gZd
ddgZd
eddddddg�fdeddddddg�fgZdS)�!TestPositionalsNargsNoneOptional1z;Test three Positionals: no nargs, optional narg and 1 nargsrgr�r�r�r�g�?r�rMrz--foor�za br�za b cr�N)	rrrr�r4rdrr8r�r	r	r	r
r�,s	!r�c@s�eZdZdZeddd�eddddd�gZdd	gZd
edddd�fdedddd�fd
edddd�fgZdS)�$TestPositionalsNargsOptionalOptionalzTest two optional nargsrgr�r�r�r�r�z--fooza b crNr�za br�)	rrrr�r4rdrr8r�r	r	r	r
r�;sr�c
@s�eZdZdZeddd�eddd�gZdgZdedd	dg�fd
edd
dg�fdedd
ddg�fd
edd
dddg�fgZd	S)�&TestPositionalsNargsOptionalZeroOrMorez1Test an Optional narg followed by unlimited nargsrgr�r�r�r�z--foorNr�za br�za b cr�)	rrrr�r4rdrr8r�r	r	r	r
rJs$	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 nargsrgr�r�r�r�rz--foor�Nza br�za b cr�)	rrrr�r4rdrr8r�r	r	r	r
rWs$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�r4�setrdrr8r�r	r	r	r
rcs
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�r4r�r�rdrr8r�r	r	r	r
rns
!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�r4rdrr8r�r	r	r	r
r
ys
r
c	@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�r4rdrr8r�r	r	r	r
r�src
@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�r4rdrr8r�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)rrrr4rdrr8r�r	r	r	r
r
�s	r
c
@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===���)
rrrr4r`r�rdrr8r�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)�TestNargsZeroOrMorezBTests specifying an 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�r4rdrr8r�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�r4rdrr8r�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�r4�floatrdrr8r�r	r	r	r
r�s&		!!!!!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 defaultsrgr�r�r�r�r�z--bazr�r�z-xrr�za br�r�Tza --bazz	--baz a bN)rrrr�r4�argparse�SUPPRESSrdrr8r�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_defaultrgr�r�r�r�z--bazr�r�z-xrr�za br�r�Tza --bazz	--baz a bN)rrrr�r4rrr`rdrr8r�r	r	r	r
rs	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.0rgr�r�r�r�z--bazr�z-xrr�r�za br�Tza --bazz	--baz a bN)
rrrr�r4r`rdrr8r�r	r	r	r
r/s	$$'$$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%)rrrr.r/�close)r�
file_textsr#�textr2)rr	r
rGs	
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�rr4r`rdrr8r�r	r	)rr
rDs		!$!!$$rcs�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-)zhellor,)rr+rr.r/r&)rr'r#r(r2)rr	r
rjs	
z$TestArgumentsFromFileConverter.setUpc@seZdZdd�ZdS)z>TestArgumentsFromFileConverter.FromFileConverterArgumentParserccs2x+|j�D]}|j�s%q
n|Vq
WdS)N)r��strip)rZarg_line�argr	r	r
�convert_arg_line_to_argsvszWTestArgumentsFromFileConverter.FromFileConverterArgumentParser.convert_arg_line_to_argsN)rrrr/r	r	r	r
�FromFileConverterArgumentParsertsr0r)r*r�r�r�z@hello Xr zworld!r�)rrrr�rr[r0rar4r`rdrr8r�r	r	)rr
r+gs
r+c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�TestFileTypeReprcCs)tjd�}|jdt|��dS)N�rz
FileType('r'))r�FileTyperr)rr@r	r	r
�test_r�szTestFileTypeRepr.test_rcCs,tjdd�}|jdt|��dS)N�wbrMzFileType('wb', 1))rr3rr)rr@r	r	r
�	test_wb_1�szTestFileTypeRepr.test_wb_1cCs/tjddd�}|jdt|��dS)Nr2�encoding�latin_1z!FileType('r', encoding='latin_1'))rr3rr)rr@r	r	r
�test_r_latin�szTestFileTypeRepr.test_r_latincCs5tjddddd�}|jdt|��dS)Nr-r7�big5�errors�ignorez/FileType('w', encoding='big5', errors='ignore'))rr3rr)rr@r	r	r
�test_w_big5_ignore�s	z#TestFileTypeRepr.test_w_big5_ignorecCs2tjdddd�}|jdt|��dS)Nr2rMr;�replacez"FileType('r', 1, errors='replace'))rr3rr)rr@r	r	r
�test_r_1_replace�sz!TestFileTypeRepr.test_r_1_replaceN)rrrr4r6r9r=r?r	r	r	r
r1�s
r1c@s.eZdZiZdd�Zdd�ZdS)�RFilecCs
||_dS)N)r+)rr+r	r	r
r7�szRFile.__init__cCs||jkr|j|}n!|j�}|j|<|j�t|t�sa|jd�}n|j|jko||kSS)N�ascii)�seen�readr&rOr��decoder+)rrDr(r	r	r
rE�s
zRFile.__eq__N)rrrrBr7rEr	r	r	r
r@�sr@cseZdZdZ�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)Nrgr�r-�readonly)rrErr.rr#r$rr/r&r3)r�	file_namer2)rr	r
r�s!
zTestFileTypeR.setUpz-xr@r�r2rznon-existent-file.txtrgr�Nz
-x foo barr�z
bar -x fooz-x - -rF)rrrr�rr4rr3rdrr8r@rP�stdinr�r	r	)rr
rE�s	$$rEcsseZdZdZ�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-)
rrIrr.rr#r$rr/r&)rr2)rr	r
r�s!
zTestFileTypeDefaults.setUpz-cr@r2r�zno-file.txtrz-c goodr�rJ)
rrrr�rr4rr3rdrr8r@r�r	r	)rr
rI�s
$	rIc	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)Nrgr�r-)
rrKrr.rr#r$rr/r&)rrGr2)rr	r
r�s
!
zTestFileTypeRB.setUpz-xr@�rbr�rrgr�Nz
-x foo barr�z
bar -x fooz-x - -)rrrr�rr4rr3rdrr8r@rPrHr�r	r	)rr
rK�s$$rKc@s1eZdZe�Zdd�Zdd�ZdS)�WFilecCs
||_dS)N)r+)rr+r	r	r
r7�szWFile.__init__cCsp||jkr`d}d|jkr6|jd�}n|j|�|j�|jj|�n|j|jkS)NzCheck that file is writable.r�rA)rB�mode�encoder/r&�addr+)rrDr(r	r	r
rE�s

zWFile.__eq__N)rrrrrBr7rEr	r	r	r
rM�s	rM�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)NrF)rrRrr3)r)rr	r
r	szTestFileTypeW.setUpz-xr@r-r�rrFrgr�Nz
-x foo barr�z
bar -x fooz-x - -)rrrr�rr4rr3rdrr8rMrPrJr�r	r	)rr
rRs$$rRc	@s�eZdZeddejd��eddejd��gZddgZdeddde	d��fd	ede	d�de	d
��fdede	d�de	d
��fdede
jde
j�fgZdS)
�TestFileTypeWBz-xr@r5r�rrgr�Nz
-x foo barr�z
bar -x fooz-x - -)
rrrr4rr3rdrr8rMrPrJr�r	r	r	r
rSs$$rSc@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�WWdQXdS)NrLrMr-r;r>r5r7r:r�l1�strictz
builtins.openrg���)zrbrWNN)r-rMNNrW)r-rWNzreplacerW)zwbrWzbig5N)r-rzl1zstrict)rr3rZpatchZassert_called_with)rZFTZcases�mr@r5r	r	r
�test_open_args,s	
z#TestFileTypeOpenArgs.test_open_argsN)rrrr�rYr	r	r	r
rT)srTc@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�r4�complexrrdrr8r�r	r	r	r
rZ;srZc@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
r7Osz#TestTypeUserDefined.MyType.__init__cCs(t|�|jft|�|jfkS)N)r@r^)rrDr	r	r
rERsz!TestTypeUserDefined.MyType.__eq__N)rrrr7rEr	r	r	r
�MyTypeMsr_z-xr@r�za -x br�r�r�z-xf gr�r�N)rrrr�rr_r4rdrr8r�r	r	r	r
r]Js	$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
r7eszTestTypeClassicClass.C.__init__cCs(t|�|jft|�|jfkS)N)r@r^)rrDr	r	r
rEhszTestTypeClassicClass.C.__eq__N)rrrr7rEr	r	r	r
�Ccsraz-xr@r�za -x br�r�r�z-xf gr�r�N)
rrrr�rar4rdrr8r�r	r	r	r
r``s	$r`c@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�registerrbrrWr�r8)rrdrcr	r	r
�testyszTestTypeRegistration.testN)rrrr�rgr	r	r	r
rbvsrbc@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�y�|jdks%td|j��|dksAtd|��tdd�}|dkrhd|_n(|dkr�d
|_ntd|��||ks�td||f��Wn2tk
r�tj�d
}td|��YnXt|d|�dS)Nr�zdest: %sz-szflag: %sg�?��?��?r��@r�z	value: %szexpected %s, got %srMzopt_action failed: %s)rirj)rk)r��AssertionErrorr8r�rPrTrGrS)rrc�	namespacer^�
option_stringr��er	r	r
�__call__�s"
z-TestActionUserDefined.OptionalAction.__call__)rrrrpr	r	r	r
�OptionalAction�srqc@seZdZddd�ZdS)z&TestActionUserDefined.PositionalActionNcCsy�|dkstd|��|jdksAtd|j��tdd�}|dkrhd|_n@|dkr�d	|_n(|dkr�d
|_ntd|��||ks�td||f��Wn2tk
r�tj�d}td
|��YnXt|d|�dS)Nzoption_string: %sr�zdest: %sr�r�r�g�?rMg�?g�?z	value: %szexpected %s, got %szarg_action failed: %s)r�r�)rM)r�)rlr�r8r�rPrTrGrS)rrcrmr^rnr�ror	r	r
rp�s$
"
z/TestActionUserDefined.PositionalAction.__call__)rrrrpr	r	r	r
�PositionalAction�srrz-sr�r�r�r@r�g�?r�r�r�r�z-s0.125g�?r�r�z
-s 0.625 1g�?rMz84 -s2g@r�N)rrrr�r�Actionrqrrr4rr�rdrr8r�r	r	r	r
rh�srhc@s;eZdZdZGdd�dej�Zdd�ZdS)�TestActionRegistrationz5Test a user-defined action supplied by registering itc@seZdZddd�ZdS)zTestActionRegistration.MyActionNcCst||jd|�dS)Nzfoo[%s])rSr�)rrcrm�valuesrnr	r	r
rp�sz(TestActionRegistration.MyAction.__call__)rrrrpr	r	r	r
�MyAction�srvcCs�tj�}|jdd|j�|jddd�|j|jdg�tdd��|j|jdg�tdd��dS)Nr�Z	my_actionr�r�zfoo[1]r�zfoo[42])rrerfrvrbrrWr8)rrcr	r	r
rg�s
%zTestActionRegistration.testN)rrrr�rrsrvrgr	r	r	r
rt�srtcs�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'�Z�S)(�TestAddSubparserszTest the add_subparsers methodcOs|jt||�dS)N)r�rG)rr5r6r	r	r
�assertArgumentParserError�sz+TestAddSubparsers.assertArgumentParserErrorFNc
Cs1|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<n|rddg|d<n|jd|�}|jddtdd�|jddd dd!�tdd"�}	|r}d#|	d<n|jd$|	�}
|
jd%dd&dd'�|
jd(dtd)d*dd+�tdd,�}|r�d-|d<n|jd.|�}|jd/dtdd0�|jd1d)d2dd3�|S)4N�prog�PROG�descriptionzmain descriptionr�rr�rgr�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 help�3�tzt help�uz...zu help)	r[rbr�add_subparsersrx�dict�
add_parserr�r\)
r�subparser_helpr�rrcZsubparsers_kwargs�
subparsersZparser1_kwargs�parser1Zparser2_kwargs�parser2Zparser3_kwargsZparser3r	r	r
r}�sN"





zTestAddSubparsers._get_parsercs5t�j�|j�|_|jdd�|_dS)Nr�T)rrr}rc�command_help_parser)r)rr	r
r#s
zTestAddSubparsers.setUpcCsLxEdddddddgD](}|j�}|j|jj|�qWdS)Nrr�za az0.5 az0.5 1z0.5 1 -yz0.5 2 -w)r�rxrcrW)rr�r5r	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 7rgFr�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--foo�7z--y��g��)rrcrWr�r8)rr	r	r
�test_parse_args/s"("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 7rgFr�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)rrc�parse_known_argsr�r8)rr	r	r
�test_parse_known_argsBs(++.z'TestAddSubparsers.test_parse_known_argscCs�t�}|jddd�|jdd�}|jd�}|jd�|jtdd	dddd
�|jdj���dS)Nz--foor�r�r�r�r�r�rgFr�z1 2)r[rbr�r�rr8rWr�)rrcr�r�r	r	r
�	test_destXs	
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
            )rrc�format_usage�format_help�textwrap�dedent)rr	r	r
�	test_helpas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
            )r}rr�r�r�r�)rrcr	r	r
�test_help_extra_prefix_charsrs
z.TestAddSubparsers.test_help_extra_prefix_charscCsK|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
            )r}rr�r�r�r�)rrcr	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
            )rr�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)Nryrzr{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
            )	r[rbr�r�rr�r�r�r�)rrcr�r�r�r	r	r
�test_subparser_title_help�s		z+TestAddSubparsers.test_subparser_title_helpcCs�y|jj|j��Wnjtk
r�tj�d}|j|krott|��tt|j��n|j	|j|�YnXdS)NrM)
rcrWr�rGrPrTrJr
rr)rr�Z
expected_help�errr	r	r
�_test_subparser_help�s
z&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_help�sz&TestAddSubparsers.test_subparser2_helpcCs�|jdd�}|j|jdj��tddddddd	d
�gf�|j|jdj��tddddddd	d
�gf�dS)NrTz
0.5 1alias1 brgFr�g�?r-r�r�z
0.5 1alias2 b)r}rr�r�r8)rrcr	r	r
�test_alias_invocation�s(z'TestAddSubparsers.test_alias_invocationcCs/|jdd�}|j|jdj��dS)NrTz
0.5 1alias3 b)r}rxrWr�)rrcr	r	r
�test_error_alias_invocation�sz-TestAddSubparsers.test_error_alias_invocationcCsD|jdddd�}d|_|j|j�tjd��dS)NrTr�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
            )r}ZmaxDiffrr�r�r�)rrcr	r	r
�test_alias_helps	z!TestAddSubparsers.test_alias_help)rrrr�rxr}rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r	r	)rr
rw�s(6	
rwc@s:eZdZdZdd�Zdd�Zdd�ZdS)	�TestPositionalsGroupsz@Tests that order of group positionals matches construction ordercCs�t�}|jd�|jd�}|jd�|jd�tdddddd�}|jdj��}|j||�dS)	Nrgr�r�r�r�r�r�z1 2 3)r[rbrhr8rWr�r)rrcri�expectedrXr	r	r
�test_nongroup_firsts	


z)TestPositionalsGroups.test_nongroup_firstcCs�t�}|jd�}|jd�|jd�|jd�tdddddd�}|jdj��}|j||�dS)	N�xxxrgr�r�r�r�r�z1 2 3)r[rhrbr8rWr�r)rrcrir�rXr	r	r
�test_group_first)s	


z&TestPositionalsGroups.test_group_firstc	Cs�t�}|jd�}|jd�|jd�|jd�|jd�}|jd�tdddddd	dd
�}|jdj��}|j||�dS)Nr�rgr�r�r�Zfrellr�r�r�rz1 2 3 4)r[rhrbr8rWr�r)rrcrir�rXr	r	r
�test_interleaved_groups3s	



!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�rG)rr5r6r	r	r
rxFsz+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)rrr[�wxyz_parentrbrh�abcd_parent�w_parent�z_parent�ab_mutex_parent�add_mutually_exclusive_grouprr#�basenamerPro�main_program)rZx_group�c_groupri)rr	r
rIs(


zTestParentParsers.setUpc	CsMtd|jg�}|j|jdj��tdddddd��dS)	N�parentsz-y 1 2 --w 3r-r�r�r�r�r�)r[r�rrWr�r8)rrcr	r	r
�test_single_parentesz$TestParentParsers.test_single_parentcCs<|j|jj�td|jg�}|j|j�dS)Nr�)�_test_mutex_abr�rWr[)rrcr	r	r
�test_single_parent_mutexjsz*TestParentParsers.test_single_parent_mutexcCsG|jg}tddd|�}td|g�}|j|j�dS)Nr�Fr�)r�r[r�rW)rr�rcr	r	r
�test_single_granparent_mutexos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)rr8rx)rrWr	r	r
r�us%((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�r[rrWr�r8)rr�rcr	r	r
�test_multiple_parentssz'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�r[rrWr�r8rx)rr�rcr	r	r
�test_multiple_parents_mutex�s(z-TestParentParsers.test_multiple_parents_mutexcCs,|jtjtjd|j|jg�dS)Nr�)r�r�
ArgumentErrorrer�r�)rr	r	r
�test_conflicting_parents�s	z*TestParentParsers.test_conflicting_parentscCs,|jtjtjd|j|jg�dS)Nr�)r�rr�rer�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�r[rrWr�r8)rr�rcr	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�rozbar -b 1 --d 2 3 4r�r�r�r�r�r�r)	r[r�r�r�rbrrWr�r8)rrcr�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)Nrgr�r�r�r�rozfoo -a 4r�Tr�Frzbar -b  --w 2 3 4r-r�r�r�r�zfoo -a -b 4zbar -b -a 4)r[r�r�r�rhrbr�rrWr�r8rx)rrcr�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�r[r�r�rr�r��format)rr�rc�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)
r[rhrbr�r�rGrWr�r�rr�r�r�)r�parentr�rXrcr�r�r	r	r
�test_groups_parents�s



	
z%TestParentParsers.test_groups_parents)rrrr�rxrr�r�r�r�r�r�r�r�r�r�r�r�r�r	r	)rr
r�Cs 

r�c@s4eZdZdd�Zdd�Zdd�ZdS)� TestMutuallyExclusiveGroupErrorscCs,t�}|j}|t|jdd�dS)Nr~rg)r[r�rxr�)rrc�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�rM)r[r�rbr��
ValueErrorrZPARSER)rrcrirbr�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)Nryrzz--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
              )r[r�rbrr�r�r�)rrcZgroup1Zgroup2r�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_parserrWrGrr�r�)rrWr]�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�rWrGrr�r�)rrWr]r�r	r	r
�test_failures_when_required$	sz#MEMixin.test_failures_when_requiredcCsb|jdd�j}|j|j}x6|D].\}}||j��}|j||�q,WdS)Nr�F)r�rWr��successes_when_not_requiredr�r)rrWr�r�r��	actual_nsr	r	r
� test_successes_when_not_required*	s
z(MEMixin.test_successes_when_not_requiredcCsU|jdd�j}x9|jD].\}}||j��}|j||�qWdS)Nr�T)r�rWr�r�r)rrWr�r�r�r	r	r
�test_successes_when_required1	sz$MEMixin.test_successes_when_requiredcCs>|jdd�j}|j}|j|�tj|��dS)Nr�F)r�r��usage_when_not_requiredrr�r�)rr��expected_usager	r	r
�test_usage_when_not_required7	s	z$MEMixin.test_usage_when_not_requiredcCs>|jdd�j}|j}|j|�tj|��dS)Nr�T)r�r��usage_when_requiredrr�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|rr�r�)rr�r|r	r	r
�test_help_when_not_requiredA	sz#MEMixin.test_help_when_not_requiredcCsE|jdd�j}|j|j}|j|�tj|��dS)Nr�T)r�r�r�r|rr�r�)rr�r|r	r	r
�test_help_when_requiredF	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)
Nryrzr�z--barr|zbar helpz--bazr�r�r�rzbaz help)r[r�rb)rr�rcrir	r	r
r�N	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�rr8r�r�r�r�r|r	r	r	r
r�L	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)
Nryrzz--abcder|z
abcde helpz--fghijz
fghij helpr�z--klmnoz
klmno helpz--pqrstz
pqrst help)r[rbr�)rr�rcrir	r	r
r�q	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�rr8r�r�r�r�r|r	r	r	r
r�o	s		$!$'*	r�c@s�eZdZdd�ZdgZdedddd�fd	edd
dd�fdedddd
�fgZdedddd�fgZdZdZ	dZ
dS)�$TestMutuallyExclusiveFirstSuppressedcCsTtdd�}|jd|�}|jddtj�|jddddd	�|S)
Nryrzr�z-xr|z-yr�r�zy help)r[r�rbrr)rr�rcrir	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�rr8r�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)Nryrzr�z--spamr�r�r|z--badgerr�z	--bladder)r[r�rbrr)rr�rcrirPr	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�rr8r�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)Nryrzr�z--foor�r�r|�FOOz--spamZSPAMr�r�r�r�r�ZBADGER)r[r�rb)rr�rcrir	r	r
r��	sz5TestMutuallyExclusiveOptionalAndPositional.get_parserz--foo --spam Sz
--spam S XzX --foozX Y Z --spam Sz	--foo X Yz--foorgTr�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�rr8r�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)Nryrzz-xr�r�r|zx helpr�z-aza helpz-bzb helpz-yzy helpz-czc help)r[rbr�)rr�rcrir	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�rr8r�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)
Nryrzr~zTitled groupr{zGroup descriptionr�z--barr|zbar helpz--bazzbaz help)r[rhr�rb)rr�rcZtitled_groupZmutex_groupr	r	r
r�8
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�rr8r�r�r�r�r|r	r	r	r
r�6
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)Nryrzr�r|zx helpz-yr�r�zy helpr�r�r�r�za helpz-bzb helpz-czc help)r[rbr�)rr�rcrir	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�rr8r�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�ryr�Fr�)rr�r�r[ry)rr�r�rc)rr	r
r��
szMEPBase.get_parser)rrrr�r	r	)rr
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�rgr�r�r�rMr�r�)r[�set_defaultsrr8rW)rrcr	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�rgr�r�z-xr�Zxfooxr�r�z-x 1)r[r�rbrr8rWr�)rrcr	r	r
�test_set_defaults_with_args�
s	z+TestSetDefaults.test_set_defaults_with_argscCsvt�}|jdd�|j�}|jd�}|jdd�|jtdddd�|jdj���dS)Nr�rgr�r�r�)r[r�r�r�rr8rWr�)rrcr�Zparser_ar	r	r
�test_set_defaults_subparsers�
s	z,TestSetDefaults.test_set_defaults_subparserscCsWtdd�}|jdd�td|g�}|jtdd�|jg��dS)Nr�Fr�rgr�)r[r�rr8rW)rr�rcr	r	r
�test_set_defaults_parents�
sz)TestSetDefaults.test_set_defaults_parentscCsjtj�}|j�jd�}|jdd�|jdd�|jtdd�|jdg��dS)Nr�rgrMr�)rrer�r�r�rr8rW)rrcZxparserr	r	r
�)test_set_defaults_on_parent_and_subparser�
s
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)r[r�rbrr8rW)rrcr	r	r
�&test_set_defaults_same_as_add_argument�
s	"
$"$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�rrgz-wz-xr�r�r�r�r�r�r�)r[r�rhrbrr8rW)rrcrir	r	r
�,test_set_defaults_same_as_add_argument_groups	"
$"$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)�TestGetDefaultcCst�}|jd|jd��|jd|jd��|jd�|jd|jd��|jd|jd��|jddtdd�|jd|jd��|jd|jd��|jdd�|jd|jd��|jd|jd��dS)	Nrgr�z--fooz--barr@r�r�r�)r[rZget_defaultrbr�r�)rrcr	r	r
�test_get_defaults	
zTestGetDefault.test_get_defaultN)rrrr�r	r	r	r
r�sr�c@s(eZdZdd�Zdd�ZdS)�TestNamespaceContainsSimplecCsRtj�}|jd|kd�|jd|kd�|jd|kd�dS)NrFTr�)r�	Namespacer)r�nsr	r	r
�
test_empty6sz&TestNamespaceContainsSimple.test_emptycCs�tjdddd�}|jd|kd�|jd|kd�|jd|kd�|jd|kd�|jd|kd�|jd	|kd�dS)
Nr�rMr�r�TFrZxxr�)rrr)rrr	r	r
�test_non_empty<sz*TestNamespaceContainsSimple.test_non_emptyN)rrrrrr	r	r	r
r�4sr�c@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	)rrrr	r	r
�test_wrapperZszUTestHelpFormattingMetaclass.__init__.<locals>.AddTests.__init__.<locals>.test_wrapper)�func_suffix�std_name�test_format�
test_print�test_print_filerrxrS)rZ
test_classrrrrr{rr	r	r
r7Qs			

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�Wn|S)Nrd�argument_group_signatures�subparsers_signatures)
rrer`r5r6rRrbrhr�r�)rr|rcZargument_sigZ
group_sigsZ	group_sigZ
argument_sigsriZsubparsers_sigsr�Z
subparser_sigr	r	r
r}bs(	

zBTestHelpFormattingMetaclass.__init__.<locals>.AddTests._get_parsercSs�t||j�}tj|�}||kr�tt|��tt|��xDt||�D]0\}}||kr]td||f�Pq]q]Wn|j||�dS)Nzfirst diff: %r %r)rRrr�r�r
r�zipr)rr|�parser_textZ
expected_textZchar1Zchar2r	r	r
�_testxsz<TestHelpFormattingMetaclass.__init__.<locals>.AddTests._testcSs<|j|�}t|d|j�}|j||��dS)Nz	format_%s)r}rRrr)rr|rcr�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)	r}rRrrPrrSrrVr)rr|rc�print_Z
old_streamrr	r	r
r
�szATestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_printcSsX|j|�}t|d|j�}t�}||�|j�}|j||�dS)Nzprint_%s)r}rRrrrVr)rr|rcrZsfilerr	r	r
r�s	
zFTestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_print_fileN)	rrrr7r}rr	r
rr	r	r	r
r�Osr��usagerJr|)zusage�stdout)zhelpr)r�)r�r+r�r�r�rrr	r	r
r7KsOz$TestHelpFormattingMetaclass.__init__N)rrrr7r	r	r	r
rIsrrc@s�eZdZdZedddddd�Zedd	d
ddd�ed
d
ddd�eddd�eddd�eddd�gZgZdZedZ	dZ
dS)�TestHelpBiggerOptionalsz;Make sure that argument help aligns when options are longerryrzr{�DESCRIPTION�epilog�EPILOGz-vz	--versionr�rz0.1z-xr�r|zX HELPz--yzY HELPrgzFOO 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�r4r`rdrrr|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)Nrr)rrrrr)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`rdrrr|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 longerryrzr{rrrz-vz	--versionr�rz0.1z-xr�r|zX HELPz--yzY HELPrgzFOO 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�r4r`rdrrr|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�r4r`rdrrr|rr	r	r	r
r0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 lineryrzr{ze   oddly    formatted
description

that is so long that it should go onto multiple lines when wrappedz-xr}r�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�r4r`rdrrr|rr	r	r	r
rO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 lineryrzr{zD
D�z-xr}r�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�r4r`rdrrr|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 Drz-vz	--versionr�rzV Vz-xr}r��r|zXH XHrr�zYH YHrz-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�r4r`rdrrr|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 messagesryrzz-wr�r�r|r-z-xr�r�r�r�r�r�r�riz-yr�z-zr�r�r�roz�        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�r4r`rdrrr|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 messagesryrzr�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�r4r`rdrrr|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 longry�P�<z-wr}r�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�r4r`rdrrr|rr	r	r	r
r%,
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 wrapryr&r'z-wr}r�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�r4r`rdrrr|rr	r	r	r
r(I
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 wrapryr&r'r�Fr�r"r�r�z�        usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
               ccccccccccccccccccccccccc
        z�
        positional arguments:
          aaaaaaaaaaaaaaaaaaaaaaaaa
          bbbbbbbbbbbbbbbbbbbbbbbbb
          ccccccccccccccccccccccccc
        rN)rrrr�r4r`rdrrr|rr	r	r	r
r)m
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 wrapryrzz-wr}r�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�r4r`rdrrr|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 wrapryrzz-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�r4r`rdrrr|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 wrapryrzz-xr}r�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�r4r`rdrrr|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 wrapryrzz-xr}r�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�r4r`rdrrr|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 wrapryrzr�Fr�r"r�r�z~        usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
                    ccccccccccccccccccccccccc
        z�
        positional arguments:
          aaaaaaaaaaaaaaaaaaaaaaaaa
          bbbbbbbbbbbbbbbbbbbbbbbbb
          ccccccccccccccccccccccccc
        rN)rrrr�r4r`rdrrr|rr	r	r	r
r.s

r.c
@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 messagesryrzz-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�rMr�r}ZBBBz!bar %(prog)s %(default)s %(dest)sr�zspam %(prog)s %(default)sr�g�?zbadger %(prog)s %(default)sriz-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NrW)rrrr�r4r`r�rdrrr|rr	r	r	r
r/$s&!	!r/c@sMeZdZdZedddd�ZgZgZdZedZ	dZ
d	S)
�&TestHelpVariableExpansionUsageSuppliedz@Test that variables are expanded properly when usage= is presentryrzrz%(prog)s FOOz         usage: PROG FOO
        z[
        optional arguments:
          -h, --help  show this help message and exit
        rN)rrrr�r4r`rdrrr|rr	r	r	r
r1Rsr1c@sIeZdZdZedddd�ZgZgZdZeZ	dZ
dS)	�$TestHelpVariableExpansionNoArgumentsz;Test that variables are expanded properly with no argumentsryrzr�Fz        usage: PROG
        rN)rrrr�r4r`rdrrr|rr	r	r	r
r2csr2c@sjeZdZdZedddej�Zeddd�eddd	�gZgZ	d
Z
dZdZdS)
�TestHelpSuppressUsagez3Test that items can be suppressed in usage messagesryrzrz--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�r4rrr`rdrr|rrr	r	r	r
r3psr3c@sneZdZdZedddd�Zeddej�eddd	�gZgZ	d
Z
e
dZdZd
S)�TestHelpSuppressOptionalz?Test that optional arguments can be suppressed in help messagesryrzr�Fz--foor|r�z	spam helpz!        usage: PROG spam
        zA
        positional arguments:
          spam  spam help
        rN)
rrrr�r4r`rrrdrrr|rr	r	r	r
r4�sr4c@s�eZdZdZedd�Zeddd�eddd�gZed	�ed
dej�gfgZ	dZ
e
dZd
ZdS)�TestHelpSuppressOptionalGroupz<Test that optional groups can be suppressed in help messagesryrzz--foor|zfoo helpr�z	spam helpriz--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�r4r`rdrrrrr|rr	r	r	r
r5�s'r5c@sheZdZdZedd�Zeddd�eddej�gZgZ	dZ
e
d	Zd
ZdS)�TestHelpSuppressPositionalzATest that positional arguments can be suppressed in help messagesryrzz--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�r4r`rrrdrrr|rr	r	r	r
r6�sr6c@s\eZdZdZedd�Zeddddd�gZgZd	Zed
Z	dZ
dS)
�TestHelpRequiredOptionalz.Test that required options don't look optionalryrzz--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�r4r`rdrrr|rr	r	r	r
r7�sr7c@szeZdZdZedddddd�Zedd	d
dd�ed
ddd�gZgZdZedZ	dZ
dS)�TestHelpAlternatePrefixCharsz:Test that options display with different prefix charactersryrzr�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�r4r`rdrrr|rr	r	r	r
r8�sr8c@skeZdZdZedddd�Zeddd�ed	dd
�gZgZdZedZ	d
Z
dS)�TestHelpNoHelpOptionalz=Test that the --help argument can be suppressed help messagesryrzr�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�r4r`rdrrr|rr	r	r	r
r9�sr9c@sYeZdZdZedd�Zed�ed�gZgZdZedZ	dZ
d	S)
�TestHelpNonez1Test that no errors occur if no help is specifiedryrzz--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�r4r`rdrrr|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 tupleryrzz-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>r?)r@rArB)rC)rrrr�r4r`rdrrr|rr	r	r	r
r; s!r;c@s�eZdZdZedddejdd�Zeddd	�ed
dd�gZeddd
�eddd�gfgZ	dZ
e
dZdZdS)�TestHelpRawTextzTest the RawTextHelpFormatterryrz�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�r4rZRawTextHelpFormatterr`rdrrr|rr	r	r	r
rD;s	rDc@s�eZdZdZedddejdd�Zeddd	�ed
dd�gZeddd
�eddd�gfgZ	dZ
e
dZdZdS)�TestHelpRawDescriptionzTest the RawTextHelpFormatterryrzrEr{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�r4rZRawDescriptionHelpFormatterr`rdrrr|rr	r	r	r
rFls	rFc@s�eZdZdZedddejdd�Zeddd�ed	d
ddd�ed
dd�eddddddd�gZeddd�edde	dddd�gfgZ
dZedZdZ
dS)�TestHelpArgumentDefaultsz&Test the ArgumentDefaultsHelpFormatterryrzrEr{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�r4rZArgumentDefaultsHelpFormatterr`rdr�rrr|rr	r	r	r
rG�s	!'rGc@seeZdZdZedddd�Zedddddd	�gZgZd
ZedZ	dZ
d
S)�TestHelpVersionActionz,Test the default help for the version actionryrzr{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�r4r`rdrrr|rr	r	r	r
rH�srHc	@s�eZdZdZedd�Zeddddddd	ej�ed
d	d�edd	d
�gZgZ	dZ
e
dZdS)�TestHelpVersionActionSuppresszCTest that the --version argument can be suppressed in help messagesryrzz-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�r4r`rrrdrrr|r	r	r	r
rI�s	rIc@sreZdZdZedddd�Zedddd	d	d
�gZdd�dD�ZdZedZ	dZ
dS)�TestHelpSubparsersOrderingz5Test ordering of subcommands in help matches the coderyrzr{zdisplay some subcommandsz-vz	--versionr�rz0.1cCsg|]}td|��qS)r+)r4)r;r+r	r	r
r=�s	z%TestHelpSubparsersOrdering.<listcomp>r�r�r�r�roz6        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�ro)rrrr�r4r`rdr
rr|rr	r	r	r
rJ�s		

rJc@sxeZdZdZedddd�Zedddd	d	d
�gZd Zdd�eD�ZdZ	e	dZ
dZdS)!�"TestHelpSubparsersWithHelpOrderingz5Test ordering of subcommands in help matches the coderyrzr{zdisplay some subcommandsz-vz	--versionr�rz0.1r��a subcommand helpr��b subcommand helpr��c subcommand helpr��d subcommand helpro�e subcommand helpcCs+g|]!\}}td|d|��qS)r+r|)r4)r;r+r|r	r	r
r=s	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�rL�r�rM�r�rN�r�rO�rorP)rQrRrSrTrU)rrrr�r4r`rdZsubcommand_datar
rr|rr	r	r	r
rKs		
rKc@s�eZdZdZdd�Zedddddej�Zedd	e	�ed
d	e�edd	e
dd
�gZgZdZ
e
dZdZdS)�TestHelpMetavarTypeFormatterrcCs|S)Nr	)rcr	r	r
�custom_type<sz(TestHelpMetavarTypeFormatter.custom_typeryrzr{rEr�r@z-bz-cr}z
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�rWr4rZMetavarTypeHelpFormatterr`r�rrdrrr|rr	r	r	r
rV9srVc@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)rrer�rxrb)rr5r6rcr	r	r
�assertTypeError^sz/TestInvalidArgumentConstructors.assertTypeErrorcOs)tj�}|jt|j||�dS)N)rrer�r�rb)rr5r6rcr	r	r
�assertValueErrorcsz0TestInvalidArgumentConstructors.assertValueErrorcCsP|jddd�|jddd�|jddf�|jddi�dS)Nz-xr�z-y�callbackrgZ
callback_argsZcallback_kwargs)rY)rr	r	r
�test_invalid_keyword_argumentshsz>TestInvalidArgumentConstructors.test_invalid_keyword_argumentscCs5|j�x$ddgD]}|jd|�qWdS)Nr�r�r�)rY)rr�r	r	r
�test_missing_destinationns
z8TestInvalidArgumentConstructors.test_missing_destinationcCs|jd�|jd�dS)Nz--z---)rZ)rr	r	r
�test_invalid_option_stringsss
z;TestInvalidArgumentConstructors.test_invalid_option_stringscCs0|jddd�|jddttf�dS)Nz--foor@r�)rZr�r)rr	r	r
�test_invalid_typewsz1TestInvalidArgumentConstructors.test_invalid_typecCs�|jddd�|jddd�|jddd�tj�}y|jddd�WnTtk
r�tj�d	}d
}d||f}|j|t|�k|�YnXdS)
Nz-xr�rgr�z--foor�r�z
store-truerMzunknown actionzexpected %r, found %r)zstorezappend)	rZrrerbr�rPrT�
assertTruer�)rrcror�r~r	r	r
�test_invalid_action{s
z3TestInvalidArgumentConstructors.test_invalid_actioncCs�tj�}|jdd�y|jddd�WnTtk
r�tj�d}d}d||f}|j|t|�k|�YnXdS)Nr�rgr�r�rMz+dest supplied twice for positional argumentzexpected %r, found %r)rrerbr�rPrTr`r�)rrcror�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�rY)rr��attrsr	r	r
�test_no_argument_actions�s
z8TestInvalidArgumentConstructors.test_no_argument_actionscCsPxIdddgD]8}|jdddd|�|jddd	d|�qWdS)
Nr�r�r�z-xr�rgr�r�r�)rY)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�rMr�r�r�rg)rZ)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�)rY)rr�r	r	r
�test_required_const_actions�sz;TestInvalidArgumentConstructors.test_required_const_actionscCsL|jddd�|jddddd�|jddddtj�dS)NZcommandr�Zparsersryrzra)rYrre)rr	r	r
�"test_parsers_action_missing_params�szBTestInvalidArgumentConstructors.test_parsers_action_missing_paramscCs|jddd�dS)Nrgr�T)rY)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>.ActionFcs:|dkr6|�kr6|�kr3���q3q6ndS)Nr�r	)r�option_stringsr�r�r�r�)rjr	r
r7�szQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__init__c_sdS)Nr	)rr5r6r	r	r
rp�szQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__call__N)rrrr7rpr	)rjr	r
rs�srsz--spamr�r�r�r�)rHr�rrer�rb)rrsrcr	)rjr
�test_user_defined_action�sz8TestInvalidArgumentConstructors.test_user_defined_actionN)rrrr�rYrZr\r]r^r_rarbrdrerfrgrhrirlr	r	r	r
rX[s 

rXc@s(eZdZdd�Zdd�ZdS)�TestActionsReturnedcCs|tj�}|jd�}|j|jd�|jdd�}|j|jd�|jdd�}|j|jd�dS)	Nz--foorgz-bz--barr�z-xz-yr�)rrerbrr�)rrcr�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�rMr�r|r�r}ZBARr�r�)
rrerbr�rr�r�r�r@r�r|r}r�)rrcr�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_handlerrg)r�r�rre)rr	r	r
�
test_bad_typesz"TestConflictHandling.test_bad_typecCs\tj�}|jd�|jtj|jd�|jd�|jtj|jd�dS)Nz-xz--spam)rrerbr�r�)rrcr	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)NryrzrpZresolvez-xr|zOLD XzNEW Xz�            usage: PROG [-h] [-x X]

            optional arguments:
              -h, --help  show this help message and exit
              -x X        NEW X
            z--spamr}ZOLD_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
            )rrerbrr�r�r�)rr�rcr	r	r
�test_resolve_error
s	
z'TestConflictHandling.test_resolve_errorN)rrrrqrrrsr	r	r	r
ro�s	roc@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dS)�TestOptionalsHelpVersionActionsz!Test the help and version actionsc
OsNy|||�Wn tk
r3tj�dSYnX|jt|||�dS)NrM)rGrPrTr�)r�funcr5r6r	r	r
�
_get_error.s

z*TestOptionalsHelpVersionActions._get_errorcCs2|j|j�|j|j|j��j�dS)N)rr�rvrWr�rJ)rrcr�r	r	r
�assertPrintHelpExit6s	z3TestOptionalsHelpVersionActions.assertPrintHelpExitcGs|jt|j|�dS)N)r�rGrW)rrcr5r	r	r
rx;sz9TestOptionalsHelpVersionActions.assertArgumentParserErrorcCs_t�}|jdddddd�|j|d�|j|d�|jtt|d�dS)	Nz-vz	--versionr�rz1.0z-hz--help�format_version)r[rbrwr��AttributeErrorrR)rrcr	r	r
�test_version>s
	z,TestOptionalsHelpVersionActions.test_versioncCsZtdd�}|jdddddd�|j|jdg�j}|jd|�dS)	NryZPPPz-vz	--versionr�rz%(prog)s 3.5zPPP 3.5
)r[rbrvrWrJr)rrcr~r	r	r
�test_version_formatEsz3TestOptionalsHelpVersionActions.test_version_formatcCsetdd�}|jdddddd�|j|d�|j|d	�|jtt|d
�dS)Nr�Fz-vz	--versionr�rz1.0z-hz--helprx)r[rbrxr�ryrR)rrcr	r	r
�test_version_no_helpKs
z4TestOptionalsHelpVersionActions.test_version_no_helpcCsWtdd�}|jddddd�|j|jdg�j}|jd|�dS)Nryr0z-Vr�rz%(prog)s 3.7zXXX 3.7
)r[rbrvrWrJr)rrcr~r	r	r
�test_version_actionRsz3TestOptionalsHelpVersionActions.test_version_actioncCsStdd�}|j|d�|j|d�|j|d�|j|d�dS)Nr�Fz-hz--helpz-vz	--version)r[rx)rrcr	r	r
�test_no_helpXs
z,TestOptionalsHelpVersionActions.test_no_helpcCsyt�}|jddd�|jddd�|j|d�|j|d�|j|d�|jtt|d�dS)	Nz-xr�r|z-yrz-vz	--versionrx)r[rbrwrxr�ryrR)rrcr	r	r
�test_alternate_help_version_s	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rgz-x barzbaz -xz--bad-optionzfoo bar bazz	%s %%s %sz-hz--helprx)r[rbrwr�ryrR)rrcZvalid_prefixesZvalid_suffixes�prefix�suffixr�r	r	r
�!test_help_version_extra_argumentshs	


zATestOptionalsHelpVersionActions.test_help_version_extra_argumentsN)rrrr�rvrwrxrzr{r|r}r~rr�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)r�rr)r�objZ
result_stringrur	r	r
�assertStringEqual�szTestStrings.assertStringEqualcCshtjddddgddddd	d
ddd
dddgdddd�}d}|j||�dS)Nrkz--fooz-az-br�r�r@r�r�r�r�r�r�rMr�r�r|ZHELPr}ZMETAVARz�Action(option_strings=['--foo', '-a', '-b'], dest='b', nargs='+', const=None, default=42, type='int', choices=[1, 2, 3], help='HELP', metavar='METAVAR'))rrsr�)rZoptionrcr	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 Hr}zMV 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'))rrsrr�)rZargumentrcr	r	r
�
test_argument�s		zTestStrings.test_argumentcCs2tjdddd�}d}|j||�dS)Nrgr�r�r�zNamespace(bar='spam', foo=42))rrr�)rrrcr	r	r
�test_namespace�szTestStrings.test_namespacecCs3tjdd�}dtj}|j||�dS)NryrzzvArgumentParser(prog='PROG', usage=None, description=None, formatter_class=%r, conflict_handler='error', add_help=True))rreZ
HelpFormatterr�)rrcrcr	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�ryrRrr�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�rMr�r�)rrrZassertNotEqualr`)rZns1Zns2Zns3Zns4r	r	r
�
test_equality�szTestNamespace.test_equalitycCsNtjdddd�}|j|jd�t�|j|jd�t�dS)Nr�rMr�r�)rrZassertIsrE�NotImplementedrF)rrr	r	r
�#test_equality_returns_notimplemeted�sz1TestNamespace.test_equality_returns_notimplemetedN)rrrr�r�r�r	r	r	r
r��sr�c@s4eZdZdd�Zdd�Zdd�ZdS)�TestEncodingcCsNtjj|�\}}|d7}tj|dd��}|j�WdQXdS)Nz.pyr2zutf-8)rr#�splitext�codecsr.rC)rr#rqr�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�rr�)rr~r]r	r	r
�test_argument_error�sz%TestArgumentError.test_argument_errorN)rrrr�r	r	r	r
r��sr�c@seZdZdd�ZdS)�TestArgumentTypeErrorcCs�dd�}tdddd�}|jdd|�y|jd	g�Wn;tk
r�d
}tj�dj}|j||�YnX|j�dS)NcSstjd��dS)Nzspam!)rZArgumentTypeError)rcr	r	r
r��sz<TestArgumentTypeError.test_argument_type_error.<locals>.spamryrzr�Fr�r@r0z-usage: PROG x
PROG: error: argument x: spam!
rM)	r[rbrWrGrPrTrKrZfail)rr�rcr�r~r	r	r
�test_argument_type_error�s
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�WdQXt|j�}|j|d�|j|d
�|j|d
�|jt��}|jdg�WdQXt|j�}|j	|d�|j|d
�|j|d
�|jt��}|jddg�WdQXt|j�}|j	|d�|j	|d
�|j|d
�dS)Nryrzrr�req_posr@z-req_optr�TZneed_oner�r��req_optZmyXargumentz
-req_opt=1)
r[rbr�r�r�rGrW�	exception�assertRegex�assertNotIn)rrc�cmr~r	r	r
�%test_missing_argument_name_in_messages,z=TestMessageContentError.test_missing_argument_name_in_messagecCs/tdddd�}|jddt�|jddtdd	�|jd
dtddd
d	�|jt��}|jg�WdQXt|j�}|j	|d�|j	|d�|j
|d�|jt��}|jdg�WdQXt|j�}|j	|d�|j
|d�|j
|d�dS)Nryrzrrr�r@z	--req_optr�Tz	--opt_optr�r�r�r�Zopt_optz--req_opt=1)r[rbr�r��boolr�rGrWr�r�r�)rrcr�r~r	r	r
�%test_optional_optional_not_in_message(s"z=TestMessageContentError.test_optional_optional_not_in_messagec	Cs�tdddd�}|jd�|jdddd	d
�|jt��}|jg�WdQXt|j�}|j|d�|j|d�dS)Nryrzrrr�Zoptional_positionalr�r�r�r[)	r[rbr�rGrWr�r�r�r�)rrcr�r~r	r	r
�'test_optional_positional_not_in_message;s
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�MszLTestTypeFunctionCallOnlyOnce.test_type_function_call_only_once.<locals>.spamz--foor@r�r�z--foo spam!rgr�)rrerbrWr�rr8)rr�rcr5r	)rr
�!test_type_function_call_only_onceLs
z>TestTypeFunctionCallOnlyOnce.test_type_function_call_only_onceN)rrrr�r	r	r	r
r�Js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�]sz]TestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_default.<locals>.spamz--foor@r�rrg)rrerbrWrr8)rr�rcr5r	)rr
�/test_type_function_call_with_non_string_default\s
zOTestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_defaultcCs]dd�}tj�}|jdd|dd�|jg�}|jtdd�|�dS)	NcSsdS)Nr�r	)r�r	r	r
r�hszYTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_default.<locals>.spamz--foor@r��0rgr�)rrerbrWrr8)rr�rcr5r	r	r
�+test_type_function_call_with_string_defaultgs
zKTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_defaultcCs]dd�}tj�}|jdd|dd�|jg�}|jtdd�|�dS)	NcSs|dS)Nr�r	)Zstr_to_convertr	r	r
�extendrszYTestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_default.<locals>.extendz--testr@r�r�rgz**)rrerbrWrr8)rr�rcr5r	r	r
�)test_no_double_type_conversion_of_defaultqs
zITestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_defaultc
CsWtj�}|jddddtdgdd�|jg�}|j|jg�dS)Nz--testr�rgr@r�r�r�)rrerbr�rWrrg)rrcr5r	r	r
�test_issue_15906}s

z0TestTypeFunctionCalledOnDefault.test_issue_15906N)rrrr�r�r�r�r	r	r	r
r�Zs
r�c@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�TestParseKnownArgscCstj�}|jf�dS)N)rrerW)rrcr	r	r
�test_arguments_tuple�sz'TestParseKnownArgs.test_arguments_tuplecCstj�}|jg�dS)N)rrerW)rrcr	r	r
�test_arguments_list�sz&TestParseKnownArgs.test_arguments_listcCs*tj�}|jd�|jd�dS)Nr�)r�)rrerbrW)rrcr	r	r
�test_arguments_tuple_positional�s
z2TestParseKnownArgs.test_arguments_tuple_positionalcCs-tj�}|jd�|jdg�dS)Nr�)rrerbrW)rrcr	r	r
�test_arguments_list_positional�s
z1TestParseKnownArgs.test_arguments_list_positionalcCsgtj�}|jd�|jdj��\}}|jtdd�|�|jddg|�dS)Nz--fooz--foo F --bar --bazrg�Fz--barz--baz)rrerbr�r�rr8)rrcr5�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�rMr@z--spamr�r�r�r�raz--foor�r�vr�r�T)rrerbr�r�rr8)rrcror5r�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})rrerb)rr�r}rcr	r	r
�do_test_no_exception�sz+TestAddArgumentMetavar.do_test_no_exceptionc
Cs^tj�}|jt�� }|jdd|d|�WdQX|j|jjd|j�dS)Nz--foor�r}r)	rrer�r�rbrr�r5�EXPECTED_MESSAGE)rr�r}rcr�r	r	r
�do_test_exception�sz(TestAddArgumentMetavar.do_test_exceptioncCs|jdddd�dS)Nr�r}r�)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�r}r�)r�)rr	r	r
�test_nargs_None_metavar_length1�sz6TestAddArgumentMetavar.test_nargs_None_metavar_length1cCs|jdddd�dS)Nr�r}r�r�)r�r�)r�)rr	r	r
�test_nargs_None_metavar_length2�sz6TestAddArgumentMetavar.test_nargs_None_metavar_length2cCs|jdddd�dS)Nr�r}r�r�r�)r�r�r�)r�)rr	r	r
�test_nargs_None_metavar_length3�sz6TestAddArgumentMetavar.test_nargs_None_metavar_length3cCs|jdddd�dS)Nr�r�r}r�)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�r}r�)r�)rr	r	r
�#test_nargs_optional_metavar_length1�sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length1cCs|jdddd�dS)Nr�r�r}r�r�)r�r�)r�)rr	r	r
�#test_nargs_optional_metavar_length2�sz:TestAddArgumentMetavar.test_nargs_optional_metavar_length2cCs|jdddd�dS)Nr�r�r}r�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�r}r�)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�r}r�)r�)rr	r	r
�%test_nargs_zeroormore_metavar_length1�sz<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length1cCs|jdddd�dS)Nr�r�r}r�r�)r�r�)r�)rr	r	r
�%test_nargs_zeroormore_metavar_length2�sz<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length2cCs|jdddd�dS)Nr�r�r}r�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�r}r�)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_length0�sz;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length0cCs|jdddd�dS)Nr�r�r}r�)r�)rr	r	r
�$test_nargs_oneormore_metavar_length1�sz;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length1cCs|jdddd�dS)Nr�r�r}r�r�)r�r�)r�)rr	r	r
�$test_nargs_oneormore_metavar_length2sz;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length2cCs|jdddd�dS)Nr�r�r}r�r�r�)r�r�r�)r�)rr	r	r
�$test_nargs_oneormore_metavar_length3sz;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length3cCs|jdddd�dS)Nr�z...r}r�)r�)rr	r	r
�#test_nargs_remainder_metavar_string	sz:TestAddArgumentMetavar.test_nargs_remainder_metavar_stringcCs|jdddt��dS)Nr�z...r})r�r�)rr	r	r
�$test_nargs_remainder_metavar_length0sz;TestAddArgumentMetavar.test_nargs_remainder_metavar_length0cCs|jdddd�dS)Nr�z...r}r�)r�)rr	r	r
�$test_nargs_remainder_metavar_length1sz;TestAddArgumentMetavar.test_nargs_remainder_metavar_length1cCs|jdddd�dS)Nr�z...r}r�r�)r�r�)r�)rr	r	r
�$test_nargs_remainder_metavar_length2sz;TestAddArgumentMetavar.test_nargs_remainder_metavar_length2cCs|jdddd�dS)Nr�z...r}r�r�r�)r�r�r�)r�)rr	r	r
�$test_nargs_remainder_metavar_length3sz;TestAddArgumentMetavar.test_nargs_remainder_metavar_length3cCs|jdddd�dS)Nr�zA...r}r�)r�)rr	r	r
� test_nargs_parser_metavar_stringsz7TestAddArgumentMetavar.test_nargs_parser_metavar_stringcCs|jdddt��dS)Nr�zA...r})r�r�)rr	r	r
�!test_nargs_parser_metavar_length0sz8TestAddArgumentMetavar.test_nargs_parser_metavar_length0cCs|jdddd�dS)Nr�zA...r}r�)r�)rr	r	r
�!test_nargs_parser_metavar_length1 sz8TestAddArgumentMetavar.test_nargs_parser_metavar_length1cCs|jdddd�dS)Nr�zA...r}r�r�)r�r�)r�)rr	r	r
�!test_nargs_parser_metavar_length2#sz8TestAddArgumentMetavar.test_nargs_parser_metavar_length2cCs|jdddd�dS)Nr�zA...r}r�r�r�)r�r�r�)r�)rr	r	r
�!test_nargs_parser_metavar_length3&sz8TestAddArgumentMetavar.test_nargs_parser_metavar_length3cCs|jdddd�dS)Nr�rMr}r�)r�)rr	r	r
�test_nargs_1_metavar_string+sz2TestAddArgumentMetavar.test_nargs_1_metavar_stringcCs|jdddt��dS)Nr�rMr})r�r�)rr	r	r
�test_nargs_1_metavar_length0.sz3TestAddArgumentMetavar.test_nargs_1_metavar_length0cCs|jdddd�dS)Nr�rMr}r�)r�)rr	r	r
�test_nargs_1_metavar_length11sz3TestAddArgumentMetavar.test_nargs_1_metavar_length1cCs|jdddd�dS)Nr�rMr}r�r�)r�r�)r�)rr	r	r
�test_nargs_1_metavar_length24sz3TestAddArgumentMetavar.test_nargs_1_metavar_length2cCs|jdddd�dS)Nr�rMr}r�r�r�)r�r�r�)r�)rr	r	r
�test_nargs_1_metavar_length37sz3TestAddArgumentMetavar.test_nargs_1_metavar_length3cCs|jdddd�dS)Nr�r�r}r�)r�)rr	r	r
�test_nargs_2_metavar_string<sz2TestAddArgumentMetavar.test_nargs_2_metavar_stringcCs|jdddt��dS)Nr�r�r})r�r�)rr	r	r
�test_nargs_2_metavar_length0?sz3TestAddArgumentMetavar.test_nargs_2_metavar_length0cCs|jdddd�dS)Nr�r�r}r�)r�)rr	r	r
�test_nargs_2_metavar_length1Bsz3TestAddArgumentMetavar.test_nargs_2_metavar_length1cCs|jdddd�dS)Nr�r�r}r�r�)r�r�)r�)rr	r	r
�test_nargs_2_metavar_length2Esz3TestAddArgumentMetavar.test_nargs_2_metavar_length2cCs|jdddd�dS)Nr�r�r}r�r�r�)r�r�r�)r�)rr	r	r
�test_nargs_2_metavar_length3Hsz3TestAddArgumentMetavar.test_nargs_2_metavar_length3cCs|jdddd�dS)Nr�r�r}r�)r�)rr	r	r
�test_nargs_3_metavar_stringMsz2TestAddArgumentMetavar.test_nargs_3_metavar_stringcCs|jdddt��dS)Nr�r�r})r�r�)rr	r	r
�test_nargs_3_metavar_length0Psz3TestAddArgumentMetavar.test_nargs_3_metavar_length0cCs|jdddd�dS)Nr�r�r}r�)r�)rr	r	r
�test_nargs_3_metavar_length1Ssz3TestAddArgumentMetavar.test_nargs_3_metavar_length1cCs|jdddd�dS)Nr�r�r}r�r�)r�r�)r�)rr	r	r
�test_nargs_3_metavar_length2Vsz3TestAddArgumentMetavar.test_nargs_3_metavar_length2cCs|jdddd�dS)Nr�r�r}r�r�r�)r�r�r�)r�)rr	r	r
�test_nargs_3_metavar_length3Ysz3TestAddArgumentMetavar.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
rgbszTestImportStar.testcCsBdd�tt�j�D�}|jt|�ttj��dS)NcSsFg|]<\}}|jd�p*|dkstj|�s|�qS)rqZngettext)�
startswith�inspectZismodule)r;r+r^r	r	r
r=hs		zJTestImportStar.test_all_exports_everything_but_modules.<locals>.<listcomp>)rCrr?rr>r�)rr?r	r	r
�'test_all_exports_everything_but_modulesfs	z6TestImportStar.test_all_exports_everything_but_modulesN)rrrrgr�r	r	r	r
r�`sr�cCs&tjt�it_t�t_dS)N)rZrun_unittestrr@rBrrMr	r	r	r
�	test_mainos
	r��__main__)�r�r�rr'r%rPr�rZunittestr�iorrgrrrrr�rr4r8rHrGrZrer[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�r�r�r�r�rrrrr
rrr
rrrrrrrrr+r1r@rErIrKrMZskipIfr�rQrRrSrTrZr]r`rbrhrtrwr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrrr!r#r$r%r(r)r*r+r,r-r.r/r1r2r3r4r5r6r7r8r9r:r;rDrFrGrHrIrJrKrVrXrmrortr�r�r�r�r�r�r�r�r�r�r�r�rr	r	r	r
�<module>s�
 q	








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