a
    3j                    @   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	m
Z
 d dlmZ d dlmZ G dd de
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 d0d1 d1eZ)G d2d3 d3eZ*G d4d5 d5eZ+G d6d7 d7eZ,G d8d9 d9eZ-G d:d; d;eZ.G d<d= d=eZ/G d>d? d?eZ0G d@dA dAeZ1G dBdC dCeZ2G dDdE dEeZ3G dFdG dGeZ4G dHdI dIeZ5G dJdK dKeZ6G dLdM dMeZ7G dNdO dOeZ8G dPdQ dQeZ9G dRdS dSeZ:G dTdU dUeZ;G dVdW dWeZ<G dXdY dYeZ=G dZd[ d[eZ>G d\d] d]eZ?G d^d_ d_eZ@G d`da daeZAG dbdc dceZBG ddde deeZCG dfdg dgeZDG dhdi dieZEG djdk dkeZFG dldm dmeZGG dndo doeZHG dpdq dqeZIG drds dseZJG dtdu dueZKG dvdw dweZLG dxdy dyeZMG dzd{ d{eZNG d|d} d}eZOG d~d deZPG dd deZQG dd 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eZpG dd deeZqG ddÄ deZrG ddń dŃZsesdƃZtesdǃZuesdȃZvG ddʄ deZwG dd̄ deeZxG dd΄ deeZyG ddЄ deeZzG dd҄ deZ{e|e}edӃoe~ d kdԡG ddք deeZG dd؄ dee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 dd dee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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 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Zސdd Zedkre  dS (      N)StringIO)support)mockc                   @   s   e Zd ZdS )StdIOBufferN__name__
__module____qualname__ r
   r
   N/www/server/python_manager/versions/3.9.10/lib/python3.9/test/test_argparse.pyr      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__self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S )TempDirMixinc                 C   s$   t  | _t | _t| j d S N)tempfilemkdtemptemp_dirosgetcwdold_dirchdirr   r
   r
   r   r   !   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   tearDown&   s
    zTempDirMixin.tearDownc                 C   sV   t j| j|}t|d}|| W d    n1 s:0    Y  t |tj d S )Nw)	r   r"   r#   r   openwriter!   r$   S_IREAD)r   filenameZ	file_pathfiler
   r
   r   create_readonly_file-   s    (z!TempDirMixin.create_readonly_fileN)r   r   r	   r   r,   r3   r
   r
   r
   r   r      s   r   c                   @   s   e Zd Zdd ZdS )Sigc                 O   s   || _ || _d S r   )argskwargsr   r5   r6   r
   r
   r   __init__5   s    zSig.__init__Nr   r   r	   r8   r
   r
   r
   r   r4   3   s   r4   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   r6   r
   r
   r   r8   <   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>A       zNS.__repr__.<locals>.<listcomp>z%s(%s))sortedr;   itemsr#   typer   )r   Zsorted_itemsZ	kwarg_strr
   r
   r   __repr__?   s    zNS.__repr__c                 C   s   t | t |kS r   )varsr   otherr
   r
   r   __eq__D   s    z	NS.__eq__N)r   r   r	   r8   rD   rH   r
   r
   r
   r   r:   :   s   r:   c                   @   s   e Zd ZdddZdS )ArgumentParserErrorNc                 C   s,   t | ||| || _|| _|| _|| _d S r   )	Exceptionr8   messagestdoutstderr
error_code)r   rK   rL   rM   rN   r
   r
   r   r8   J   s
    zArgumentParserError.__init__)NNNr9   r
   r
   r
   r   rI   H   s   rI   c           
      O   s  t tjtst tjtr&| |i |S tj}tj}t t_t t_zzl| |i |}tt|D ]<}t||tju rt||| t||tju r`t||| q`|W W |t_|t_S  t	y   t
 d j}tj }tj }	td||	|d Y n0 W |t_|t_n|t_|t_0 d S )N   
SystemExit)
isinstancesysrM   r   rL   listrE   getattrsetattrrP   exc_infocodegetvaluerI   )

parse_argsr5   r6   Z
old_stdoutZ
old_stderrresultkeyrW   rL   rM   r
   r
   r   stderr_to_parser_errorR   s>    


r\   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   )superr]   rY   r\   )r   r5   r6   rY   	__class__r
   r   rY   u   s    z%ErrorRaisingArgumentParser.parse_argsc                    s"   t t| j}t|g|R i |S r   )r^   r]   exitr\   )r   r5   r6   ra   r_   r
   r   ra   y   s    zErrorRaisingArgumentParser.exitc                    s"   t t| j}t|g|R i |S r   )r^   r]   errorr\   )r   r5   r6   rb   r_   r
   r   rb   }   s    z ErrorRaisingArgumentParser.error)r   r   r	   rY   ra   rb   __classcell__r
   r
   r_   r   r]   s   s   r]   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_argumentr5   r6   )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_grouprh   r5   r6   )ri   rj   grouprk   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)	enumeratern   rh   r5   r6   )ri   rj   irk   ro   r
   r
   r   many_groups   s    z3ParserTesterMetaclass.__init__.<locals>.many_groupsc                 S   s
   |  |S r   )rY   )ri   r5   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   )rR   argvrY   )ri   r5   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_successesr#   	TypeErrorrU   )r   Z
tester_clsadd_argumentsrY   Zadd_arguments_nameZparse_args_namery   	func_namenames	test_namerz   r
   r
   r   r8      s    


z9ParserTesterMetaclass.__init__.<locals>.AddTests.__init__c                 S   s2   |j j}|j j}|j|i |}| ||j |S r   )rf   r5   r6   rg   r{   rj   )r   testerr5   r6   ri   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assertRaisesrI   rY   )r   r   ri   args_strr5   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   	successesrQ   strr   r|   assertEqual)r   r   ri   r5   expected_nsZ	result_nsr
   r
   r   r~      s    

z?ParserTesterMetaclass.__init__.<locals>.AddTests.test_successesN)r   r   r	   r8   r   r}   r~   r
   r
   r
   r   AddTests   s   r   )hasattrr4   rf   r]   rg   object)clsr+   basesbodydictrl   rp   rs   rt   rv   r   r   rY   r
   r
   r   r8      s    

	-zParserTesterMetaclass.__init__Nr9   r
   r
   r
   r   rd      s   rd   re   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 -y Nx-x ar   -xaz-x -1-1z-x-1r   r   r	   r4   rj   r   r:   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rm   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   0  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   @  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   P  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   ]  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   k  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	   r4   rf   rj   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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hrr   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   rO   nargsr   r   Nr   r   r   r
   r
   r
   r   r    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  rC   r   r   2r   NT   r-   r   r   r   z-w 2z-x 2z-y 2z-z 2   	r   r   r	   r4   intrj   r   r:   r   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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  E  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  X  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   rC   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	   r4   r  rangerj   r   r:   r   r
   r
   r
   r   r  i  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rC   requiredr   r   -x 1rO   r   z-x42r   Nr  r
   r
   r
   r   r&  z  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
dfgZdS )TestOptionalsActionStorer   storer   r   r  r   Nr   z-xfoorm   r   r
   r
   r
   r   r*    s
   r*  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	   r4   r   rj   r   r:   r   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 )
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   r0    s
   r0  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   rh   BooleanOptionalActionassertInr   	exceptionr   ri   cmr
   r
   r   
test_const  s    0z$TestBooleanOptionalAction.test_const)r   r   r	   r4   r4  r6  rj   r   r:   r   r;  r
   r
   r
   r   r1    s   r1  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)r(  r   r   r   r2  FN)
r   r   r	   r4   r4  r6  rj   r   r:   r   r
   r
   r
   r   r<    s   r<  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   r=    s   r=  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   r>  r   r   r   r?  r   rB  rC  r   rD  )r   r   r
  Nr   r
   r
   r
   r   rE    s   rE  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   -cr>  r
  r   r   r   rJ  za -cz-bxz-b xr   Nr
  -b -cx -b -cyzr   yz	r   r   r	   r4   rJ   rj   r   r:   r   r
   r
   r
   r   rG    s   rG  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 ))TestOptionalsActionAppendConstWithDefaultrH  rI  r   )r   r   r   rJ  r>  r
  rK  rL  r   rM  rN  r   rO  NrP  r
   r
   r
   r   rQ    s   rQ  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   rO   r   r
   r
   r
   r   rR  	  s
   rR  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)rm   ZfoobazZfooblez--foo 77z	--fooba ar   z--foobl --foo gr   Tr   r
   r
   r
   r   rT    s   
rT  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rm   ZfoodleZfoonlyz--foo 33z--foonly 7 --foodle --foo 2r  TrU  r   r
   r
   r
   r   rV  %  s   

rV  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   rX  z++fooz++foodler   r   z++foonly)z+foon 3z++foon 3z++foodz++food ++foo 2r   NrY  z++foo 3rZ  z++foonly 7 ++foodle ++foo 2r  TrU  r   r
   r
   r
   r   r[  6  s   
r[  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 )/TestDisallowLongAbbreviationAllowsShortGroupingFrW  z-rrJ  rS  r   z-c -rr   Nrr  z-rar   z-rccccz-ccr  z-cc -raz-ccrccr   r
   r
   r
   r   r]  G  s   

r]  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  Fr\  z+rz+crS  r   z+c +rr   Nr^  z+rar   z+rccr`  z+ccr  z+cc +raz+ccrccr   r
   r
   r
   r   ra  Z  s   
