a
    ze                    @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZ d dl	mZ G dd dejZG dd de	jZG dd	 d	eZG d
d deZG dd deZG dd deZdd ZG dd de
jZG dd deZefZedei ZG dd deZG dd deZG dd deZ G dd deZ!G dd  d eZ"G d!d" d"eZ#G d#d$ d$eZ$G d%d& d&eZ%G d'd( d(eZ&G d)d* d*eZ'G d+d, d,eZ(G d-d. d.eZ)G d/d0 d0eZ*G d1d2 d2eZ+G d3d4 d4eZ,G d5d6 d6eZ-G d7d8 d8eZ.G d9d: d:eZ/G d;d< d<eZ0G d=d> d>eZ1G d?d@ d@eZ2G dAdB dBeZ3G dCdD dDeZ4G dEdF dFeZ5G dGdH dHeZ6G dIdJ dJeZ7G dKdL dLeZ8G dMdN dNeZ9G dOdP dPeZ:G dQdR dReZ;G dSdT dTeZ<G dUdV dVeZ=G dWdX dXeZ>G dYdZ dZeZ?G d[d\ d\eZ@G d]d^ d^eZAG d_d` d`eZBG dadb dbeZCG dcdd ddeZDG dedf dfeZEG dgdh dheZFG didj djeZGG dkdl dleZHG dmdn dneZIG dodp dpeZJG dqdr dreZKG dsdt dteZLG dudv dveZMG dwdx dxeZNG dydz dzeZOG d{d| d|eZPG d}d~ d~eZQG dd deZRG dd deZSG dd deZTG dd deZUG dd deZVG dd deZWG dd deZXG dd deZYG dd deZZG dd deZ[G dd deZ\G dd deZ]G dd deZ^G dd deZ_G dd deZ`G dd deZaG dd deZbG dd deZcG dd deZdG dd deZeG dd deZfG dd deZgG dd deZhG dd deZiG dd deZjG dd deZkG dd deZlG dd deZmG dd deZnG dd deZoG dd deZpG dd deeZqG dd deeZrG dd deZse Zte ZuG ddĄ dăZvevdŃZwevdƃZxevdǃZyevdȃZzevdɃZ{evdʃZ|G dd̄ deZ}G dd΄ deeZ~G ddЄ deeZG dd҄ deeZG ddԄ deZe	eedՃo.e d kd֡G dd؄ deeZe	eedՃo`e d kd֡G ddڄ deeZe	eedՃoe d kd֡G dd܄ deeZe	eedՃoe d kd֡G ddބ deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deeZG dd deeZG dd  d eeZG dd deeZG dd deeZG dd deeZG dd deeZG d	d
 d
eeZG dd deeZG dd deZG dd deeZG dd deeZG dd deeZG dd deeZG dd deeZG dd deeZG dd deeZG dd deeZG dd  d eZG d!d" d"eZG d#d$ d$eZG d%d& d&eZefZed'ei ZG d(d) d)eZG d*d+ d+eZG d,d- d-eZG d.d/ d/eZG d0d1 d1eZG d2d3 d3eZG d4d5 d5eZG d6d7 d7eZG d8d9 d9eZG d:d; d;eZG d<d= d=eZG d>d? d?eZG d@dA dAeZG dBdC dCeZG dDdE dEeZG dFdG dGeZG dHdI dIeZG dJdK dKeZG dLdM dMeZG dNdO dOeZG dPdQ dQeZG dRdS dSeZG dTdU dUeZG dVdW dWeZG dXdY dYeZG dZd[ d[eZG d\d] d]eZG d^d_ d_eZG d`da daeZG dbdc dceZG ddde deeZG dfdg dgeZG dhdi dieZG djdk dkeZG dldm dmeZG dndo doeZG dpdq dqeZG drds dseZG dtdu dueZG dvdw dweZG dxdy dyeZG dzd{ d{eZG d|d} d}eZG d~d deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZdd Zedkre	  dS (      N)support)mockc                       s&   e Zd Zd fdd	Zdd Z  ZS )StdIOBuffer 
c                    s,   | d}t jtt|d|d d S )Nutf-8)newline)encodesuper__init__ioBufferedWriterBytesIO)selfZinitial_valuer   	__class__ (/usr/lib/python3.9/test/test_argparse.pyr      s    
zStdIOBuffer.__init__c                 C   s   |    | jj dS )Nr   )flushbufferrawgetvaluedecoder   r   r   r   r       s    zStdIOBuffer.getvalue)r   r   )__name__
__module____qualname__r   r   __classcell__r   r   r   r   r      s   r   c                   @   s   e Zd Zdd ZdS )TestCasec                 C   s    t  }d|d< | |j d S )NZ80COLUMNS)r   EnvironmentVarGuard
addCleanup__exit__r   envr   r   r   setUp'   s    zTestCase.setUpN)r   r   r   r%   r   r   r   r   r   %   s   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TempDirMixinc                 C   s$   t  | _t | _t| j d S N)tempfilemkdtemptemp_dirosgetcwdold_dirchdirr   r   r   r   r%   2   s    

zTempDirMixin.setUpc                 C   s^   t | j t j| jddD ].\}}}|D ]}t t j| j|tj	 q*qt
| jd d S )NF)topdownT)r+   r.   r-   walkr*   chmodpathjoinstatS_IWRITEshutilrmtree)r   rootdirsfilesnamer   r   r   tearDown7   s
    zTempDirMixin.tearDownc                 C   sH   t j| j|}t|d}|| W d    n1 s:0    Y  |S )Nw)r+   r2   r3   r*   openwrite)r   filenameZ	file_pathfiler   r   r   create_writable_file>   s    (z!TempDirMixin.create_writable_filec                 C   s   t | |tj d S r'   )r+   r1   rB   r4   S_IREAD)r   r@   r   r   r   create_readonly_fileD   s    z!TempDirMixin.create_readonly_fileN)r   r   r   r%   r<   rB   rD   r   r   r   r   r&   0   s   r&   c                   @   s   e Zd Zdd ZdS )Sigc                 O   s   || _ || _d S r'   )argskwargsr   rF   rG   r   r   r   r   I   s    zSig.__init__Nr   r   r   r   r   r   r   r   rE   G   s   rE   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )NSc                 K   s   | j | d S r'   )__dict__update)r   rG   r   r   r   r   P   s    zNS.__init__c                 C   s4   t | j }ddd |D }dt| j|f S )Nz, c                 S   s   g | ]}d | qS )z%s=%rr   ).0tupr   r   r   
<listcomp>U       zNS.__repr__.<locals>.<listcomp>z%s(%s))sortedrK   itemsr3   typer   )r   Zsorted_itemsZ	kwarg_strr   r   r   __repr__S   s    zNS.__repr__c                 C   s   t | t |kS r'   )varsr   otherr   r   r   __eq__X   s    z	NS.__eq__N)r   r   r   r   rT   rX   r   r   r   r   rJ   N   s   rJ   c                   @   s   e Zd ZdddZdS )ArgumentParserErrorNc                 C   s,   t | ||| || _|| _|| _|| _d S r'   )	Exceptionr   messagestdoutstderr
error_code)r   r[   r\   r]   r^   r   r   r   r   ^   s
    zArgumentParserError.__init__)NNNrI   r   r   r   r   rY   \   s   rY   c              
   O   sj  t tjtst tjtr&| |i |S tj}tj}t t_t t_zz| |i |}tt|D ]}t||}|tju rt||| qb|tjj	u rt||t|dt
 qb|tju rt||| qb|tjj	u rbt||t|dt qb|W W |t_|t_S  tyF } z6|j}	tj }
tj }td|
||	d W Y d }~n
d }~0 0 W |t_|t_n|t_|t_0 d S )Nr   
SystemExit)
isinstancesysr]   r   r\   listrU   getattrsetattrr   BIN_STDOUT_SENTINELBIN_STDERR_SENTINELr_   coder   rY   )
parse_argsrF   rG   Z
old_stdoutZ
old_stderrresultkeyattrerg   r\   r]   r   r   r   stderr_to_parser_errorf   sH    




rm   c                       s4   e Zd Z fddZ fddZ fddZ  ZS )ErrorRaisingArgumentParserc                    s"   t t| j}t|g|R i |S r'   )r
   rn   rh   rm   )r   rF   rG   rh   r   r   r   rh      s    z%ErrorRaisingArgumentParser.parse_argsc                    s"   t t| j}t|g|R i |S r'   )r
   rn   exitrm   )r   rF   rG   ro   r   r   r   ro      s    zErrorRaisingArgumentParser.exitc                    s"   t t| j}t|g|R i |S r'   )r
   rn   errorrm   )r   rF   rG   rp   r   r   r   rp      s    z ErrorRaisingArgumentParser.error)r   r   r   rh   ro   rp   r   r   r   r   r   rn      s   rn   c                   @   s   e Zd Zdd ZdS )ParserTesterMetaclassc                 C   s   |dkrd S t | dst | _t | ds.t| _dd }dd }dd	 }d
d }dd }G dd dt}	|||fD ]}
||fD ]}|	| |
| q|qpd S )NParserTestCaseparser_signatureparser_classc                 S   s"   |D ]}| j |ji |j qd S r'   )add_argumentrF   rG   )parserargument_signaturessigr   r   r   	no_groups   s    z1ParserTesterMetaclass.__init__.<locals>.no_groupsc                 S   s,   |  d}|D ]}|j|ji |j qd S )Nfoo)add_argument_groupru   rF   rG   )rv   rw   grouprx   r   r   r   	one_group   s    
z1ParserTesterMetaclass.__init__.<locals>.one_groupc                 S   s8   t |D ]*\}}| d| }|j|ji |j qd S )Nzfoo:%i)	enumerater{   ru   rF   rG   )rv   rw   irx   r|   r   r   r   many_groups   s    z3ParserTesterMetaclass.__init__.<locals>.many_groupsc                 S   s
   |  |S r'   )rh   )rv   rF   r   r   r   listargs   s    z0ParserTesterMetaclass.__init__.<locals>.listargsc                 S   s4   t j}|d g| t _z|  W |t _S |t _0 d S )Nr   )ra   argvrh   )rv   rF   Zold_sys_argvr   r   r   sysargs   s    z/ParserTesterMetaclass.__init__.<locals>.sysargsc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
z0ParserTesterMetaclass.__init__.<locals>.AddTestsc              	   S   s   || _ || _| j j}| jj}| j| jfD ]T}|j}|||f}d|}	|fdd}
z
|	|
_W n tyn   Y n0 t||	|
 q(d S )N_c                 S   s   ||  d S r'   r   r   	test_funcr   r   r   wrapper   s    zJParserTesterMetaclass.__init__.<locals>.AddTests.__init__.<locals>.wrapper)_add_arguments_parse_argsr   test_failurestest_successesr3   	TypeErrorrd   )r   Z
tester_clsadd_argumentsrh   Zadd_arguments_nameZparse_args_namer   	func_namenames	test_namer   r   r   r   r      s    


z9ParserTesterMetaclass.__init__.<locals>.AddTests.__init__c                 S   s2   |j j}|j j}|j|i |}| ||j |S r'   )rs   rF   rG   rt   r   rw   )r   testerrF   rG   rv   r   r   r   _get_parser   s
    z<ParserTesterMetaclass.__init__.<locals>.AddTests._get_parserc              	   S   sZ   |  |}|jD ]D}| }|jt|d || W d    q1 sJ0    Y  qd S )N)msg)r   failuressplitassertRaisesrY   rh   )r   r   rv   args_strrF   r   r   r   r      s
    

z>ParserTesterMetaclass.__init__.<locals>.AddTests.test_failuresc                 S   sH   |  |}|jD ]2\}}t|tr*| }| ||}||| qd S r'   )r   	successesr`   strr   r   assertEqual)r   r   rv   rF   expected_nsZ	result_nsr   r   r   r      s    

z?ParserTesterMetaclass.__init__.<locals>.AddTests.test_successesN)r   r   r   r   r   r   r   r   r   r   r   AddTests   s   r   )hasattrrE   rs   rn   rt   object)clsr;   basesbodydictry   r}   r   r   r   r   r   rh   r   r   r   r      s    

	-zParserTesterMetaclass.__init__NrI   r   r   r   r   rq      s   rq   rr   c                   @   s^   e Zd ZedgZg dZdeddfdeddfdeddfd	ed
dfded
dfgZdS )TestOptionalsSingleDash-x)r   a--foo-x --fooz-x -yr   Nx-x ar   -xaz-x -1-1z-x-1r   r   r   rE   rw   r   rJ   r   r   r   r   r   r     s   
r   c                   @   s   e Zd ZedddeddddedgZg d	Zd
eddddfdeddddfdeddddfdeddddfdeddddfdeddddfdeddddfdeddddfdeddddfdeddddfdeddddfdeddddfgZdS )TestOptionalsSingleDashCombinedr   
store_trueactionz-yyystore_const*   r   const-z)r   r   r   r   z-x -zz-z -xz-yxz-yz az-yyyxz-yyyzaz-xyzar   FN)r   yyyzT-zar   -z az-xzaz-xz az-x -zaz-x -z a-yz-x -yyy -zaz-x -yyy -z ar   r   r   r   r   r   !  s$   
r   c                   @   s^   e Zd ZedgZg dZdeddfdeddfded	dfd
eddfdeddfgZdS )TestOptionalsSingleDashLong-foo)r   r   r   z
-foo --fooz-foo -y-fooar   Nrz   z-foo ar   z-foo -1r   z-fo a-f ar   r   r   r   r   r   ;  s   
r   c                   @   s   e Zd ZedededgZg dZdeddddfded	dddfd
ed	dddfdeddddfdeddddfdedd	ddfdeddd	dfgZdS )&TestOptionalsSingleDashSubsetAmbiguous-f-foobar-foorab)r   r   -fo-foo bz-foobz-foobaz-foorar   N)ffoobarfoorabr   r   -fa-foaZoar   Zooa	-foobar a	-foorab ar   r   r   r   r   r   I  s   r   c                   @   s   e Zd ZededgZg dZdedddfdedddfd	edddfd
edddfdedddfdedddfdedddfgZdS ) TestOptionalsSingleDashAmbiguousr   r   )r   r   r   r   r   r   r   r   N)r   r   z-foob ar   z-foor az-fooba az-foora ar   r   r   r   r   r   r   r   Y  s   r   c                   @   sV   e Zd ZedddgZg dZdeddfded	dfd
ed	dfdeddfgZdS )TestOptionalsNumericr   onedest)r   r   z-1 --fooz-1 -yz-1 -1z-1 -2r   N)r   z-1 ar   z-1az-1-2-2r   r   r   r   r   r   i  s   r   c                   @   s^   e Zd ZedgZg dZdeddfdeddfdeddfd	ed
dfded
dfgZdS )TestOptionalsDoubleDashr   )r   r   r   r   z--foo -xz--foo --barr   Nr   z--foo ar   z--foo=az
--foo -2.5z-2.5z
--foo=-2.5r   r   r   r   r   r   v  s   
r   c                
   @   s   e Zd ZedddedgZg dZdeddd	fd
eddd	fdeddd	fdeddd	fdeddd	fdeddd	fgZdS )#TestOptionalsDoubleDashPartialMatch--badgerr   r   z--bat)--bar--b--ba--b=2z--ba=4	--badge 5r   FN)badgerZbatz--bat XX--badT--badg--badger   r   r   r   r   r     s   
r   c                   @   s   e Zd ZedddedgZg dZdeddd	fd
eddd	fdeddd	fdeddd	fdeddd	fdeddd	fdeddd	fgZdS )"TestOptionalsDoubleDashPrefixMatchr   r   r   r   )r   r   r   r   r   r   FN)r   Zbaz--ba Xr   z--ba=Xr   Tr   r   r   r   r   r   r   r     s   
r   c                   @   s   e Zd ZedddededdddgZg d	Zd
eddddfdeddddfdeddddfdeddddfdeddddfdeddddfgZdS )TestOptionalsSingleDoubleDashr   r   r   r   -bazr   r   r   )r   -fbarz-fbazz-bazf-b BBr   FNr   barbazTz--ba Br   z
-f --bar Bz-f -bz-ba -fr   r   r   r   r   r     s   
r   c                   @   s   e Zd ZedddZedddededd	d
dgZg dZdeddddfdeddddfdeddddfdeddddfdeddd
dfdeddd
dfgZdS )!TestOptionalsAlternatePrefixChars+:/Fprefix_charsadd_help+fr   r   ::bar/bazr   r   r   )r   r   r   r   r   --bar Br   -h--helpz+hz::helpz/helpr   Nr   T::ba Br   
+f ::bar B+f /b/ba +f	r   r   r   rE   rs   rw   r   rJ   r   r   r   r   r   r     s   
r   c                   @   s   e Zd ZedddZedddededd	d
dgZg dZdeddddfdeddddfdeddddfdeddddfdeddd
dfdeddd
dfgZdS )*TestOptionalsAlternatePrefixCharsAddedHelpr   Tr   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   FNr   r   r   r   r   r   r   r   r   r   r   r     s   
r   c                	   @   s   e Zd ZedddZedddedddedddgZg d	Zd
eddddfdeddddfdeddddfdeddddfgZdS )2TestOptionalsAlternatePrefixCharsMultipleShortArgsz+-Fr   r   r   r   z+yz+z)-wz-xyzz+xr   z+xyzr   r   yr   Tz+y -xz+yz -xNr   r   r   r   r   r     s   


r   c                   @   sh   e Zd ZeddddddgZg dZded	d
fdedd
fdedd
fdedd
fdedd
fgZdS )TestOptionalsShortLong-vz	--verbosez-nz--noisyr   r   )z--x --verbosez-Nr   z-v xr   F)verboseTNr   r   r   r   r   r     s   r   c                   @   sb   e Zd ZededddgZdgZdeddd	fd
eddd	fdeddd	fdeddd	fgZdS )TestOptionalsDestz	--foo-bar--bazzabbazr   r   z--foo-bar fr   N)Zfoo_barr  z--baz ggz--foo-bar h --baz ihr   z--baz j --foo-bar kkjr   r   r   r   r   r    s   r  c                   @   sT   e Zd ZededddgZdgZdedddfd	ed
ddfdedddfgZdS )TestOptionalsDefaultr   r   r   defaultr   r   Nr   r   z-xxr   z-yyr   r   r   r   r   r   r    s   r  c                   @   s:   e Zd ZedgZddgZdeddfdeddfgZdS )TestOptionalsNargsDefaultr   r   r   Nr   r   r   r   r   r   r   r  &  s
   