ra  c                   @   s.   e Zd ZedgZg dZdeddfgZdS )TestPositionalsNargsNonerm   r   r   a br   r   Nr   r
   r
   r
   r   rb  q  s   
rb  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 )TestPositionalsNargs1rm   rO   r  rc  r   r   Nr   r
   r
   r
   r   re  {  s   re  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 )
TestPositionalsNargs2rm   r  r  )r   r   r   a b crd  r   r
  r   Nr   r
   r
   r
   r   rf    s   rf  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 )TestPositionalsNargsZeroOrMorerm   r  r  r   r   r   r   rd  r
  Nr   r
   r
   r
   r   rh    s   rh  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 )%TestPositionalsNargsZeroOrMoreDefaultrm   r  r   r  r   r   r   r   rd  r
  Nr   r
   r
   r
   r   ri    s   ri  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 )TestPositionalsNargsOneOrMorerm   r  r  r   r   r   r   rd  r
  Nr   r
   r
   r
   r   rj    s
   rj  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 )
TestPositionalsNargsOptionalrm   r  r  r   rd  r   Nr   r   r   r
   r
   r
   r   rk    s
   rk  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 )#TestPositionalsNargsOptionalDefaultrm   r  r   r  r   rd  r   r   r   Nr   r
   r
   r
   r   rl    s
   rl  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 ),TestPositionalsNargsOptionalConvertedDefaultrm   r  r  )r  rC   r   )r   rd  1 2r   r   r   1rO   Nr  r
   r
   r
   r   rm    s   rm  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 )	TestPositionalsNargsNoneNonerm   r   )r   r   r   rg  rd  r   r
  rm   r   Nr   r
   r
   r
   r   rp    s   rp  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 )TestPositionalsNargsNone1rm   r   rO   r  )r   r   r   rg  rd  r   r
  rq  Nr   r
   r
   r
   r   rr    s   rr  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 )TestPositionalsNargs2Nonerm   r  r  r   r   r   r   rd  a b c drg  r   r
  r  rq  Nr   r
   r
   r
   r   rs    s   rs  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 )"TestPositionalsNargsNoneZeroOrMorerm   r   r  r  r   r   r   rq  rd  r
  rg  r  Nr   r
   r
   r
   r   rv    s   rv  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 )!TestPositionalsNargsNoneOneOrMorerm   r   r  r  r   r   r   rd  r   r
  rq  rg  r  Nr   r
   r
   r
   r   rw    s
   rw  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 ) TestPositionalsNargsNoneOptionalrm   r   r  r  r   r   rg  r   Nrq  rd  r
  r   r
   r
   r
   r   ry    s
   ry  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 )"TestPositionalsNargsZeroOrMoreNonerm   r  r  r   r   r   r   rq  rd  r
  rg  r  Nr   r
   r
   r
   r   r{    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 )!TestPositionalsNargsOneOrMoreNonerm   r  r  r   rx  rd  r   r
  rq  rg  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 ) TestPositionalsNargsOptionalNonerm   r  r   r  r   rz  r   rq  rd  r
  Nr   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d	gg d
fdedd	gdgd
fgZdS )TestPositionalsNargs2ZeroOrMorerm   r  r  r   r  rx  rd  r   r
  rq  rg  r  Nr   r
   r
   r
   r   r~  9  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 )TestPositionalsNargs2OneOrMorerm   r  r  r   r  )r   r   r   rd  rg  r   r
  r  rq  Nr   r
   r
   r
   r   r  D  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 )TestPositionalsNargs2Optionalrm   r  r  r   r  )r   r   r   ru  rd  r   r
  Nrq  rg  r  r   r
   r
   r
   r   r  N  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 )TestPositionalsNargsZeroOrMore1rm   r  r  r   rO   r   r   r   rq  rd  r
  rg  r  Nr   r
   r
   r
   r   r  Y  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 )TestPositionalsNargsOneOrMore1rm   r  r  r   rO   rx  rd  r   r
  rq  rg  r  Nr   r
   r
   r
   r   r  e  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 )TestPositionalsNargsOptional1rm   r  r  r   rO   rz  r   Nrq  rd  r
  r   r
   r
   r
   r   r  p  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 )#TestPositionalsNargsNoneZeroOrMore1rm   r   r  r  r   rO   rx  rd  r   r
  rm   r   r   rg  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 )"TestPositionalsNargsNoneOneOrMore1rm   r   r  r  r   rO   )r   r   r   r
  rg  r   r
  r  r  ru  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 )!TestPositionalsNargsNoneOptional1rm   r   r        ?r  r   rO   r  rx  rd  r   r
  r  rg  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 )$TestPositionalsNargsOptionalOptionalrm   r  r  r   r   r  r   rg  r   Nrq  r   rd  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 )&TestPositionalsNargsOptionalZeroOrMorerm   r  r  r   r  r   r   Nrq  r   rd  r
  rg  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 )%TestPositionalsNargsOptionalOneOrMorerm   r  r  r   r  r   r   r   Nrq  rd  r
  rg  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	   r4   setrj   r   r:   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  4r#  r  15   Nr$  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  r>  r   r  )r   r  rt  rg  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    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   rC   r   z-+-r   r   r  r   z+ -r   NFr   z- Xr   z+ -3Tz- ===z===)
r   r   r	   r4   rf   r  rj   r   r:   r   r
   r
   r
   r   r  *  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  =  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  M  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   rC   z-3r   )rC   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	   r4   floatrj   r   r:   r   r
   r
   r
   r   r  Z  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 )TestDefaultSuppressrm   r  r  r   r  r   r   rF  r   r   r   r   rd  r
  rq  TrB  r@  rm   r   rA  r  N)
r   r   r	   r4   r4  SUPPRESSrj   r   r:   r   r
   r
   r
   r   r  u  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_defaultrm   r  r  r   r  r   r   r   r   r   r   r   rd  r
  rq  TrB  r@  r  rA  r  N)r   r   r	   r4   r4  r  rf   rj   r   r:   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  rm   r  r  r   r  r   r   r   r   r   )rm   r   r   r  r   rd  r
  Tr@  rA  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_textsr"   textr2   r_   r
   r   r     s
    zTestArgumentsFromFile.setUp@fromfile_prefix_chars-ar   r   r  r  )r   rH  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   r4   rf   rj   r   r:   r   rc   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   r]   r  rg   r4   rf   rj   r   r:   r   rc   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 )Nr_  zFileType('r')r4  FileTyper   reprr   rC   r
   r
   r   test_r  s    
zTestFileTypeRepr.test_rc                 C   s    t dd}| dt| d S )NwbrO   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 )Nr_  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 )Nr_  rO   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   s
   || _ d S r   )attr)r   r  r
   r
   r   r8     s    zStdStreamComparer.__init__c                 C   s   |t t| jkS r   )rT   rR   r  rF   r
   r
   r   rH     s    zStdStreamComparer.__eq__Nr   r   r	   r8   rH   r
   r
   r
   r   r    s   r  stdinrL   rM   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   r8     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closerQ   r   decoder+   r   rG   r  r
   r
   r   rH     s    


zRFile.__eq__N)r   r   r	   r  r8   rH   r
   r
   r
   r   r    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 )Nrq  r-   readonly)
r^   r  r   r.   r   r"   r#   r   r/   r3   r   	file_namer2   r_   r
   r   r   +  s
    *zTestFileTypeR.setUpr   r  r  r_  )r   r   znon-existent-file.txtrm   Nr   r  
-x foo barr   
bar -x foo-x - -r  r   r   r	   r   r4   r4  r  rj   r   r:   r  eq_stdinr   rc   r
   r
   r_   r   r  (  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   r"   r#   r   r/   r  )r   r2   r_   r
   r   r   A  s    
zTestFileTypeDefaults.setUprJ  r_  zno-file.txtrC   r   r   z-c goodr  )r  )r   r   r	   r   r4   r4  r  rj   r   r:   r  r   rc   r
   r
   r_   r   r  ?  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 )Nrq  r-   )	r^   r  r   r.   r   r"   r#   r   r/   r  r_   r
   r   r   S  s    zTestFileTypeRB.setUpr   rbr  r  r   rm   Nr  r  r   r  r  r  r
   r
   r_   r   r  P  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   r8   i  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  modeencoder/   r  addr+   r  r
   r
   r   rH   l  s    



zWFile.__eq__N)r   r   r	   r  r  r8   rH   r
   r
   r
   r   r  f  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	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 t|   | d d S )Nr  )r^   r  r   r3   r   r_   r
   r   r   |  s    zTestFileTypeW.setUpr   r-   r  r  )r   r   r  rm   Nr  r  r   r  r  )r   r   r	   r   r4   r4  r  rj   r   r:   r  	eq_stdoutr   rc   r
   r
   r_   r   r  w  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   rm   Nr  r  r   r  r  )r   r   r	   r4   r4  r  rj   r   r:   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-   rO   )r-   rO   NNr  r  )r-   r   Nr  r  r  r  )r  r   r  Nr   l1strict)r-   r   r  r  zbuiltins.openrm   )r4  r  r   ZpatchZassert_called_with)r   ZFTZcasesmrC   r5   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)	r4  r5  r   
ValueErrorrh   r  r   r   r8  r9  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	   r4   complexr  rj   r   r:   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   r8     s    z#TestTypeUserDefined.MyType.__init__c                 C   s   t | | jft ||jfkS r   rC   r  rF   r
   r
   r   rH     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  r4   rj   r   r:   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   r8     s    zTestTypeClassicClass.C.__init__c                 C   s   t | | jft ||jfkS r   r  rF   r
   r
   r   rH     s    zTestTypeClassicClass.C.__eq__Nr  r
   r
   r
   r   C  s   r  r   r  r  r  r
  r   r  r  r   r   N)	r   r   r	   r  r4   rj   r   r:   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_type   s    z.TestTypeRegistration.test.<locals>.get_my_typerC   Zmy_typer   r  r   ro  z
my_type{1}r   z-x 1 42zmy_type{42})r4  r5  registerrh   r   rY   r   r:   )r   r  ri   r
   r
   r   r    s    

zTestTypeRegistration.testNr  r
   r
   r
   r   r    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   sv   z:t dd}|dv rd|_n|dv r,d|_ntd| W n* tyd   t d }td	| Y n0 t|d
| d S )N      ?r  )      ?r  r  )       @r  	value: %srO   zopt_action failed: %sr  )r:   r   AssertionErrorrR   rV   rI   rU   r   ri   	namespacer  option_stringr   er
   r
   r   __call__  s    
z-TestActionUserDefined.OptionalAction.__call__)Nr   r   r	   r%  r
   r
   r
   r   OptionalAction  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 n* tyt   t d
 }td| Y n0 t|d| d S )Nr  r   )r   r  r  )rO   r  )r  r  r  rO   zarg_action failed: %sr   )r:   r  r   rR   rV   rI   rU   r!  r
   r
   r   r%  .  s    
z/TestActionUserDefined.PositionalAction.__call__)Nr&  r
   r
   r
   r   PositionalAction,  s   r)  z-sr  r  )r   r   rC   r   r   r  r  )r   rC   r  r   z-s0.125r  )r  r   r  r   z
-s 0.625 1r  rO   z84 -s2r  r  N)r   r   r	   r4  Actionr'  r)  r4   r  r  rj   r   r:   r   r
   r
   r
   r   r    s   r  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])rU   r   )r   ri   r"  valuesr#  r
   r
   r   r%  Z  s    z(TestActionRegistration.MyAction.__call__)Nr&  r
   r
   r
   r   MyActionX  s   r-  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   ro  zfoo[1]r(  r  zfoo[42])r4  r5  r  r-  rh   r   rY   r:   r   ri   r
   r
   r   r  ]  s
    zTestActionRegistration.testN)r   r   r	   r4  r*  r-  r  r
   r
   r
   r   r+  U  s   r+  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  rC   r
   z--foo f1 --foo f2 f3 f4)f1f2Zf3Zf4r   N)	r   r   r	   r4   r   rj   r   r:   r   r
   r
   r
   r   r/  g  s
   r/  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   rI   r7   r
   r
   r   assertArgumentParserErrorw  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  rm   r   foo helpr   helpr8  r9  r   r   bar helprC   r<  r(  FZCOMMANDmetavarcommandstitlecommand helpr<  z1 descriptionr9  z1 helpZ1alias1Z1alias2aliasesro  r   zw helpr   r  x helpr   r<  z2 descriptionz2 helpr  r   Z123y helpr   r  zz help)rC   r  r<  z3 descriptionz3 helprZ  tzt helpur  zu helpr  r<  )ro  )r  )rZ  )	r]   rh   r  add_subparsersr5  dict
add_parserr  r  )r   subparser_helpr   rE  ri   Zsubparsers_kwargs
subparsersZparser1_kwargsparser1Zparser2_kwargsparser2Zparser3_kwargsZparser3r
   r
   r   r   z  sX    



zTestAddSubparsers._get_parserc                    s&   t    |  | _| jdd| _d S )NT)rO  )r^   r   r   ri   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   r5  ri   rY   )r   r   r5   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
  rm   r   r-   r   z0.25 --foo 2 -y 2 3j -- -1jTr  r  y              @y             )rm   r   r   r   z--foo 0.125 1 cr  r  z-1.5 3 11 -- a --foo 7 -- br     )r   r   rU  --r
  )rm   r   rI  rJ  )r   ri   rY   r   r:   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 )NrU  Fr  rV  r
  rW  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   ri   parse_known_argsr   r:   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   ro  r   Fr  r  rn  )r]   rh   rL  rN  r   r:   rY   r   )r   ri   rP  rQ  r
   r
   r   	test_dest  s    

zTestAddSubparsers.test_destc                 C   s,   | dg}| |jd | |j d d S )Nrunr
   )rY   r   commandr5  )r   ri   retr
   r
   r   _test_required_subparsers  s    z+TestAddSubparsers._test_required_subparsersc                 C   s0   t  }|jdd}d|_|d | | d S )Nr_  r   Tr^  )r]   rL  r(  rN  ra  r   ri   rP  r
   r
   r   &test_required_subparsers_via_attribute  s
    
z8TestAddSubparsers.test_required_subparsers_via_attributec                 C   s,   t  }|jddd}|d | | d S )Nr_  Tr   r(  r^  )r]   rL  rN  ra  rb  r
   r
   r   "test_required_subparsers_via_kwarg  s    