r  c                   @   s@   e Zd ZedddgZddgZdeddfdedgdfgZdS )	TestOptionalsNargs1r      nargsr   r   Nr   r   r   r   r   r   r   r  1  s
   r  c                   @   sB   e Zd ZedddgZg dZdeddfdeg d	dfgZdS )
TestOptionalsNargs3r      r  )r   r   r   -x a ba -xa -x br   Nr   z-x a b cr   bcr   r   r   r   r   r  <  s
   r  c                   @   s   e Zd Zedddeddddedddd	ed
dedddgZdgZdedddddfdedddddfdedddddfdedddddfdedddddfdedddddfdedddddfd
edddddfdedddddfg	ZdS )TestOptionalsNargsOptionalr   ?r  r   r   )r  r   r   spamr  r
  r   42Z84)r  rS   r   r
  2r   NT   r=   r   r   r   z-w 2z-x 2z-y 2z-z 2   	r   r   r   rE   intrw   r   rJ   r   r   r   r   r   r  G  s    
r  c                   @   s   e Zd ZedddeddddgZdgZded	dd
fdeg dd
fdedgdd
fdeddgdd
fded	g d
fded	dgd
fded	ddgd
fgZd	S )TestOptionalsNargsZeroOrMorer   *r  r   r  r  r   r   Nr  r   r  r  -y a-y a br   r   r   r   r   r$  ^  s   
r$  c                	   @   s   e Zd ZedddeddddgZg dZded	dd
fdedgdd
fdeddgdd
fded	dgd
fded	ddgd
fgZd	S )TestOptionalsNargsOneOrMorer   +r  r   r  r  )r   r   r   r  za -y br   Nr  r   r   r  r  r&  r'  r   r   r   r   r   r(  q  s   
r(  c                
   @   s   e Zd ZedddedeeddgZg dZded	d	d
fdedd	d
fdedd	d
fded	dd
fded	dd
fdeddd
fgZ	d	S )TestOptionalsChoicesr   abcchoicesz-g   rS   r-  )r   z-f dz-fadz-gaz-g 6r   N)r   r  r   r   z-f cr  z-g 0r   z-g 03r  z-fb -g4r     
r   r   r   rE   r#  rangerw   r   rJ   r   r   r   r   r   r*    s   
r*  c                   @   s@   e Zd ZededdgZddgZdeddfd	ed
dfgZdS )TestOptionalsRequiredr   TrS   requiredr   r   -x 1r  r   z-x42r   Nr"  r   r   r   r   r3    s   r3  c                   @   s>   e Zd ZedddgZddgZdeddfd	ed
dfgZdS )TestOptionalsActionStorer   storer   r   r  r   Nr   z-xfoorz   r   r   r   r   r   r7    s
   r7  c                   @   s>   e Zd ZeddedgZdgZdeddfdeedfgZdS )TestOptionalsActionStoreConstr   r   r   r   r   Nr   )	r   r   r   rE   r   rw   r   rJ   r   r   r   r   r   r9    s
   r9  c                   @   s>   e Zd ZedddgZg dZdeddfdeddfgZd	S )
TestOptionalsActionStoreFalser   store_falser   )r   r   r   r   T)r   FNr   r   r   r   r   r;    s
   r;  c                   @   s>   e Zd ZedddgZg dZdeddfdeddfgZd	S )
TestOptionalsActionStoreTruez--appler   r   )r   z	--apple=bz	--apple br   F)ZappleTNr   r   r   r   r   r=    s
   r=  c                   @   sl   e Zd ZedejdgZddgZdeddfdeddfd	ed
dfded
dfdeddfgZ	dd Z
dS )TestBooleanOptionalActionr   r   z	--foo barz	--foo=barr   Nr   T--no-fooFz--foo --no-fooz--no-foo --fooc                 C   sZ   t  }| t"}|jddt jd W d    n1 s:0    Y  | dt|j d S )Nr   Tr   r   z*got an unexpected keyword argument 'const')	argparseArgumentParserr   r   ru   BooleanOptionalActionassertInr   	exceptionr   rv   cmr   r   r   
test_const  s    0z$TestBooleanOptionalAction.test_const)r   r   r   rE   rA  rC  rw   r   rJ   r   rH  r   r   r   r   r>    s   r>  c                   @   s@   e Zd ZeddejdgZdgZdeddfdeddfgZ	dS )	!TestBooleanOptionalActionRequiredr   T)r5  r   r   r   r?  FN)
r   r   r   rE   rA  rC  rw   r   rJ   r   r   r   r   r   rI    s   rI  c                   @   sP   e Zd ZedddgZg dZdeddfded	gdfd
ed	dgdfgZdS )TestOptionalsActionAppendr  appendr   r   r  a --baz	--baz a br   Nr   --baz ar   --baz a --baz br  r   r   r   r   r   rJ    s   rJ  c                   @   sX   e Zd ZedddgdgZg dZdedgdfdedd	gdfd
eg ddfgZdS )$TestOptionalsActionAppendWithDefaultr  rK  r   r   r
  rL  r   rO  rP  r   rQ  )r   r   r  Nr   r   r   r   r   rR    s   rR  c                   @   sb   e Zd ZeddededdddgZg dZd	ed
dfdeegdfdeededgdfgZd
S )TestOptionalsActionAppendConst-bappend_constr   -crK  r  r   r   r   rW  za -cz-bxz-b xr   Nr  -b -cx -b -cyzr   yz	r   r   r   rE   rZ   rw   r   rJ   r   r   r   r   r   rT    s   rT  c                	   @   sl   e Zd ZeddedgdeddddgZg d	Zd
edgdfdedegdfdedededgdfgZdS ))TestOptionalsActionAppendConstWithDefaultrU  rV  r   )r   r   r
  rW  rK  r  rX  rY  r   rZ  r[  r   r\  Nr]  r   r   r   r   r^    s   r^  c                   @   s>   e Zd ZedddgZg dZdeddfdeddfgZdS )	TestOptionalsActionCountr   countr   )r   r   z-x bz	-x a -x br   Nr   r  r   r   r   r   r   r_  "  s
   r_  c                	   @   sr   e Zd ZedededddgZddgZded	d	d
dfdedd	d
dfded	dd
dfdedd	ddfgZd	S )"TestOptionalsAllowLongAbbreviationr   z--foobazz--foobler   r   z--foob 5z--foobr   NF)rz   ZfoobazZfooblez--foo 77z	--fooba ar   z--foobl --foo gr  Tr   r   r   r   r   ra  -  s   
ra  c                   @   sl   e Zd ZeddZededddedgZg dZd	ed
dd
dfdeddd
dfdeddddfgZd
S )%TestOptionalsDisallowLongAbbreviationFallow_abbrevr   z--foodler   r   z--foonly)z-foon 3z--foon 3z--foodz--food --foo 2r   Nrz   ZfoodleZfoonlyz--foo 33z--foonly 7 --foodle --foo 2r  Trb  r   r   r   r   r   rc  >  s   

rc  c                   @   sn   e Zd ZedddZededddedgZg d	Zd
eddddfdeddddfdeddddfgZdS )0TestOptionalsDisallowLongAbbreviationPrefixCharsr)  Fr   re  z++fooz++foodler   r   z++foonly)z+foon 3z++foon 3z++foodz++food ++foo 2r   Nrf  z++foo 3rg  z++foonly 7 ++foodle ++foo 2r  Trb  r   r   r   r   r   rh  O  s   
rh  c                
   @   s   e Zd ZeddZededddgZddgZded	d	d
fdedd	d
fdedd	d
fded	dd
fdeddd
fdeddd
fgZd	S )/TestDisallowLongAbbreviationAllowsShortGroupingFrd  z-rrW  r`  r   z-c -rr   Nrr  z-rar   z-rccccz-ccr!  z-cc -raz-ccrccr   r   r   r   r   rj  `  s   

rj  c                
   @   s   e Zd ZedddZededddgZddgZd	ed
d
dfdedd
dfdedd
dfded
ddfdedddfdedddfgZd
S )5TestDisallowLongAbbreviationAllowsShortGroupingPrefixr)  Fri  z+rz+cr`  r   z+c +rr   Nrk  z+rar   z+rccrm  z+ccr!  z+cc +raz+ccrccr   r   r   r   r   rn  s  s   
rn  c                   @   s.   e Zd ZedgZg dZdeddfgZdS )TestPositionalsNargsNonerz   r   r   a br   r   Nr   r   r   r   r   ro    s   
ro  c                   @   s4   e Zd ZedddgZg dZdedgdfgZdS )TestPositionalsNargs1rz   r  r  rp  r   r   Nr   r   r   r   r   rr    s   rr  c                   @   s6   e Zd ZedddgZg dZdeddgdfgZd	S )
TestPositionalsNargs2rz   r!  r  )r   r   r   a b crq  r   r  r   Nr   r   r   r   r   rs    s   rs  c                   @   sN   e Zd ZedddgZdgZdeg dfdedgdfdedd	gdfgZd
S )TestPositionalsNargsZeroOrMorerz   r%  r  r   r   r   r   rq  r  Nr   r   r   r   r   ru    s   ru  c                   @   sP   e Zd ZeddddgZdgZdeddfdedgdfd	edd
gdfgZdS )%TestPositionalsNargsZeroOrMoreDefaultrz   r%  r   r  r   r   r   r   rq  r  Nr   r   r   r   r   rv    s   rv  c                   @   sD   e Zd ZedddgZddgZdedgdfdedd	gdfgZd
S )TestPositionalsNargsOneOrMorerz   r)  r  r   r   r   r   rq  r  Nr   r   r   r   r   rw    s
   rw  c                   @   s>   e Zd ZedddgZddgZdeddfd	ed	dfgZdS )
TestPositionalsNargsOptionalrz   r  r  r   rq  r   Nr   r   r   r   r   r   r   rx    s
   rx  c                   @   s@   e Zd ZeddddgZddgZdeddfd	ed	dfgZd
S )#TestPositionalsNargsOptionalDefaultrz   r  r   r  r   rq  r   r   r   Nr   r   r   r   r   ry    s
   ry  c                   @   sB   e Zd ZeddeddgZg dZdeddfd	ed
dfgZdS ),TestPositionalsNargsOptionalConvertedDefaultrz   r  r  )r  rS   r
  )r   rq  1 2r   r   r   1r  Nr"  r   r   r   r   rz    s   rz  c                   @   s6   e Zd ZededgZg dZdedddfgZdS )	TestPositionalsNargsNoneNonerz   r   )r   r   r   rt  rq  r   r  rz   r   Nr   r   r   r   r   r}    s   r}  c                   @   s<   e Zd ZededddgZg dZdeddgd	fgZd
S )TestPositionalsNargsNone1rz   r   r  r  )r   r   r   rt  rq  r   r  r~  Nr   r   r   r   r   r    s   r  c                   @   s>   e Zd ZedddedgZg dZdeddgd	d
fgZdS )TestPositionalsNargs2Nonerz   r!  r  r   r   r   r   rq  a b c drt  r   r  r  r~  Nr   r   r   r   r   r    s   r  c                   @   s\   e Zd ZededddgZddgZdedg dfd	edd
gdfdedd
dgdfgZdS )"TestPositionalsNargsNoneZeroOrMorerz   r   r%  r  r   r   r   r~  rq  r  rt  r  Nr   r   r   r   r   r    s   r  c                   @   sN   e Zd ZededddgZg dZdeddgd	fd
edddgd	fgZdS )!TestPositionalsNargsNoneOneOrMorerz   r   r)  r  r   r   r   rq  r   r  r~  rt  r  Nr   r   r   r   r   r    s
   r  c                   @   sH   e Zd ZededddgZg dZdedddfd	edd
dfgZdS ) TestPositionalsNargsNoneOptionalrz   r   r  r  r   r   rt  r   Nr~  rq  r  r   r   r   r   r   r  %  s
   r  c                   @   s\   e Zd ZedddedgZddgZdeg ddfd	edgd
dfdedd
gddfgZdS )"TestPositionalsNargsZeroOrMoreNonerz   r%  r  r   r   r   r   r~  rq  r  rt  r  Nr   r   r   r   r   r  0  s   r  c                   @   sN   e Zd ZedddedgZg dZdedgdd	fd
eddgdd	fgZdS )!TestPositionalsNargsOneOrMoreNonerz   r)  r  r   r  rq  r   r  r~  rt  r  Nr   r   r   r   r   r  <  s
   r  c                   @   sJ   e Zd ZeddddedgZg dZdedddfd	edd
dfgZdS ) TestPositionalsNargsOptionalNonerz   r  r   r  r   r  r   r~  rq  r  Nr   r   r   r   r   r  G  s
   r  c                   @   sV   e Zd ZedddedddgZg dZdedd	gg d
fdedd	gdgd
fgZdS )TestPositionalsNargs2ZeroOrMorerz   r!  r  r   r%  r  rq  r   r  r~  rt  r  Nr   r   r   r   r   r  R  s
   r  c                   @   sD   e Zd ZedddedddgZg dZdedd	gd
gdfgZdS )TestPositionalsNargs2OneOrMorerz   r!  r  r   r)  )r   r   r   rq  rt  r   r  r  r~  Nr   r   r   r   r   r  ]  s   r  c                   @   sT   e Zd ZedddedddgZg dZdedd	gd
dfdedd	gddfgZd
S )TestPositionalsNargs2Optionalrz   r!  r  r   r  )r   r   r   r  rq  r   r  Nr~  rt  r  r   r   r   r   r   r  g  s
   r  c                   @   sf   e Zd ZedddedddgZddgZdeg dgd	fd
edgdgd	fdeddgdgd	fgZdS )TestPositionalsNargsZeroOrMore1rz   r%  r  r   r  r   r   r   r~  rq  r  rt  r  Nr   r   r   r   r   r  r  s   r  c                   @   sV   e Zd ZedddedddgZg dZdedgd	gd
fdedd	gdgd
fgZdS )TestPositionalsNargsOneOrMore1rz   r)  r  r   r  r  rq  r   r  r~  rt  r  Nr   r   r   r   r   r  ~  s
   r  c                   @   sP   e Zd ZedddedddgZg dZdeddgd	fd
eddgd	fgZdS )TestPositionalsNargsOptional1rz   r  r  r   r  r  r   Nr~  rq  r  r   r   r   r   r   r    s
   r  c                   @   s\   e Zd ZededddedddgZg dZded	g d
gdfded	d
gdgdfgZdS )#TestPositionalsNargsNoneZeroOrMore1rz   r   r%  r  r   r  r  rq  r   r  rz   r   r   rt  r  Nr   r   r   r   r   r    s   

r  c                   @   s`   e Zd ZededddedddgZg dZded	d
gdgdfded	d
dgdgdfgZdS )"TestPositionalsNargsNoneOneOrMore1rz   r   r)  r  r   r  )r   r   r   r  rt  r   r  r  r  r  dNr   r   r   r   r   r    s   

r  c                   @   s\   e Zd ZededdddedddgZg d	Zd
edddgdfdedddgdfgZdS )!TestPositionalsNargsNoneOptional1rz   r   r        ?r  r   r  r  r  rq  r   r  r  rt  r  Nr   r   r   r   r   r    s   
r  c                   @   s\   e Zd ZedddeddddgZddgZd	ed
ddfdedddfdedddfgZd
S )$TestPositionalsNargsOptionalOptionalrz   r  r  r   r   r  r   rt  r   Nr~  r   rq  r  r   r   r   r   r   r    s   
r  c                   @   sl   e Zd ZedddedddgZdgZdedg d	fd
ed
g d	fded
dgd	fded
ddgd	fgZdS )&TestPositionalsNargsOptionalZeroOrMorerz   r  r  r   r%  r   r   Nr~  r   rq  r  rt  r  r   r   r   r   r   r    s   r  c                   @   sb   e Zd ZedddedddgZddgZded	dgd
fdeddgd
fdedddgd
fgZd	S )%TestPositionalsNargsOptionalOneOrMorerz   r  r  r   r)  r   r   r   Nr~  rq  r  rt  r  r   r   r   r   r   r    s   r  c                   @   sB   e Zd ZededdgZg dZdeddfdeddfgZdS )	TestPositionalsChoicesStringr  Zabcdefgr,  r   r   r  r  Zefr   r  r  N)	r   r   r   rE   setrw   r   rJ   r   r   r   r   r   r    s
   r  c                   @   sD   e Zd ZedeeddgZg dZdeddfded	dfgZ	d
S )TestPositionalsChoicesIntr     r/  r  4r0  r  15   Nr1  r   r   r   r   r    s
   r  c                   @   sF   e Zd ZedddeddddgZg dZdedd	d
ggdfgZdS )TestPositionalsActionAppendr  rK  r   r!  )r   r  r  rt  r   r  r  r  Nr   r   r   r   r   r    s   
r  c                   @   sj   e Zd ZedddeddddgZdd	gZd
edddfdedddfdedddfdedddfgZdS )"TestOptionalsNumericAndPositionalsr   r  r  z-4r   r   r   r   r   z-315r   NFr  r   Tz-4 ar   r   r   r   r   r    s   
r  c                	   @   sv   e Zd ZedddeddddgZdgZd	ed
ddfdedddfdedddfded
ddfdedddfgZd
S )(TestOptionalsAlmostNumericAndPositionalsr   r  r  z-k4r   r   r  z-k3r   NFr  r   r   Tz-k4 ar   r   r   r   r   r    s   
r  c                   @   s   e Zd ZedddeddddgZdgZdgedd	d
fdgedd	d
fdgedd	d
fddged	dd
fddged	dd
fddged	dd
fdged	dd
fdged	dd
fgZd	S )$TestEmptyAndSpaceContainingArgumentsr   r  r  r   z--yyyr   r   r   Nr  za badgerz	-a badgerz--yyy=a badgerz--yyy=-a badgerr   r   r   r   r   r  0  s   
r  c                   @   s   e Zd ZeddZedddddedd	ed
deddddgZddgZdedd
ddfdedd
ddfdedd
ddfdeddddfdedd
ddfdedd
ddfgZ	dS ) TestPrefixCharacterOnlyArgumentsz-+r   -r   r  r   )r   r  r   r)  r   r   )r   rS   r
  z-+-r   r   r  r   z+ -r   NFr   z- Xr   z+ -3Tz- ===z===)