z4TestAddSubparsers.test_required_subparsers_via_kwargc                 C   s6   t  }|jdd}|d |d}| |j d S )Nr_  r   r^  r
   r]   rL  rN  rY   assertIsNoner_  r   ri   rP  r`  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r(  rm   r   r
   z8error: the following arguments are required: {foo,bar}
$	r]   rL  rN  r   rI   rY   assertRegexr8  rM   r   ri   rP  excinfor
   r
   r   -test_required_subparsers_no_destination_error  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 )NTrj  rm   r   rB  zPerror: argument {foo,bar}: invalid choice: 'baz' \(choose from 'foo', 'bar'\)\n$rk  rm  r
   r
   r   3test_wrong_argument_subparsers_no_destination_error  s    

(zETestAddSubparsers.test_wrong_argument_subparsers_no_destination_errorc                 C   s8   t  }|jddd}|d |d}| |j d S )Nr_  Frd  r^  r
   rf  rh  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   ri   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   rs  rt  ru  rv  r.  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 )	Nr6  r7  r=  z--non-breakingr/  uR   help message containing non-breaking spaces shall not wrap at non-breaking spacesr;  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
        r]   rh   r   rt  ru  rv  r.  r
   r
   r   test_help_non_breaking_spacesP  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 )Nr6  r7  r=  rm   z    r<  z            usage: PROG [-h] foo

            main description

            positional arguments:
              foo         

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

            main description

            positional arguments:
              {}          

            optional arguments:
              -h, --help  show this help message and exit
        rz  r.  r
   r
   r   test_help_blankb  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
            rx  r.  r
   r
   r    test_help_alternate_prefix_chars  s
    
z2TestAddSubparsers.test_help_alternate_prefix_charsc                 C   s.   |  | j d |  | j td d S )Nrr  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   rS  rs  rt  ru  rv  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 )Nr6  r7  r=  r   r   r:  r;  r   r>  r|  subcommandsrC  zadditional text)rB  r9  r<  ro  r  z'usage: PROG [-h] [--foo] bar {1,2} ...
a              usage: PROG [-h] [--foo] bar {1,2} ...

            main description

            positional arguments:
              bar         bar help

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

            subcommands:
              command help

              {1,2}       additional text
            )	r]   rh   rL  rN  r   rs  rt  ru  rv  )r   ri   rP  rQ  rR  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   rI   ri   rY   r   r   r8  rL   )r   r   Zexpected_helpr:  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  ru  rv  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_help  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rE  z0.5 1alias1 bFr  r
  rW  z0.5 1alias2 b)r   r   r[  r   r:   r.  r
   r
   r   test_alias_invocation  s    z'TestAddSubparsers.test_alias_invocationc                 C   s"   | j dd}| |jd  d S )NTr  z0.5 1alias3 b)r   r5  rY   r   r.  r
   r
   r   test_error_alias_invocation  s    z-TestAddSubparsers.test_error_alias_invocationc                 C   s.   | j ddd}d | _| | td d S )NT)rE  rO  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   rt  ru  rv  r.  r
   r
   r   test_alias_help  s    z!TestAddSubparsers.test_alias_help)FNF)r   r   r	   r5  r   r   rT  rZ  r\  r]  ra  rc  re  ri  ro  rp  rq  rw  ry  r{  r}  r~  r  r  r  r  r  r  r  r  rc   r
   r
   r_   r   r3  t  s:     
7	&r3  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 )
Nrm   r   r   r   ro  r  rZ  r  1 2 3)r]   rh   rn   r:   rY   r   r   r   ri   ro   expectedrZ   r
   r
   r   test_nongroup_first	  s    



z)TestPositionalsGroups.test_nongroup_firstc                 C   sZ   t  }|d}|d |d |d tdddd}|d	 }| || d S )
Nxxxrm   r   r   ro  r  rZ  r  r  r]   rn   rh   r:   rY   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  rm   r   r   r   frellro  r  rZ  r  )rm   r   r   r  z1 2 3 4r  r  r
   r
   r   test_interleaved_groups0	  s    





z-TestPositionalsGroups.test_interleaved_groupsN)r   r   r	   r  r  r  r
   r
   r
   r   r  	  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   r4  r7   r
   r
   r   r5  C	  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   rH  r  z--dr  r   r   r   )r^   r   r]   wxyz_parentrh   rn   abcd_parentw_parentz_parentab_mutex_parentadd_mutually_exclusive_groupr   r"   basenamerR   ru   main_program)r   Zx_groupc_groupro   r_   r
   r   r   F	  s(    



zTestParentParsers.setUpc                 C   s2   t | jgd}| |d tdddd d S )Nparentsz-y 1 2 --w 3rZ  ro  r  r-   r   r   )r]   r  r   rY   r   r:   r.  r
   r
   r   test_single_parentb	  s    z$TestParentParsers.test_single_parentc                 C   s,   |  | jj t| jgd}|  |j d S Nr  )_test_mutex_abr  rY   r]   r.  r
   r
   r   test_single_parent_mutexg	  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  r]   r  rY   r   r  ri   r
   r
   r   test_single_granparent_mutexl	  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  TrH  rJ  )r   r:   r5  )r   rY   r
   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 4rZ  ro  r  r  )r   r
  r  r-   r   r   )r  r  r]   r   rY   r   r:   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  rZ  )r   r
  r-   r   r   z-a --w 2 3 -bz-a -b --w 2 3)r  r  r]   r   rY   r   r:   r5  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   r4  ArgumentErrorr5  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   r4  r  r5  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  rn  r  r  )r  r  r]   r   rY   r   r:   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  r$  zbar -b 1 --d 2 3 4rZ  ro  r  r  )r   r
  r  r$  )	r]   rL  rN  r  rh   r   rY   r   r:   )r   ri   rP  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 )Nrm   r  r  r  r   r$  zfoo -a 4TFr  r	  zbar -b  --w 2 3 4r  rZ  )r   r
  r-   r   r   r$  zfoo -a -b 4zbar -b -a 4)r]   rL  r  rN  rn   rh   r  r   rY   r   r:   r5  )r   ri   rP  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  r]   rt  r  r   ru  rv  format)r   r  ri   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rB  r9  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   )r]   rn   rh   r  r   rI   rY   rt  r  r   ru  rv  r  )r   parentr   r  ri   r  r  r
   r
   r   test_groups_parents	  s     





z%TestParentParsers.test_groups_parents)r   r   r	   r5  r   r  r  r  r  r  r  r  r  r  r  r  r  r  rc   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 )Nrm   )rB  )r]   r   r   r  )r   ri   raisesr
   r
   r   test_invalid_add_argument_group	  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   Trj  r   r  r  rO   )r]   r  rh   r   r  r4  PARSER)r   ri   ro   rh   r  r
   r
   r   test_invalid_add_argument	  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 )Nr6  r8  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
              )r]   r  rh   r   rt  ru  rv  )r   ri   Zgroup1group2r  r
   r
   r   rw  
  s    

z*TestMutuallyExclusiveGroupErrors.test_helpc                 C   sJ   t  }| }| t |dg W d    n1 s<0    Y  d S )Nr   )r4  r5  r  r   r  rY   r   ri   ro   r
   r
   r   test_empty_group
  s    z1TestMutuallyExclusiveGroupErrors.test_empty_groupN)r   r   r	   r  r  rw  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 )MEMixinc                 C   s4   | j ddj}t}| jD ]}| |||  qd S NFrj  
get_parserrY   rI   r   r   r   r   rY   rb   args_stringr
   r
   r   test_failures_when_not_required"
  s    
z'MEMixin.test_failures_when_not_requiredc                 C   s:   | j ddj}t}| jdg D ]}| |||  qd S )NTrj  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  rY   r   successes_when_not_requiredr   r   )r   rY   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 NTrj  )r  rY   r   r   r   )r   rY   r  r   r  r
   r
   r   test_successes_when_required5
  s    z$MEMixin.test_successes_when_requiredc                 C   s,   | j ddj}| j}| | t| d S r  )r  rs  usage_when_not_requiredr   ru  rv  r   rs  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  rs  usage_when_requiredr   ru  rv  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  rt  r  r<  r   ru  rv  r   rt  r<  r
   r
   r   test_help_when_not_requiredE
  s    z#MEMixin.test_help_when_not_requiredc                 C   s2   | j ddj}| j| j }| | t| d S r  )r  rt  r  r<  r   ru  rv  r  r
   r
   r   test_help_when_requiredJ
  s    zMEMixin.test_help_when_requiredN)r   r   r	   r  r  r  r  r  r  r  r  r
   r
   r
   r   r   
  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 )Nr6  r  rj  r   r>  r|  r   r  r  baz help)r  r   r<  r]   r  rh   r   r(  ri   ro   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   r:   r   r  r  r  r<  r
   r
   r
   r   r  P
  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 )Nr6  r  z--abcdez
abcde helpr|  z--fghijz
fghij helprj  z--klmnoz
klmno helpz--pqrstz
pqrst helpr]   rh   r  r  r
   r
   r   r  u
  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
  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 )
Nr6  r  rj  r   r|  r   r/  rH  r;  r]   r  rh   r4  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 )Nr6  r  rj  --spamr   r;  r   r/  z	--bladderr|  r  )r   r(  ri   ro   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   r:   r   r  r  r  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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 )Nr6  r  rj  r   r   FOOr;  r  SPAMr|  r   r  r   BADGERr  r   r<  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   )rm   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 )Nr6  r  r   r   rF  r;  rj  r  a helprH  b helpr   rH  rJ  c helpr  r  r
   r
   r   r    s    
z.TestMutuallyExclusiveOptionalsMixed.get_parser)z-a -b-b -cz-a -cz-a -b -cr  TFr   r
  r  r   r   rH  rJ  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    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 )Nr6  r  zTitled groupzGroup descriptionr  rj  r   r>  r|  r   r  )r]   rn   r  rh   )r   r(  ri   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 )Nr6  r  r   rF  r|  r   r   rH  r;  rj  r   r  r  rK  rH  r  rJ  r  r  r  r
   r
   r   r  d  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  b  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 )
Nr6  r  rj  r  rH  rJ  z-dz-er   r  )r   r(  ri   ro   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  r<  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 )Nrj  F)r8  r   r  )r^   r  r  r]   r8  )r   r(  r  ri   r_   r
   r   r    s
    
zMEPBase.get_parser)N)r   r   r	   r  rc   r
   r
   r_   r   r    s   r  c                   @   s   e Zd ZdS )&TestMutuallyExclusiveGroupErrorsParentNr   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    s   r  c                   @   s   e Zd ZdS ))TestMutuallyExclusiveOptionalsMixedParentNr   r
   r
   r
   r   r     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 )
Nrm   r   r   rO   )r   r   r   r   r  )r   r   r]   set_defaultsr   r:   rY   r.  r
   r
   r   test_set_defaults_no_args  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 )Nrm   r   r   r   Zxfooxr   r   r   ro  r)  )r]   r  rh   r   r:   rY   r   r.  r
   r
   r   test_set_defaults_with_args  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 )Nrm   r   r   r   r-  r   )r]   r  rL  rN  r   r:   rY   r   )r   ri   rP  Zparser_ar
   r
   r   test_set_defaults_subparsers  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  rm   r   r  r  )r   r  ri   r
   r
   r   test_set_defaults_parents  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   rO   r   r  )r4  r5  rL  rN  r  r   r:   rY   )r   ri   Zxparserr
   r
   r   )test_set_defaults_on_parent_and_subparser  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)r]   r  rh   r   r:   rY   r.  r
   r
   r   &test_set_defaults_same_as_add_argument!  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  rm   r   r   r  r   r   r  r  r   r  r  r  r  )r]   r  rn   rh   r   r:   rY   r  r
   r
   r   ,test_set_defaults_same_as_add_argument_group2  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    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 )	Nrm   r   r   r   r   r  r   r   )r]   rg  get_defaultrh   r  r   r  r.  r
   r
   r   test_get_defaultK  s    
zTestGetDefault.test_get_defaultN)r   r   r	   r  r
   r
   r
   r   r  I  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   )r4  	NamespaceassertNotInr   nsr
   r
   r   
test_emptyb  s    z&TestNamespaceContainsSimple.test_emptyc                 C   sN   t jddd}| d| | d| | d| | d| | d| d S )	NrO   r  r   r   r   r   xxr   )r4  r  r  r7  r  r
   r
   r   test_non_emptyg  s    z*TestNamespaceContainsSimple.test_non_emptyN)r   r   r	   r  r  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
   rx   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   rU   )r   Z
test_classr  r   ry   r   r  r
   r
   r   r8   {  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 )Nrj   argument_group_signaturessubparsers_signatures)
r4  r5  rf   r5   r6   rT   rh   rn   rL  rN  )r   r   ri   Zargument_sigZ
group_sigsZ	group_sigZargument_sigsro   Zsubparsers_sigsrP  Zsubparser_sigr
   r
   r   r     s4    




zBTestHelpFormattingMetaclass.__init__.<locals>.AddTests._get_parserc                 S   s&   t || j}t|}||| d S r   )rT   r  ru  rv  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   rT   r  r'  )r   r   ri   r  r
   r
   r   r!    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   rT   r  rR   r   rU   r   rX   r'  )r   r   ri   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   rT   r  r   rX   r'  )r   r   ri   r)  Zsfiler&  r
   r
   r   r#    s    
zFTestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_print_fileN)	r   r   r	   r8   r   r'  r!  r"  r#  r
   r
   r
   r   r   y  s   r   ))usagerL   )r<  rL   )r   )r   r+   r   r   r   r  r   r
   r
   r   r8   u  s
    Hz$TestHelpFormattingMetaclass.__init__Nr9   r
   r
   r
   r   r  s  s   r  r  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 )TestHelpBiggerOptionalsr6  DESCRIPTIONEPILOGr8  r9  epilogr   r  r  0.1r  r   r   X HELPr;  --yY HELPr|  rm   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	   r4   rf   rj   r$  r*  r<  r  r
   r
   r
   r   r+    s   


r+  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     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   r+  rf   rj   r$  r*  r<  r  r
   r
   r
   r   r8    s   	r8  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 )"TestHelpBiggerOptionalGroupsr6  r,  r-  r.  r   r  r  r0  r  r   r   r1  r;  r2  r3  r|  rm   r4  r   r5  zGROUP TITLEzGROUP DESCRIPTIONrD  r   zBAZ HELPr   r  zZ HELPrK  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
    r6  Nr7  r
   r
   r
   r   r9  $  s"   




r9  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USAGEr,  r*  r9  r   r   r1  r;  r2  r3  r|  ZekiekiekifekangzEKI HELPr   r5          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   Nr7  r
   r
   r
   r   r:  S  s   


r:  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 )TestHelpReformattingr6  ze   oddly    formatted
description

that is so long that it should go onto multiple lines when wrappedr=  r   r  zoddly
    formatted -x helpr@  r<  r   r   znormal y helprB  z'
    oddly formatted group

descriptionrD  r  r   z` oddly 
formatted    -a  help  
    again, so long that it should be wrapped over multiple linesr;  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   Nr7  r
   r
   r
   r   r>  r  s    