r   r   r   rE   rs   r#  rw   r   rJ   r   r   r   r   r   r  C  s   
r  c                   @   s   e Zd ZedddedddgZg Zdedg dfdeg g dfded	gg dfd
ed	gdgdfd	edd	gdfdeg d	gdfdedgd	gdfgZdS )TestNargsZeroOrMorer   r%  r  r   r   Nr  r   r   z	-x a -- br  r  r  r   r   r   r   r   r  V  s   r  c                	   @   sz   e Zd ZededddedgZg dZdedg dd	fd
edg dd	fdedg ddd	fdedddgdd	fgZdS )TestNargsRemainderr   r   ...r  r   )r   r   z-z Zr   Nr   z-z Z XZ
X A B -z Z)Ar   r   r  z	X Y --fooYr   r   r   r   r   r   r  f  s   r  c                   @   s   e Zd ZededededdedddgZg d	Zd
eddg dfdeddg dfdedddgdfdeddg dfdeddg dfdeddg dfdedddgdfdedddgdfdedddgdfdedddgdfdedddgdfgZdS )TestOptionLiker   rS   z-3r   )rS   r   r   r%  r  )r   z-y2.5r   z-x -az-x -3z-x -3.5z-3 -3.5z-x -2.5z	-x -2.5 az-3 -.5za x -1z-x -1 az-3 -1 ar   Nr   z-x 2.5      @z-x 2.5 ar   z-3.5      ?z-3-.5g      z-3 .5za -3.5za -x 1g      ?z-x 1 az-3 1 a)	r   r   r   rE   floatrw   r   rJ   r   r   r   r   r   r  s  s"   

r  c                   @   s   e Zd ZeddejdeddejdeddejdgZd	gZd
e fdeddfdeddgdfdeddfdedddfdeddgddfgZ	dS )TestDefaultSuppressrz   r  r  r   r%  r  r   rS  r   r   r   r   rq  r  r~  TrO  rM  rz   r   rN  r  N)
r   r   r   rE   rA  SUPPRESSrw   r   rJ   r   r   r   r   r   r    s   r  c                   @   s   e Zd ZeejdZedddedddeddd	gZd
gZde	 fde	ddfde	ddgdfde	ddfde	dddfde	ddgddfgZ
dS )TestParserDefaultSuppressargument_defaultrz   r  r  r   r%  r  r   r   r   r   r   r   rq  r  r~  TrO  rM  r  rN  r  N)r   r   r   rE   rA  r  rs   rw   r   rJ   r   r   r   r   r   r    s   


r  c                   @   s   e Zd ZeddZeddddeddd	ed
dd	edddgZdgZdedddddfdedddddfdeddgdddfdedddddfdedddddfdeddgdddfgZdS )TestParserDefault42r   r  	--versionversion1.0r   r  rz   r  r  r   r%  r  r   r   r   r   )rz   r   r   r  r   rq  r  TrM  rN  Nr   r   r   r   r   r    s   



r  c                       s   e Zd Z fddZeddZedededdd	gZg d
Zdedddgdfdeddddgdfdedddgdfdedddgdfdeddddgdfdeddddgdfg dedddgdfgZ	  Z
S )TestArgumentsFromFilec              	      s\   t t|   g d}|D ]<\}}t|d}|| W d    q1 sL0    Y  qd S )N)hellozhello world!
)	recursivez-a
A
@hello)invalidz@no-such-path
r=   )r
   r  r%   r>   r?   r   Z
file_textsr2   textrA   r   r   r   r%     s
    zTestArgumentsFromFile.setUp@fromfile_prefix_chars-ar   r   r)  r  )r   rU  r   z@invalidz@missingzX YNr   r  )r   r   r   z
X -a A Y Zr  r  @hello Xzhello world!zX @helloz-a B @recursive Y ZzX @recursive Z -a Br   )r  r   r   r  r   )r   r   r   r%   rE   rs   rw   r   rJ   r   r   r   r   r   r   r    s   

r  c                       s`   e Zd Z fddZG dd deZeZeddZeddd	gZ	g Z
d
eg ddfgZ  ZS )TestArgumentsFromFileConverterc              	      sZ   t t|   dg}|D ]<\}}t|d}|| W d    q1 sJ0    Y  qd S )Nr  r=   )r
   r  r%   r>   r?   r  r   r   r   r%     s    z$TestArgumentsFromFileConverter.setUpc                   @   s   e Zd Zdd ZdS )z>TestArgumentsFromFileConverter.FromFileConverterArgumentParserc                 c   s"   |  D ]}| sq|V  qd S r'   )r   strip)r   arg_lineargr   r   r   convert_arg_line_to_args  s    zWTestArgumentsFromFileConverter.FromFileConverterArgumentParser.convert_arg_line_to_argsN)r   r   r   r  r   r   r   r   FromFileConverterArgumentParser  s   r  r  r  r   r)  r  r  )r  zworld!r   r:  )r   r   r   r%   rn   r  rt   rE   rs   rw   r   rJ   r   r   r   r   r   r   r    s   	

r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestFileTypeReprc                 C   s   t d}| dt| d S )Nrl  zFileType('r')rA  FileTyper   reprr   rS   r   r   r   test_r  s    
zTestFileTypeRepr.test_rc                 C   s    t dd}| dt| d S )Nwbr  zFileType('wb', 1)r  r  r   r   r   	test_wb_1  s    zTestFileTypeRepr.test_wb_1c                 C   s"   t jddd}| dt| d S )Nrl  latin_1encodingz!FileType('r', encoding='latin_1')r  r  r   r   r   test_r_latin  s    zTestFileTypeRepr.test_r_latinc                 C   s$   t jdddd}| dt| d S )Nr=   big5ignore)r  errorsz/FileType('w', encoding='big5', errors='ignore')r  r  r   r   r   test_w_big5_ignore  s    z#TestFileTypeRepr.test_w_big5_ignorec                 C   s$   t jdddd}| dt| d S )Nrl  r  replacer  z"FileType('r', 1, errors='replace')r  r  r   r   r   test_r_1_replace!  s    z!TestFileTypeRepr.test_r_1_replaceN)r   r   r   r  r  r  r  r  r   r   r   r   r    s
   r  c                   @   s   e Zd Zdd Zdd ZdS )StdStreamComparerc                 C   s8   t || _|dkrt| _n|dkr,t| _nt | _d S )Nstdout.bufferstderr.buffer)operator
attrgetterrc   re   
backupattrrf   r   )r   rk   r   r   r   r   +  s    zStdStreamComparer.__init__c                 C   s2   z||  tkW S  ty,   || jk Y S 0 d S r'   )rc   ra   AttributeErrorr  rV   r   r   r   rX   9  s    zStdStreamComparer.__eq__Nr   r   r   r   rX   r   r   r   r   r  *  s   r  stdinr\   r]   zstdin.bufferr  r  c                   @   s    e Zd Zi Zdd Zdd ZdS )RFilec                 C   s
   || _ d S r'   r;   r   r;   r   r   r   r   K  s    zRFile.__init__c                 C   s`   || j v r| j | }n|  }| j |< |  t|tsD|d}| j|j  koZ|kS   S )Nascii)seenreadcloser`   r   r   r;   r   rW   r  r   r   r   rX   N  s    


zRFile.__eq__N)r   r   r   r  r   rX   r   r   r   r   r  H  s   r  c                	       s   e Zd Z fddZede dededdgZg dZde	d	e
dd
fde	e
de
dd
fde	e
de
dd
fde	eed
fde	d	e
dd
fgZ  ZS )TestFileTypeRc              	      sf   t t|   dD ]D}ttj| j|d}|| W d    q1 sL0    Y  q| 	d d S )Nr~  r=   readonly)
r
   r  r%   r>   r+   r2   r3   r*   r?   rD   r   	file_namerA   r   r   r   r%   \  s
    *zTestFileTypeR.setUpr   r  r  rl  )r   r   znon-existent-file.txtrz   Nr   r  
-x foo barr   
bar -x foo-x - -r  )r   r   r   r%   rE   rA  r  rw   r   rJ   r  eq_stdinr   r   r   r   r   r   r  Y  s   r  c                       sL   e Zd Z fddZededddgZdgZde	e
d	d
fgZ  ZS )TestFileTypeDefaultsc                    s:   t t|   ttj| jdd}|d |	  d S )Ngoodr=   )
r
   r  r%   r>   r+   r2   r3   r*   r?   r  )r   rA   r   r   r   r%   r  s    
zTestFileTypeDefaults.setUprW  rl  zno-file.txtrS   r
  r   z-c goodr  )r  )r   r   r   r%   rE   rA  r  rw   r   rJ   r  r   r   r   r   r   r   r  p  s
   r  c                       s   e Zd Z fddZededdededdgZddgZde	d	e
dd
fde	e
de
dd
fde	e
de
dd
fde	eed
fgZ  ZS )TestFileTypeRBc              	      s\   t t|   dD ]D}ttj| j|d}|| W d    q1 sL0    Y  qd S )Nr~  r=   )	r
   r  r%   r>   r+   r2   r3   r*   r?   r  r   r   r   r%     s    zTestFileTypeRB.setUpr   rbr  r  r   rz   Nr  r  r   r  r   )r   r   r   r%   rE   rA  r  rw   r   rJ   r  	eq_bstdinr   r   r   r   r   r   r    s   r  c                   @   s"   e Zd Ze Zdd Zdd ZdS )WFilec                 C   s
   || _ d S r'   r  r  r   r   r   r     s    zWFile.__init__c                 C   sL   || j vr@d}d|jv r"|d}|| |  | j | | j|jkS )NzCheck that file is writable.r  r  )r  moder	   r?   r  addr;   r  r   r   r   rX     s    



zWFile.__eq__N)r   r   r   r  r  r   rX   r   r   r   r   r    s   r  geteuidznon-root user requiredc                	       s   e Zd Z fddZededdededdgZg dZde	d	e
dd
fde	d	e
dd
fde	e
de
dd
fde	e
de
dd
fde	eed
fgZ  ZS )TestFileTypeWc                    s"   t    | d | d d S Nr  writabler
   r%   rD   rB   r   r   r   r   r%     s    

zTestFileTypeW.setUpr   r=   r  r  )r   r   r  rz   Nr  r  r  r   r  r   r   r   r   r%   rE   rA  r  rw   r   rJ   r  	eq_stdoutr   r   r   r   r   r   r    s   r  c                       sp   e Zd Z fddZededdededdgZg dZde	e
d	e
d
dfde	eedfgZ  ZS )TestFileTypeXc                    s"   t    | d | d d S r  r  r   r   r   r   r%     s    

zTestFileTypeX.setUpr   r   r  r  )r   r   r  r  r  rz   r   r  r   r  r   r   r   r   r    s   r  c                   @   s   e Zd ZededdededdgZddgZdede	ddfd	ee	de	d
dfdee	de	d
dfdee
e
dfgZdS )TestFileTypeWBr   r  r  r  r   rz   Nr  r  r   r  r   )r   r   r   rE   rA  r  rw   r   rJ   r  
eq_bstdoutr   r   r   r   r   r    s   r  c                   @   sX   e Zd ZededdededdgZdeededdfd	ee	e	dfgZ
d
S )TestFileTypeXBr   xbr  r  r  rz   r   r  r   N)r   r   r   rE   rA  r  rw   rJ   r  r  r   r   r   r   r   r    s   r  c                   @   s   e Zd Zdd ZdS )TestFileTypeOpenArgsc              	   C   s   t j}|ddf|dddf|ddddf|d	d
ddf|dddddfg}td8}|D ]"\}}|d |jdg|R   q\W d    n1 s0    Y  d S )Nr  )r  NNr=   r  )r=   r  NNr  r  )r=   r  Nr  r  r  r  )r  r  r  Nr   l1strict)r=   r   r  r  zbuiltins.openrz   )rA  r  r   ZpatchZassert_called_with)r   ZFTZcasesmrS   rF   r   r   r   test_open_args  s    
z#TestFileTypeOpenArgs.test_open_argsN)r   r   r   r  r   r   r   r   r    s   r  c                   @   s   e Zd Zdd ZdS )!TestFileTypeMissingInitializationc                 C   s`   t  }| t }|jdt jd W d    n1 s80    Y  | dt jf t|j d S )Nr   r  z<%r is a FileType class object, instance of it must be passed)	rA  rB  r   
ValueErrorru   r  r   r   rE  rF  r   r   r   test  s    .z&TestFileTypeMissingInitialization.testNr   r   r   r  r   r   r   r   r    s   r  c                   @   sZ   e Zd ZededededgZg dZdedddfd	ed
ddfdedddfgZ	dS )TestTypeCallablez--eggsr  r  )r   Z42jz--eggs az	--eggs 2iz--eggs=42 42r   g      E@)eggsr  z--eggs 2j -- -1.5y               @      z1024.675Ng3333@)
r   r   r   rE   complexr  rw   r   rJ   r   r   r   r   r   r!    s   

r!  c                   @   sh   e Zd ZG dd deZededededgZg Zdeededd	fd
eededd	fgZ	dS )TestTypeUserDefinedc                   @   s   e Zd Zdd Zdd ZdS )zTestTypeUserDefined.MyTypec                 C   s
   || _ d S r'   valuer   r'  r   r   r   r   -  s    z#TestTypeUserDefined.MyType.__init__c                 C   s   t | | jft ||jfkS r'   rS   r'  rV   r   r   r   rX   0  s    z!TestTypeUserDefined.MyType.__eq__Nr  r   r   r   r   MyType+  s   r*  r   r  r  r  r  r   r  -xf gr   r  N)
r   r   r   r   r*  rE   rw   r   rJ   r   r   r   r   r   r%  (  s   	

r%  c                   @   sf   e Zd ZG dd dZededededgZg Zdeededd	fd
eededd	fgZdS )TestTypeClassicClassc                   @   s   e Zd Zdd Zdd ZdS )zTestTypeClassicClass.Cc                 C   s
   || _ d S r'   r&  r(  r   r   r   r   C  s    zTestTypeClassicClass.C.__init__c                 C   s   t | | jft ||jfkS r'   r)  rV   r   r   r   rX   F  s    zTestTypeClassicClass.C.__eq__Nr  r   r   r   r   CA  s   r-  r   r  r  r  r  r   r  r+  r   r  N)	r   r   r   r-  rE   rw   r   rJ   r   r   r   r   r   r,  >  s   	

r,  c                   @   s   e Zd Zdd ZdS )TestTypeRegistrationc                 C   sz   dd }t  }|dd| |jddd |jddd | |d td d	d
 | |d td	dd
 d S )Nc                 S   s   d|  S )Nzmy_type{%s}r   stringr   r   r   get_my_typeY  s    z.TestTypeRegistration.test.<locals>.get_my_typerS   Zmy_typer   r  r   r|  z
my_type{1}r  z-x 1 42zmy_type{42})rA  rB  registerru   r   rh   r   rJ   )r   r1  rv   r   r   r   r  W  s    

zTestTypeRegistration.testNr   r   r   r   r   r.  T  s   r.  c                   @   s   e Zd ZG dd dejZG dd dejZeddeedded	ee	d
ddgZ
g ZdedddfdedddfdedddfdedddfgZdS )TestActionUserDefinedc                   @   s   e Zd ZdddZdS )z$TestActionUserDefined.OptionalActionNc              
   C   s|   z:t dd}|dv rd|_n|dv r,d|_ntd| W n0 tyj } ztd| W Y d }~n
d }~0 0 t|d	| d S )
N      ?r  )      ?r  r!  )       @r  	value: %szopt_action failed: %sr  )rJ   r   AssertionErrorrY   rd   r   rv   	namespacer'  option_stringr   rl   r   r   r   __call__p  s    
"z-TestActionUserDefined.OptionalAction.__call__)Nr   r   r   r<  r   r   r   r   OptionalActionn  s   r>  c                   @   s   e Zd ZdddZdS )z&TestActionUserDefined.PositionalActionNc              
   C   s   zJt dd}|dv rd|_n,|dv r,d|_n|dv r<d|_ntd	| W n0 tyz } ztd
| W Y d }~n
d }~0 0 t|d| d S )Nr!  r   )r   r  r4  )r  r  )r!  r5  r7  zarg_action failed: %sr   )rJ   r  r8  rY   rd   r9  r   r   r   r<    s    
"z/TestActionUserDefined.PositionalAction.__call__)Nr=  r   r   r   r   PositionalAction  s   r@  z-sr  r4  )r   r   rS   r
  r   r  r!  )r   rS   r  r
  z-s0.125r5  )r  r   r  r   z
-s 0.625 1r  r  z84 -s2r6  r  N)r   r   r   rA  Actionr>  r@  rE   r  r#  rw   r   rJ   r   r   r   r   r   r3  k  s   r3  c                   @   s&   e Zd ZG dd dejZdd ZdS )TestActionRegistrationc                   @   s   e Zd ZdddZdS )zTestActionRegistration.MyActionNc                 C   s   t || jd|  d S )Nzfoo[%s])rd   r   )r   rv   r:  valuesr;  r   r   r   r<    s    z(TestActionRegistration.MyAction.__call__)Nr=  r   r   r   r   MyAction  s   rD  c                 C   s^   t  }|dd| j |jddd | |dgtdd | |dgtd	d d S )
Nr   Z	my_actionr   r   r|  zfoo[1]r?  r  zfoo[42])rA  rB  r2  rD  ru   r   rh   rJ   r   rv   r   r   r   r    s
    zTestActionRegistration.testN)r   r   r   rA  rA  rD  r  r   r   r   r   rB    s   rB  c                   @   s6   e Zd ZedddedgZdZdeg ddfgZd	S )
TestActionExtendr   extendr)  )r   r  rS   r   z--foo f1 --foo f2 f3 f4)f1f2Zf3Zf4r   N)	r   r   r   rE   r   rw   r   rJ   r   r   r   r   r   rF    s
   rF  c                       s   e Zd Zdd Zd9ddZ fddZd	d
 Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Z  ZS ):TestAddSubparsersc                 O   s   | j tg|R i | d S r'   r   rY   rH   r   r   r   assertArgumentParserError  s    z+TestAddSubparsers.assertArgumentParserErrorFNc                 C   s  |r0t dd|d}|j|d d d ddd	 nt ddd
}|jdddd	 |jdtdd ddi}|rzd|d< d|d< nd|d< |jf i |}| |j tdd}|rd|d< |rddg|d< |jd7i |}|jdtdd |jd d!d"d# td$d}	|rd%|	d< |jd8i |	}
|
jd'd(d)d# |
jd*td+d,d- td.d}|rVd/|d< |jd9i |}|jd1td2d |jd3d4d5d6 |S ):NPROGmain description)progdescriptionr   r   r!  rz   r   foo helpr   helprO  rP  r   r   bar helprS   rS  r5  FZCOMMANDmetavarcommandstitlecommand helprS  z1 descriptionrP  z1 helpZ1alias1Z1alias2aliasesr|  r   zw helpr   r+  x helpr-  rS  z2 descriptionz2 helpr  r   Z123y helpr   r%  zz help)rS   r  rS  z3 descriptionz3 helprg  tzt helpur  zu helpr  rS  )r|  )r  )rg  )	rn   ru   r  add_subparsersrL  dict
add_parserr#  r$  )r   subparser_helpr   r\  rv   Zsubparsers_kwargs
subparsersZparser1_kwargsparser1Zparser2_kwargsparser2Zparser3_kwargsZparser3r   r   r   r     sX    



zTestAddSubparsers._get_parserc                    s&   t    |  | _| jdd| _d S )NT)rf  )r
   r%   r   rv   command_help_parserr   r   r   r   r%     s    

zTestAddSubparsers.setUpc                 C   s&   dD ]}|  }| | jj| qd S )N)r   r   za az0.5 az0.5 1z0.5 1 -yz0.5 2 -w)r   rL  rv   rh   )r   r   rF   r   r   r   test_parse_args_failures  s    z*TestAddSubparsers.test_parse_args_failuresc              	   C   s   |  | jd tddddd |  | jd tdd	d
ddgd |  | jd tddd dd |  | jd tdddg dd d S )N0.5 1 b -w 7Fr     r  rz   r   r=   r   z0.25 --foo 2 -y 2 3j -- -1jTr4  r  y              @y             )rz   r   r   r   z--foo 0.125 1 cr5  r  z-1.5 3 11 -- a --foo 7 -- br#     )r   r   rb  --r  )rz   r   r`  ra  )r   rv   rh   r   rJ   r   r   r   r   test_parse_args  s     z!TestAddSubparsers.test_parse_argsc              	   C   s   |  | jd tdddddg f |  | jd tddddddgf |  | jd	 tddddddgf |  | jd
 tdddddddgf |  | jd tdddddg df d S )Nrl  Fr  rm  r  rn  z0.5 -p 1 b -w 7z-pz0.5 1 b -w 7 -pz0.5 1 b -q -rs -w 7z-qz-rsz0.5 -W 1 b -X Y -w 7 Z)z-Wz-Xr  r  )r   rv   parse_known_argsr   rJ   r   r   r   r   test_parse_known_args'  s(    z'TestAddSubparsers.test_parse_known_argsc                 C   sX   t  }|jddd |jdd}|d}|d | tddd	d
|d  d S )Nr   r   r   r   r   r|  r   Fr  r  r{  )rn   ru   rc  re  r   rJ   rh   r   )r   rv   rg  rh  r   r   r   	test_dest=  s    

zTestAddSubparsers.test_destc                 C   s,   | dg}| |jd | |j d d S )Nrunr   )rh   r   commandrL  )r   rv   retr   r   r   _test_required_subparsersF  s    z+TestAddSubparsers._test_required_subparsersc                 C   s0   t  }|jdd}d|_|d | | d S )Nrv  r   Tru  )rn   rc  r5  re  rx  r   rv   rg  r   r   r   &test_required_subparsers_via_attributeN  s
    
z8TestAddSubparsers.test_required_subparsers_via_attributec                 C   s,   t  }|jddd}|d | | d S )Nrv  Tr   r5  ru  )rn   rc  re  rx  ry  r   r   r   "test_required_subparsers_via_kwargU  s    
z4TestAddSubparsers.test_required_subparsers_via_kwargc                 C   s6   t  }|jdd}|d |d}| |j d S )Nrv  r   ru  r   rn   rc  re  rh   assertIsNonerv  r   rv   rg  rw  r   r   r    test_required_subparsers_default[  s
    

z2TestAddSubparsers.test_required_subparsers_defaultc                 C   sn   t  }|jdd}|d |d | t}|d W d    n1 sP0    Y  | |jjd d S )NTr5  rz   r   r   z8error: the following arguments are required: {foo,bar}
$	rn   rc  re  r   rY   rh   assertRegexrE  r]   r   rv   rg  excinfor   r   r   -test_required_subparsers_no_destination_errorc  s    

(z?TestAddSubparsers.test_required_subparsers_no_destination_errorc                 C   sn   t  }|jdd}|d |d | t}|d W d    n1 sP0    Y  | |jjd d S )NTr  rz   r   rO  zPerror: argument {foo,bar}: invalid choice: 'baz' \(choose from 'foo', 'bar'\)\n$r  r  r   r   r   3test_wrong_argument_subparsers_no_destination_erroro  s    

(zETestAddSubparsers.test_wrong_argument_subparsers_no_destination_errorc                 C   s8   t  }|jddd}|d |d}| |j d S )Nrv  Fr{  ru  r   r}  r  r   r   r   test_optional_subparsers{  s
    

z*TestAddSubparsers.test_optional_subparsersc                 C   s.   |  | j d |  | j td d S )N)usage: PROG [-h] [--foo] bar {1,2,3} ...
aJ              usage: PROG [-h] [--foo] bar {1,2,3} ...

            main description

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

            optional arguments:
              -h, --help  show this help message and exit
              --foo       foo help
            )r   rv   format_usageformat_helptextwrapdedentr   r   r   r   	test_help  s    zTestAddSubparsers.test_helpc                 C   s6   | j dd}| | d | | td d S )Nz+:-r  z)usage: PROG [-h] [++foo] bar {1,2,3} ...
aJ              usage: PROG [-h] [++foo] bar {1,2,3} ...

            main description

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

            optional arguments:
              -h, --help  show this help message and exit
              ++foo       foo help
            r   r   r  r  r  r  rE  r   r   r   test_help_extra_prefix_chars  s
    
z.TestAddSubparsers.test_help_extra_prefix_charsc                 C   s6   t ddd}|jdddd | | td d S )	NrM  rN  rT  z--non-breakingr<  uR   help message containing non-breaking spaces shall not wrap at non-breaking spacesrR  uB              usage: PROG [-h] [--non-breaking]

            main description

            optional arguments:
              -h, --help      show this help message and exit
              --non-breaking  help message containing non-breaking spaces shall not
                              wrap at non-breaking spaces
        rn   ru   r   r  r  r  rE  r   r   r   test_help_non_breaking_spaces  s    z/TestAddSubparsers.test_help_non_breaking_spacesc                 C   sf   t ddd}|jddd | | td t ddd}|jdg dd	 | | td
 d S )NrM  rN  rT  rz   z    rS  z            usage: PROG [-h] foo

            main description

            positional arguments:
              foo         

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

            main description

            positional arguments:
              {}          

            optional arguments:
              -h, --help  show this help message and exit
        r  rE  r   r   r   test_help_blank  s     z!TestAddSubparsers.test_help_blankc                 C   s6   | j dd}| | d | | td d S )Nr   r  z)usage: PROG [+h] [++foo] bar {1,2,3} ...
aJ              usage: PROG [+h] [++foo] bar {1,2,3} ...

            main description

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

            optional arguments:
              +h, ++help  show this help message and exit
              ++foo       foo help
            r  rE  r   r   r    test_help_alternate_prefix_chars  s
    
z2TestAddSubparsers.test_help_alternate_prefix_charsc                 C   s.   |  | j d |  | j td d S )Nr  a              usage: PROG [-h] [--foo] bar {1,2,3} ...

            main description

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

            optional arguments:
              -h, --help  show this help message and exit
              --foo       foo help
            )r   rj  r  r  r  r  r   r   r   r   test_parser_command_help  s    z*TestAddSubparsers.test_parser_command_helpc                 C   sx   t ddd}|jdddd |jdd	d
 |jdddd}|d}|d}| | d | | td d S )NrM  rN  rT  r   r   rQ  rR  r   rU  r  subcommandsrZ  zadditional text)rY  rP  rS  r|  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
            )	rn   ru   rc  re  r   r  r  r  r  )r   rv   rg  rh  ri  r   r   r   test_subparser_title_help	  s    


z+TestAddSubparsers.test_subparser_title_helpc                 C   sN   |  t }| j|  W d    n1 s00    Y  | ||jj d S r'   )r   rY   rv   rh   r   r   rE  r\   )r   r   Zexpected_helprG  r   r   r   _test_subparser_help$	  s    .z&TestAddSubparsers._test_subparser_helpc                 C   s   |  dtd d S )Nz5.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  r   r   r   r   test_subparser1_help)	  s    z&TestAddSubparsers.test_subparser1_helpc                 C   s   |  dtd d S )Nz5.0 2 -ha              usage: PROG bar 2 [-h] [-y {1,2,3}] [z ...]

            2 description

            positional arguments:
              z           z help

            optional arguments:
              -h, --help  show this help message and exit
              -y {1,2,3}  y help
            r  r   r   r   r   test_subparser2_help7	  s    z&TestAddSubparsers.test_subparser2_helpc              	   C   s\   | j dd}| |d tddd ddg f | |d tddd ddg f d S )	NTr\  z0.5 1alias1 bFr  r  rn  z0.5 1alias2 b)r   r   rr  r   rJ   rE  r   r   r   test_alias_invocationE	  s    z'TestAddSubparsers.test_alias_invocationc                 C   s"   | j dd}| |jd  d S )NTr  z0.5 1alias3 b)r   rL  rh   r   rE  r   r   r   test_error_alias_invocationP	  s    z-TestAddSubparsers.test_error_alias_invocationc                 C   s.   | j ddd}d | _| | td d S )NT)r\  rf  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   ZmaxDiffr   r  r  r  rE  r   r   r   test_alias_helpU	  s    z!TestAddSubparsers.test_alias_help)FNF)r   r   r   rL  r   r%   rk  rq  rs  rt  rx  rz  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   rJ    s:     
7	&rJ  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestPositionalsGroupsc                 C   sZ   t  }|d |d}|d |d tdddd}|d	 }| || d S )
Nrz   r  r   r   r|  r  rg  r  1 2 3)rn   ru   r{   rJ   rh   r   r   r   rv   r|   expectedri   r   r   r   test_nongroup_firsts	  s    



z)TestPositionalsGroups.test_nongroup_firstc                 C   sZ   t  }|d}|d |d |d tdddd}|d	 }| || d S )
Nxxxrz   r   r   r|  r  rg  r  r  rn   r{   ru   rJ   rh   r   r   r  r   r   r   test_group_first}	  s    



z&TestPositionalsGroups.test_group_firstc                 C   sp   t  }|d}|d |d |d |d}|d tddd	d
d}|d }| || d S )Nr  rz   r   r   r   frellr|  r  rg  r  )rz   r   r   r  z1 2 3 4r  r  r   r   r   test_interleaved_groups	  s    





z-TestPositionalsGroups.test_interleaved_groupsN)r   r   r   r  r  r  r   r   r   r   r  p	  s   

r  c                       s   e Zd Zdd Z fddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Z  ZS )TestParentParsersc                 O   s   | j tg|R i | d S r'   rK  rH   r   r   r   rL  	  s    z+TestParentParsers.assertArgumentParserErrorc                    s   t    tdd| _| jd | jd}|d | jd tdd| _| jd | jd | jd	}|d
 tdd| _| jd tdd| _| jd tdd| _	| j	
 }|jddd |jddd tjtjd | _d S )NFr   z--wr   r   r   r   rU  r  z--dr  r   r   r   )r
   r%   rn   wxyz_parentru   r{   abcd_parentw_parentz_parentab_mutex_parentadd_mutually_exclusive_groupr+   r2   basenamera   r   main_program)r   Zx_groupc_groupr|   r   r   r   r%   	  s(    



zTestParentParsers.setUpc                 C   s2   t | jgd}| |d tdddd d S )Nparentsz-y 1 2 --w 3rg  r|  r  r=   r   r   )rn   r  r   rh   r   rJ   rE  r   r   r   test_single_parent	  s    z$TestParentParsers.test_single_parentc                 C   s,   |  | jj t| jgd}|  |j d S Nr  )_test_mutex_abr  rh   rn   rE  r   r   r   test_single_parent_mutex	  s    z*TestParentParsers.test_single_parent_mutexc                 C   s0   | j g}td|d}t|gd}| |j d S )NF)r   r  r  )r  rn   r  rh   r   r  rv   r   r   r   test_single_granparent_mutex	  s    z.TestParentParsers.test_single_granparent_mutexc                 C   s   |  |g tddd |  |dgtddd |  |dgtddd | |ddg | |ddg | |dg | |ddg | |ddg d S )NFr   r  r  TrU  rW  )r   rJ   rL  )r   rh   r   r   r   r  	  s    z TestParentParsers._test_mutex_abc                 C   s@   | j | jg}t|d}| |d tdd ddd dd d S )Nr  z--d 1 --w 2 3 4rg  r|  r  r  )r   r  r  r=   r   r   )r  r  rn   r   rh   r   rJ   r  r   r   r   test_multiple_parents	  s
    
z'TestParentParsers.test_multiple_parentsc              
   C   sb   | j | jg}t|d}| |d tdddd dd | |jd  | |jd	  d S )
Nr  z
-a --w 2 3TFr  rg  )r   r  r=   r   r   z-a --w 2 3 -bz-a -b --w 2 3)r  r  rn   r   rh   r   rJ   rL  r  r   r   r   test_multiple_parents_mutex	  s    


z-TestParentParsers.test_multiple_parents_mutexc                 C   s    | j tjtj| j| jgd d S r  )r   rA  ArgumentErrorrB  r  r  r   r   r   r   test_conflicting_parents	  s
    
z*TestParentParsers.test_conflicting_parentsc                 C   s    | j tjtj| j| jgd d S r  )r   rA  r  rB  r  r  r   r   r   r   test_conflicting_parents_mutex	  s
    
z0TestParentParsers.test_conflicting_parents_mutexc                 C   s:   | j | jg}t|d}| |d td d dd d S )Nr  r{  r  r  )r  r  rn   r   rh   r   rJ   r  r   r   r   test_same_argument_name_parents	  s
    
z1TestParentParsers.test_same_argument_name_parentsc              	   C   sP   t  }| }|jd| jgd}|d | |d tddddd	 d S )
Nr   r  rl   zbar -b 1 --d 2 3 4rg  r|  r  r  )r   r  r  rl   )	rn   rc  re  r  ru   r   rh   r   rJ   )r   rv   rg  Zabcde_parserr   r   r   test_subparser_parents	  s    
z(TestParentParsers.test_subparser_parentsc                 C   s   t  }| }| jg}|jd|d}|d}|d | j| jg}|jd|d}|d | |d	 t
dd	d
d | |d	 t
d	ddd dd
d | |jd	  | |jd	  d S )Nrz   r  r  r  r   rl   zfoo -a 4TFr  r  zbar -b  --w 2 3 4r  rg  )r   r  r=   r   r   rl   zfoo -a -b 4zbar -b -a 4)rn   rc  r  re  r{   ru   r  r   rh   r   rJ   rL  )r   rv   rg  r  Z
abc_parserr  Zwxyzabe_parserr   r   r   test_subparser_parents_mutex	  s*    




z.TestParentParsers.test_subparser_parents_mutexc              	   C   sJ   | j | jg}t|d}| }| j}| |td||r<dnd d S )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  rn   r  r  r   r  r  format)r   r  rv   parser_helpprognamer   r   r   test_parent_help
  s    
z"TestParentParsers.test_parent_helpc              	   C   s   t dd}|jddd}|d |d | }|d |d	 t |gd
}| t|jg d | }| j}| 	|t
d||rdnd d S )NFr  r  gdrY  rP  r   r   r   r   r  )r   r  r   r  a	              usage: {}{}[-h] [-w W] [-x X] [-y Y | -z Z]

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

            g:
              gd

              -w W
              -x X
        r  r   )rn   r{   ru   r  r   rY   rh   r  r  r   r  r  r  )r   parentr  r  rv   r  r  r   r   r   test_groups_parents(
  s     





z%TestParentParsers.test_groups_parents)r   r   r   rL  r%   r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   r  	  s   

r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
 TestMutuallyExclusiveGroupErrorsc                 C   s    t  }| j}|t|jdd d S )Nrz   )rY  )rn   r   r   r  )r   rv   raisesr   r   r   test_invalid_add_argument_groupL
  s    z@TestMutuallyExclusiveGroupErrors.test_invalid_add_argument_groupc                 C   sl   t  }| }|j}| j}|t|ddd |t|d |t|ddd |t|ddd |t|dtjd d S )Nr   Tr  r   r)  r  r  )rn   r  ru   r   r  rA  PARSER)r   rv   r|   ru   r  r   r   r   test_invalid_add_argumentQ
  s    z:TestMutuallyExclusiveGroupErrors.test_invalid_add_argumentc                 C   sp   t dd}| }|jddd |jddd | }|jddd |jd	dd d
}| | t| d S )NrM  rO  r   r   r   r   r<  z--soupz--nutsz            usage: PROG [-h] [--foo | --bar] [--soup | --nuts]

            optional arguments:
              -h, --help  show this help message and exit
              --foo
              --bar
              --soup
              --nuts
              )rn   r  ru   r   r  r  r  )r   rv   Zgroup1group2r  r   r   r   r  \
  s    

z*TestMutuallyExclusiveGroupErrors.test_helpc                 C   sJ   t  }| }| t |dg W d    n1 s<0    Y  d S )Nr   )rA  rB  r  r   r  rh   r   rv   r|   r   r   r   test_empty_groupp
  s    z1TestMutuallyExclusiveGroupErrors.test_empty_groupN)r   r   r   r  r  r  r  r   r   r   r   r  J
  s   r  c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )MEMixinc                 C   s4   | j ddj}t}| jD ]}| |||  qd S NFr  
get_parserrh   rY   r   r   r   r   rh   rp   args_stringr   r   r   test_failures_when_not_requiredy
  s    