r>  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 )TestHelpWrappingShortNamesr6  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
Dr=  r   r  zxXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXr?  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 HHAr;  r@  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   Nr7  r
   r
   r
   r   rA    s   rA  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 )TestHelpWrappingLongNamesr;  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 Dr<  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 XHr?  r   ZyyyyyyyyyyyyyyyyyyyyyyyyyrB  rC  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 ZHr=  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
        Nr7  r
   r
   r
   r   rD    s   rD  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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 )(TestHelpUsager6  r  r   r  r-   rK  r   r  r   r   r|  r
  r  )r<  r  r  r  r   zWhether to foo)r<  r   r   zWhether to barT)r<  r   r   r   z--foobarz--barfoor   ro   r   r   r   r  r   r  r$  a          usage: PROG [-h] [-w W [W ...]] [-x [X ...]] [--foo | --no-foo]
                    [--bar | --no-bar]
                    [-f | --foobar | --no-foobar | --barfoo | --no-barfoo] [-y [Y]]
                    [-z Z Z Z]
                    a b b [c] [d ...] e [e ...]
        ao  
        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

        group:
          -y [Y]                y
          -z Z Z Z              z
          d                     d
          e                     e
        r   N)r   r   r	   r4   rf   r4  r6  rj   r$  r*  r<  r  r
   r
   r
   r   rF    s,   

rF  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 )TestHelpOnlyUserGroupsr6  Fr8  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   Nr7  r
   r
   r
   r   rG  :  s   





rG  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
  r@  r   r   r   r
  zz        usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               [-h] [-w W] [-x X] a b
        z
        positional arguments:
          a
          b

        optional arguments:
          -h, --help  show this help message and exit
          -w W
          -x X
        r   Nr7  r
   r
   r
   r   rI  Y  s   


rI  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 ) TestHelpUsageLongProgOptionsWraprJ  r  r   WWWWWWWWWWWWWWWWWWWWWWWWWrK  r   rE  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   Nr7  r
   r
   r
   r   rL  v  s   