z'MEMixin.test_failures_when_not_requiredc                 C   s:   | j ddj}t}| jdg D ]}| |||  qd S )NTr  r   r  r  r   r   r   test_failures_when_required
  s    z#MEMixin.test_failures_when_requiredc                 C   sD   | j ddj}| j| j }|D ] \}}|| }| || qd S r  )r  rh   r   successes_when_not_requiredr   r   )r   rh   r   r  r   	actual_nsr   r   r    test_successes_when_not_required
  s
    z(MEMixin.test_successes_when_not_requiredc                 C   s:   | j ddj}| jD ] \}}|| }| || qd S NTr  )r  rh   r   r   r   )r   rh   r  r   r  r   r   r   test_successes_when_required
  s    z$MEMixin.test_successes_when_requiredc                 C   s,   | j ddj}| j}| | t| d S r  )r  r  usage_when_not_requiredr   r  r  r   r  Zexpected_usager   r   r   test_usage_when_not_required
  s    z$MEMixin.test_usage_when_not_requiredc                 C   s,   | j ddj}| j}| | t| d S r  )r  r  usage_when_requiredr   r  r  r  r   r   r   test_usage_when_required
  s    z MEMixin.test_usage_when_requiredc                 C   s2   | j ddj}| j| j }| | t| d S r  )r  r  r  rS  r   r  r  r   r  rS  r   r   r   test_help_when_not_required
  s    z#MEMixin.test_help_when_not_requiredc                 C   s2   | j ddj}| j| j }| | t| d S r  )r  r  r  rS  r   r  r  r  r   r   r   test_help_when_required
  s    zMEMixin.test_help_when_requiredN)r   r   r   r  r  r  r  r  r  r  r  r   r   r   r   r  w
  s   r  c                   @   sx   e Zd ZdddZddgZdedddfd	ed
ddfdedddfdedd
dfgZdedddfgZdZdZ	dZ
dS )TestMutuallyExclusiveSimpleNc                 C   s:   t dd}|j|d}|jddd |jddd	d
d |S )NrM  r  r  r   rU  r  r  r  r  baz help)r  r   rS  rn   r  ru   r   r5  rv   r|   r   r   r   r  
  s
    
z&TestMutuallyExclusiveSimple.get_parser--bar X --baz Yz--bar X --baz--bar Xr   r   r   z--bar X --bar Zr  --baz Yr  r  r   z;        usage: PROG [-h] [--bar BAR | --baz [BAZ]]
        z;        usage: PROG [-h] (--bar BAR | --baz [BAZ])
        z
        optional arguments:
          -h, --help   show this help message and exit
          --bar BAR    bar help
          --baz [BAZ]  baz help
        )Nr   r   r   r  r   rJ   r   r  r  r  rS  r   r   r   r   r  
  s   
r  c                
   @   s   e Zd ZdddZdgZdedddddfded	ddddfd
edddddfdedd	dddfgZdedddddfgZdZdZ	dZ
dS )TestMutuallyExclusiveLongNc                 C   sR   t dd}|jddd |jddd |j|d}|jd	d
d |jddd |S )NrM  r  z--abcdez
abcde helpr  z--fghijz
fghij helpr  z--klmnoz
klmno helpz--pqrstz
pqrst helprn   ru   r  r  r   r   r   r  
  s    
z$TestMutuallyExclusiveLong.get_parserz--klmno X --pqrst Yz	--klmno Xr   )ZabcdeZfghijZklmnoZpqrstz--abcde Y --klmno Xr  z	--pqrst Xz--pqrst X --fghij Yr   zi    usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ]
                [--klmno KLMNO | --pqrst PQRST]
    zi    usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ]
                (--klmno KLMNO | --pqrst PQRST)
    z
    optional arguments:
      -h, --help     show this help message and exit
      --abcde ABCDE  abcde help
      --fghij FGHIJ  fghij help
      --klmno KLMNO  klmno help
      --pqrst PQRST  pqrst help
    )Nr  r   r   r   r   r  
  s    
		r  c                   @   sf   e Zd Zdd ZdgZdedddfded	ddfd
edddfgZdedddfgZdZdZ	dZ
dS )$TestMutuallyExclusiveFirstSuppressedc                 C   s:   t dd}|j|d}|jdtjd |jdddd	 |S )
NrM  r  r  r   r  r   r<  r_  rR  rn   r  ru   rA  r  r  r   r   r   r  
  s
    
z/TestMutuallyExclusiveFirstSuppressed.get_parserz-x X -yz-x Xr   Tr  z	-x X -x Yr  r   NFr   z&        usage: PROG [-h] [-y]
        z$        usage: PROG [-h] -y
        zx
        optional arguments:
          -h, --help  show this help message and exit
          -y          y help
        r  r   r   r   r   r  
  s   r  c                	   @   s   e Zd Zdd Zg dZdeddddfded	d	ddfd
ed	dddfdeddddfgZded	dddfgZd ZZ	dZ
dS )#TestMutuallyExclusiveManySuppressedc                 C   sN   t dd}|j|d}|j}|ddtjd |ddtjd |d	tjd
 |S )NrM  r  r  --spamr   rR  r   r<  z	--bladderr  r  )r   r5  rv   r|   r
  r   r   r   r    s    
z.TestMutuallyExclusiveManySuppressed.get_parser)z--spam --badgerz--badger --bladder Bz--bladder B --spamr  TN)r  r   Zbladderr   Fz--bladder Br   z--spam --spamr   z!        usage: PROG [-h]
        [
        optional arguments:
          -h, --help  show this help message and exit
        r   r   r   r  r   rJ   r   r  r  r  rS  r   r   r   r   r    s   	r  c                	   @   s   e Zd Zdd Zg dZdeddddfd	ed
dddfded
ddgdfded
dg ddfgZded
dddfgZdZdZ	dZ
dS )*TestMutuallyExclusiveOptionalAndPositionalc                 C   sJ   t dd}|j|d}|jdddd |jdd	d
 |jddddd |S )NrM  r  r  r   r   FOOrR  r  SPAMr  r   r%  r   BADGERr  r
  rS  r  r  r   r   r   r  <  s    
z5TestMutuallyExclusiveOptionalAndPositional.get_parser)z--foo --spam Sz
--spam S XzX --foozX Y Z --spam Sz	--foo X Yr   TNr   )rz   r  r   z--spam SFSzX Y Z)r   r  r  r   zD        usage: PROG [-h] [--foo | --spam SPAM | badger ...]
        zD        usage: PROG [-h] (--foo | --spam SPAM | badger ...)
        z
        positional arguments:
          badger       BADGER

        optional arguments:
          -h, --help   show this help message and exit
          --foo        FOO
          --spam SPAM  SPAM
        r  r   r   r   r   r   :  s   r   c                   @   s   e Zd Zdd Zg dZdeddddddfdeddddddfd	eddddddfd
eddddddfdeddddddfdeddddddfgZdeddddddfdeddddddfdeddddddfgZd ZZ	dZ
dS )#TestMutuallyExclusiveOptionalsMixedc                 C   sj   t dd}|jdddd |j|d}|jddd	d |jd
ddd |jdddd |jdddd |S )NrM  r  r   r   r]  rR  r  r  a helprU  b helpr   r_  rW  c helpr  r  r   r   r   r  i  s    
z.TestMutuallyExclusiveOptionalsMixed.get_parser)z-a -b-b -cz-a -cz-a -b -cr  TFr   r  r  r   r   rU  rW  z-a -xz-y -bz-x -y -cr   r   r   z:        usage: PROG [-h] [-x] [-a] [-b] [-y] [-c]
        z
        optional arguments:
          -h, --help  show this help message and exit
          -x          x help
          -a          a help
          -b          b help
          -y          y help
          -c          c help
        Nr  r   r   r   r   r  g  s   
	r  c                   @   s\   e Zd ZdddZddgZdedddfd	edd
dfgZdedddfgZdZdZ	dZ
dS )TestMutuallyExclusiveInGroupNc                 C   sD   t dd}|jddd}|j|d}|jddd	 |jd
dd	 |S )NrM  r  zTitled groupzGroup descriptionr  r  r   rU  r  r  r  )rn   r{   r  ru   )r   r5  rv   Ztitled_groupmutex_groupr   r   r   r    s    

z'TestMutuallyExclusiveInGroup.get_parserr  z--baz X --bar Yr  r   r  r  r  r   z9        usage: PROG [-h] [--bar BAR | --baz BAZ]
        z9        usage: PROG [-h] (--bar BAR | --baz BAZ)
        z
        optional arguments:
          -h, --help  show this help message and exit

        Titled group:
          Group description

          --bar BAR   bar help
          --baz BAZ   baz help
        )Nr  r   r   r   r   r    s   

r  c                   @   s   e Zd Zdd Zg dZdeddddddfd	ed
dddddfded
dddddfdeddddddfded
dddddfgZded
dddddfded
dddddfgZd ZZ	dZ
d
S )1TestMutuallyExclusiveOptionalsAndPositionalsMixedc                 C   sh   t dd}|jddd |jdddd	 |j|d
}|jdddd |jdddd	 |jdddd	 |S )NrM  r  r   r]  r  r   r   r_  rR  r  r   r  r  rb  rU  r  rW  r	  r  r  r   r   r   r    s    
z<TestMutuallyExclusiveOptionalsAndPositionalsMixed.get_parser)zX A -br
  z-c X AzX Ar  Fr   r  zX -bNTzX -czX A -yzX -y -bzX -yz6        usage: PROG [-h] [-y] [-b] [-c] x [a]
        a  
        positional arguments:
          x           x help
          a           a help

        optional arguments:
          -h, --help  show this help message and exit
          -y          y help
          -b          b help
          -c          c help
        r  r   r   r   r   r    s   
r  c                   @   s0   e Zd Zdd ZdZdZdZdZdZdZ	dZ
dS )TestMutuallyExclusiveNestedc                 C   sn   t dd}|j|d}|d |d |j|d}|d |d |j|d}|d |d	 |S )
NrM  r  r  r  rU  rW  z-dz-er   r  )r   r5  rv   r|   r  Zgroup3r   r   r   r    s    






z&TestMutuallyExclusiveNested.get_parserzO        usage: PROG [-h] [-a A | -b B | [-c C | -d D | [-e E | -f F]]]
        zO        usage: PROG [-h] (-a A | -b B | (-c C | -d D | (-e E | -f F)))
        z
        optional arguments:
          -h, --help  show this help message and exit
          -a A
          -b B
          -c C
          -d D
          -e E
          -f F
        N)r   r   r   r  r  r  rS  r  r  r  r  r   r   r   r   r    s   r  c                       s   e Zd Zd fdd	Z  ZS )MEPBaseNc                    s(   t t| j|d}t|jd|gd}|S )Nr  F)rO  r   r  )r
   r  r  rn   rO  )r   r5  r  rv   r   r   r   r    s
    
zMEPBase.get_parser)N)r   r   r   r  r   r   r   r   r   r    s   r  c                   @   s   e Zd ZdS )&TestMutuallyExclusiveGroupErrorsParentNr   r   r   r   r   r   r   r    s   r  c                   @   s   e Zd ZdS )!TestMutuallyExclusiveSimpleParentNr  r   r   r   r   r    s   r  c                   @   s   e Zd ZdS )TestMutuallyExclusiveLongParentNr  r   r   r   r   r  !  s   r  c                   @   s   e Zd ZdS )*TestMutuallyExclusiveFirstSuppressedParentNr  r   r   r   r   r  &  s   r  c                   @   s   e Zd ZdS ))TestMutuallyExclusiveManySuppressedParentNr  r   r   r   r   r  +  s   r  c                   @   s   e Zd ZdS )0TestMutuallyExclusiveOptionalAndPositionalParentNr  r   r   r   r   r  0  s   r  c                   @   s   e Zd ZdS ))TestMutuallyExclusiveOptionalsMixedParentNr  r   r   r   r   r  5  s   r  c                   @   s   e Zd ZdS )7TestMutuallyExclusiveOptionalsAndPositionalsMixedParentNr  r   r   r   r   r  :  s   r  c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestSetDefaultsc              
   C   s   t  }|jdd |jddd | tdddd|g  | tdddd|g t  | tdddd|g tdd | tdddd|g tddd	 d S )
Nrz   r   r   r  )r   r   r   r   r!  )r   r   rn   set_defaultsr   rJ   rh   rE  r   r   r   test_set_defaults_no_argsD  s    z)TestSetDefaults.test_set_defaults_no_argsc              	   C   s   t  }|jddd |jddd | tddd|g  | tddd|g t  | tddd|g tdd | td	dd|d
  | td	dd|d
 t  | td	dd|d
 tdd d S )Nrz   r   r  r   Zxfooxr	  r   r   r|  r6  )rn   r  ru   r   rJ   rh   r   rE  r   r   r   test_set_defaults_with_argsQ  s*    z+TestSetDefaults.test_set_defaults_with_argsc                 C   sR   t  }|jdd | }|d}|jdd | tddd|d  d S )Nrz   r   r   r   r:  r  )rn   r  rc  re  r   rJ   rh   r   )r   rv   rg  Zparser_ar   r   r   test_set_defaults_subparsersb  s    
z,TestSetDefaults.test_set_defaults_subparsersc                 C   s>   t dd}|jdd t |gd}| tdd|g  d S )NFr  rz   r   r  r  )r   r  rv   r   r   r   test_set_defaults_parentsk  s    
z)TestSetDefaults.test_set_defaults_parentsc                 C   sL   t  }| d}|jdd |jdd | tdd|dg d S )Nr   r  r   r!  )rA  rB  rc  re  r  r   rJ   rh   )r   rv   Zxparserr   r   r   )test_set_defaults_on_parent_and_subparserq  s
    z9TestSetDefaults.test_set_defaults_on_parent_and_subparserc                 C   s   t  }|jddddd |d |jddd	 |jd
dd |jdddd | tddddd|g  |jddddd | tddddd|g  d S )NWr   r  r  r   r   r   XXr	  r   r  r  r   ZZr  WWYY)rn   r  ru   r   rJ   rh   rE  r   r   r   &test_set_defaults_same_as_add_argumentx  s    
z6TestSetDefaults.test_set_defaults_same_as_add_argumentc                 C   s   t  }|jddddd |d}|d |jdd	d
 |jddd |jdddd | tdd	ddd|g  |jddddd | tddddd|g  d S )Nr"  r   r  r  r   rz   r   r   r#  r	  r   r  r  r   r$  r  r%  r&  )rn   r  r{   ru   r   rJ   rh   r  r   r   r   ,test_set_defaults_same_as_add_argument_group  s    

z<TestSetDefaults.test_set_defaults_same_as_add_argument_groupN)
r   r   r   r  r  r  r   r!  r'  r(  r   r   r   r   r  B  s   	r  c                   @   s   e Zd Zdd ZdS )TestGetDefaultc                 C   s   t  }| |d | |d |d | |d | |d |jdtdd | |d | d|d |jdd | d|d | d|d d S )	Nrz   r   r   r   r   r  r   r   )rn   r~  get_defaultru   r#  r   r  rE  r   r   r   test_get_default  s    
zTestGetDefault.test_get_defaultN)r   r   r   r+  r   r   r   r   r)    s   r)  c                   @   s   e Zd Zdd Zdd ZdS )TestNamespaceContainsSimplec                 C   s$   t  }| d| | d| d S )Nr   r   )rA  	NamespaceassertNotInr   nsr   r   r   
test_empty  s    z&TestNamespaceContainsSimple.test_emptyc                 C   sN   t jddd}| d| | d| | d| | d| | d| d S )	Nr  r!  r  r   r   r   xxr   )rA  r-  r.  rD  r/  r   r   r   test_non_empty  s    z*TestNamespaceContainsSimple.test_non_emptyN)r   r   r   r1  r3  r   r   r   r   r,    s   r,  c                   @   s   e Zd Zdd ZdS )TestHelpFormattingMetaclassc                 C   s:   |dkrd S G dd dt }dD ]\}}|| || q d S )NHelpTestCasec                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )z6TestHelpFormattingMetaclass.__init__.<locals>.AddTestsc              	   S   sj   || _ || _| j| j| jfD ]H}d|j|f }|fdd}z
||_W n tyV   Y n0 t||| qd S )Nz%s_%sc                 S   s   ||  d S r'   r   r   r   r   r   test_wrapper  s    zUTestHelpFormattingMetaclass.__init__.<locals>.AddTests.__init__.<locals>.test_wrapper)func_suffixstd_nametest_format
test_printtest_print_filer   r   rd   )r   Z
test_classr7  r8  r   r   r6  r   r   r   r     s    
z?TestHelpFormattingMetaclass.__init__.<locals>.AddTests.__init__c                 S   s   t j|jji |jj}t|dg D ]}|j|ji |j q$t|dg }|D ]:\}}|j|ji |j}|D ]}|j|ji |j qnqNt|dg }|r| }	|D ]}
|	j	|
ji |
j q|S )Nrw   argument_group_signaturessubparsers_signatures)
rA  rB  rs   rF   rG   rc   ru   r{   rc  re  )r   r   rv   Zargument_sigZ
group_sigsZ	group_sigZargument_sigsr|   Zsubparsers_sigsrg  Zsubparser_sigr   r   r   r     s4    




zBTestHelpFormattingMetaclass.__init__.<locals>.AddTests._get_parserc                 S   s&   t || j}t|}||| d S r'   )rc   r7  r  r  r   )r   r   parser_textZexpected_textr   r   r   _test  s    
z<TestHelpFormattingMetaclass.__init__.<locals>.AddTests._testc                 S   s,   |  |}t|d| j }| ||  d S )Nz	format_%s)r   rc   r7  r?  )r   r   rv   r  r   r   r   r9    s    
zBTestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_formatc              
   S   s   |  |}t|d| j }tt| j}tt| jt  z(|  tt| j }W tt| j| ntt| j| 0 | || d S Nzprint_%s)	r   rc   r7  ra   r8  rd   r   r   r?  )r   r   rv   print_Z
old_streamr>  r   r   r   r:    s    
 zATestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_printc                 S   s@   |  |}t|d| j }t }|| | }| || d S r@  )r   rc   r7  r   r   r?  )r   r   rv   rA  Zsfiler>  r   r   r   r;    s    
zFTestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_print_fileN)	r   r   r   r   r   r?  r9  r:  r;  r   r   r   r   r     s   r   ))usager\   )rS  r\   )r   )r   r;   r   r   r   r7  r8  r   r   r   r     s
    Hz$TestHelpFormattingMetaclass.__init__NrI   r   r   r   r   r4    s   r4  r5  c                   @   sj   e Zd ZeddddZeddddd	ed
dddedddedddedddgZg ZdZed ZdZ	dS )TestHelpBiggerOptionalsrM  DESCRIPTIONEPILOGrO  rP  epilogr   r  r  0.1r  r   r   X HELPrR  --yY HELPr  rz   FOO HELPr   BAR HELPz;        usage: PROG [-h] [-v] [-x] [--y Y] foo bar
        ab  
        DESCRIPTION

        positional arguments:
          foo            FOO HELP
          bar            BAR HELP

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

        EPILOG
            0.1
        N