rL  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 )$TestHelpUsageLongProgPositionalsWraprJ  FrH  aaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccz        usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
               ccccccccccccccccccccccccc
        
        positional arguments:
          aaaaaaaaaaaaaaaaaaaaaaaaa
          bbbbbbbbbbbbbbbbbbbbbbbbb
          ccccccccccccccccccccccccc
        r   Nr7  r
   r
   r
   r   rP    s   rP  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 )TestHelpUsageOptionalsWrapr6  r  r   rM  rK  r   rE  r   rN  r   rO  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   Nr7  r
   r
   r
   r   rU    s   




	rU  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 )TestHelpUsagePositionalsWrapr6  r  r   r   r   rQ  rR  rS  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   Nr7  r
   r
   r
   r   rV    s   
rV  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 )%TestHelpUsageOptionalsPositionalsWrapr6  r  r   rE  rK  r   rN  r   rO  rQ  rR  rS  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   Nr7  r
   r
   r
   r   rW    s   



rW  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 )TestHelpUsageOptionalsOnlyWrapr6  r  r   rE  rK  r   rN  r   rO  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   Nr7  r
   r
   r
   r   rX    s   



rX  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 ) TestHelpUsagePositionalsOnlyWrapr6  FrH  rQ  rR  rS  z~        usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
                    ccccccccccccccccccccccccc
        rT  r   Nr7  r
   r
   r
   r   rY  9  s   rY  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 )(TestHelpVariableExpansionr6  r  r   z"x %(prog)s %(default)s %(type)s %%r?  r   r   r   XXXz y %(prog)s %(default)s %(const)s)r   r   r   r<  r   r  z$foo %(prog)s %(default)s %(choices)srG  r   r   rO   r  ZBBBz!bar %(prog)s %(default)s %(dest)s)r   r   r@  r<  r  zspam %(prog)s %(default)sr|  r   r  zbadger %(prog)s %(default)s)r   r<  ro   r  za %(prog)s %(default)srH  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	   r4   rf   r  rj   r$  r*  r<  r  r
   r
   r
   r   rZ  Q  s0   



rZ  c                   @   s0   e Zd ZedddZg Zg ZdZed ZdZ	dS )&TestHelpVariableExpansionUsageSuppliedr6  z%(prog)s FOOr8  r*  z         usage: PROG FOO
        r  r   Nr7  r
   r
   r
   r   r\    s   r\  c                   @   s,   e Zd ZedddZg Zg ZdZeZdZ	dS )$TestHelpVariableExpansionNoArgumentsr6  FrH  z        usage: PROG
        r   Nr7  r
   r
   r
   r   r^    s   r^  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 )TestHelpSuppressUsager6  r]  r   r:  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	   r4   r4  r  rf   rj   r$  r<  r*  r  r
   r
   r
   r   r_    s   

r_  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 )TestHelpSuppressOptionalr6  FrH  r   r|  r  r`  z!        usage: PROG spam
        zA
        positional arguments:
          spam  spam help
        r   Nr   r   r	   r4   rf   r4  r  rj   r$  r*  r<  r  r
   r
   r
   r   ra    s   
ra  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 )TestHelpSuppressOptionalGroupr6  r  r   r:  r|  r  r`  ro   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	   r4   rf   rj   r4  r  r$  r*  r<  r  r
   r
   r
   r   rc    s   


	rc  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 )TestHelpSuppressPositionalr6  r  r   r:  r|  r  z-        usage: PROG [-h] [--foo FOO]
        z
        optional arguments:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        r   Nrb  r
   r
   r
   r   rf    s   

rf  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 )TestHelpRequiredOptionalr6  r  r   Tr:  )r(  r<  z+        usage: PROG [-h] --foo FOO
        rg  r   Nr7  r
   r
   r
   r   rh    s   
rh  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 )TestHelpAlternatePrefixCharsr6  z^;F)r8  r   r   z^^foor   r:  r;  z;bz;;barr>  r|  z-        usage: PROG [^^foo] [;b BAR]
        zq
        optional arguments:
          ^^foo              foo help
          ;b BAR, ;;bar BAR  bar help
        r   Nr7  r
   r
   r
   r   ri  	  s   ri  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 )TestHelpNoHelpOptionalr6  FrH  r   r:  r|  r  r`  z-        usage: PROG [--foo FOO] spam
        z
        positional arguments:
          spam       spam help

        optional arguments:
          --foo FOO  foo help
        r   Nr7  r
   r
   r
   r   rj    s   

rj  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 )	TestHelpNoner6  r  r   r  rd  z
        positional arguments:
          spam

        optional arguments:
          -h, --help  show this help message and exit
          --foo FOO
        r   Nr7  r
   r
   r
   r   rk  5  s   
	rk  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 )TestHelpTupleMetavarr6  r  r   r-   r  )ZW1ZW2)r<  r  r@  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   Nr7  r
   r
   r
   r   rl  M  s   
	rl  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 )TestHelpRawTextr6  7Keep the formatting
    exactly as it is written

here
r8  formatter_classr9  r   z-    foo help should also
appear as given herer|  r  r`  rB  ?    This text
  should be indented
    exactly like it is here
rD  r   r>  >        usage: PROG [-h] [--foo FOO] [--bar BAR] spam
        a  
        Keep the formatting
            exactly as it is written

        here

        positional arguments:
          spam        spam help

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

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

          --bar BAR   bar help
        r   N)r   r   r	   r4   r4  RawTextHelpFormatterrf   rj   r$  r*  r<  r  r
   r
   r
   r   rm  h  s   


rm  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 )TestHelpRawDescriptionr6  rn  ro  r   z4  foo help should not
    retain this odd formattingr|  r  r`  rB  rq  rD  r   r>  rr  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	   r4   r4  RawDescriptionHelpFormatterrf   rj   r$  r*  r<  r  r
   r
   r
   r   rt    s   


rt  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 )#TestHelpArgumentDefaultsr6  r9  ro  r   z)foo help - oh and by the way, %(default)sr|  r   r   r>  r;  z--tazzWhether to taz itT)r   r<  r   z--quuxzSet the quuxr   )r<  r   r  r`  r   r  Zwoodenzbadger helpr  rB  rD  r   r  )rC   r   r<  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	   r4   r4  ArgumentDefaultsHelpFormatterrf   r6  rj   r  r$  r*  r<  r  r
   r
   r
   r   rv    s(   



rv  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 )TestHelpVersionActionr6  r9  r=  -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   Nr7  r
   r
   r
   r   rx    s   rx  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 )TestHelpVersionActionSuppressr6  r  r   r  r  r  )r   r  r<  r   r:  r|  r  r`  rd  re  N)r   r   r	   r4   rf   r4  r  rj   r$  r*  r<  r
   r
   r
   r   rz    s   



rz  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 )TestHelpSubparsersOrderingr6  display some subcommandsr=  r   r  r  r0  r  c                 C   s   g | ]}t |d qS )r  r4   )r=   r+   r
   r
   r   r?   +  s   z%TestHelpSubparsersOrdering.<listcomp>)r   r
  r  r  r$  6        usage: PROG [-h] [-v] {a,b,c,d,e} ...
        z
        display some subcommands

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

        optional arguments:
          -h, --help     show this help message and exit
          -v, --version  show program's version number and exit
        r6  N)
r   r   r	   r4   rf   rj   r%  r*  r<  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 )"TestHelpSubparsersWithHelpOrderingr6  r|  r=  r   r  r  r0  r  ))r   za subcommand help)r
  zb subcommand help)r  zc subcommand help)r  zd subcommand help)r$  ze subcommand helpc                 C   s   g | ]\}}t ||d qS ))r+   r<  r}  )r=   r+   r<  r
   r
   r   r?   O  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
        r6  N)r   r   r	   r4   rf   rj   Zsubcommand_datar%  r*  r<  r  r
   r
   r
   r   r  B  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_typeo  s    z(TestHelpMetavarTypeFormatter.custom_typer6  r9  )r8  r9  rp  r   r  rH  rJ  z
SOME FLOAT)rC   r@  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  r4   r4  MetavarTypeHelpFormatterrf   r  r  rj   r$  r*  r<  r  r
   r
   r
   r   r  m  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   )r4  r5  r   r   rh   r   r5   r6   ri   r
   r
   r   assertTypeError  s    z/TestInvalidArgumentConstructors.assertTypeErrorc                 O   s(   t  }| jt|jg|R i | d S r   )r4  r5  r   r  rh   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   rm   )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)r>  r+  r   r  r   r   r
   r
   r   test_missing_destination  s    z8TestInvalidArgumentConstructors.test_missing_destinationc                 C   s   |  d |  d d S )NrY  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   rm   r   r   r   r+  r>  z
store-truezunknown action)	r  r4  r5  r   r  rh   r7  r   r8  r9  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 )Nrm   r   r   r   z+dest supplied twice for positional argument)r4  r5  rh   r   r  r7  r   r8  r9  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/  rI  rS  r  r  r  abr  r   r   )r   )rM  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/  rS  r   rm   r3  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  )rO   r  r  rm   )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   rI  r   r  r  r  r  r
   r
   r   test_required_const_actions  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 )Nr_  parsersr   r6  )r   r8  )r   rg   )r  r4  r5  r   r
   r
   r   "test_parsers_action_missing_params  s
    zBTestInvalidArgumentConstructors.test_parsers_action_missing_paramsc                 C   s   | j ddd d S )Nrm   Trj  r  r   r
   r
   r   test_required_positional  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   Success  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   r(  r  r
   r   r8     s    zQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__init__c                 _   s   d S r   r
   r7   r
   r
   r   r%    s    zQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__call__N)F)r   r   r	   r8   r%  r
   r  r
   r   r*    s    r*  r  )r   r   r   r  )rJ   r   r4  r5  r   rh   )r   r*  ri   r
   r  r   test_user_defined_action  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   rm   rH  r   r   r   r   r   )r4  r5  rh   r   r   r   ri   r   r
   r
   r   r]    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  rO   r  r  ZBARr   )r  r   r   rC   r   r<  r@  r   )r4  r5  rh   r  r   r  r   r   rC   r   r<  r@  r   r  r
   r
   r   	test_misc  s    

zTestActionsReturned.test_miscN)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 )TestConflictHandlingc                 C   s   | j ttjdd d S )Nrm   )conflict_handler)r   r  r4  r5  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  )r4  r5  rh   r   r  r.  r
   r
   r   test_conflict_error0  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 )Nr6  resolve)r8  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_SPAMrK  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
            )r4  r5  rh   r   rt  ru  rv  )r   r  ri   r
   r
   r   test_resolve_error9  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   rI   rY   r   r   rt  r8  rL   )r   ri   r   r:  r
   r
   r   assertPrintHelpExitZ  s    ,z3TestOptionalsHelpVersionActions.assertPrintHelpExitc                 G   s   |  t|j| d S r   )r   rI   rY   r   ri   r5   r
   r
   r   r5  _  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r]   rh   r  r   AttributeErrorrT   r.  r
   r
   r   test_versionb  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
r]   rh   r   rI   rY   r   r8  rL   r9  r
   r
   r   test_version_formati  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  )r]   rh   r5  r   r  rT   r.  r
   r
   r   test_version_no_helpp  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 )Nr[  r  ry  r  z%(prog)s 3.7r  zXXX 3.7
r  r9  r
   r
   r   test_version_actionw  s
    
*z3TestOptionalsHelpVersionActions.test_version_actionc                 C   s>   t dd}| |d | |d | |d | |d d S )NFr  r   r   r   r  )r]   r5  r.  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   r<  r   r   r  r   r  r  )r]   rh   r  r5  r   r  rT   r.  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   rm   z-x barzbaz -xz--bad-optionzfoo bar bazz	%s %%s %sr   r   r  r  )r   ri   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  r5  r  r  r  r  r  r  r  r
   r
   r
   r   r  W  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   s6   t jg dddddg dddd	}d
}| || d S )N)r   r  rH  r
  r  r  r   rO   r  r  ZHELPZMETAVARr  r   rC   r  r   r   r<  r@  zAction(option_strings=['--foo', '-a', '-b'], dest='b', nargs='+', const=None, default=42, type='int', choices=[1, 2, 3], help='HELP', metavar='METAVAR'))r4  r*  r  )r   optionr  r
   r
   r   test_optional  s    
zTestStrings.test_optionalc              
   C   s6   t jg dtddg dddd}dt }| || d S )	Nr   r  r  )r  g      ?r  z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], help='H HH H', metavar='MV MV MV'))r4  r*  r  r  )r   argumentr  r
   r
   r   test_argument  s    
zTestStrings.test_argumentc                 C   s"   t jddd}d}| || d S )Nr   r  rq  zNamespace(foo=42, bar='spam')r4  r  r  r   r  r  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   rO   r  r  z Namespace(a=1, **{'"': 'quote'})r  r  r
   r
   r   2test_namespace_kwargs_and_starkwargs_notidentifier  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_identifier  s    z0TestStrings.test_namespace_starkwargs_identifierc                 C   s&   t jdd}dt j }| || d S )Nr6  r  zvArgumentParser(prog='PROG', usage=None, description=None, formatter_class=%r, conflict_handler='error', add_help=True))r4  r5  HelpFormatterr  )r   ri   r  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  )r4  r  r   r  rT   r   r   r
  r  r
   r
   r   test_constructor  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 )NrO   r  r  )r
  r   )r   rM  )r4  r  r   ZassertNotEqual
assertTrue)r   Zns1Zns2Zns3Zns4r
   r
   r   test_equality  s    zTestNamespace.test_equalityc                 C   s6   t jddd}| |d t | |d t d S )NrO   r  r  )r4  r  ZassertIsrH   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    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.pyr_  zutf-8r  )r   r"   splitextr.   r  )r   r"   rw   r   r
   r
   r   _test_module_encoding  s    z"TestEncoding._test_module_encodingc                 C   s   |  tj d S r   )r  r4  __file__r   r
   r
   r   test_argparse_module_encoding  s    z*TestEncoding.test_argparse_module_encodingc                 C   s   |  t d S r   )r  r  r   r
   r
   r   "test_test_argparse_module_encoding  s    z/TestEncoding.test_test_argparse_module_encodingN)r   r   r	   r  r  r  r
   r
   r
   r   r    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)r4  r  r   r   )r   r   rb   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!)r4  ArgumentTypeErrorr  r
   r
   r   r  0  s    z<TestArgumentTypeError.test_argument_type_error.<locals>.spamr6  FrH  r   r  r[  z-usage: PROG x
PROG: error: argument x: spam!
)r]   rh   r   rI   rY   r   r8  rM   )r   r  ri   r:  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 )Nr6  r   r]  req_posr  -req_optTr'  Zneed_oner  )rC   r  req_optZmyXargumentz
-req_opt=1)
r]   rh   r   r  r   rI   rY   r8  rl  r  r   ri   r:  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 )Nr6  r   r]  r  r  z	--req_optTr'  z	--opt_optr  )rC   r  r   r  Zopt_optz--req_opt=1)r]   rh   r   r  boolr   rI   rY   r8  rl  r  r  r
   r
   r   %test_optional_optional_not_in_messageY  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 )	Nr6  r   r]  r  Zoptional_positionalr  r
  r  )	r]   rh   r   rI   rY   r   r8  rl  r  r  r
   r
   r   'test_optional_positional_not_in_messagel  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   )r4  r5  rh   rY   r   r   r:   r   r  ri   r5   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   r4  r5  rh   rY   r   r:   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   r0    s    zYTestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_default.<locals>.extend--testr  r  z**)r  r  )r   r0  ri   r5   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  r>  )r   rC   r   r   )r4  r5  rh   r   rY   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
   r4  r5  rY   r.  r
   r
   r   test_arguments_tuple  s    z'TestParseKnownArgs.test_arguments_tuplec                 C   s   t  }|g  d S r   r  r.  r
   r
   r   test_arguments_list  s    z&TestParseKnownArgs.test_arguments_listc                 C   s    t  }|d |d d S )Nr   r   r4  r5  rh   rY   r.  r
   r
   r   test_arguments_tuple_positional  s    
z2TestParseKnownArgs.test_arguments_tuple_positionalc                 C   s"   t  }|d |dg d S )Nr   r  r.  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   )r4  r5  rh   r[  r   r   r:   )r   ri   r5   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  rO   )r  r   rC   r  r/  r   r   )r   r  r   r   rZ  r  r  Tr   )vr  r   )r  r   r  )r4  r5  rh   r  r[  r   r:   )r   ri   ru   r5   r  r
   r
   r   
test_mixed  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 )Nr6  r  r   rm   r   r   r   Trd  cmdrestr  )r  rC   zcmd --foo x 1 --bar y 2 3r   r   r  )r   r  rm   r  ro  r  rZ  z!cmd --foo x 1 --error 2 --bar y 3rO   )z--errorr  rZ  )r4  r5  rh   r  r   parse_intermixed_argsr   r:   r[  parse_known_intermixed_argsrg  r*  r(  )r   ri   r   ru   r5   r  r
   r
   r   
test_basic  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 )
Nr6  r  r   r   r   r  r  r  z\.\.\.)	r]   rh   r   r   r   r  rl  r   r8  )r   ri   ru   r:  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 )Nr6  r  Trj  r   r   r  r;  r  r  r|  r   r  r   r  r  z	1 --foo 2ro  r  )r   rm   r  rn  )
r]   r  rh   r  r   r   r:   r   rI   r(  )r   ri   ro   r5   r
   r
   r   test_exclusive  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 )Nr6  r  Trj  r   r   r  r;  r  r  r|  r   r  r   r  r  )r]   r  rh   r   r   r  r   r(  r  r
   r
   r   test_exclusive_incompatible  s    
z.TestIntermixedArgs.test_exclusive_incompatibleN)r   r   r	   r	  r
  r  r  r
   r
   r
   r   r    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 )
Nr6  r   r]  r  r  r  Tr'  r  )r]   rh   r   r  r   rI   rY   r8  rl  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  r@  )r4  r5  rh   )r   r  r@  ri   r
   r
   r   do_test_no_exceptionA  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   )	r4  r5  r   r  rh   r   r8  r5   EXPECTED_MESSAGE)r   r  r@  ri   r:  r
   r
   r   do_test_exceptionE  s    .z(TestAddArgumentMetavar.do_test_exceptionc                 C   s   | j d dd d S )Nro  r  r  r   r
   r
   r   test_nargs_None_metavar_stringM  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_length0P  s    z6TestAddArgumentMetavar.test_nargs_None_metavar_length0c                 C   s   | j d dd d S )Nro  r  r  r   r
   r
   r   test_nargs_None_metavar_length1S  s    z6TestAddArgumentMetavar.test_nargs_None_metavar_length1c                 C   s   | j d dd d S )Nro  r  r  r  r   r
   r
   r   test_nargs_None_metavar_length2V  s    z6TestAddArgumentMetavar.test_nargs_None_metavar_length2c                 C   s   | j d dd d S )Nr  r  r  r   r
   r
   r   test_nargs_None_metavar_length3Y  s    z6TestAddArgumentMetavar.test_nargs_None_metavar_length3c                 C   s   | j ddd d S )Nr  ro  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_length0a  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_length1d  s    z:TestAddArgumentMetavar.test_nargs_optional_metavar_length1c                 C   s   | j ddd d S )Nr  r  r  r  r   r
   r
   r   #test_nargs_optional_metavar_length2g  s    z:TestAddArgumentMetavar.test_nargs_optional_metavar_length2c                 C   s   | j ddd d S )Nr  r  r  r  r   r
   r
   r   #test_nargs_optional_metavar_length3j  s    z:TestAddArgumentMetavar.test_nargs_optional_metavar_length3c                 C   s   | j ddd d S )Nr  ro  r  r  r   r
   r
   r   $test_nargs_zeroormore_metavar_stringo  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_length0r  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_length1u  s    z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length1c                 C   s   | j ddd d S )Nr  r  r  r  r   r
   r
   r   %test_nargs_zeroormore_metavar_length2x  s    z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length2c                 C   s   | j ddd d S )Nr  r  r  r  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  ro  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  r  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  r  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  r  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  ro  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  r  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...ro  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 )Nr2  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 )Nr2  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 )Nr2  r  r  r  r   r
   r
   r   !test_nargs_parser_metavar_length2  s    z8TestAddArgumentMetavar.test_nargs_parser_metavar_length2c                 C   s   | j ddd d S )Nr2  r  r  r  r   r
   r
   r   !test_nargs_parser_metavar_length3  s    z8TestAddArgumentMetavar.test_nargs_parser_metavar_length3c                 C   s   | j ddd d S )NrO   ro  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 )NrO   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 )NrO   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 )NrO   r  r  r  r   r
   r
   r   test_nargs_1_metavar_length2  s    z3TestAddArgumentMetavar.test_nargs_1_metavar_length2c                 C   s   | j ddd d S )NrO   r  r  r  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  ro  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  r  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  r  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  r  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  ro  r  r  r   r
   r
   r   test_nargs_3_metavar_string  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_length0  s    z3TestAddArgumentMetavar.test_nargs_3_metavar_length0c                 C   s   | j ddd d S )Nr  r  r  r  r   r
   r
   r   test_nargs_3_metavar_length1  s    z3TestAddArgumentMetavar.test_nargs_3_metavar_length1c                 C   s   | j ddd d S )Nr  r  r  r  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  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  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   )	r4  r5  r   r  rh   r   r8  r5   EXPECTED_RANGE_MESSAGEr   r  ri   r:  r
   r
   r   do_test_range_exception  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 rH  )	r4  r5  r   r  rh   r   r8  r5   EXPECTED_INVALID_MESSAGErJ  r
   r
   r   do_test_invalid_exception  s    ,z*TestInvalidNargs.do_test_invalid_exceptionc                 C   s   | j dd | j dd d S )Nr   r  Zabcd)rM  r   r
   r
   r   test_nargs_alphabetic  s    z&TestInvalidNargs.test_nargs_alphabeticc                 C   s   | j dd d S )Nr   r  )rK  r   r
   r
   r   test_nargs_zero  s    z TestInvalidNargs.test_nargs_zeroN)	r   r   r	   rL  rI  rK  rM  rN  rO  r
   r
   r
   r   rG    s   rG  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   )r4  __all__r  r   r  r
   r
   r   r    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 )rw   ngettext)
startswithinspectZismodule)r=   r+   r  r
   r
   r   r?     s   
zJTestImportStar.test_all_exports_everything_but_modules.<locals>.<listcomp>)rE   r4  rB   r   rA   rQ  )r   rB   r
   r
   r   'test_all_exports_everything_but_modules  s    
z6TestImportStar.test_all_exports_everything_but_modulesN)r   r   r	   r  rU  r
   r
   r
   r   rP    s   rP  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--proxyrK  )r^   r   r]   ri   rh   )r   r@  r_   r
   r   r     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>
            )ri   rt  r   ru  rv  )r   	help_textr
   r
   r   test_help_with_metavar!  s    
z*TestWrappingMetavar.test_help_with_metavar)r   r   r	   r   rX  rc   r
   r
   r_   r   rV    s   
rV  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)r@  rC   )r4  r5  ri   rh   r  r   r
   r
   r   r   /  s    zTestExitOnError.setUpc                 C   s(   | j d }| |tjdd d S )Nz--integers 4r#  )Zintegers)ri   rY   r   r   r4  r  r  r
   r
   r   !test_exit_on_error_with_good_args3  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   r4  r  ri   rY   r   r   r
   r
   r    test_exit_on_error_with_bad_args7  s    z0TestExitOnError.test_exit_on_error_with_bad_argsN)r   r   r	   r   r\  r]  r
   r
   r
   r   rY  -  s   rY  c                   C   s   i t _t t_d S r   )r  r  r  r  r
   r
   r
   r   tearDownModule<  s    r^  __main__)rT  r   r&   r$   rR   ru  r   Zunittestr4  ior   r  r   r   r   r   r   r   r4   r:   rJ   rI   r\   r5  r]   rC   rd   r   re   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.  r0  r1  r<  r=  rE  rG  rQ  rR  rT  rV  r[  r]  ra  rb  re  rf  rh  ri  rj  rk  rl  rm  rp  rr  rs  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  r  r  Z	eq_stderrr  r  r  r  r  ZskipIfr   r  r  r  r  r  r	  r  r  r  r  r+  r/  r3  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+  r8  r9  r:  r>  rA  rD  rF  rG  rI  rL  rP  rU  rV  rW  rX  rY  rZ  r\  r^  r_  ra  rc  rf  rh  ri  rj  rk  rl  rm  rt  rv  rx  rz  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rG  rP  rV  rY  r^  r   mainr
   r
   r
   r   <module>   s  
!q







""C   (' 4-0#+!$-*(),	^R$7/4(66$&"$.10/+!~-LG%=1*? ) 