r   r   r   rE   rs   rw   r<  rB  rS  r  r   r   r   r   rC     s   


rC  c                   @   s8   e Zd Zdd ZejZejZejZdZed Z	ej
Z
dS )TestShortColumnsc                 C   s$   t  }|dd | |j d S )Nr   r  )r   r    r  r!   r"   r#   r   r   r   r%   J  s    zTestShortColumns.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)r   r   r   r%   rC  rs   rw   r<  rB  rS  r  r   r   r   r   rP  D  s   	rP  c                   @   s   e Zd ZeddddZeddddd	ed
dddedddedddedddgZedddedddeddddgfgZdZed Zd Z	d!S )"TestHelpBiggerOptionalGroupsrM  rD  rE  rF  r   r  r  rH  r  r   r   rI  rR  rJ  rK  r  rz   rL  r   rM  zGROUP TITLEzGROUP DESCRIPTIONr[  r   zBAZ HELPr   r)  zZ HELPrb  zN        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
    rN  NrO  r   r   r   r   rQ  {  s"   




rQ  c                   @   sZ   e Zd ZedddZeddddedd	d
eddd
eddd
gZg ZdZed ZdZ	dS )TestHelpBiggerPositionalsUSAGErD  rB  rP  r   r   rI  rR  rJ  rK  r  ZekiekiekifekangzEKI HELPr   rM          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   NrO  r   r   r   r   rR    s   


rR  c                   @   sb   e Zd ZedddZeddddedd	d
dgZedddeddddgfgZdZed ZdZ	dS )TestHelpReformattingrM  ze   oddly    formatted
description

that is so long that it should go onto multiple lines when wrappedrT  r   r#  zoddly
    formatted -x helprW  rS  r   r   znormal y helprY  z'
    oddly formatted group

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

        positional arguments:
          yyy         normal y help

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

        title:
          oddly formatted group description

          -a          oddly formatted -a help again, so long that it should be wrapped
                      over multiple lines
        r   NrO  r   r   r   r   rV    s    
rV  c                   @   s^   e Zd ZedddZeddddedd	d
dgZededdddgfgZdZed ZdZ	dS )TestHelpWrappingShortNamesrM  zZD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DrT  r   r#  zxXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXrW  r   r   dYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHALPHASr  r   zPAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHArR  rX  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   NrO  r   r   r   r   rY    s   rY  c                   @   sx   e Zd ZedddZeddddded	d
ddeddddgZededdddeddddgfgZdZed ZdZ	dS )TestHelpWrappingLongNamesrS  zZD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DrT  r   r  r  zZV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV Vr  r   XXXXXXXXXXXXXXXXXXXXXXXXXzdXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHrW  r   ZyyyyyyyyyyyyyyyyyyyyyyyyyrZ  r[  r  ZAAAAAAAAAAAAAAAAAAAAAAAAAzdAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHr   ZzzzzzzzzzzzzzzzzzzzzzzzzzzdZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHrU  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
        NrO  r   r   r   r   r\  %  s   r\  c                   @   s   e Zd ZeddZeddddeddd	ded
d
deddddeddddeddejdedddejdedddejdedejejddg	Zeded dd!ded"d#d$ded%d%dded&d&ddgfgZ	d'Z
e
d( Zd)Zd*S )+TestHelpUsagerM  r  r   r)  r=   rb  r   r%  r   r   r  r  r!  )rS  r  r  r  r   zWhether to foo)rS  r   r   zWhether to barT)rS  r
  r   r   z--foobarz--barfoor   z--bazzzBazz!)r   r
  rS  r|   r   r   r   r  r   r  rl   a/          usage: PROG [-h] [-w W [W ...]] [-x [X ...]] [--foo | --no-foo]
                    [--bar | --no-bar]
                    [-f | --foobar | --no-foobar | --barfoo | --no-barfoo]
                    [--bazz | --no-bazz] [-y [Y]] [-z Z Z Z]
                    a b b [c] [d ...] e [e ...]
        a  
        positional arguments:
          a                     a
          b                     b
          c                     c

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

        group:
          -y [Y]                y
          -z Z Z Z              z
          d                     d
          e                     e
        r   N)r   r   r   rE   rs   rA  rC  r  rw   r<  rB  rS  r  r   r   r   r   r^  [  s2   

r^  c                   @   sl   e Zd ZedddZg Zededddedddgfed	ed
d
dedddgfgZdZed ZdZ	dS )TestHelpOnlyUserGroupsrM  FrO  r   Zxxxxr   r   r  r   Zyyyyr  r   r   z.        usage: PROG [-x X] [-y Y] a b
        zn
        xxxx:
          -x X  x
          a     a

        yyyy:
          b     b
          -y Y  y
        r   NrO  r   r   r   r   r_    s   





r_  c                   @   sN   e Zd ZeddZedddedddeded	gZg Zd
Zed ZdZ	dS )TestHelpUsageLongProg<PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPr  r   r"  rW  r   r   r   r  zz        usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               [-h] [-w W] [-x X] a b
        z
        positional arguments:
          a
          b

        optional arguments:
          -h, --help  show this help message and exit
          -w W
          -x X
        r   NrO  r   r   r   r   ra    s   


ra  c                   @   sb   e Zd ZeddZedddedddedd	ded
ddededgZg ZdZed ZdZ	dS ) TestHelpUsageLongProgOptionsWraprb  r  r   WWWWWWWWWWWWWWWWWWWWWWWWWrc  r   r]  r   YYYYYYYYYYYYYYYYYYYYYYYYYr   ZZZZZZZZZZZZZZZZZZZZZZZZZr   r  a          usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] [-x XXXXXXXXXXXXXXXXXXXXXXXXX]
               [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
               a b
        a8  
        positional arguments:
          a
          b

        optional arguments:
          -h, --help            show this help message and exit
          -w WWWWWWWWWWWWWWWWWWWWWWWWW
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        r   NrO  r   r   r   r   rd    s   




rd  c                   @   sB   e Zd ZedddZedededgZg ZdZed Zd	Z	d
S )$TestHelpUsageLongProgPositionalsWraprb  Fr`  aaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccz        usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
               ccccccccccccccccccccccccc
        
        positional arguments:
          aaaaaaaaaaaaaaaaaaaaaaaaa
          bbbbbbbbbbbbbbbbbbbbbbbbb
          ccccccccccccccccccccccccc
        r   NrO  r   r   r   r   rh    s   rh  c                   @   sh   e Zd ZeddZedddedddedd	ded
ddedededgZg ZdZed ZdZ	dS )TestHelpUsageOptionalsWraprM  r  r   re  rc  r   r]  r   rf  r   rg  r   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   NrO  r   r   r   r   rm    s   




	rm  c                   @   sR   e Zd ZeddZededededededgZg Zd	Zed
 ZdZ	dS )TestHelpUsagePositionalsWraprM  r  r   r   r   ri  rj  rk  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   NrO  r   r   r   r   rn  3  s   
rn  c                   @   s^   e Zd ZeddZedddedddedd	ded
ededgZg ZdZed ZdZ	dS )%TestHelpUsageOptionalsPositionalsWraprM  r  r   r]  rc  r   rf  r   rg  ri  rj  rk  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   NrO  r   r   r   r   ro  U  s   



ro  c                   @   sL   e Zd ZeddZedddedddedd	dgZg Zd
Zed ZdZ	dS )TestHelpUsageOptionalsOnlyWraprM  r  r   r]  rc  r   rf  r   rg  z        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   NrO  r   r   r   r   rp  y  s   



rp  c                   @   sB   e Zd ZedddZedededgZg ZdZed Zd	Z	d
S ) TestHelpUsagePositionalsOnlyWraprM  Fr`  ri  rj  rk  z~        usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
                    ccccccccccccccccccccccccc
        rl  r   NrO  r   r   r   r   rq    s   rq  c                
   @   s   e Zd ZeddZededdedddd	d
deddddeddddgdddedddeddddgZededd ded!d"d#dgfgZd$Zed% Z	d&Z
d'S )(TestHelpVariableExpansionrM  r  r   z"x %(prog)s %(default)s %(type)s %%rV  r   r   r   XXXz y %(prog)s %(default)s %(const)s)r   r
  r   rS  r   r+  z$foo %(prog)s %(default)s %(choices)sr^  r   r   r  r!  ZBBBz!bar %(prog)s %(default)s %(dest)s)r
  r-  rW  rS  r  zspam %(prog)s %(default)sr  r   r  zbadger %(prog)s %(default)s)r
  rS  r|   r  za %(prog)s %(default)srU  r  zb %(prog)s %(default)szw        usage: PROG [-h] [-x X] [-y] [--foo {a,b,c}] [--bar BBB] [-a A] [-b B]
                    spam badger
        a  
        positional arguments:
          spam           spam PROG None
          badger         badger PROG 0.5

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

        group:
          -a A           a PROG None
          -b B           b PROG -1
        r   N)r   r   r   rE   rs   r#  rw   r<  rB  rS  r  r   r   r   r   rr    s0   



rr  c                   @   s0   e Zd ZedddZg Zg ZdZed ZdZ	dS )&TestHelpVariableExpansionUsageSuppliedrM  z%(prog)s FOOrO  rB  z         usage: PROG FOO
        r  r   NrO  r   r   r   r   rt    s   rt  c                   @   s,   e Zd ZedddZg Zg ZdZeZdZ	dS )$TestHelpVariableExpansionNoArgumentsrM  Fr`  z        usage: PROG
        r   NrO  r   r   r   r   rv    s   rv  c                   @   sB   e Zd ZedejdZedddedddgZg ZdZ	d	Z
d	Zd
S )TestHelpSuppressUsagerM  ru  r   rQ  r  r  	spam helpz        positional arguments:
          spam        spam help

        optional arguments:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        r   N)r   r   r   rE   rA  r  rs   rw   r<  rS  rB  r  r   r   r   r   rw    s   

rw  c                   @   sF   e Zd ZedddZedejdedddgZg ZdZ	e	d	 Z
d
ZdS )TestHelpSuppressOptionalrM  Fr`  r   r  r  rx  z!        usage: PROG spam
        zA
        positional arguments:
          spam  spam help
        r   Nr   r   r   rE   rs   rA  r  rw   r<  rB  rS  r  r   r   r   r   ry    s   
ry  c                   @   sX   e Zd ZeddZedddedddgZeded	ejdgfgZd
Z	e	d Z
dZdS )TestHelpSuppressOptionalGrouprM  r  r   rQ  r  r  rx  r|   r   2        usage: PROG [-h] [--foo FOO] spam
        
        positional arguments:
          spam        spam help

        optional arguments:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        r   N)r   r   r   rE   rs   rw   rA  r  r<  rB  rS  r  r   r   r   r   r{     s   


	r{  c                   @   sD   e Zd ZeddZedddedejdgZg ZdZ	e	d Z
d	Zd
S )TestHelpSuppressPositionalrM  r  r   rQ  r  r  z-        usage: PROG [-h] [--foo FOO]
        z
        optional arguments:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        r   Nrz  r   r   r   r   r~  :  s   

r~  c                   @   s:   e Zd ZeddZeddddgZg ZdZed Zd	Z	d
S )TestHelpRequiredOptionalrM  r  r   TrQ  )r5  rS  z+        usage: PROG [-h] --foo FOO
        r  r   NrO  r   r   r   r   r  O  s   
r  c                   @   sJ   e Zd ZeddddZedddded	d
ddgZg ZdZed ZdZ	dS )TestHelpAlternatePrefixCharsrM  z^;F)rO  r   r   z^^foor   rQ  rR  z;bz;;barrU  r  z-        usage: PROG [^^foo] [;b BAR]
        zq
        optional arguments:
          ^^foo              foo help
          ;b BAR, ;;bar BAR  bar help
        r   NrO  r   r   r   r   r  c  s   r  c                   @   sD   e Zd ZedddZedddedddgZg Zd	Zed
 ZdZ	dS )TestHelpNoHelpOptionalrM  Fr`  r   rQ  r  r  rx  z-        usage: PROG [--foo FOO] spam
        z
        positional arguments:
          spam       spam help

        optional arguments:
          --foo FOO  foo help
        r   NrO  r   r   r   r   r  x  s   

r  c                   @   s:   e Zd ZeddZededgZg ZdZed ZdZ	dS )	TestHelpNonerM  r  r   r  r|  z
        positional arguments:
          spam

        optional arguments:
          -h, --help  show this help message and exit
          --foo FOO
        r   NrO  r   r   r   r   r    s   
	r  c                	   @   sf   e Zd ZeddZedddddedd	d
ddedddddedddddgZg ZdZed ZdZ	dS )TestHelpTupleMetavarrM  r  r   r=   r)  )ZW1ZW2)rS  r  rW  r   r   r%  )ZX1ZX2r   r   r  )ZY1ZY2ZY3r   r   r  )Z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   NrO  r   r   r   r   r    s   
	r  c                   @   s`   e Zd ZedejddZedddedddgZed	d
dedddgfgZdZ	e	d Z
dZdS )TestHelpRawTextrM  7Keep the formatting
    exactly as it is written

here
rO  formatter_classrP  r   z-    foo help should also
appear as given herer  r  rx  rY  ?    This text
  should be indented
    exactly like it is here
r[  r   rU  >        usage: PROG [-h] [--foo FOO] [--bar BAR] spam
        a  
        Keep the formatting
            exactly as it is written

        here

        positional arguments:
          spam        spam help

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

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

          --bar BAR   bar help
        r   N)r   r   r   rE   rA  RawTextHelpFormatterrs   rw   r<  rB  rS  r  r   r   r   r   r    s   


r  c                   @   s`   e Zd ZedejddZedddedddgZed	d
dedddgfgZdZ	e	d Z
dZdS )TestHelpRawDescriptionrM  r  r  r   z4  foo help should not
    retain this odd formattingr  r  rx  rY  r  r[  r   rU  r  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)r   r   r   rE   rA  RawDescriptionHelpFormatterrs   rw   r<  rB  rS  r  r   r   r   r   r    s   


r  c                   @   s   e Zd ZedejddZedddeddd	d
edejdddeddddedddedddddgZedddede	dddgfgZ
dZed  Zd!Zd"S )#TestHelpArgumentDefaultsrM  rP  r  r   z)foo help - oh and by the way, %(default)sr  r   r   rU  rR  z--tazzWhether to taz itT)r   rS  r
  z--quuxzSet the quuxr   )rS  r
  r  rx  r   r  Zwoodenzbadger helpr  rY  r[  r  r  )rS   r
  rS  z        usage: PROG [-h] [--foo FOO] [--bar] [--taz | --no-taz] [--quux QUUX]
                    [--baz BAZ]
                    spam [badger]
        a1  
        description

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

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

        title:
          description

          --baz BAZ        baz help (default: 42)
        r   N)r   r   r   rE   rA  ArgumentDefaultsHelpFormatterrs   rC  rw   r#  r<  rB  rS  r  r   r   r   r   r  #  s(   



r  c                   @   s>   e Zd ZedddZedddddgZg Zd	Zed
 ZdZ	dS )TestHelpVersionActionrM  rP  rT  -Vr  r  z3.6r  z&        usage: PROG [-h] [-V]
        z
        description

        optional arguments:
          -h, --help     show this help message and exit
          -V, --version  show program's version number and exit
        r   NrO  r   r   r   r   r  R  s   r  c                   @   sP   e Zd ZeddZeddddejdedd	d
eddd
gZg ZdZ	e	d Z
dS )TestHelpVersionActionSuppressrM  r  r   r  r  r  )r   r  rS  r   rQ  r  r  rx  r|  r}  N)r   r   r   rE   rs   rA  r  rw   r<  rB  rS  r   r   r   r   r  f  s   



r  c                   @   sH   e Zd ZedddZedddddgZd	d
 dD ZdZed ZdZ	dS )TestHelpSubparsersOrderingrM  display some subcommandsrT  r   r  r  rH  r  c                 C   s   g | ]}t |d qS )r  rE   )rM   r;   r   r   r   rO     s   z%TestHelpSubparsersOrdering.<listcomp>)r   r  r  r  rl   6        usage: PROG [-h] [-v] {a,b,c,d,e} ...
        z
        display some subcommands

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

        optional arguments:
          -h, --help     show this help message and exit
          -v, --version  show program's version number and exit
        rN  N)
r   r   r   rE   rs   rw   r=  rB  rS  r  r   r   r   r   r    s   r  c                   @   sL   e Zd ZedddZedddddgZd	Zd
d eD ZdZed Z	dZ
dS )"TestHelpSubparsersWithHelpOrderingrM  r  rT  r   r  r  rH  r  ))r   za subcommand help)r  zb subcommand help)r  zc subcommand help)r  zd subcommand help)rl   ze subcommand helpc                 C   s   g | ]\}}t ||d qS ))r;   rS  r  )rM   r;   rS  r   r   r   rO     s   z-TestHelpSubparsersWithHelpOrdering.<listcomp>r  a  
        display some subcommands

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

        optional arguments:
          -h, --help     show this help message and exit
          -v, --version  show program's version number and exit
        rN  N)r   r   r   rE   rs   rw   Zsubcommand_datar=  rB  rS  r  r   r   r   r   r    s   r  c                   @   s\   e Zd Zdd ZeddejdZededededed	e	d
dgZ
g ZdZed ZdZdS )TestHelpMetavarTypeFormatterc                 C   s   | S r'   r   r/  r   r   r   custom_type  s    z(TestHelpMetavarTypeFormatter.custom_typerM  rP  )rO  rP  r  r   r  rU  rW  z
SOME FLOAT)rS   rW  zF        usage: PROG [-h] [-b custom_type] [-c SOME FLOAT] int
        z
        description

        positional arguments:
          int

        optional arguments:
          -h, --help      show this help message and exit
          -b custom_type
          -c SOME FLOAT
        r   N)r   r   r   r  rE   rA  MetavarTypeHelpFormatterrs   r#  r  rw   r<  rB  rS  r  r   r   r   r   r    s   

r  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS ) TestInvalidArgumentConstructorsc                 O   s(   t  }| jt|jg|R i | d S r'   )rA  rB  r   r   ru   r   rF   rG   rv   r   r   r   assertTypeError  s    z/TestInvalidArgumentConstructors.assertTypeErrorc                 O   s(   t  }| jt|jg|R i | d S r'   )rA  rB  r   r  ru   r  r   r   r   assertValueError  s    z0TestInvalidArgumentConstructors.assertValueErrorc                 C   s<   | j dd d | j ddd | j ddd | j di d d S )	Nr   )r   r   rz   )callbackr   )Zcallback_args)Zcallback_kwargsr  r   r   r   r   test_invalid_keyword_arguments  s    z>TestInvalidArgumentConstructors.test_invalid_keyword_argumentsc                 C   s"   |    dD ]}| j |d qd S )N)rK  r8  r   r  r   r   r   r   r   test_missing_destination  s    z8TestInvalidArgumentConstructors.test_missing_destinationc                 C   s   |  d |  d d S )Nrp  z---r  r   r   r   r   test_invalid_option_strings   s    
z;TestInvalidArgumentConstructors.test_invalid_option_stringsc                 C   s$   | j ddd | j dttfd d S )Nr   r#  r  )r  r#  r  r   r   r   r   test_invalid_type  s    z1TestInvalidArgumentConstructors.test_invalid_typec                 C   s   | j ddd | j ddd | j ddd t }| t}|jddd W d    n1 s`0    Y  | dt|j d S )	Nr   rz   r   r   r   r8  rK  z
store-truezunknown action)	r  rA  rB  r   r  ru   rD  r   rE  rF  r   r   r   test_invalid_action  s    ,z3TestInvalidArgumentConstructors.test_invalid_actionc                 C   sb   t  }|jdd | t}|jddd W d    n1 sB0    Y  | dt|j d S )Nrz   r   r   r   z+dest supplied twice for positional argument)rA  rB  ru   r   r  rD  r   rE  rF  r   r   r   test_multiple_dest  s    ,z2TestInvalidArgumentConstructors.test_multiple_destc                 C   sD   dD ]:}t tdt ddt ddfD ]}| jd	d|i| q$qd S )
N)r   r   r<  rV  r`  r  r)  r  abr,  r   r   )r   )rd  r#  r  )r   r   attrsr   r   r   test_no_argument_actions  s
    z8TestInvalidArgumentConstructors.test_no_argument_actionsc                 C   s.   dD ]$}| j dd|d | j dd|d qd S )N)r   r<  r`  r   rz   r@  r%  r  r   r  r  r   r   r   !test_no_argument_no_const_actions   s    zATestInvalidArgumentConstructors.test_no_argument_no_const_actionsc                 C   s\   dD ]R}| j dd|d | j dd|d dD ](}| j dd||d | j dd||d q,qd S )	Nr  r   r   r  r  )r  r%  r)  rz   )r   r  r   r  )r   r   r  r   r   r   #test_more_than_one_argument_actions*  s    zCTestInvalidArgumentConstructors.test_more_than_one_argument_actionsc                 C   s   dD ]}| j dd|d qd S )N)r   rV  r   r)  r  r  r  r   r   r   test_required_const_actions8  s    z;TestInvalidArgumentConstructors.test_required_const_actionsc                 C   s4   | j ddd | j dddd | j ddtjd d S )Nrv  parsersr   rM  )r   rO  )r   rt   )r  rA  rB  r   r   r   r   "test_parsers_action_missing_params>  s
    zBTestInvalidArgumentConstructors.test_parsers_action_missing_paramsc                 C   s   | j ddd d S )Nrz   Tr  r  r   r   r   r   test_required_positionalD  s    z8TestInvalidArgumentConstructors.test_required_positionalc                    s`   G dd dt  G  fdddt}t }| j |jd|  d | j |jd|  d d S )Nc                   @   s   e Zd ZdS )zITestInvalidArgumentConstructors.test_user_defined_action.<locals>.SuccessNr  r   r   r   r   SuccessI  s   r  c                       s"   e Zd Zd fdd	Zdd ZdS )zHTestInvalidArgumentConstructors.test_user_defined_action.<locals>.ActionFc                    s"   |dkr| u r| u r  d S )Nr  r   )r   option_stringsr   r   r
  r5  r  r   r   r   N  s    zQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__init__c                 _   s   d S r'   r   rH   r   r   r   r<  Y  s    zQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__call__N)F)r   r   r   r   r<  r   r  r   r   rA  L  s    rA  r  )r   r
  r   r  )rZ   r   rA  rB  r   ru   )r   rA  rv   r   r  r   test_user_defined_actionG  s    z8TestInvalidArgumentConstructors.test_user_defined_actionN)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   e Zd Zdd Zdd ZdS )TestActionsReturnedc                 C   sX   t  }|d}| |jd |dd}| |jd |dd}| |jd d S )	Nr   rz   rU  r   r   r   r   r   )rA  rB  ru   r   r   r   rv   r   r   r   r   rt  h  s    
zTestActionsReturned.test_destc                 C   s   t  }|jddddtddgddd	d
	}| |jd | |jd | |jd | |jt | |j	ddg | |j
d | |jd | |jd	 d S )Nr   r  r   r  r  r!  r  ZBARr   )r  r   r
  rS   r-  rS  rW  r   )rA  rB  ru   r#  r   r  r   r
  rS   r-  rS  rW  r   r  r   r   r   	test_miscq  s    

zTestActionsReturned.test_miscN)r   r   r   rt  r  r   r   r   r   r  f  s   	r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestConflictHandlingc                 C   s   | j ttjdd d S )Nrz   )conflict_handler)r   r  rA  rB  r   r   r   r   test_bad_type  s    
z"TestConflictHandling.test_bad_typec                 C   sD   t  }|d | t j|jd |d | t j|jd d S )Nr   r  )rA  rB  ru   r   r  rE  r   r   r   test_conflict_error  s    

z(TestConflictHandling.test_conflict_errorc                 C   sz   t j}|ddd}|jddd |jddd | | td |jd	d
d |jd	dd | | td d S )NrM  resolve)rO  r  r   zOLD Xr  zNEW Xz            usage: PROG [-h] [-x X]

            optional arguments:
              -h, --help  show this help message and exit
              -x X        NEW X
            r  ZOLD_SPAMrc  ZNEW_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
            )rA  rB  ru   r   r  r  r  )r   r  rv   r   r   r   test_resolve_error  s    z'TestConflictHandling.test_resolve_errorN)r   r   r   r  r  r  r   r   r   r   r    s   	r  c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )TestOptionalsHelpVersionActionsc                 C   sP   |  t}||  W d    n1 s.0    Y  | | |jj d S r'   )r   rY   rh   r   r   r  rE  r\   )r   rv   r   rG  r   r   r   assertPrintHelpExit  s    ,z3TestOptionalsHelpVersionActions.assertPrintHelpExitc                 G   s   |  t|j| d S r'   )r   rY   rh   r   rv   rF   r   r   r   rL    s    z9TestOptionalsHelpVersionActions.assertArgumentParserErrorc                 C   sD   t  }|jddddd | |d | |d | tt|d d S )	Nr   r  r  r  r  r   r   format_versionrn   ru   r  r   r  rc   rE  r   r   r   test_version  s
    z,TestOptionalsHelpVersionActions.test_versionc                 C   sf   t dd}|jddddd | t}|dg W d    n1 sH0    Y  | d|jj d S )	NZPPPr  r   r  r  z%(prog)s 3.5r  zPPP 3.5
rn   ru   r   rY   rh   r   rE  r\   rF  r   r   r   test_version_format  s
    
*z3TestOptionalsHelpVersionActions.test_version_formatc                 C   sH   t dd}|jddddd | |d | |d	 | tt|d
 d S )NFr  r   r  r  r  r  r   r   r  )rn   ru   rL  r   r  rc   rE  r   r   r   test_version_no_help  s
    
z4TestOptionalsHelpVersionActions.test_version_no_helpc                 C   sd   t dd}|jdddd | t}|dg W d    n1 sF0    Y  | d|jj d S )Nrs  r  r  r  z%(prog)s 3.7r  zXXX 3.7
r  rF  r   r   r   test_version_action  s
    
*z3TestOptionalsHelpVersionActions.test_version_actionc                 C   s>   t dd}| |d | |d | |d | |d d S )NFr  r   r   r   r  )rn   rL  rE  r   r   r   test_no_help  s
    
z,TestOptionalsHelpVersionActions.test_no_helpc                 C   sZ   t  }|jddd |jddd | |d | |d | |d | tt|d d S )	Nr   rS  r   r   r  r   r  r  )rn   ru   r  rL  r   r  rc   rE  r   r   r   test_alternate_help_version  s    z;TestOptionalsHelpVersionActions.test_alternate_help_versionc                 C   s   t  }|jdddd |jddd |d g d	}|d
dg }|D ]J}|D ]}d||f }qN| ||d  | ||d  | tt|d qFd S )Nr  r  r  r  r   r   r   r   )r   r   rz   z-x barzbaz -xz--bad-optionzfoo bar bazz	%s %%s %sr   r   r  r  )r   rv   Zvalid_prefixesZvalid_suffixesprefixsuffixr  r   r   r   !test_help_version_extra_arguments  s    
zATestOptionalsHelpVersionActions.test_help_version_extra_argumentsN)r   r   r   r  rL  r  r  r  r  r  r  r  r   r   r   r   r    s   	r  c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestStringsc                 C   s"   t tfD ]}| ||| qd S r'   )r   r  r   )r   objZresult_stringfuncr   r   r   assertStringEqual   s    zTestStrings.assertStringEqualc                 C   s8   t jg dddddg dddd	d
	}d}| || d S )N)r   r  rU  r  r#  r)  r   r  r!  r  FZHELPZMETAVAR	r  r   rS   r  r
  r-  r5  rS  rW  zAction(option_strings=['--foo', '-a', '-b'], dest='b', nargs='+', const=None, default=42, type='int', choices=[1, 2, 3], required=False, help='HELP', metavar='METAVAR'))rA  rA  r  )r   optionr0  r   r   r   test_optional  s    zTestStrings.test_optionalc                 C   s8   t jg dtddg ddddd	}d	t }| || d S )
Nr   r  r  )r  g      ?r  TzH HH HzMV MV MVr  zAction(option_strings=[], dest='x', nargs='?', const=None, default=2.5, type=%r, choices=[0.5, 1.5, 2.5], required=True, help='H HH H', metavar='MV MV MV'))rA  rA  r  r  )r   argumentr0  r   r   r   test_argument  s     zTestStrings.test_argumentc                 C   s"   t jddd}d}| || d S )Nr   r  r~  zNamespace(foo=42, bar='spam')rA  r-  r  r   r0  r0  r   r   r   test_namespace&  s    zTestStrings.test_namespacec                 C   s(   t jf i ddi}d}| || d S )N"quotezNamespace(**{'"': 'quote'})r  r  r   r   r   'test_namespace_starkwargs_notidentifier+  s    z3TestStrings.test_namespace_starkwargs_notidentifierc                 C   s,   t jf ddiddi}d}| || d S )Nr   r  r  r  z Namespace(a=1, **{'"': 'quote'})r  r  r   r   r   2test_namespace_kwargs_and_starkwargs_notidentifier0  s    z>TestStrings.test_namespace_kwargs_and_starkwargs_notidentifierc                 C   s(   t jf i ddi}d}| || d S )NZvalidTzNamespace(valid=True)r  r  r   r   r   $test_namespace_starkwargs_identifier5  s    z0TestStrings.test_namespace_starkwargs_identifierc                 C   s&   t jdd}dt j }| || d S )NrM  r  zvArgumentParser(prog='PROG', usage=None, description=None, formatter_class=%r, conflict_handler='error', add_help=True))rA  rB  HelpFormatterr  )r   rv   r0  r   r   r   test_parser:  s    zTestStrings.test_parserN)r   r   r   r  r  r  r  r  r  r  r  r   r   r   r   r    s   r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestNamespacec                 C   sF   t  }| tt|d t jddd}| |jd | |jd d S )Nr   r   r  r  )rA  r-  r   r  rc   r   r   r  r/  r   r   r   test_constructorH  s
    zTestNamespace.test_constructorc                 C   s   t jddd}t jddd}t jdd}t jdd}| || | || | || | || | || | ||k | ||k | ||k | ||k d S )Nr  r!  r  )r  r   )r   rZ  )rA  r-  r   ZassertNotEqual
assertTrue)r   Zns1Zns2Zns3Zns4r   r   r   test_equalityP  s    zTestNamespace.test_equalityc                 C   s6   t jddd}| |d t | |d t d S )Nr  r!  r  )rA  r-  ZassertIsrX   NotImplemented__ne__r/  r   r   r   $test_equality_returns_notimplemented`  s    z2TestNamespace.test_equality_returns_notimplementedN)r   r   r   r  r  r  r   r   r   r   r  F  s   r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestEncodingc                 C   sR   t j|\}}|d7 }t|ddd}|  W d    n1 sD0    Y  d S )Nz.pyrl  r   r  )r+   r2   splitextr>   r  )r   r2   r   r   r   r   r   _test_module_encodingm  s    z"TestEncoding._test_module_encodingc                 C   s   |  tj d S r'   )r  rA  __file__r   r   r   r   test_argparse_module_encodings  s    z*TestEncoding.test_argparse_module_encodingc                 C   s   |  t d S r'   )r  r  r   r   r   r   "test_test_argparse_module_encodingv  s    z/TestEncoding.test_test_argparse_module_encodingN)r   r   r   r  r  r  r   r   r   r   r  k  s   r  c                   @   s   e Zd Zdd ZdS )TestArgumentErrorc                 C   s$   d}t d |}| t|| d S )Nzmy error here)rA  r  r   r   )r   r   rp   r   r   r   test_argument_error  s    z%TestArgumentError.test_argument_errorN)r   r   r   r  r   r   r   r   r  }  s   r  c                   @   s   e Zd Zdd ZdS )TestArgumentTypeErrorc                 C   sl   dd }t ddd}|jd|d | t}|dg W d    n1 sN0    Y  | d	|jj d S )
Nc                 S   s   t dd S )Nspam!)rA  ArgumentTypeErrorr/  r   r   r   r    s    z<TestArgumentTypeError.test_argument_type_error.<locals>.spamrM  Fr`  r   r  rs  z-usage: PROG x
PROG: error: argument x: spam!
)rn   ru   r   rY   rh   r   rE  r]   )r   r  rv   rG  r   r   r   test_argument_type_error  s    *z.TestArgumentTypeError.test_argument_type_errorN)r   r   r   r  r   r   r   r   r    s   r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestMessageContentErrorc                 C   sl  t ddd}|jdtd |jdtdd |jd	td
d | t}|g  W d    n1 sd0    Y  t|j}| |d | |d | |d	 | t}|dg W d    n1 s0    Y  t|j}| 	|d | |d | |d	 | t}|ddg W d    n1 s00    Y  t|j}| 	|d | 	|d | |d	 d S )NrM  r   ru  req_posr  -req_optTr4  Zneed_oner)  )rS   r  req_optZmyXargumentz
-req_opt=1)
rn   ru   r   r#  r   rY   rh   rE  r  r.  r   rv   rG  r   r   r   r   %test_missing_argument_name_in_message  s,    (
*
.
z=TestMessageContentError.test_missing_argument_name_in_messagec                 C   s  t ddd}|jdtd |jdtdd |jd	td
dd | t}|g  W d    n1 sf0    Y  t|j}| 	|d | 	|d | 
|d | t}|dg W d    n1 s0    Y  t|j}| 	|d | 
|d | 
|d d S )NrM  r   ru  r  r  z	--req_optTr4  z	--opt_optr  )rS   r  r
  r  Zopt_optz--req_opt=1)rn   ru   r   r#  boolr   rY   rh   rE  r  r.  r  r   r   r   %test_optional_optional_not_in_message  s$    
(
*
z=TestMessageContentError.test_optional_optional_not_in_messagec                 C   s   t ddd}|d |jdddd | t}|g  W d    n1 sP0    Y  t|j}| |d | |d d S )	NrM  r   ru  r  Zoptional_positionalr  r"  r  )	rn   ru   r   rY   rh   r   rE  r  r.  r  r   r   r   'test_optional_positional_not_in_message  s    
(
z?TestMessageContentError.test_optional_positional_not_in_messageN)r   r   r   r  r  r  r   r   r   r   r    s   r  c                   @   s   e Zd Zdd ZdS )TestTypeFunctionCallOnlyOncec                    sH    fdd}t  }|jd|dd |d } tdd| d S )	Nc                    s     | d dS )Nr  foo_convertedr   )Zstring_to_convertr   r   r   r    s    zLTestTypeFunctionCallOnlyOnce.test_type_function_call_only_once.<locals>.spamr   r   r  z--foo spam!r  r   )rA  rB  ru   rh   r   r   rJ   r   r  rv   rF   r   r   r   !test_type_function_call_only_once  s
    z>TestTypeFunctionCallOnlyOnce.test_type_function_call_only_onceN)r   r   r   r  r   r   r   r   r     s   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestTypeFunctionCalledOnDefaultc                    sD    fdd}t  }|jd|dd |g } tdd| d S )Nc                    s     | d dS )Nr   r  r  Zint_to_convertr   r   r   r    s    z]TestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_default.<locals>.spamr   r   r  r   rA  rB  ru   rh   r   rJ   r  r   r   r   /test_type_function_call_with_non_string_default  s
    
zOTestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_defaultc                 C   s@   dd }t  }|jd|dd |g }| tdd| d S )Nc                 S   s   dS )Nr  r   r  r   r   r   r    s    zYTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_default.<locals>.spamr   0r  r  r   r  r  r   r   r   +test_type_function_call_with_string_default  s
    
zKTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_defaultc                 C   s@   dd }t  }|jd|dd |g }| tdd| d S )Nc                 S   s   | d S )Nr%  r   )Zstr_to_convertr   r   r   rG    s    zYTestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_default.<locals>.extend--testr%  r  z**)r  r  )r   rG  rv   rF   r   r   r   )test_no_double_type_conversion_of_default  s
    
zITestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_defaultc                 C   s8   t  }|jddtg dd |g }| |jg  d S )Nr  r  rK  )r   rS   r
  r   )rA  rB  ru   r   rh   r   r  r  r   r   r   test_issue_15906
  s    

z0TestTypeFunctionCalledOnDefault.test_issue_15906N)r   r   r   r  r
  r  r  r   r   r   r   r    s   
r  c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestParseKnownArgsc                 C   s   t  }|d d S )Nr   rA  rB  rh   rE  r   r   r   test_arguments_tuple  s    z'TestParseKnownArgs.test_arguments_tuplec                 C   s   t  }|g  d S r'   r  rE  r   r   r   test_arguments_list  s    z&TestParseKnownArgs.test_arguments_listc                 C   s    t  }|d |d d S )Nr   r   rA  rB  ru   rh   rE  r   r   r   test_arguments_tuple_positional"  s    
z2TestParseKnownArgs.test_arguments_tuple_positionalc                 C   s"   t  }|d |dg d S )Nr   r  rE  r   r   r   test_arguments_list_positional'  s    
z1TestParseKnownArgs.test_arguments_list_positionalc                 C   sJ   t  }|d |d \}}| tdd| | ddg| d S )Nr   z--foo F --bar --bazFr   r   r  )rA  rB  ru   rr  r   r   rJ   )r   rv   rF   extrasr   r   r   test_optionals,  s
    
z!TestParseKnownArgs.test_optionalsc                 C   sr   t  }|jdddtd |jddd |d g d	}||\}}| td
ddd| | g d| d S )Nr   r  r  )r  r   rS   r  r<  r   r   )r   r-  r   r   rg  r  r  Tr   )vr  r   )r-  r   r  )rA  rB  ru   r#  rr  r   rJ   )r   rv   r   rF   r  r   r   r   
test_mixed3  s    
zTestParseKnownArgs.test_mixedN)	r   r   r   r  r  r  r  r  r  r   r   r   r   r    s   r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestIntermixedArgsc                 C   s  t jdd}|jddd |jdddd	}|d
 |jddtd d }||}| tdd
dg dd| ||\}}| tdd
dg d| | g d| d }|	|\}}| tdd
ddgd| | g d| | 
|j | |jd d S )NrM  r  r   rz   r   r   r   Tr{  cmdrestr%  )r  rS   zcmd --foo x 1 --bar y 2 3r   r   r  )r   r  rz   r  r|  r  rg  z!cmd --foo x 1 --error 2 --bar y 3r  )z--errorr  rg  )rA  rB  ru   r#  r   parse_intermixed_argsr   rJ   rr  parse_known_intermixed_argsr~  rB  r5  )r   rv   r   r   rF   r  r   r   r   
test_basicC  s"    

zTestIntermixedArgs.test_basicc                 C   s~   t dd}|d |d |jddd d }| t}|| W d    n1 s^0    Y  | t|jd	 d S )
NrM  r  r   r   r   r  r  r  z\.\.\.)	rn   ru   r   r   r   r  r  r   rE  )r   rv   r   rG  r   r   r   test_remainder^  s    


(z!TestIntermixedArgs.test_remainderc                 C   s   t dd}|jdd}|jdddd |jd	d
d |jddddd |d }| tddgdd d| | t|jd  | |j	d d S )NrM  r  Tr  r   r   r  rR  r  r  r  r   r%  r   r  r  z	1 --foo 2r|  r  )r   rz   r  r{  )
rn   r  ru   r  r   r   rJ   r   rY   r5  )r   rv   r|   rF   r   r   r   test_exclusivek  s    
z!TestIntermixedArgs.test_exclusivec                 C   sh   t dd}|jdd}|jdddd |jd	d
d |jddddd | t|jg  | |jd d S )NrM  r  Tr  r   r   r  rR  r  r  r  r   r%  r   r  r  )rn   r  ru   r   r   r  r   r5  r  r   r   r   test_exclusive_incompatiblew  s    
z.TestIntermixedArgs.test_exclusive_incompatibleN)r   r   r   r   r!  r"  r#  r   r   r   r   r  B  s   r  c                   @   s   e Zd Zdd ZdS )!TestIntermixedMessageContentErrorc                 C   s   t ddd}|jdtd |jdtdd | t}|g  W d    n1 sT0    Y  t|j}| |d | |d	 | t}|	g  W d    n1 s0    Y  t|j}| 
|d | |d	 d S )
NrM  r   ru  r  r  r  Tr4  r  )rn   ru   r   r#  r   rY   rh   rE  r  r  ZassertNotRegexr  r   r   r   r    s    (
(
zGTestIntermixedMessageContentError.test_missing_argument_name_in_messageN)r   r   r   r  r   r   r   r   r$    s   r$  c                   @   s  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd: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 nargsc                 C   s   t  }|jd||d d S )Nr   r  rW  )rA  rB  ru   )r   r  rW  rv   r   r   r   do_test_no_exception  s    z+TestAddArgumentMetavar.do_test_no_exceptionc                 C   s\   t  }| t }|jd||d W d    n1 s80    Y  | |jjd | j d S )Nr   r&  r   )	rA  rB  r   r  ru   r   rE  rF   EXPECTED_MESSAGE)r   r  rW  rv   rG  r   r   r   do_test_exception  s    .z(TestAddArgumentMetavar.do_test_exceptionc                 C   s   | j d dd d S )Nr|  r&  r'  r   r   r   r   test_nargs_None_metavar_string  s    z5TestAddArgumentMetavar.test_nargs_None_metavar_stringc                 C   s   | j d t d d S )Nr&  r)  tupler   r   r   r   test_nargs_None_metavar_length0  s    z6TestAddArgumentMetavar.test_nargs_None_metavar_length0c                 C   s   | j d dd d S )Nr|  r&  r*  r   r   r   r   test_nargs_None_metavar_length1  s    z6TestAddArgumentMetavar.test_nargs_None_metavar_length1c                 C   s   | j d dd d S )Nr|  r  r&  r)  r   r   r   r   test_nargs_None_metavar_length2  s    z6TestAddArgumentMetavar.test_nargs_None_metavar_length2c                 C   s   | j d dd d S )Nr  r&  r2  r   r   r   r   test_nargs_None_metavar_length3  s    z6TestAddArgumentMetavar.test_nargs_None_metavar_length3c                 C   s   | j ddd d S )Nr  r|  r&  r*  r   r   r   r   "test_nargs_optional_metavar_string  s    z9TestAddArgumentMetavar.test_nargs_optional_metavar_stringc                 C   s   | j dt d d S )Nr  r&  r,  r   r   r   r   #test_nargs_optional_metavar_length0  s    z:TestAddArgumentMetavar.test_nargs_optional_metavar_length0c                 C   s   | j ddd d S )Nr  r/  r&  r*  r   r   r   r   #test_nargs_optional_metavar_length1  s    z:TestAddArgumentMetavar.test_nargs_optional_metavar_length1c                 C   s   | j ddd d S )Nr  r1  r&  r2  r   r   r   r   #test_nargs_optional_metavar_length2  s    z:TestAddArgumentMetavar.test_nargs_optional_metavar_length2c                 C   s   | j ddd d S )Nr  r  r&  r2  r   r   r   r   #test_nargs_optional_metavar_length3  s    z:TestAddArgumentMetavar.test_nargs_optional_metavar_length3c                 C   s   | j ddd d S )Nr%  r|  r&  r*  r   r   r   r   $test_nargs_zeroormore_metavar_string  s    z;TestAddArgumentMetavar.test_nargs_zeroormore_metavar_stringc                 C   s   | j dt d d S )Nr%  r&  r,  r   r   r   r   %test_nargs_zeroormore_metavar_length0  s    z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length0c                 C   s   | j ddd d S )Nr%  r/  r&  r*  r   r   r   r   %test_nargs_zeroormore_metavar_length1  s    z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length1c                 C   s   | j ddd d S )Nr%  r1  r&  r*  r   r   r   r   %test_nargs_zeroormore_metavar_length2  s    z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length2c                 C   s   | j ddd d S )Nr%  r  r&  r2  r   r   r   r   %test_nargs_zeroormore_metavar_length3  s    z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length3c                 C   s   | j ddd d S )Nr)  r|  r&  r*  r   r   r   r   #test_nargs_oneormore_metavar_string  s    z:TestAddArgumentMetavar.test_nargs_oneormore_metavar_stringc                 C   s   | j dt d d S )Nr)  r&  r,  r   r   r   r   $test_nargs_oneormore_metavar_length0  s    z;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length0c                 C   s   | j ddd d S )Nr)  r/  r&  r2  r   r   r   r   $test_nargs_oneormore_metavar_length1  s    z;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length1c                 C   s   | j ddd d S )Nr)  r1  r&  r*  r   r   r   r   $test_nargs_oneormore_metavar_length2  s    z;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length2c                 C   s   | j ddd d S )Nr)  r  r&  r2  r   r   r   r   $test_nargs_oneormore_metavar_length3  s    z;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length3c                 C   s   | j ddd d S )Nr  r|  r&  r*  r   r   r   r   #test_nargs_remainder_metavar_string  s    z:TestAddArgumentMetavar.test_nargs_remainder_metavar_stringc                 C   s   | j dt d d S )Nr  r&  )r'  r-  r   r   r   r   $test_nargs_remainder_metavar_length0  s    z;TestAddArgumentMetavar.test_nargs_remainder_metavar_length0c                 C   s   | j ddd d S )Nr  r/  r&  r*  r   r   r   r   $test_nargs_remainder_metavar_length1  s    z;TestAddArgumentMetavar.test_nargs_remainder_metavar_length1c                 C   s   | j ddd d S )Nr  r1  r&  r*  r   r   r   r   $test_nargs_remainder_metavar_length2  s    z;TestAddArgumentMetavar.test_nargs_remainder_metavar_length2c                 C   s   | j ddd d S )Nr  r  r&  r*  r   r   r   r   $test_nargs_remainder_metavar_length3  s    z;TestAddArgumentMetavar.test_nargs_remainder_metavar_length3c                 C   s   | j ddd d S )NA...r|  r&  r*  r   r   r   r    test_nargs_parser_metavar_string  s    z7TestAddArgumentMetavar.test_nargs_parser_metavar_stringc                 C   s   | j dt d d S )NrI  r&  r,  r   r   r   r   !test_nargs_parser_metavar_length0  s    z8TestAddArgumentMetavar.test_nargs_parser_metavar_length0c                 C   s   | j ddd d S )NrI  r/  r&  r*  r   r   r   r   !test_nargs_parser_metavar_length1  s    z8TestAddArgumentMetavar.test_nargs_parser_metavar_length1c                 C   s   | j ddd d S )NrI  r1  r&  r2  r   r   r   r   !test_nargs_parser_metavar_length2  s    z8TestAddArgumentMetavar.test_nargs_parser_metavar_length2c                 C   s   | j ddd d S )NrI  r  r&  r2  r   r   r   r   !test_nargs_parser_metavar_length3
  s    z8TestAddArgumentMetavar.test_nargs_parser_metavar_length3c                 C   s   | j ddd d S )Nr  r|  r&  r*  r   r   r   r   test_nargs_1_metavar_string  s    z2TestAddArgumentMetavar.test_nargs_1_metavar_stringc                 C   s   | j dt d d S )Nr  r&  r,  r   r   r   r   test_nargs_1_metavar_length0  s    z3TestAddArgumentMetavar.test_nargs_1_metavar_length0c                 C   s   | j ddd d S )Nr  r/  r&  r*  r   r   r   r   test_nargs_1_metavar_length1  s    z3TestAddArgumentMetavar.test_nargs_1_metavar_length1c                 C   s   | j ddd d S )Nr  r1  r&  r2  r   r   r   r   test_nargs_1_metavar_length2  s    z3TestAddArgumentMetavar.test_nargs_1_metavar_length2c                 C   s   | j ddd d S )Nr  r  r&  r2  r   r   r   r   test_nargs_1_metavar_length3  s    z3TestAddArgumentMetavar.test_nargs_1_metavar_length3c                 C   s   | j ddd d S )Nr!  r|  r&  r*  r   r   r   r   test_nargs_2_metavar_string   s    z2TestAddArgumentMetavar.test_nargs_2_metavar_stringc                 C   s   | j dt d d S )Nr!  r&  r,  r   r   r   r   test_nargs_2_metavar_length0#  s    z3TestAddArgumentMetavar.test_nargs_2_metavar_length0c                 C   s   | j ddd d S )Nr!  r/  r&  r2  r   r   r   r   test_nargs_2_metavar_length1&  s    z3TestAddArgumentMetavar.test_nargs_2_metavar_length1c                 C   s   | j ddd d S )Nr!  r1  r&  r*  r   r   r   r   test_nargs_2_metavar_length2)  s    z3TestAddArgumentMetavar.test_nargs_2_metavar_length2c                 C   s   | j ddd d S )Nr!  r  r&  r2  r   r   r   r   test_nargs_2_metavar_length3,  s    z3TestAddArgumentMetavar.test_nargs_2_metavar_length3c                 C   s   | j ddd d S )Nr  r|  r&  r*  r   r   r   r   test_nargs_3_metavar_string1  s    z2TestAddArgumentMetavar.test_nargs_3_metavar_stringc                 C   s   | j dt d d S )Nr  r&  r,  r   r   r   r   test_nargs_3_metavar_length04  s    z3TestAddArgumentMetavar.test_nargs_3_metavar_length0c                 C   s   | j ddd d S )Nr  r/  r&  r2  r   r   r   r   test_nargs_3_metavar_length17  s    z3TestAddArgumentMetavar.test_nargs_3_metavar_length1c                 C   s   | j ddd d S )Nr  r1  r&  r2  r   r   r   r   test_nargs_3_metavar_length2:  s    z3TestAddArgumentMetavar.test_nargs_3_metavar_length2c                 C   s   | j ddd d S )Nr  r  r&  r*  r   r   r   r   test_nargs_3_metavar_length3=  s    z3TestAddArgumentMetavar.test_nargs_3_metavar_length3N)3r   r   r   r(  r'  r)  r+  r.  r0  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r   r   r   r   r%    s`   r%  c                   @   s4   e Zd ZdZdZdd Zdd Zdd Zd	d
 ZdS )TestInvalidNargszinvalid nargs valueznargs for store actions must be != 0; if you have nothing to store, actions such as store true or store const may be more appropriatec                 C   sZ   t  }| t}|jd|d W d    n1 s60    Y  | |jjd | j d S Nr   r  r   )	rA  rB  r   r  ru   r   rE  rF   EXPECTED_RANGE_MESSAGEr   r  rv   rG  r   r   r   do_test_range_exceptionH  s    ,z(TestInvalidNargs.do_test_range_exceptionc                 C   sZ   t  }| t}|jd|d W d    n1 s60    Y  | |jjd | j d S r_  )	rA  rB  r   r  ru   r   rE  rF   EXPECTED_INVALID_MESSAGEra  r   r   r   do_test_invalid_exceptionN  s    ,z*TestInvalidNargs.do_test_invalid_exceptionc                 C   s   | j dd | j dd d S )Nr   r  Zabcd)rd  r   r   r   r   test_nargs_alphabeticV  s    z&TestInvalidNargs.test_nargs_alphabeticc                 C   s   | j dd d S )Nr   r  )rb  r   r   r   r   test_nargs_zeroZ  s    z TestInvalidNargs.test_nargs_zeroN)	r   r   r   rc  r`  rb  rd  re  rf  r   r   r   r   r^  A  s   r^  c                   @   s   e Zd Zdd Zdd ZdS )TestImportStarc                 C   s    t jD ]}| tt | qd S r'   )rA  __all__r  r   r  r   r   r   r  c  s    
zTestImportStar.testc                 C   s0   dd t t D }| t|ttj d S )Nc                 S   s0   g | ](\}}| d s|dkst|s|qS )r   ngettext)
startswithinspectZismodule)rM   r;   r'  r   r   r   rO   h  s   
zJTestImportStar.test_all_exports_everything_but_modules.<locals>.<listcomp>)rU   rA  rR   r   rQ   rh  )r   rR   r   r   r   'test_all_exports_everything_but_modulesg  s    
z6TestImportStar.test_all_exports_everything_but_modulesN)r   r   r   r  rl  r   r   r   r   rg  a  s   rg  c                       s$   e Zd Z fddZdd Z  ZS )TestWrappingMetavarc                    s,   t    td| _d}| jjd|d d S )NZ9this_is_spammy_prog_with_a_long_name_sorry_about_the_namez<http[s]://example:1234>z--proxyrc  )r
   r%   rn   rv   ru   )r   rW  r   r   r   r%   s  s    
zTestWrappingMetavar.setUpc                 C   s    | j  }| |td d S )Na(              usage: this_is_spammy_prog_with_a_long_name_sorry_about_the_name
                   [-h] [--proxy <http[s]://example:1234>]

            optional arguments:
              -h, --help            show this help message and exit
              --proxy <http[s]://example:1234>
            )rv   r  r   r  r  )r   	help_textr   r   r   test_help_with_metavar}  s    
z*TestWrappingMetavar.test_help_with_metavar)r   r   r   r%   ro  r   r   r   r   r   rm  q  s   
rm  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestExitOnErrorc                 C   s$   t jdd| _| jjddtd d S )NF)exit_on_errorz
--integersN)rW  rS   )rA  rB  rv   ru   r#  r   r   r   r   r%     s    zTestExitOnError.setUpc                 C   s(   | j d }| |tjdd d S )Nz--integers 4r0  )Zintegers)rv   rh   r   r   rA  r-  r/  r   r   r   !test_exit_on_error_with_good_args  s    z1TestExitOnError.test_exit_on_error_with_good_argsc                 C   s@   |  tj  | jd  W d    n1 s20    Y  d S )Nz--integers a)r   rA  r  rv   rh   r   r   r   r   r    test_exit_on_error_with_bad_args  s    z0TestExitOnError.test_exit_on_error_with_bad_argsN)r   r   r   r%   rs  rt  r   r   r   r   rp    s   rp  c                   C   s   i t _t t_d S r'   )r  r  r  r  r   r   r   r   tearDownModule  s    ru  __main__)rk  r   r  r+   r6   r4   ra   r  r(   ZunittestrA  r  r   r   TextIOWrapperr   r   r   r&   rE   rJ   rZ   rY   rm   rB  rn   rS   rq   r   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r$  r(  r*  r3  r7  r9  r;  r=  r>  rI  rJ  rR  rT  r^  r_  ra  rc  rh  rj  rn  ro  rr  rs  ru  rv  rw  rx  ry  rz  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  re   rf   r  r  r  Z	eq_stderrr  r  Z
eq_bstderrr  r  r  r  r  ZskipIfr   r  r  r  r  r  r  r  r!  r%  r,  r.  r3  rB  rF  rJ  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,  r4  r5  rC  rP  rQ  rR  rV  rY  r\  r^  r_  ra  rd  rh  rm  rn  ro  rp  rq  rr  rt  rv  rw  ry  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^  rg  rm  rp  ru  r   mainr   r   r   r   <module>   s  
&q







""A   (' 4-0#+!$-*(),	^R$7/4(69$&"$.10/+!~-LI%=1*? ) 