o
    GXhW                    @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZ d dl	mZ G dd dejZG dd de	jZG dd	 d	eZG d
d deZG dd deZG dd deZdd ZG dd de
jZG dd deZefZedei ZG dd deZG dd deZG dd deZ G dd deZ!G dd  d eZ"G d!d" d"eZ#G d#d$ d$eZ$G d%d& d&eZ%G d'd( d(eZ&G d)d* d*eZ'G d+d, d,eZ(G d-d. d.eZ)G d/d0 d0eZ*G d1d2 d2eZ+G d3d4 d4eZ,G d5d6 d6eZ-G d7d8 d8eZ.G d9d: d:eZ/G d;d< d<eZ0G d=d> d>eZ1G d?d@ d@eZ2G dAdB dBeZ3G dCdD dDeZ4G dEdF dFeZ5G dGdH dHeZ6G dIdJ dJeZ7G dKdL dLeZ8G dMdN dNeZ9G dOdP dPeZ:G dQdR dReZ;G dSdT dTeZ<G dUdV dVeZ=G dWdX dXeZ>G dYdZ dZeZ?G d[d\ d\eZ@G d]d^ d^eZAG d_d` d`eZBG dadb dbeZCG dcdd ddeZDG dedf dfeZEG dgdh dheZFG didj djeZGG dkdl dleZHG dmdn dneZIG dodp dpeZJG dqdr dreZKG dsdt dteZLG dudv dveZMG dwdx dxeZNG dydz dzeZOG d{d| d|eZPG d}d~ d~eZQG dd deZRG dd deZSG dd deZTG dd deZUG dd deZVG dd deZWG dd deZXG dd deZYG dd deZZG dd deZ[G dd deZ\G dd deZ]G dd deZ^G dd deZ_G dd deZ`G dd deZaG dd deZbG dd deZcG dd deZdG dd deZeG dd deZfG dd deZgG dd deZhG dd deZiG dd deZjG dd deZkG dd deZlG dd deZmG dd deZnG dd deZoG dd deZpG dd deeZqG dd deeZrG dd deZse Zte ZuG ddĄ dăZvevdŃZwevdƃZxevdǃZyevdȃZzevdɃZ{evdʃZ|G dd̄ deZ}G dd΄ deeZ~G ddЄ deeZG dd҄ deeZG ddԄ deZe	eedՃoe d kd֡G dd؄ deeZe	eedՃoe d kd֡G ddڄ deeZe	eedՃoe d kd֡G dd܄ deeZe	eedՃoe d kd֡G ddބ deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deeZG dd deeZG dd  d eeZG dd deeZG dd deeZG dd deeZG dd deeZG d	d
 d
eeZG dd deeZG dd deZG dd deeZG dd deeZG dd deeZG dd deeZG dd deeZG dd deeZG dd deeZG dd deeZG dd  d eZG d!d" d"eZG d#d$ d$eZG d%d& d&eZefZed'ei ZG d(d) d)eZG d*d+ d+eZG d,d- d-eZG d.d/ d/eZG d0d1 d1eZG d2d3 d3eZG d4d5 d5eZG d6d7 d7eZG d8d9 d9eZG d:d; d;eZG d<d= d=eZG d>d? d?eZG d@dA dAeZG dBdC dCeZG dDdE dEeZG dFdG dGeZG dHdI dIeZG dJdK dKeZG dLdM dMeZG dNdO dOeZG dPdQ dQeZG dRdS dSeZG dTdU dUeZG dVdW dWeZG dXdY dYeZG dZd[ d[eZG d\d] d]eZG d^d_ d_eZG d`da daeZG dbdc dceZG ddde deeZG dfdg dgeZG dhdi dieZG djdk dkeZG dldm dmeZG dndo doeZG dpdq dqeZG drds dseZG dtdu dueZG dvdw dweZG dxdy dyeZG dzd{ d{eZG d|d} d}eZG d~d deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZdd Zedkre	  dS dS (      N)	os_helper)mockc                       s(   e Zd Z	 d fdd	Zdd Z  ZS )StdIOBuffer 
c                    s,   | d}t jtt|d|d d S )Nutf-8)newline)encodesuper__init__ioBufferedWriterBytesIO)selfZinitial_valuer   	__class__ </opt/python-3.10.19/usr/lib/python3.10/test/test_argparse.pyr      s   

zStdIOBuffer.__init__c                 C   s   |    | jj dS )Nr   )flushbufferrawgetvaluedecoder   r   r   r   r       s   zStdIOBuffer.getvalue)r   r   )__name__
__module____qualname__r   r   __classcell__r   r   r   r   r      s    r   c                   @      e Zd Zdd ZdS )TestCasec                 C   s    t  }d|d< | |j d S )NZ80COLUMNS)r   EnvironmentVarGuard
addCleanup__exit__r   envr   r   r   setUp'   s   zTestCase.setUpN)r   r   r   r&   r   r   r   r   r   %       r   c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TempDirMixinc                 C   s$   t  | _t | _t| j d S N)tempfilemkdtemptemp_dirosgetcwdold_dirchdirr   r   r   r   r&   2   s   

zTempDirMixin.setUpc                 C   s^   t | j t j| jddD ]\}}}|D ]}t t j| j|tj	 qqt
| jd d S )NF)topdownT)r.   r1   r0   walkr-   chmodpathjoinstatS_IWRITEshutilrmtree)r   rootdirsfilesnamer   r   r   tearDown7   s   zTempDirMixin.tearDownc                 C   sN   t j| j|}t|ddd}|| W d    |S 1 s w   Y  |S )Nwr   encoding)r.   r5   r6   r-   openwrite)r   filenameZ	file_pathfiler   r   r   create_writable_file>   s   
z!TempDirMixin.create_writable_filec                 C   s   t | |tj d S r*   )r.   r4   rG   r7   S_IREAD)r   rE   r   r   r   create_readonly_fileD   s   z!TempDirMixin.create_readonly_fileN)r   r   r   r&   r?   rG   rI   r   r   r   r   r)   0   s
    r)   c                   @   r   )Sigc                 O   s   || _ || _d S r*   )argskwargsr   rK   rL   r   r   r   r   I   s   
zSig.__init__Nr   r   r   r   r   r   r   r   rJ   G   r'   rJ   c                   @   $   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   rL   r   r   r   r   P      zNS.__init__c                 C   s4   t | j }ddd |D }dt| j|f S )Nz, c                 S   s   g | ]}d | qS )z%s=%rr   ).0tupr   r   r   
<listcomp>U   s    zNS.__repr__.<locals>.<listcomp>z%s(%s))sortedrQ   itemsr6   typer   )r   Zsorted_itemsZ	kwarg_strr   r   r   __repr__S   s   zNS.__repr__c                 C   s   t | t |kS r*   )varsr   otherr   r   r   __eq__X   rS   z	NS.__eq__N)r   r   r   r   rZ   r^   r   r   r   r   rP   N   s    rP   c                   @      e Zd ZdddZdS )ArgumentParserErrorNc                 C   s,   t | ||| || _|| _|| _|| _d S r*   )	Exceptionr   messagestdoutstderr
error_code)r   rb   rc   rd   re   r   r   r   r   ^   s
   
zArgumentParserError.__init__)NNNrN   r   r   r   r   r`   \       r`   c              
   O   sF  t tjtst tjtr| |i |S tj}tj}t t_t t_zzzX| |i |}tt|D ]@}t||}|tju rCt||| q0|tjj	u rTt||t|dt
 q0|tju r`t||| q0|tjj	u rpt||t|dt q0|W W |t_|t_S  ty } z|j}	tj }
tj }td|
||	d d }~ww |t_|t_w )Nr   
SystemExit)
isinstancesysrd   r   rc   listr[   getattrsetattrr   BIN_STDOUT_SENTINELBIN_STDERR_SENTINELrg   coder   r`   )
parse_argsrK   rL   Z
old_stdoutZ
old_stderrresultkeyattrero   rc   rd   r   r   r   stderr_to_parser_errorf   sH   




ru   c                       s4   e Zd Z fddZ fddZ fddZ  ZS )ErrorRaisingArgumentParserc                    "   t t| j}t|g|R i |S r*   )r
   rv   rp   ru   )r   rK   rL   rp   r   r   r   rp         z%ErrorRaisingArgumentParser.parse_argsc                    rw   r*   )r
   rv   exitru   )r   rK   rL   ry   r   r   r   ry      rx   zErrorRaisingArgumentParser.exitc                    rw   r*   )r
   rv   errorru   )r   rK   rL   rz   r   r   r   rz      rx   z ErrorRaisingArgumentParser.error)r   r   r   rp   ry   rz   r   r   r   r   r   rv      s    rv   c                   @      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>q8d S )NParserTestCaseparser_signatureparser_classc                 S   s$   	 |D ]}| j |ji |j qd S r*   )add_argumentrK   rL   )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_groupr   rK   rL   )r   r   groupr   r   r   r   	one_group   s
   
z1ParserTesterMetaclass.__init__.<locals>.one_groupc                 S   s:   	 t |D ]\}}| d| }|j|ji |j qd S )Nzfoo:%i)	enumerater   r   rK   rL   )r   r   ir   r   r   r   r   many_groups   s
   z3ParserTesterMetaclass.__init__.<locals>.many_groupsc                 S   s   	 |  |S r*   )rp   )r   rK   r   r   r   listargs   s   
z0ParserTesterMetaclass.__init__.<locals>.listargsc                 S   s2   	 t j}|d g| t _z|  W |t _S |t _w )Nr   )ri   argvrp   )r   rK   Zold_sys_argvr   r   r   sysargs   s   z/ParserTesterMetaclass.__init__.<locals>.sysargsc                   @   r(   )
z0ParserTesterMetaclass.__init__.<locals>.AddTestsc              	   S   s   || _ || _| j j}| jj}| j| jfD ]*}|j}|||f}d|}	|fdd}
z|	|
_W n	 ty7   Y nw t||	|
 qd S )N_c                 S      ||  d S r*   r   r   	test_funcr   r   r   wrapper      zJParserTesterMetaclass.__init__.<locals>.AddTests.__init__.<locals>.wrapper)_add_arguments_parse_argsr   test_failurestest_successesr6   	TypeErrorrl   )r   Z
tester_clsadd_argumentsrp   Zadd_arguments_nameZparse_args_namer   	func_namenames	test_namer   r   r   r   r      s    


z9ParserTesterMetaclass.__init__.<locals>.AddTests.__init__c                 S   s2   |j j}|j j}|j|i |}| ||j |S r*   )r~   rK   rL   r   r   r   )r   testerrK   rL   r   r   r   r   _get_parser   s
   z<ParserTesterMetaclass.__init__.<locals>.AddTests._get_parserc              	   S   sZ   |  |}|jD ]"}| }|jt|d || W d    n1 s%w   Y  qd S )N)msg)r   failuressplitassertRaisesr`   rp   )r   r   r   args_strrK   r   r   r   r      s   

z>ParserTesterMetaclass.__init__.<locals>.AddTests.test_failuresc                 S   sH   |  |}|jD ]\}}t|tr| }| ||}||| qd S r*   )r   	successesrh   strr   r   assertEqual)r   r   r   rK   expected_nsZ	result_nsr   r   r   r      s   

z?ParserTesterMetaclass.__init__.<locals>.AddTests.test_successesN)r   r   r   r   r   r   r   r   r   r   r   AddTests   s
    r   )hasattrrJ   r~   rv   r   object)clsr>   basesbodydictr   r   r   r   r   r   r   rp   r   r   r   r      s"   

	-zParserTesterMetaclass.__init__NrN   r   r   r   r   r|      s    r|   r}   c                   @   `   e Zd Z	 edgZg dZdeddfdeddfdeddfd	ed
dfded
dfgZdS )TestOptionalsSingleDash-x)r   a--foo-x --fooz-x -yr   Nx-x ar   -xaz-x -1-1z-x-1r   r   r   rJ   r   r   rP   r   r   r   r   r   r         
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-xyzaz-x=r   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r   z-foo ar   z-foo -1r   z-fo a-f ar   r   r   r   r   r   ;  r   r   c                   @   s   e Zd Z	 edededgZg dZdeddddfded	dddfd
ed	dddfdeddddfdeddddfdedd	ddfdeddd	dfgZdS )&TestOptionalsSingleDashSubsetAmbiguous-f-foobar-foorab)r   r   -fo-foo bz-foobz-foobaz-foorar   N)ffoobarfoorabr   r   -fa-foaZoar   Zooa	-foobar a	-foorab ar   r   r   r   r   r   I  s    r   c                   @   s   e Zd Z	 ededgZg dZdedddfdedddfd	edddfd
edddfdedddfdedddfdedddfgZdS ) TestOptionalsSingleDashAmbiguousr   r   )r   r   r   r   r   r   r   r   N)r   r   z-foob ar   z-foor az-fooba az-foora ar   r   r   r   r   r   r   r   Y  s    r   c                   @   sX   e Zd Z	 edddgZg dZdeddfded	dfd
ed	dfdeddfgZdS )TestOptionalsNumericr   onedest)r   r   z-1 --fooz-1 -yz-1 -1z-1 -2r   N)r   z-1 ar   z-1az-1-2-2r   r   r   r   r   r   i  s    r   c                   @   r   )TestOptionalsDoubleDashr   )r   r   r   r   z--foo -xz--foo --barr   Nr   z--foo ar   z--foo=az
--foo -2.5z-2.5z
--foo=-2.5r   r   r   r   r   r   v  r   r   c                
   @   s   e Zd Z	 edddedgZg dZdeddd	fd
eddd	fdeddd	fdeddd	fdeddd	fdeddd	fgZdS )#TestOptionalsDoubleDashPartialMatch--badgerr   r   z--bat)--bar--b--ba--b=2z--ba=4	--badge 5r   FN)badgerZbatz--bat XX--badT--badg--badger   r   r   r   r   r     s    
r   c                   @   s   e Zd Z	 edddedgZg dZdeddd	fd
eddd	fdeddd	fdeddd	fdeddd	fdeddd	fdeddd	fgZdS )"TestOptionalsDoubleDashPrefixMatchr   r   r   r   )r   r   r   r   r   r   FN)r   Zbaz--ba Xr   z--ba=Xr   Tr   r   r   r   r   r   r   r     s    
r   c                   @   s   e Zd Z	 edddededdddgZg d	Zd
eddddfdeddddfdeddddfdeddddfdeddddfdeddddfgZdS )TestOptionalsSingleDoubleDashr   r   r   r   -bazr   r   r   )r   -fbarz-fbazz-bazf-b BBr   FNr   barbazTz--ba Br   z
-f --bar Bz-f -bz-ba -fr   r   r   r   r   r     s    
r   c                   @   s   e Zd Z	 edddZedddededd	d
dgZg dZdeddddfdeddddfdeddddfdeddddfdeddd
dfdeddd
dfgZdS )!TestOptionalsAlternatePrefixChars+:/Fprefix_charsadd_help+fr   r   ::bar/bazr   r   r   )r   r   r   r   r   --bar Br   -h--helpz+hz::helpz/helpr   Nr   T::ba Br   
+f ::bar B+f /b/ba +f	r   r   r   rJ   r~   r   r   rP   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                   @   sj   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                   @   sd   e Zd Z	 ededddgZdgZdeddd	fd
eddd	fdeddd	fdeddd	fgZdS )TestOptionalsDestz	--foo-bar--bazzabbazr   r   z--foo-bar fr   N)Zfoo_barr  z--baz ggz--foo-bar h --baz ihr   z--baz j --foo-bar kkjr   r   r   r   r   r    s    r  c                   @   sV   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                   @   sB   e Zd Z	 edddgZddgZdeddfdedgdfgZdS )	TestOptionalsNargs1r      nargsr   r   Nr   r   r   r   r   r   r   r  1  s    r  c                   @   sD   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  rY   r   r  2r   NT   r@   r   r  r   z-w 2z-x 2z-y 2z-z 2   	r   r   r   rJ   intr   r   rP   r   r   r   r   r   r(  G  s$    
r(  c                   @   s   e Zd Z	 edddeddddgZdgZded	dd
fdeg dd
fdedgdd
fdeddgdd
fded	g d
fded	dgd
fded	ddgd
fgZd	S )TestOptionalsNargsZeroOrMorer   *r  r   r*  r+  r   r   Nr  r   r"  r&  -y a-y a br   r   r   r   r   r3  ^  s    
r3  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&  r5  r6  r   r   r   r   r   r7  q  s    
r7  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   rY   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   rJ   r2  ranger   r   rP   r   r   r   r   r   r9    s    
r9  c                   @   sB   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rY   requiredr   r   -x 1r  r   z-x42r   Nr1  r   r   r   r   rB    s    rB  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-xfoor   r   r   r   r   r   rF        rF  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   rJ   r   r   r   rP   r   r   r   r   r   rI    s    rI  c                   @   @   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   rL    rH  rL  c                   @   rK  )
TestOptionalsActionStoreTruez--appler   r   )r   z	--apple=bz	--apple br   F)ZappleTNr   r   r   r   r   rN    rH  rN  c                   @   sn   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w   Y  | dt|j d S )Nr   Tr   r   z*got an unexpected keyword argument 'const')	argparseArgumentParserr   r   r   BooleanOptionalActionassertInr   	exceptionr   r   cmr   r   r   
test_const  s
   z$TestBooleanOptionalAction.test_const)r   r   r   rJ   rR  rT  r   r   rP   r   rY  r   r   r   r   rO    s    rO  c                   @   sB   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)rD  r   r   r   rP  FN)
r   r   r   rJ   rR  rT  r   r   rP   r   r   r   r   r   rZ    s    rZ  c                   @   sR   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                   @   sZ   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   r`  ra  r   rb  )r   r   r&  Nr   r   r   r   r   rc    s    rc  c                   @   sd   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   rh  za -cz-bxz-b xr   Nr&  -b -cx -b -cyzr   yz	r   r   r   rJ   ra   r   r   rP   r   r   r   r   r   re    s    re  c                	   @   sn   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 ))TestOptionalsActionAppendConstWithDefaultrf  rg  r   )r   r   r  rh  r\  r&  ri  rj  r   rk  rl  r   rm  Nrn  r   r   r   r   ro    s    ro  c                   @   s@   e Zd Z	 edddgZg dZdeddfdeddfgZdS )	TestOptionalsActionCountr   countr   )r   r   z-x bz	-x a -x br   Nr   r  r   r   r   r   r   rp  "  rH  rp  c                	   @   st   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)r   ZfoobazZfooblez--foo 77z	--fooba ar   z--foobl --foo gr  Tr   r   r   r   r   rr  -  s    
rr  c                   @   sn   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r   ZfoodleZfoonlyz--foo 33z--foonly 7 --foodle --foo 2r-  Trs  r  r   r   r   r   rt  >  s    

rt  c                   @   sp   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 )0TestOptionalsDisallowLongAbbreviationPrefixCharsr8  Fr   rv  z++fooz++foodler   r   z++foonly)z+foon 3z++foon 3z++foodz++food ++foo 2r   Nrw  z++foo 3rx  z++foonly 7 ++foodle ++foo 2r-  Trs  r  r   r   r   r   ry  O  s    
ry  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 )/TestDisallowLongAbbreviationAllowsShortGroupingFru  z-rrh  rq  r   z-c -rr   Nrr'  z-rar   z-rccccz-ccr0  z-cc -raz-ccrccr  r   r   r   r   r{  `  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 )5TestDisallowLongAbbreviationAllowsShortGroupingPrefixr8  Frz  z+rz+crq  r   z+c +rr   Nr|  z+rar   z+rccr~  z+ccr0  z+cc +raz+ccrccr  r   r   r   r   r  s  s    
r  c                   @   s0   e Zd Z	 edgZg dZdeddfgZdS )TestPositionalsNargsNoner   r   r   a br   r   Nr   r   r   r   r   r    s    
r  c                   @   s6   e Zd Z	 edddgZg dZdedgdfgZdS )TestPositionalsNargs1r   r  r  r  r   r   Nr   r   r   r   r   r    s    r  c                   @   s8   e Zd Z	 edddgZg dZdeddgdfgZd	S )
TestPositionalsNargs2r   r0  r  )r   r   r   a b cr  r   r&  r   Nr   r   r   r   r   r    s    r  c                   @   sP   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 )TestPositionalsNargsZeroOrMorer   r4  r  r   r   r   r   r  r&  Nr   r   r   r   r   r    s    r  c                   @   sR   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 )%TestPositionalsNargsZeroOrMoreDefaultr   r4  r   r+  r   r   r   r   r  r&  Nr   r   r   r   r   r    s    r  c                   @   sF   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 )TestPositionalsNargsOneOrMorer   r8  r  r   r   r   r   r  r&  Nr   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	dfgZdS )
TestPositionalsNargsOptionalr   r)  r  r   r  r   Nr   r   r   r   r   r   r   r    rH  r  c                   @   sB   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 )#TestPositionalsNargsOptionalDefaultr   r)  r   r+  r   r  r   r   r   Nr   r   r   r   r   r    s    r  c                   @   sD   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 ),TestPositionalsNargsOptionalConvertedDefaultr   r)  r,  )r  rY   r  )r   r  1 2r   r   r   1r  Nr1  r   r   r   r   r    s    r  c                   @   s8   e Zd Z	 ededgZg dZdedddfgZdS )	TestPositionalsNargsNoneNoner   r   )r   r   r   r  r  r   r&  r   r   Nr   r   r   r   r   r    s    r  c                   @   s>   e Zd Z	 ededddgZg dZdeddgd	fgZd
S )TestPositionalsNargsNone1r   r   r  r  )r   r   r   r  r  r   r&  r  Nr   r   r   r   r   r    s    r  c                   @   s@   e Zd Z	 edddedgZg dZdeddgd	d
fgZdS )TestPositionalsNargs2Noner   r0  r  r   r   r   r   r  a b c dr  r   r&  r'  r  Nr   r   r   r   r   r    s    r  c                   @   s^   e Zd Z	 ededddgZddgZdedg dfd	edd
gdfdedd
dgdfgZdS )"TestPositionalsNargsNoneZeroOrMorer   r   r4  r  r   r   r   r  r  r&  r  r'  Nr   r   r   r   r   r        r  c                   @   sP   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 )!TestPositionalsNargsNoneOneOrMorer   r   r8  r  r   r   r   r  r   r&  r  r  r'  Nr   r   r   r   r   r        r  c                   @   sJ   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 ) TestPositionalsNargsNoneOptionalr   r   r)  r  r   r   r  r   Nr  r  r&  r   r   r   r   r   r  %  s    r  c                   @   s^   e Zd Z	 edddedgZddgZdeg ddfd	edgd
dfdedd
gddfgZdS )"TestPositionalsNargsZeroOrMoreNoner   r4  r  r   r   r   r   r  r  r&  r  r'  Nr   r   r   r   r   r  0  r  r  c                   @   sP   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 )!TestPositionalsNargsOneOrMoreNoner   r8  r  r   r  r  r   r&  r  r  r'  Nr   r   r   r   r   r  <  r  r  c                   @   sL   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 ) TestPositionalsNargsOptionalNoner   r)  r   r+  r   r  r   r  r  r&  Nr   r   r   r   r   r  G  s    r  c                   @   sX   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 )TestPositionalsNargs2ZeroOrMorer   r0  r  r   r4  r  r  r   r&  r  r  r'  Nr   r   r   r   r   r  R      r  c                   @   sF   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 )TestPositionalsNargs2OneOrMorer   r0  r  r   r8  )r   r   r   r  r  r   r&  r'  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d
dfdedd	gddfgZd
S )TestPositionalsNargs2Optionalr   r0  r  r   r)  )r   r   r   r  r  r   r&  Nr  r  r'  r   r   r   r   r   r  g  s    r  c                   @   sh   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 )TestPositionalsNargsZeroOrMore1r   r4  r  r   r  r   r   r   r  r  r&  r  r'  Nr   r   r   r   r   r  r  s    r  c                   @   sX   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 )TestPositionalsNargsOneOrMore1r   r8  r  r   r  r  r  r   r&  r  r  r'  Nr   r   r   r   r   r  ~  r  r  c                   @   sR   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 )TestPositionalsNargsOptional1r   r)  r  r   r  r  r   Nr  r  r&  r   r   r   r   r   r    s    r  c                   @   s^   e Zd Z	 ededddedddgZg dZded	g d
gdfded	d
gdgdfgZdS )#TestPositionalsNargsNoneZeroOrMore1r   r   r4  r  r   r  r  r  r   r&  r   r   r   r  r'  Nr   r   r   r   r   r    s    

r  c                   @   sb   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 )"TestPositionalsNargsNoneOneOrMore1r   r   r8  r  r   r  )r   r   r   r&  r  r   r&  r'  r  r  dNr   r   r   r   r   r    s    

r  c                   @   s^   e Zd Z	 ededdddedddgZg d	Zd
edddgdfdedddgdfgZdS )!TestPositionalsNargsNoneOptional1r   r   r)        ?r+  r   r  r  r  r  r   r&  r  r  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 )$TestPositionalsNargsOptionalOptionalr   r)  r  r   r   r+  r   r  r   Nr  r   r  r&  r   r   r   r   r   r    s    
r  c                   @   sn   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 )&TestPositionalsNargsOptionalZeroOrMorer   r)  r  r   r4  r   r   Nr  r   r  r&  r  r'  r   r   r   r   r   r    s    r  c                   @   sd   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 )%TestPositionalsNargsOptionalOneOrMorer   r)  r  r   r8  r   r   r   Nr  r  r&  r  r'  r   r   r   r   r   r    s    r  c                   @   sD   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   rJ   setr   r   rP   r   r   r   r   r   r    s    r  c                   @   sF   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                   @   sH   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   r0  )r   r  r  r  r   r&  r'  r  Nr   r   r   r   r   r    s    
r  c                   @   sl   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                	   @   sx   e Zd Z	 edddeddddgZdgZd	ed
ddfdedddfdedddfded
ddfdedddfgZd
S )(TestOptionalsAlmostNumericAndPositionalsr   r)  r  z-k4r  r   r  z-k3r   NFr  r   r   Tz-k4 ar   r   r   r   r   r    s    
r  c                   @   s   e Zd ZedddeddddgZdgZdgedd	d
fdgedd	d
fdgedd	d
fddged	dd
fddged	dd
fddged	dd
fdged	dd
fdged	dd
fgZd	S )$TestEmptyAndSpaceContainingArgumentsr   r)  r  r   z--yyyr  r   r   Nr  za badgerz	-a badgerz--yyy=a badgerz--yyy=-a badgerr   r   r   r   r   r  0  s    
r  c                   @   s   e Zd ZeddZedddddedd	ed
deddddgZddgZdedd
ddfdedd
ddfdedd
ddfdeddddfdedd
ddfdedd
ddfgZ	dS ) TestPrefixCharacterOnlyArgumentsz-+r   -r   r)  r   )r   r  r   r8  r  r   )r   rY   r  z-+-r   r   r  r   z+ -r   NFr  z- Xr   z+ -3Tz- ===z===)
r   r   r   rJ   r~   r2  r   r   rP   r   r   r   r   r   r  C  s    
r  c                   @   s   e Zd Z	 edddedddgZg Zdedg dfdeg g dfded	gg dfd
ed	gdgdfd	edd	gdfdeg d	gdfdedgd	gdfgZdS )TestNargsZeroOrMorer   r4  r  r  r   Nr  r   r   z	-x a -- br&  r#  r$  r   r   r   r   r   r  V  s    r  c                	   @   s|   e Zd Z	 ededddedgZg dZdedg dd	fd
edg dd	fdedg ddd	fdedddgdd	fgZdS )TestNargsRemainderr   r  ...r  r   )r   r   z-z Zr   Nr  z-z Z XZ
X A B -z Z)Ar   r   r  z	X Y --fooYr   r   r   r   r   r   r  f  s    r  c                   @   s   e Zd Z	 ededededdedddgZg d	Zd
eddg dfdeddg dfdedddgdfdeddg dfdeddg dfdeddg dfdedddgdfdedddgdfdedddgdfdedddgdfdedddgdfgZdS )TestOptionLiker   rY   z-3r  )rY   r   r   r4  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   rJ   floatr   r   rP   r   r   r   r   r   r  s  s&    

r  c                   @   s   e Zd Z	 eddejdeddejdeddejdgZd	gZd
e fdeddfdeddgdfdeddfdedddfdeddgddfgZ	dS )TestDefaultSuppressr   r)  r+  r   r4  r  r   rd  r   r   r   r   r  r&  r  Tr`  r^  r   r   r_  r  N)
r   r   r   rJ   rR  SUPPRESSr   r   rP   r   r   r   r   r   r    s    r  c                   @   s   e Zd Z	 eejdZedddedddeddd	gZd
gZde	 fde	ddfde	ddgdfde	ddfde	dddfde	ddgddfgZ
dS )TestParserDefaultSuppressargument_defaultr   r)  r  r   r4  r  r   r   r   r   r   r   r  r&  r  Tr`  r^  r  r_  r  N)r   r   r   rJ   rR  r  r~   r   r   rP   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  r   r)  r  r   r4  r  r   r   r   r   )r   r   r   r  r   r  r&  Tr^  r_  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dd}|| W d    n1 s(w   Y  qd S )N)hellozhello world!
)	recursivez-a
A
@hello)invalidz@no-such-path
r@   r   rA   )r
   r  r&   rC   rD   r   Z
file_textsr5   textrF   r   r   r   r&     s   zTestArgumentsFromFile.setUp@fromfile_prefix_chars-ar   r  r8  r  )r   rf  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&   rJ   r~   r   r   rP   r   r   r   r   r   r   r    s"    

r  c                       sb   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              	      s^   t t|   dg}|D ] \}}t|ddd}|| W d    n1 s'w   Y  qd S )Nr  r@   r   rA   )r
   r  r&   rC   rD   r  r   r   r   r&     s   z$TestArgumentsFromFileConverter.setUpc                   @   r   )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  r'   r  r  r  r  r8  r  r  )r  zworld!r   rJ  )r   r   r   r&   rv   r  r   rJ   r~   r   r   rP   r   r   r   r   r   r   r    s    	

r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestFileTypeReprc                 C   s   t d}| dt| d S )Nr}  zFileType('r')rR  FileTyper   reprr   rY   r   r   r   test_r  s   
zTestFileTypeRepr.test_rc                 C   s    t dd}| dt| d S )Nwbr  zFileType('wb', 1)r  r  r   r   r   	test_wb_1  s   zTestFileTypeRepr.test_wb_1c                 C   s"   t jddd}| dt| d S )Nr}  latin_1rA   z!FileType('r', encoding='latin_1')r  r  r   r   r   test_r_latin  s   zTestFileTypeRepr.test_r_latinc                 C   $   t jdddd}| dt| d S )Nr@   big5ignore)rB   errorsz/FileType('w', encoding='big5', errors='ignore')r  r  r   r   r   test_w_big5_ignore  s   z#TestFileTypeRepr.test_w_big5_ignorec                 C   r  )Nr}  r  replacer  z"FileType('r', 1, errors='replace')r  r  r   r   r   test_r_1_replace!  s   z!TestFileTypeRepr.test_r_1_replaceN)r   r   r   r  r  r  r  r  r   r   r   r   r    s    r  c                   @      e Zd Zdd Zdd ZdS )StdStreamComparerc                 C   s<   t || _|dkrt| _d S |dkrt| _d S t | _d S )Nstdout.bufferstderr.buffer)operator
attrgetterrk   rm   
backupattrrn   r   )r   rs   r   r   r   r   +  s   

zStdStreamComparer.__init__c                 C   s.   z||  tkW S  ty   || jk Y S w r*   )rk   ri   AttributeErrorr  r\   r   r   r   r^   9  s
   zStdStreamComparer.__eq__Nr   r   r   r   r^   r   r   r   r   r  *  s    r  stdinrc   rd   zstdin.bufferr  r  c                   @   s    e Zd Zi Zdd Zdd ZdS )RFilec                 C   
   || _ d S r*   r>   r   r>   r   r   r   r   K     
zRFile.__init__c                 C   s`   || j v r| j | }n|  }| j |< |  t|ts"|d}| j|j  ko-|kS   S )Nascii)seenreadcloserh   r   r   r>   r   r]   r  r   r   r   r^   N  s   


zRFile.__eq__N)r   r   r   r  r   r^   r   r   r   r   r  H  s    r  c                	       s   e Zd Z	  fddZede dededdgZg dZde	d	e
dd
fde	e
de
dd
fde	e
de
dd
fde	eed
fde	d	e
dd
fgZ  ZS )TestFileTypeRc              	      sj   t t|   dD ]$}ttj| j|ddd}|| W d    n1 s(w   Y  q	| 	d d S )Nr  r@   r   rA   readonly)
r
   r  r&   rC   r.   r5   r6   r-   rD   rI   r   	file_namerF   r   r   r   r&   \  s   zTestFileTypeR.setUpr   r  r*  r}  )r   r   znon-existent-file.txtr   Nr   r*  
-x foo barr   
bar -x foo-x - -r  )r   r   r   r&   rJ   rR  r  r   r   rP   r  eq_stdinr   r   r   r   r   r   r  Y  s    	r  c                       sN   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}|d |	  d S )Ngoodr@   r   rA   )
r
   r  r&   rC   r.   r5   r6   r-   rD   r  )r   rF   r   r   r   r&   s  s   
zTestFileTypeDefaults.setUprh  r}  zno-file.txtrY   r  r   z-c goodr  )r'  )r   r   r   r&   rJ   rR  r  r   r   rP   r  r   r   r   r   r   r   r  q  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 ]$}ttj| j|ddd}|| W d    n1 s(w   Y  q	d S )Nr  r@   r   rA   )	r
   r  r&   rC   r.   r5   r6   r-   rD   r  r   r   r   r&     s   zTestFileTypeRB.setUpr   rbr  r*  r   r   Nr  r  r   r  r  )r   r   r   r&   rJ   rR  r  r   r   rP   r  	eq_bstdinr   r   r   r   r   r   r    s    r  c                   @   s"   e Zd Ze Zdd Zdd ZdS )WFilec                 C   r  r*   r  r  r   r   r   r     r	  zWFile.__init__c                 C   sL   || j vr d}d|jv r|d}|| |  | j | | j|jkS )NzCheck that file is writable.r&  r
  )r  moder	   rD   r  addr>   r  r   r   r   r^     s   



zWFile.__eq__N)r   r   r   r  r  r   r^   r   r   r   r   r    s    r  geteuidznon-root user requiredc                	       s   e Zd Z	  fddZededdededdgZg dZde	d	e
dd
fde	d	e
dd
fde	e
de
dd
fde	e
de
dd
fde	eed
fgZ  ZS )TestFileTypeWc                    "   t    | d | d d S Nr  writabler
   r&   rI   rG   r   r   r   r   r&        

zTestFileTypeW.setUpr   r@   r  r*  )r   r   r  r   Nr  r%  r  r   r  r  r   r   r   r&   rJ   rR  r  r   r   rP   r  	eq_stdoutr   r   r   r   r   r   r"    s    r"  c                       sr   e Zd Z	  fddZededdededdgZg dZde	e
d	e
d
dfde	eedfgZ  ZS )TestFileTypeXc                    r#  r$  r&  r   r   r   r   r&     r'  zTestFileTypeX.setUpr   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	 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   r   Nr  r  r   r  r  )r   r   r   rJ   rR  r  r   r   rP   r  
eq_bstdoutr   r   r   r   r   r+    s    r+  c                   @   sZ   e Zd Z	 ededdededdgZdeededdfd	ee	e	dfgZ
d
S )TestFileTypeXBr   xbr  r*  r  r   r   r  r  N)r   r   r   rJ   rR  r  r   rP   r  r,  r   r   r   r   r   r-    s    r-  c                   @   r{   )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}|D ]\}}|d |jdg|R   q.W d    d S 1 sKw   Y  d S )Nr  )r  NNr@   r  )r@   r  NNr  r  )r@   r0  Nr  r  r  rA   )r  r0  r  Nr   l1strict)r@   r   r1  r2  zbuiltins.openr   )rR  r  r   ZpatchZassert_called_with)r   ZFTcasesmrY   rK   r   r   r   test_open_args  s   
"z#TestFileTypeOpenArgs.test_open_argsN)r   r   r   r5  r   r   r   r   r/        r/  c                   @   r{   )!TestFileTypeMissingInitializationc                 C   s`   t  }| t}|jdt jd W d    n1 sw   Y  | dt jf t|j d S )Nr   r  z<%r is a FileType class object, instance of it must be passed)	rR  rS  r   
ValueErrorr   r  r   r   rV  rW  r   r   r   test  s   z&TestFileTypeMissingInitialization.testNr   r   r   r9  r   r   r   r   r7  	  s    r7  c                   @   s\   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   rJ   complexr  r   r   rP   r   r   r   r   r   r;    s    

r;  c                   @   sj   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                   @   r  )zTestTypeUserDefined.MyTypec                 C   r  r*   valuer   rA  r   r   r   r   /  r	  z#TestTypeUserDefined.MyType.__init__c                 C      t | | jft ||jfkS r*   rY   rA  r\   r   r   r   r^   2     z!TestTypeUserDefined.MyType.__eq__Nr  r   r   r   r   MyType-      rF  r   r  r*  r$  r&  r   r  -xf gr   r  N)
r   r   r   r   rF  rJ   r   r   rP   r   r   r   r   r   r?  *  s    
	
r?  c                   @   sh   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                   @   r  )zTestTypeClassicClass.Cc                 C   r  r*   r@  rB  r   r   r   r   E  r	  zTestTypeClassicClass.C.__init__c                 C   rC  r*   rD  r\   r   r   r   r^   H  rE  zTestTypeClassicClass.C.__eq__Nr  r   r   r   r   CC  rG  rJ  r   r  r*  r$  r&  r   r  rH  r   r  N)	r   r   r   rJ  rJ   r   r   rP   r   r   r   r   r   rI  @  s    
	
rI  c                   @   r{   )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[     z.TestTypeRegistration.test.<locals>.get_my_typerY   Zmy_typer   r  r  r  z
my_type{1}r  z-x 1 42zmy_type{42})rR  rS  registerr   r   rp   r   rP   )r   rN  r   r   r   r   r9  Y  s   

zTestTypeRegistration.testNr:  r   r   r   r   rK  V  r6  rK  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                   @   r_   )z$TestActionUserDefined.OptionalActionNc              
   C   sp   zt dd}|dv rd|_n|dv rd|_ntd| W n ty/ } ztd| d }~ww t|d	| d S )
N      ?r  )      ?r  r0  )       @r.  	value: %szopt_action failed: %sr*  )rP   r   AssertionErrorr`   rl   r   r   	namespacerA  option_stringr   rt   r   r   r   __call__r  s   
z-TestActionUserDefined.OptionalAction.__call__r*   r   r   r   rZ  r   r   r   r   OptionalActionp  rf   r\  c                   @   r_   )z&TestActionUserDefined.PositionalActionNc              
   C   s   z%t dd}|dv rd|_n|dv rd|_n|dv rd|_ntd	| W n ty7 } ztd
| d }~ww t|d| d S )Nr0  r   )r   r.  rR  )r  r  )r0  rS  rU  zarg_action failed: %sr   )rP   r*  rV  r`   rl   rW  r   r   r   rZ    s   
z/TestActionUserDefined.PositionalAction.__call__r*   r[  r   r   r   r   PositionalAction  rf   r^  z-sr*  rR  )r   r   rY   r  r   r)  r0  )r   rY   r  r  z-s0.125rS  )r*  r   r,  r   z
-s 0.625 1r  r  z84 -s2rT  r.  N)r   r   r   rR  Actionr\  r^  rJ   r  r2  r   r   rP   r   r   r   r   r   rQ  m  s"    rQ  c                   @   s(   e Zd Z	 G dd dejZdd ZdS )TestActionRegistrationc                   @   r_   )zTestActionRegistration.MyActionNc                 C   s   t || jd|  d S )Nzfoo[%s])rl   r   )r   r   rX  valuesrY  r   r   r   rZ       z(TestActionRegistration.MyAction.__call__r*   r[  r   r   r   r   MyAction  rf   rc  c                 C   s^   t  }|dd| j |jddd | |dgtdd | |dgtd	d d S )
Nr   Z	my_actionr   r   r  zfoo[1]r]  r,  zfoo[42])rR  rS  rP  rc  r   r   rp   rP   r   r   r   r   r   r9    s
   zTestActionRegistration.testN)r   r   r   rR  r_  rc  r9  r   r   r   r   r`    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   extendr8  )r   r  rY   r   z--foo f1 --foo f2 f3 f4)f1f2Zf3Zf4r   N)	r   r   r   rJ   r   r   r   rP   r   r   r   r   r   re    s    re  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      | j tg|R i | d S r*   r   r`   rM   r   r   r   assertArgumentParserError  rE  z+TestAddSubparsers.assertArgumentParserErrorFNc                 C   s  |rt 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}|r=d|d< d|d< nd|d< |jd7i |}| |j tdd}|rZd|d< |rbddg|d< |jd8i |}|jdtdd |jd d!d"d# td$d}	|rd%|	d< |jd9i |	}
|
jd'd(d)d# |
jd*td+d,d- td.d}|rd/|d< |jd:i |}|jd1td2d |jd3d4d5d6 |S );NPROGmain description)progdescriptionr   r   r0  r   r   foo helpr   helpro  rp  r   r   bar helprY   rs  rD  FZCOMMANDmetavarcommandstitlecommand helprs  z1 descriptionrp  z1 helpZ1alias1Z1alias2aliasesr  r
  zw helpr   r:  x helpr<  rs  z2 descriptionz2 helpr-  r   Z123y helpr   r4  zz help)rY   r  rs  z3 descriptionz3 helprx  tzt helpur  zu helpr  rs  r   r  )r-  )rx  )	rv   r   r  add_subparsersrl  dict
add_parserr2  r>  )r   subparser_helpr   r|  r   Zsubparsers_kwargs
subparsersZparser1_kwargsparser1Zparser2_kwargsparser2Zparser3_kwargsZparser3r   r   r   r     sX   



zTestAddSubparsers._get_parserc                    s&   t    |  | _| jdd| _d S )NT)r  )r
   r&   r   r   command_help_parserr   r   r   r   r&   
  s   

zTestAddSubparsers.setUpc                 C   s&   dD ]}|  }| | jj| qd S )N)r   r   za az0.5 az0.5 1z0.5 1 -yz0.5 2 -w)r   rl  r   rp   )r   r   rK   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&  r   r   r@   r   z0.25 --foo 2 -y 2 3j -- -1jTrR  r-  y              @y             )r   r   r  r   z--foo 0.125 1 crS  r'  z-1.5 3 11 -- a --foo 7 -- br=     )r   r   rs  --r&  )r   r   r  r  )r   r   rp   r   rP   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 )Nr  Fr  r  r&  r  z0.5 -p 1 b -w 7-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   r   parse_known_argsr   rP   r   r   r   r   test_parse_known_args)  s(   z'TestAddSubparsers.test_parse_known_argsc                 C   sX   t  }|jddd |jdd}|d}|d | tddd	d
|d  d S )Nr   r   r   r   r   r  r   Fr-  r  r  )rv   r   r  r  r   rP   rp   r   )r   r   r  r  r   r   r   	test_dest?  s   

zTestAddSubparsers.test_destc                 C   s,   | dg}| |jd | |j d d S )Nrunr   )rp   r   commandrl  )r   r   retr   r   r   _test_required_subparsersH  s   z+TestAddSubparsers._test_required_subparsersc                 C   s0   t  }|jdd}d|_|d | | d S )Nr  r   Tr  )rv   r  rD  r  r  r   r   r  r   r   r   &test_required_subparsers_via_attributeP  s
   
z8TestAddSubparsers.test_required_subparsers_via_attributec                 C   s,   t  }|jddd}|d | | d S )Nr  Tr   rD  r  )rv   r  r  r  r  r   r   r   "test_required_subparsers_via_kwargW  s   
z4TestAddSubparsers.test_required_subparsers_via_kwargc                 C   s6   t  }|jdd}|d |d}| |j d S )Nr  r   r  r   rv   r  r  rp   assertIsNoner  r   r   r  r  r   r   r    test_required_subparsers_default]  s
   

z2TestAddSubparsers.test_required_subparsers_defaultc                 C   n   t  }|jdd}|d |d | t}|d W d    n1 s(w   Y  | |jjd d S )NTrD  r   r   r   z8error: the following arguments are required: {foo,bar}
$	rv   r  r  r   r`   rp   assertRegexrV  rd   r   r   r  excinfor   r   r   -test_required_subparsers_no_destination_errore     

z?TestAddSubparsers.test_required_subparsers_no_destination_errorc                 C   r  )NTr  r   r   r`  zPerror: argument {foo,bar}: invalid choice: 'baz' \(choose from 'foo', 'bar'\)\n$r  r  r   r   r   3test_wrong_argument_subparsers_no_destination_errorq  r  zETestAddSubparsers.test_wrong_argument_subparsers_no_destination_errorc                 C   s8   t  }|jddd}|d |d}| |j d S )Nr  Fr  r  r   r  r  r   r   r   test_optional_subparsers}  s
   

z*TestAddSubparsers.test_optional_subparsersc                 C   .   |  | j d |  | j td d S )N)usage: PROG [-h] [--foo] bar {1,2,3} ...
a?              usage: PROG [-h] [--foo] bar {1,2,3} ...

            main description

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

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

            main description

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

            options:
              -h, --help  show this help message and exit
              ++foo       foo help
            r   r   r  r  r  r  rd  r   r   r   test_help_extra_prefix_chars  s
   
z.TestAddSubparsers.test_help_extra_prefix_charsc                 C   s6   t ddd}|jdddd | | td d S )	Nrm  rn  rt  z--non-breakingrM  uR   help message containing non-breaking spaces shall not wrap at non-breaking spacesrr  u7              usage: PROG [-h] [--non-breaking]

            main description

            options:
              -h, --help      show this help message and exit
              --non-breaking  help message containing non-breaking spaces shall not
                              wrap at non-breaking spaces
        rv   r   r   r  r  r  rd  r   r   r   test_help_non_breaking_spaces  s   z/TestAddSubparsers.test_help_non_breaking_spacesc                 C   sf   t ddd}|jddd | | td t ddd}|jdg dd	 | | td
 d S )Nrm  rn  rt  r   z    rs  z            usage: PROG [-h] foo

            main description

            positional arguments:
              foo         

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

            main description

            positional arguments:
              {}          

            options:
              -h, --help  show this help message and exit
        r  rd  r   r   r   test_help_blank  s    z!TestAddSubparsers.test_help_blankc                 C   r  )Nr   r  z)usage: PROG [+h] [++foo] bar {1,2,3} ...
a?              usage: PROG [+h] [++foo] bar {1,2,3} ...

            main description

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

            options:
              +h, ++help  show this help message and exit
              ++foo       foo help
            r  rd  r   r   r    test_help_alternate_prefix_chars  s
   
z2TestAddSubparsers.test_help_alternate_prefix_charsc                 C   r  )Nr  a              usage: PROG [-h] [--foo] bar {1,2,3} ...

            main description

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

            options:
              -h, --help  show this help message and exit
              --foo       foo help
            )r   r  r  r  r  r  r   r   r   r   test_parser_command_help  s   z*TestAddSubparsers.test_parser_command_helpc                 C   sx   t ddd}|jdddd |jdd	d
 |jdddd}|d}|d}| | d | | td d S )Nrm  rn  rt  r   r   rq  rr  r   ru  r  subcommandsrz  zadditional text)ry  rp  rs  r  r-  z'usage: PROG [-h] [--foo] bar {1,2} ...
av              usage: PROG [-h] [--foo] bar {1,2} ...

            main description

            positional arguments:
              bar         bar help

            options:
              -h, --help  show this help message and exit
              --foo       foo help

            subcommands:
              command help

              {1,2}       additional text
            )	rv   r   r  r  r   r  r  r  r  )r   r   r  r  r  r   r   r   test_subparser_title_help	  s   


z+TestAddSubparsers.test_subparser_title_helpc                 C   sN   |  t}| j|  W d    n1 sw   Y  | ||jj d S r*   )r   r`   r   rp   r   r   rV  rc   )r   r   Zexpected_helprX  r   r   r   _test_subparser_help$	  s   z&TestAddSubparsers._test_subparser_helpc                 C      |  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

            options:
              -h, --help  show this help message and exit
              -w W        w help
            r  r  r  r   r   r   r   test_subparser1_help)	  rb  z&TestAddSubparsers.test_subparser1_helpc                 C   r  )Nz5.0 2 -ha              usage: PROG bar 2 [-h] [-y {1,2,3}] [z ...]

            2 description

            positional arguments:
              z           z help

            options:
              -h, --help  show this help message and exit
              -y {1,2,3}  y help
            r  r   r   r   r   test_subparser2_help7	  rb  z&TestAddSubparsers.test_subparser2_helpc              	   C   s\   | j dd}| |d tddd ddg f | |d tddd ddg f d S )	NTr|  z0.5 1alias1 bFr  r&  r  z0.5 1alias2 b)r   r   r  r   rP   rd  r   r   r   test_alias_invocationE	  s   z'TestAddSubparsers.test_alias_invocationc                 C   s"   | j dd}| |jd  d S )NTr  z0.5 1alias3 b)r   rl  rp   r   rd  r   r   r   test_error_alias_invocationP	  s   z-TestAddSubparsers.test_error_alias_invocationc                 C   s.   | j ddd}d | _| | td d S )NT)r|  r  a	              usage: PROG [-h] [--foo] bar COMMAND ...

            main description

            positional arguments:
              bar                   bar help

            options:
              -h, --help            show this help message and exit
              --foo                 foo help

            commands:
              COMMAND
                1 (1alias1, 1alias2)
                                    1 help
                2                   2 help
                3                   3 help
            )r   ZmaxDiffr   r  r  r  rd  r   r   r   test_alias_helpU	  s   z!TestAddSubparsers.test_alias_help)FNF)r   r   r   rl  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   ri    s>    
7	$ri  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 )
Nr   r  r   r   r  r-  rx  r  1 2 3)rv   r   r   rP   rp   r   r   r   r   r   expectedrq   r   r   r   test_nongroup_firsts	     



z)TestPositionalsGroups.test_nongroup_firstc                 C   sZ   t  }|d}|d |d |d tdddd}|d	 }| || d S )
Nxxxr   r   r   r  r-  rx  r  r  rv   r   r   rP   rp   r   r   r  r   r   r   test_group_first}	  r  z&TestPositionalsGroups.test_group_firstc                 C   sp   t  }|d}|d |d |d |d}|d tddd	d
d}|d }| || d S )Nr  r   r   r   r   frellr  r-  rx  r  )r   r   r   r  z1 2 3 4r  r  r   r   r   test_interleaved_groups	  s   





z-TestPositionalsGroups.test_interleaved_groupsN)r   r   r   r  r  r  r   r   r   r   r  p	  s
    

r  c                       s   e Zd Z	 dd Z fddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Z  ZS )TestParentParsersc                 O   rj  r*   rk  rM   r   r   r   rl  	  rE  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   rf  r'  z--dr  r   r   r   )r
   r&   rv   wxyz_parentr   r   abcd_parentw_parentz_parentab_mutex_parentadd_mutually_exclusive_groupr.   r5   basenameri   r   main_program)r   Zx_groupc_groupr   r   r   r   r&   	  s(   



zTestParentParsers.setUpc                 C   s2   t | jgd}| |d tdddd d S )Nparentsz-y 1 2 --w 3rx  r  r-  r@   r  r   )rv   r  r   rp   r   rP   rd  r   r   r   test_single_parent	  s   z$TestParentParsers.test_single_parentc                 C   s,   |  | jj t| jgd}|  |j d S Nr  )_test_mutex_abr  rp   rv   rd  r   r   r   test_single_parent_mutex	  s   z*TestParentParsers.test_single_parent_mutexc                 C   s0   | j g}td|d}t|gd}| |j d S )NF)r   r  r  )r  rv   r  rp   r   r  r   r   r   r   test_single_granparent_mutex	  s   z.TestParentParsers.test_single_granparent_mutexc                 C   s   |  |g tddd |  |dgtddd |  |dgtddd | |ddg | |ddg | |dg | |ddg | |ddg d S )NFr   r&  r  Trf  rh  )r   rP   rl  )r   rp   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 4rx  r  r-  r  )r   r&  r  r@   r  r   )r  r  rv   r   rp   r   rP   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-  rx  )r   r&  r@   r  r   z-a --w 2 3 -bz-a -b --w 2 3)r  r  rv   r   rp   r   rP   rl  r  r   r   r   test_multiple_parents_mutex	  s   


z-TestParentParsers.test_multiple_parents_mutexc                 C       | j tjtj| j| jgd d S r  )r   rR  ArgumentErrorrS  r  r  r   r   r   r   test_conflicting_parents	  
   

z*TestParentParsers.test_conflicting_parentsc                 C   r  r  )r   rR  r  rS  r  r  r   r   r   r   test_conflicting_parents_mutex	  r  z0TestParentParsers.test_conflicting_parents_mutexc                 C   s:   | j | jg}t|d}| |d td d dd d S )Nr  r  r-  r  )r  r  rv   r   rp   r   rP   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  rt   zbar -b 1 --d 2 3 4rx  r  r-  r  )r   r&  r  rt   )	rv   r  r  r  r   r   rp   r   rP   )r   r   r  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 )Nr   r  r  r'  r   rt   zfoo -a 4TFr  r%  zbar -b  --w 2 3 4r-  rx  )r   r&  r@   r  r   rt   zfoo -a -b 4zbar -b -a 4)rv   r  r  r  r   r   r  r   rp   r   rP   rl  )r   r   r  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  aG              usage: {}{}[-h] [-b B] [--d D] [--w W] [-y Y] a z

            positional arguments:
              a
              z

            options:
              -h, --help  show this help message and exit
              -b B
              --w W

            c:
              --d D

            x:
              -y Y
         r   )	r  r  rv   r  r  r   r  r  format)r   r  r   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||rGdnd d S )NFr  r  gdry  rp  r
  r   r   r   r  )r   r  r   r  z            usage: {}{}[-h] [-w W] [-x X] [-y Y | -z Z]

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

            g:
              gd

              -w W
              -x X
        r  r   )rv   r   r   r  r   r`   rp   r  r  r   r  r  r  )r   parentr  r4  r   r  r  r   r   r   test_groups_parents(
  s    






z%TestParentParsers.test_groups_parents)r   r   r   rl  r&   r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   r  	  s"    

r  c                   @   r(   )
 TestMutuallyExclusiveGroupErrorsc                 C   s    t  }| j}|t|jdd d S )Nr   )ry  )rv   r   r   r  )r   r   raisesr   r   r   test_invalid_add_argument_groupL
  s   z@TestMutuallyExclusiveGroupErrors.test_invalid_add_argument_groupc                 C   sl   t  }| }|j}| j}|t|ddd |t|d |t|ddd |t|ddd |t|dtjd d S )Nr   Tr  r   r8  r  r  )rv   r  r   r   r8  rR  PARSER)r   r   r   r   r  r   r   r   test_invalid_add_argumentQ
  s   z:TestMutuallyExclusiveGroupErrors.test_invalid_add_argumentc                 C   sp   t dd}| }|jddd |jddd | }|jddd |jd	dd d
}| | t| d S )Nrm  ro  r   r   r   r   rM  z--soupz--nutsz            usage: PROG [-h] [--foo | --bar] [--soup | --nuts]

            options:
              -h, --help  show this help message and exit
              --foo
              --bar
              --soup
              --nuts
              )rv   r  r   r   r  r  r  )r   r   Zgroup1group2r  r   r   r   r  \
  s   

z*TestMutuallyExclusiveGroupErrors.test_helpc                 C   sL   t  }| }| t |dg W d    d S 1 sw   Y  d S )Nr  )rR  rS  r  r   r8  rp   r   r   r   r   r   r   test_empty_groupp
  s
   "z1TestMutuallyExclusiveGroupErrors.test_empty_groupN)r   r   r   r  r  r  r  r   r   r   r   r  J
  s
    r  c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )MEMixinc                 C   s4   | j ddj}t}| jD ]}| |||  qd S NFr  
get_parserrp   r`   r   r   r   r   rp   rz   args_stringr   r   r   test_failures_when_not_requiredy
  s
   
z'MEMixin.test_failures_when_not_requiredc                 C   s:   | j ddj}t}| jdg D ]}| |||  qd S )NTr  r   r  r  r   r   r   test_failures_when_required
  s
   z#MEMixin.test_failures_when_requiredc                 C   sD   | j ddj}| j| j }|D ]\}}|| }| || qd S r  )r  rp   r   successes_when_not_requiredr   r   )r   rp   r   r	  r   	actual_nsr   r   r    test_successes_when_not_required
  s   z(MEMixin.test_successes_when_not_requiredc                 C   s:   | j ddj}| jD ]\}}|| }| || q
d S NTr  )r  rp   r   r   r   )r   rp   r	  r   r  r   r   r   test_successes_when_required
  s
   z$MEMixin.test_successes_when_requiredc                 C   ,   | j ddj}| j}| | t| d S r  )r  r  usage_when_not_requiredr   r  r  r   r  Zexpected_usager   r   r   test_usage_when_not_required
     z$MEMixin.test_usage_when_not_requiredc                 C   r  r  )r  r  usage_when_requiredr   r  r  r  r   r   r   test_usage_when_required
  r  z MEMixin.test_usage_when_requiredc                 C   2   | j ddj}| j| j }| | t| d S r  )r  r  r  rs  r   r  r  r   r  rs  r   r   r   test_help_when_not_required
     z#MEMixin.test_help_when_not_requiredc                 C   r  r  )r  r  r  rs  r   r  r  r  r   r   r   test_help_when_required
  r  zMEMixin.test_help_when_requiredN)r   r   r   r
  r  r  r  r  r  r  r  r   r   r   r   r  w
  s    r  c                   @   sx   e Zd ZdddZddgZdedddfd	ed
ddfdedddfdedd
dfgZdedddfgZdZdZ	dZ
dS )TestMutuallyExclusiveSimpleNc                 C   s:   t dd}|j|d}|jddd |jddd	d
d |S )Nrm  r   r  r   ru  r  r  r)  r  baz help)r  r   rs  rv   r  r   r   rD  r   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
        options:
          -h, --help   show this help message and exit
          --bar BAR    bar help
          --baz [BAZ]  baz help
        r*   r   r   r   r  r   rP   r   r  r  r  rs  r   r   r   r   r  
  s    
r  c                
   @   s   e Zd ZdddZdgZdedddddfded	ddddfd
edddddfdedd	dddfgZdedddddfgZdZdZ	dZ
dS )TestMutuallyExclusiveLongNc                 C   sR   t dd}|jddd |jddd |j|d}|jd	d
d |jddd |S )Nrm  r   z--abcdez
abcde helpr  z--fghijz
fghij helpr  z--klmnoz
klmno helpz--pqrstz
pqrst helprv   r   r  r   r   r   r   r  
  s   
z$TestMutuallyExclusiveLong.get_parserz--klmno X --pqrst Yz	--klmno Xr   )ZabcdeZfghijZklmnoZpqrstz--abcde Y --klmno Xr  z	--pqrst Xz--pqrst X --fghij Yr   zi    usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ]
                [--klmno KLMNO | --pqrst PQRST]
    zi    usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ]
                (--klmno KLMNO | --pqrst PQRST)
    z
    options:
      -h, --help     show this help message and exit
      --abcde ABCDE  abcde help
      --fghij FGHIJ  fghij help
      --klmno KLMNO  klmno help
      --pqrst PQRST  pqrst help
    r*   r%  r   r   r   r   r&  
  s"    
		r&  c                   @   sf   e Zd Zdd ZdgZdedddfded	ddfd
edddfgZdedddfgZdZdZ	dZ
dS )$TestMutuallyExclusiveFirstSuppressedc                 C   s:   t dd}|j|d}|jdtjd |jdddd	 |S )
Nrm  r   r  r   r  r   rM  r  rr  rv   r  r   rR  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
        zm
        options:
          -h, --help  show this help message and exit
          -y          y help
        r%  r   r   r   r   r(  
  s    r(  c                	   @   s   e Zd Zdd Zg dZdeddddfded	d	ddfd
ed	dddfdeddddfgZded	dddfgZd ZZ	dZ
dS )#TestMutuallyExclusiveManySuppressedc                 C   sN   t dd}|j|d}|j}|ddtjd |ddtjd |d	tjd
 |S )Nrm  r   r  --spamr   rr  r   rM  z	--bladderr  r)  )r   rD  r   r   r   r   r   r   r    s   
z.TestMutuallyExclusiveManySuppressed.get_parser)z--spam --badgerz--badger --bladder Bz--bladder B --spamr+  TN)r*  r   Zbladderr   Fz--bladder Br   z--spam --spamr   z!        usage: PROG [-h]
        P
        options:
          -h, --help  show this help message and exit
        r   r   r   r  r   rP   r   r  r  r  rs  r   r   r   r   r*    s    	r*  c                	   @   s   e Zd Zdd Zg dZdeddddfd	ed
dddfded
ddgdfded
dg ddfgZded
dddfgZdZdZ	dZ
dS )*TestMutuallyExclusiveOptionalAndPositionalc                 C   sJ   t dd}|j|d}|jdddd |jdd	d
 |jddddd |S )Nrm  r   r  r   r   FOOrr  r+  SPAMr  r   r4  r   BADGERr  r  rs  r  r   r   r   r   r  <  s   
z5TestMutuallyExclusiveOptionalAndPositional.get_parser)z--foo --spam Sz
--spam S XzX --foozX Y Z --spam Sz	--foo X Yr   TNr   )r   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

        options:
          -h, --help   show this help message and exit
          --foo        FOO
          --spam SPAM  SPAM
        r%  r   r   r   r   r.  :  s    r.  c                   @   s   e Zd Zdd Zg dZdeddddddfdeddddddfd	eddddddfd
eddddddfdeddddddfdeddddddfgZdeddddddfdeddddddfdeddddddfgZd ZZ	dZ
dS )#TestMutuallyExclusiveOptionalsMixedc                 C   sj   t dd}|jdddd |j|d}|jddd	d |jd
ddd |jdddd |jdddd |S )Nrm  r   r   r   r}  rr  r  r  a helprf  b helpr   r  rh  c helpr'  r   r   r   r   r  i  s   
z.TestMutuallyExclusiveOptionalsMixed.get_parser)z-a -b-b -cz-a -cz-a -b -cr  TFr   r&  r'  r   r  rf  rh  z-a -xz-y -bz-x -y -cr   r   r   z:        usage: PROG [-h] [-x] [-a] [-b] [-y] [-c]
        z
        options:
          -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   r4  g  s     
	r4  c                   @   s\   e Zd ZdddZddgZdedddfd	edd
dfgZdedddfgZdZdZ	dZ
dS )TestMutuallyExclusiveInGroupNc                 C   sD   t dd}|jddd}|j|d}|jddd	 |jd
dd	 |S )Nrm  r   zTitled groupzGroup descriptionr  r  r   ru  r  r  r  )rv   r   r  r   )r   rD  r   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
        options:
          -h, --help  show this help message and exit

        Titled group:
          Group description

          --bar BAR   bar help
          --baz BAZ   baz help
        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ddfd	ed
dddddfded
dddddfdeddddddfded
dddddfgZded
dddddfded
dddddfgZd ZZ	dZ
d
S )1TestMutuallyExclusiveOptionalsAndPositionalsMixedc                 C   sh   t dd}|jddd |jdddd	 |j|d
}|jdddd |jdddd	 |jdddd	 |S )Nrm  r   r   r}  r  r   r   r  rr  r  r   r)  r5  r  rf  r6  rh  r7  r'  r   r   r   r   r    s   
z<TestMutuallyExclusiveOptionalsAndPositionalsMixed.get_parser)zX A -br8  z-c X AzX Ar  Fr   r9  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

        options:
          -h, --help  show this help message and exit
          -y          y help
          -b          b help
          -c          c help
        r-  r   r   r   r   r<    s    
r<  c                   @   s0   e Zd Zdd ZdZdZdZdZdZdZ	dZ
dS )TestMutuallyExclusiveNestedc                 C   sn   t dd}|j|d}|d |d |j|d}|d |d |j|d}|d |d	 |S )
Nrm  r   r  r  rf  rh  z-dz-er   r  )r   rD  r   r   r  Zgroup3r   r   r   r    s   






z&TestMutuallyExclusiveNested.get_parserzO        usage: PROG [-h] [-a A | -b B | [-c C | -d D | [-e E | -f F]]]
        zO        usage: PROG [-h] (-a A | -b B | (-c C | -d D | (-e E | -f F)))
        z
        options:
          -h, --help  show this help message and exit
          -a A
          -b B
          -c C
          -d D
          -e E
          -f F
        N)r   r   r   r  r  r  rs  r
  r  r  r  r   r   r   r   r=    s    r=  c                       s   e Zd Zd fdd	Z  ZS )MEPBaseNc                    s(   t t| j|d}t|jd|gd}|S )Nr  F)ro  r   r  )r
   r>  r  rv   ro  )r   rD  r  r   r   r   r   r    s
   
zMEPBase.get_parserr*   )r   r   r   r  r   r   r   r   r   r>    s    r>  c                   @      e Zd ZdS )&TestMutuallyExclusiveGroupErrorsParentNr   r   r   r   r   r   r   r@        r@  c                   @   r?  )!TestMutuallyExclusiveSimpleParentNrA  r   r   r   r   rC    rB  rC  c                   @   r?  )TestMutuallyExclusiveLongParentNrA  r   r   r   r   rD  !  rB  rD  c                   @   r?  )*TestMutuallyExclusiveFirstSuppressedParentNrA  r   r   r   r   rE  &  rB  rE  c                   @   r?  ))TestMutuallyExclusiveManySuppressedParentNrA  r   r   r   r   rF  +  rB  rF  c                   @   r?  )0TestMutuallyExclusiveOptionalAndPositionalParentNrA  r   r   r   r   rG  0  rB  rG  c                   @   r?  ))TestMutuallyExclusiveOptionalsMixedParentNrA  r   r   r   r   rH  5  rB  rH  c                   @   r?  )7TestMutuallyExclusiveOptionalsAndPositionalsMixedParentNrA  r   r   r   r   rI  :  rB  rI  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 )
Nr   r   r   r  )r  r   r  r   r0  )r   r   rv   set_defaultsr   rP   rp   rd  r   r   r   test_set_defaults_no_argsD  s   z)TestSetDefaults.test_set_defaults_no_argsc              	   C   s   t  }|jddd |jddd | tddd|g  | tddd|g t  | tddd|g tdd | td	dd|d
  | td	dd|d
 t  | td	dd|d
 tdd d S )Nr   r   r  r   Zxfooxr  r   r   r  rE  )rv   rL  r   r   rP   rp   r   rd  r   r   r   test_set_defaults_with_argsQ  s*   z+TestSetDefaults.test_set_defaults_with_argsc                 C   sR   t  }|jdd | }|d}|jdd | tddd|d  d S )Nr   r   r   r   rJ  r  )rv   rL  r  r  r   rP   rp   r   )r   r   r  Zparser_ar   r   r   test_set_defaults_subparsersb  s   
z,TestSetDefaults.test_set_defaults_subparsersc                 C   s>   t dd}|jdd t |gd}| tdd|g  d S )NFr  r   r   r  rK  )r   r  r   r   r   r   test_set_defaults_parentsk  s   
z)TestSetDefaults.test_set_defaults_parentsc                 C   sL   t  }| d}|jdd |jdd | tdd|dg d S )Nr   r  r   r0  )rR  rS  r  r  rL  r   rP   rp   )r   r   Zxparserr   r   r   )test_set_defaults_on_parent_and_subparserq  s
   z9TestSetDefaults.test_set_defaults_on_parent_and_subparserc                 C   s   t  }|jddddd |d |jddd	 |jd
dd |jdddd | tddddd|g  |jddddd | tddddd|g  d S )NWr   r  r  r/  r
  r   XXr  r  r)  r  r   ZZr+  WWYY)rv   rL  r   r   rP   rp   rd  r   r   r   &test_set_defaults_same_as_add_argumentx  s   
z6TestSetDefaults.test_set_defaults_same_as_add_argumentc                 C   s   t  }|jddddd |d}|d |jdd	d
 |jddd |jdddd | tdd	ddd|g  |jddddd | tddddd|g  d S )NrR  r   r  r  r/  r   r
  r   rS  r  r  r)  r  r   rT  r+  rU  rV  )rv   rL  r   r   r   rP   rp   r  r   r   r   ,test_set_defaults_same_as_add_argument_group  s   

z<TestSetDefaults.test_set_defaults_same_as_add_argument_groupN)
r   r   r   rM  rN  rO  rP  rQ  rW  rX  r   r   r   r   rJ  B  s    	rJ  c                   @   r   )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 )	Nr   r   r   r   r   r  r   r   )rv   r  get_defaultr   r2  r   rL  rd  r   r   r   test_get_default  s   
zTestGetDefault.test_get_defaultN)r   r   r   r[  r   r   r   r   rY    r'   rY  c                   @   r  )TestNamespaceContainsSimplec                 C   s$   t  }| d| | d| d S )Nr   r   )rR  	NamespaceassertNotInr   nsr   r   r   
test_empty     z&TestNamespaceContainsSimple.test_emptyc                 C   sN   t jddd}| d| | d| | d| | d| | d| d S )	Nr  r0  r  r   r   r  xxr   )rR  r]  r^  rU  r_  r   r   r   test_non_empty  s   z*TestNamespaceContainsSimple.test_non_emptyN)r   r   r   ra  rd  r   r   r   r   r\    s    r\  c                   @   r   )TestHelpFormattingMetaclassc                 C   s:   |dkrd S G dd dt }dD ]
\}}|| || qd S )NHelpTestCasec                   @   <   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 ]$}d|j|f }|fdd}z||_W n	 ty+   Y nw t||| qd S )Nz%s_%sc                 S   r   r*   r   r   r   r   r   test_wrapper  r   zUTestHelpFormattingMetaclass.__init__.<locals>.AddTests.__init__.<locals>.test_wrapper)func_suffixstd_nametest_format
test_printtest_print_filer   r   rl   )r   Z
test_classri  rj  r   r   rh  r   r   r   r     s   
z?TestHelpFormattingMetaclass.__init__.<locals>.AddTests.__init__c                 S   s   t j|jji |jj}t|dg D ]}|j|ji |j qt|dg }|D ]\}}|j|ji |j}|D ]}|j|ji |j q7q't|dg }|r`| }	|D ]}
|	j	|
ji |
j qS|S )Nr   argument_group_signaturessubparsers_signatures)
rR  rS  r~   rK   rL   rk   r   r   r  r  )r   r   r   Zargument_sigZ
group_sigsZ	group_sigZargument_sigsr   Zsubparsers_sigsr  Zsubparser_sigr   r   r   r     s6   



zBTestHelpFormattingMetaclass.__init__.<locals>.AddTests._get_parserc                 S   s&   t || j}t|}||| d S r*   )rk   ri  r  r  r   )r   r   parser_textZexpected_textr   r   r   _test  s   
z<TestHelpFormattingMetaclass.__init__.<locals>.AddTests._testc                 S   s,   |  |}t|d| j }| ||  d S )Nz	format_%s)r   rk   ri  rq  )r   r   r   r  r   r   r   rk    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| w | || d S Nzprint_%s)	r   rk   ri  ri   rj  rl   r   r   rq  )r   r   r   print_Z
old_streamrp  r   r   r   rl    s   
 zATestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_printc                 S   s@   |  |}t|d| j }t }|| | }| || d S rr  )r   rk   ri  r   r   rq  )r   r   r   rs  Zsfilerp  r   r   r   rm    s   
zFTestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_print_fileN)	r   r   r   r   r   rq  rk  rl  rm  r   r   r   r   r     s    r   ))usagerc   )rs  rc   )r   )r   r>   r   r   r   ri  rj  r   r   r   r     s   Hz$TestHelpFormattingMetaclass.__init__NrN   r   r   r   r   re    r'   re  rf  c                   @   sl   e Zd Z	 eddddZeddddd	ed
dddedddedddedddgZg ZdZed ZdZ	dS )TestHelpBiggerOptionalsrm  DESCRIPTIONEPILOGro  rp  epilogr  r  r  0.1r  r   r   X HELPrr  --yY HELPr  r   FOO HELPr   BAR HELPz;        usage: PROG [-h] [-v] [-x] [--y Y] foo bar
        aW  
        DESCRIPTION

        positional arguments:
          foo            FOO HELP
          bar            BAR HELP

        options:
          -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   rJ   r~   r   rn  rt  rs  r  r   r   r   r   ru     s    


ru  c                   @   s:   e Zd Z	 dd ZejZejZejZdZed Z	ej
Z
dS )TestShortColumnsc                 C   s$   t  }|dd | |j d S )Nr    r  )r   r!   r  r"   r#   r$   r   r   r   r&   J  rb  zTestShortColumns.setUpz        usage: PROG
               [-h]
               [-v]
               [-x]
               [--y Y]
               foo
               bar
        a  
        DESCRIPTION

        positional arguments:
          foo
            FOO HELP
          bar
            BAR HELP

        options:
          -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&   ru  r~   r   rn  rt  rs  r  r   r   r   r   r  D  s    	
r  c                   @   s   e Zd Z	 eddddZeddddd	ed
dddedddedddedddgZedddedddeddddgfgZdZed Zd Z	d!S )"TestHelpBiggerOptionalGroupsrm  rv  rw  rx  r  r  r  rz  r  r   r   r{  rr  r|  r}  r  r   r~  r   r  zGROUP TITLEzGROUP DESCRIPTIONr{  r   zBAZ HELPr   r8  zZ HELPr  zN        usage: PROG [-h] [-v] [-x] [--y Y] [-z Z [Z ...]] foo bar baz
        a  
        DESCRIPTION

        positional arguments:
          foo            FOO HELP
          bar            BAR HELP

        options:
          -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
    r  Nr  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
eddd
eddd
gZg ZdZed ZdZ	dS )TestHelpBiggerPositionalsUSAGErv  rt  rp  r   r   r{  rr  r|  r}  r  ZekiekiekifekangzEKI HELPr   r          usage: USAGE
        a  
        DESCRIPTION

        positional arguments:
          ekiekiekifekang  EKI HELP
          bar              BAR HELP

        options:
          -h, --help       show this help message and exit
          -x               X HELP
          --y Y            Y HELP
        r   Nr  r   r   r   r   r    s    


r  c                   @   sd   e Zd Z	 edddZeddddedd	d
dgZedddeddddgfgZdZed ZdZ	dS )TestHelpReformattingrm  ze   oddly    formatted
description

that is so long that it should go onto multiple lines when wrappedrt  r   rS  zoddly
    formatted -x helprw  rs  r  r   znormal y helpry  z'
    oddly formatted group

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

        positional arguments:
          yyy         normal y help

        options:
          -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   Nr  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 )TestHelpWrappingShortNamesrm  zZD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
Drt  r   rS  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 HHArr  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

        options:
          -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   Nr  r   r   r   r   r    s    r  c                   @   sz   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yyyyyyyyyyyyyyyyyyyyyyyyyr  r  r  ZAAAAAAAAAAAAAAAAAAAAAAAAAzdAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHr   ZzzzzzzzzzzzzzzzzzzzzzzzzzzdZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHr  ag  
        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

        options:
          -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
        Nr  r   r   r   r   r  %  s    r  c                   @   s   e Zd Z	 eddZeddddeddd	ded
d
deddddeddddeddejdedddejdedddejdedejejddg	Zeded dd!ded"d#d$ded%d%dded&d&ddgfgZ	d'Z
e
d( Zd)Zd*S )+TestHelpUsagerm  r   r
  r8  r@   r  r   r4  r   r   r  r&  r0  )rs  r  r'  r)  r   zWhether to foo)rs  r   r   zWhether to barT)rs  r  r   r   z--foobarz--barfoor   z--bazzzBazz!)r   r  rs  r   r   r  r   r!  r   r  rt   a/          usage: PROG [-h] [-w W [W ...]] [-x [X ...]] [--foo | --no-foo]
                    [--bar | --no-bar]
                    [-f | --foobar | --no-foobar | --barfoo | --no-barfoo]
                    [--bazz | --no-bazz] [-y [Y]] [-z Z Z Z]
                    a b b [c] [d ...] e [e ...]
        a  
        positional arguments:
          a                     a
          b                     b
          c                     c

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

        group:
          -y [Y]                y
          -z Z Z Z              z
          d                     d
          e                     e
        r   N)r   r   r   rJ   r~   rR  rT  r  r   rn  rt  rs  r  r   r   r   r   r  [  s6    

r  c                   @   s@   e Zd ZeddZedddeddddgZd	Zed
 ZdZdS )TestHelpUsageWithParenthesesrm  r   Z
positionalz(example) positionalrw  r  z
--optionalz{1 (option A), 2 (option B)}zX        usage: PROG [-h] [-p {1 (option A), 2 (option B)}] (example) positional
        z
        positional arguments:
          (example) positional

        options:
          -h, --help            show this help message and exit
          -p {1 (option A), 2 (option B)}, --optional {1 (option A), 2 (option B)}
        r   N)	r   r   r   rJ   r~   r   rt  rs  r  r   r   r   r   r    s    

	r  c                   @   sn   e Zd Z	 edddZg Zededddedddgfed	ed
d
dedddgfgZdZed ZdZ	dS )TestHelpOnlyUserGroupsrm  Fro  r   Zxxxxr   r   r  r   Zyyyyr&  r   r  z.        usage: PROG [-x X] [-y Y] a b
        zn
        xxxx:
          -x X  x
          a     a

        yyyy:
          b     b
          -y Y  y
        r   Nr  r   r   r   r   r    s     





r  c                   @   sP   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
  rR  r  r   r   r   r&  zz        usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               [-h] [-w W] [-x X] a b
        z
        positional arguments:
          a
          b

        options:
          -h, --help  show this help message and exit
          -w W
          -x X
        r   Nr  r   r   r   r   r    s    


r  c                   @   sd   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 ) TestHelpUsageLongProgOptionsWrapr  r   r
  WWWWWWWWWWWWWWWWWWWWWWWWWr  r   r  r   YYYYYYYYYYYYYYYYYYYYYYYYYr   ZZZZZZZZZZZZZZZZZZZZZZZZZr   r&  a          usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] [-x XXXXXXXXXXXXXXXXXXXXXXXXX]
               [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
               a b
        a-  
        positional arguments:
          a
          b

        options:
          -h, --help            show this help message and exit
          -w WWWWWWWWWWWWWWWWWWWWWWWWW
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        r   Nr  r   r   r   r   r    s    




r  c                   @   D   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 )$TestHelpUsageLongProgPositionalsWrapr  Fr  aaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccz        usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
               ccccccccccccccccccccccccc
        
        positional arguments:
          aaaaaaaaaaaaaaaaaaaaaaaaa
          bbbbbbbbbbbbbbbbbbbbbbbbb
          ccccccccccccccccccccccccc
        r   Nr  r   r   r   r   r  
  s    r  c                   @   sj   e Zd Z	 eddZedddedddedd	ded
ddedededgZg ZdZed ZdZ	dS )TestHelpUsageOptionalsWraprm  r   r
  r  r  r   r  r   r  r   r  r   r&  r'  z        usage: PROG [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] [-x XXXXXXXXXXXXXXXXXXXXXXXXX]
                    [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
                    a b c
        a9  
        positional arguments:
          a
          b
          c

        options:
          -h, --help            show this help message and exit
          -w WWWWWWWWWWWWWWWWWWWWWWWWW
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        r   Nr  r   r   r   r   r  #  s    




	r  c                   @   sT   e Zd Z	 eddZededededededgZg Zd	Zed
 ZdZ	dS )TestHelpUsagePositionalsWraprm  r   r   r   r   r  r  r  z        usage: PROG [-h] [-x X] [-y Y] [-z Z]
                    aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
                    ccccccccccccccccccccccccc
        a  
        positional arguments:
          aaaaaaaaaaaaaaaaaaaaaaaaa
          bbbbbbbbbbbbbbbbbbbbbbbbb
          ccccccccccccccccccccccccc

        options:
          -h, --help            show this help message and exit
          -x X
          -y Y
          -z Z
        r   Nr  r   r   r   r   r  I  s    
r  c                   @   s`   e Zd Z	 eddZedddedddedd	ded
ededgZg ZdZed ZdZ	dS )%TestHelpUsageOptionalsPositionalsWraprm  r   r   r  r  r   r  r   r  r  r  r  a          usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] [-y YYYYYYYYYYYYYYYYYYYYYYYYY]
                    [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
                    aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
                    ccccccccccccccccccccccccc
        aZ  
        positional arguments:
          aaaaaaaaaaaaaaaaaaaaaaaaa
          bbbbbbbbbbbbbbbbbbbbbbbbb
          ccccccccccccccccccccccccc

        options:
          -h, --help            show this help message and exit
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        r   Nr  r   r   r   r   r  k  s    



r  c                   @   sN   e Zd Z	 eddZedddedddedd	dgZg Zd
Zed ZdZ	dS )TestHelpUsageOptionalsOnlyWraprm  r   r   r  r  r   r  r   r  z        usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] [-y YYYYYYYYYYYYYYYYYYYYYYYYY]
                    [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
        z
        options:
          -h, --help            show this help message and exit
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        r   Nr  r   r   r   r   r    s    



r  c                   @   r  ) TestHelpUsagePositionalsOnlyWraprm  Fr  r  r  r  z~        usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
                    ccccccccccccccccccccccccc
        r  r   Nr  r   r   r   r   r    s    r  c                
   @   s   e Zd Z	 eddZededdedddd	d
deddddeddddgdddedddeddddgZededd ded!d"d#dgfgZd$Zed% Z	d&Z
d'S )(TestHelpVariableExpansionrm  r   r   z"x %(prog)s %(default)s %(type)s %%rv  r   r   r   XXXz y %(prog)s %(default)s %(const)s)r   r  r   rs  r   r:  z$foo %(prog)s %(default)s %(choices)sr~  r   r   r  r0  ZBBBz!bar %(prog)s %(default)s %(dest)s)r  r<  rw  rs  r*  zspam %(prog)s %(default)sr  r   r  zbadger %(prog)s %(default)s)r  rs  r   r  za %(prog)s %(default)srf  r0  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

        options:
          -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   rJ   r~   r2  r   rn  rt  rs  r  r   r   r   r   r    s4    



r  c                   @   s2   e Zd Z	 edddZg Zg ZdZed ZdZ	dS )&TestHelpVariableExpansionUsageSuppliedrm  z%(prog)s FOOro  rt  z         usage: PROG FOO
        r,  r   Nr  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 )$TestHelpVariableExpansionNoArgumentsrm  Fr  z        usage: PROG
        r   Nr  r   r   r   r   r     s    r  c                   @   sD   e Zd Z	 edejdZedddedddgZg ZdZ	d	Z
d	Zd
S )TestHelpSuppressUsagerm  r  r   rq  r  r*  	spam helpz        positional arguments:
          spam        spam help

        options:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        r   N)r   r   r   rJ   rR  r  r~   r   rn  rs  rt  r  r   r   r   r   r    s    

r  c                   @   sH   e Zd Z	 edddZedejdedddgZg ZdZ	e	d	 Z
d
ZdS )TestHelpSuppressOptionalrm  Fr  r   r  r*  r  z!        usage: PROG spam
        zA
        positional arguments:
          spam  spam help
        r   Nr   r   r   rJ   r~   rR  r  r   rn  rt  rs  r  r   r   r   r   r  "  s    
r  c                   @   sZ   e Zd Z	 eddZedddedddgZeded	ejdgfgZd
Z	e	d Z
dZdS )TestHelpSuppressOptionalGrouprm  r   r   rq  r  r*  r  r   r   2        usage: PROG [-h] [--foo FOO] spam
        
        positional arguments:
          spam        spam help

        options:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        r   N)r   r   r   rJ   r~   r   rR  r  rn  rt  rs  r  r   r   r   r   r  6  s    


	r  c                   @   sF   e Zd Z	 eddZedddedejdgZg ZdZ	e	d Z
d	Zd
S )TestHelpSuppressPositionalrm  r   r   rq  r  r*  z-        usage: PROG [-h] [--foo FOO]
        o
        options:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        r   Nr  r   r   r   r   r  P  s    

r  c                   @   s<   e Zd Z	 eddZeddddgZg ZdZed Zd	Z	d
S )TestHelpRequiredOptionalrm  r   r   Trq  )rD  rs  z+        usage: PROG [-h] --foo FOO
        r  r   Nr  r   r   r   r   r  e  s    
r  c                   @   sL   e Zd Z	 eddddZedddded	d
ddgZg ZdZed ZdZ	dS )TestHelpAlternatePrefixCharsrm  z^;F)ro  r   r   z^^foor   rq  rr  z;bz;;barru  r  z-        usage: PROG [^^foo] [;b BAR]
        zf
        options:
          ^^foo              foo help
          ;b BAR, ;;bar BAR  bar help
        r   Nr  r   r   r   r   r  y  s    r  c                   @   sF   e Zd Z	 edddZedddedddgZg Zd	Zed
 ZdZ	dS )TestHelpNoHelpOptionalrm  Fr  r   rq  r  r*  r  z-        usage: PROG [--foo FOO] spam
        zv
        positional arguments:
          spam       spam help

        options:
          --foo FOO  foo help
        r   Nr  r   r   r   r   r    s    

r  c                   @   s<   e Zd Z	 eddZededgZg ZdZed ZdZ	dS )	TestHelpNonerm  r   r   r*  r  z
        positional arguments:
          spam

        options:
          -h, --help  show this help message and exit
          --foo FOO
        r   Nr  r   r   r   r   r    s    
	r  c                	   @   sh   e Zd Z	 eddZedddddedd	d
ddedddddedddddgZg ZdZed ZdZ	dS )TestHelpTupleMetavarrm  r   r
  r@   r8  )ZW1ZW2)rs  r  rw  r   r   r4  )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
        options:
          -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   Nr  r   r   r   r   r    s    
	r  c                   @   b   e Zd Z	 edejddZedddedddgZed	d
dedddgfgZdZ	e	d Z
dZdS )TestHelpRawTextrm  7Keep the formatting
    exactly as it is written

here
ro  formatter_classrp  r   z-    foo help should also
appear as given herer  r*  r  ry  ?    This text
  should be indented
    exactly like it is here
r{  r   ru  >        usage: PROG [-h] [--foo FOO] [--bar BAR] spam
        a  
        Keep the formatting
            exactly as it is written

        here

        positional arguments:
          spam        spam help

        options:
          -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   rJ   rR  RawTextHelpFormatterr~   r   rn  rt  rs  r  r   r   r   r   r    s     


r  c                   @   r  )TestHelpRawDescriptionrm  r  r  r   z4  foo help should not
    retain this odd formattingr  r*  r  ry  r  r{  r   ru  r  a  
        Keep the formatting
            exactly as it is written

        here

        positional arguments:
          spam        spam help

        options:
          -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   rJ   rR  RawDescriptionHelpFormatterr~   r   rn  rt  rs  r  r   r   r   r   r  	  s     


r  c                   @   s   e Zd Z	 edejddZedddeddd	d
edejdddeddddedddedddddgZedddede	dddgfgZ
dZed  Zd!Zd"S )#TestHelpArgumentDefaultsrm  rp  r  r   z)foo help - oh and by the way, %(default)sr  r   r   ru  rr  z--tazzWhether to taz itT)r   rs  r  z--quuxzSet the quuxr   )rs  r  r*  r  r   r)  Zwoodenzbadger helpr2  ry  r{  r  r  )rY   r  rs  z        usage: PROG [-h] [--foo FOO] [--bar] [--taz | --no-taz] [--quux QUUX]
                    [--baz BAZ]
                    spam [badger]
        a&  
        description

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

        options:
          -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   rJ   rR  ArgumentDefaultsHelpFormatterr~   rT  r   r2  rn  rt  rs  r  r   r   r   r   r  9  s,    



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

        options:
          -h, --help     show this help message and exit
          -V, --version  show program's version number and exit
        r   Nr  r   r   r   r   r  h  s    r  c                   @   sR   e Zd Z	 eddZeddddejdedd	d
eddd
gZg ZdZ	e	d Z
dS )TestHelpVersionActionSuppressrm  r   r  r  r  r  )r   r  rs  r   rq  r  r*  r  r  r  N)r   r   r   rJ   r~   rR  r  r   rn  rt  rs  r   r   r   r   r  |  s    



r  c                   @   sJ   e Zd Z	 edddZedddddgZd	d
 dD ZdZed ZdZ	dS )TestHelpSubparsersOrderingrm  display some subcommandsrt  r  r  r  rz  r  c                 C   s   g | ]}t |d qS )r  rJ   )rT   r>   r   r   r   rV     s    z%TestHelpSubparsersOrdering.<listcomp>)r   r&  r'  r  rt   6        usage: PROG [-h] [-v] {a,b,c,d,e} ...
        z
        display some subcommands

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

        options:
          -h, --help     show this help message and exit
          -v, --version  show program's version number and exit
        r  N)
r   r   r   rJ   r~   r   ro  rt  rs  r  r   r   r   r   r    s    r  c                   @   sN   e Zd Z	 edddZedddddgZd	Zd
d eD ZdZed Z	dZ
dS )"TestHelpSubparsersWithHelpOrderingrm  r  rt  r  r  r  rz  r  ))r   za subcommand help)r&  zb subcommand help)r'  zc subcommand help)r  zd subcommand help)rt   ze subcommand helpc                 C   s   g | ]
\}}t ||d qS ))r>   rs  r  )rT   r>   rs  r   r   r   rV     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

        options:
          -h, --help     show this help message and exit
          -v, --version  show program's version number and exit
        r  N)r   r   r   rJ   r~   r   Zsubcommand_dataro  rt  rs  r  r   r   r   r   r    s    r  c                   @   s\   e Zd Zdd ZeddejdZededededed	e	d
dgZ
g ZdZed ZdZdS )TestHelpMetavarTypeFormatterc                 C   s   | S r*   r   rL  r   r   r   custom_type     z(TestHelpMetavarTypeFormatter.custom_typerm  rp  )ro  rp  r  r   r  rf  rh  z
SOME FLOAT)rY   rw  zF        usage: PROG [-h] [-b custom_type] [-c SOME FLOAT] int
        z
        description

        positional arguments:
          int

        options:
          -h, --help      show this help message and exit
          -b custom_type
          -c SOME FLOAT
        r   N)r   r   r   r  rJ   rR  MetavarTypeHelpFormatterr~   r2  r  r   rn  rt  rs  r  r   r   r   r   r    s    

r  c                   @   s   e Zd Z	 dd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS ) TestInvalidArgumentConstructorsc                 O   (   t  }| jt|jg|R i | d S r*   )rR  rS  r   r   r   r   rK   rL   r   r   r   r   assertTypeError     
z/TestInvalidArgumentConstructors.assertTypeErrorc                 O   r  r*   )rR  rS  r   r8  r   r  r   r   r   assertValueError  r  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   r   )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\  rG  r   r  r   r   r   r   r   test_missing_destination  s   z8TestInvalidArgumentConstructors.test_missing_destinationc                 C   s   |  d |  d d S )Nr  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   r2  r  )r  r2  r  r   r   r   r   test_invalid_type     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 s0w   Y  | dt|j d S )	Nr   r   r   r   r   rG  r\  z
store-truezunknown action)	r  rR  rS  r   r8  r   rU  r   rV  rW  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 s!w   Y  | dt|j d S )Nr   r   r   r   z+dest supplied twice for positional argument)rR  rS  r   r   r8  rU  r   rV  rW  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   rM  rg  rq  r  r8  r  abr;  r   r   )r   )r  r2  r  )r   r   Z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   rM  rq  r   r   rQ  r4  r  r   r  r  r   r   r   !test_no_argument_no_const_actions6  s   zATestInvalidArgumentConstructors.test_no_argument_no_const_actionsc                 C   s\   dD ])}| j dd|d | j dd|d dD ]}| j dd||d | j dd||d qqd S )	Nr  r   r   r  r*  )r  r4  r8  r   )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   rg  r   r8  r  r  r  r   r   r   test_required_const_actionsN  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   rm  )r   ro  )r   r   )r  rR  rS  r   r   r   r   "test_parsers_action_missing_paramsT  s
   
zBTestInvalidArgumentConstructors.test_parsers_action_missing_paramsc                 C      | j ddd d S )Nr   Tr  r  r   r   r   r   test_required_positionalZ     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                   @   r?  )zITestInvalidArgumentConstructors.test_user_defined_action.<locals>.SuccessNrA  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 d S d S )Nr*  r   )r   option_stringsr   r   r  rD  r  r   r   r   d  s   zQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__init__c                 _   s   d S r*   r   rM   r   r   r   rZ  o  r  zQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__call__N)F)r   r   r   r   rZ  r   r  r   r   r_  b  s    r_  r+  )r   r  r   r*  )ra   r   rR  rS  r   r   )r   r_  r   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                   @   r  )TestActionsReturnedc                 C   sX   t  }|d}| |jd |dd}| |jd |dd}| |jd d S )	Nr   r   rf  r   r   r   r   r   )rR  rS  r   r   r   r   r   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.  r  r0  r/  ZBARr   )r  r   r  rY   r<  rs  rw  r   )rR  rS  r   r2  r   r  r   r  rY   r<  rs  rw  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                   @   rO   )TestConflictHandlingc                 C   s   | j ttjdd d S )Nr   )conflict_handler)r   r8  rR  rS  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+  )rR  rS  r   r   r  rd  r   r   r   test_conflict_error  s   

z(TestConflictHandling.test_conflict_errorc                 C   sz   t j}|ddd}|jddd |jddd | | td |jd	d
d |jd	dd | | td d S )Nrm  resolve)ro  r  r   zOLD Xr  zNEW Xz            usage: PROG [-h] [-x X]

            options:
              -h, --help  show this help message and exit
              -x X        NEW X
            r+  ZOLD_SPAMr  ZNEW_SPAMz            usage: PROG [-h] [-x X] [--spam NEW_SPAM]

            options:
              -h, --help       show this help message and exit
              -x X             NEW X
              --spam NEW_SPAM
            )rR  rS  r   r   r  r  r  )r   r  r   r   r   r   test_resolve_error  s   z'TestConflictHandling.test_resolve_errorN)r   r   r   r  r  r  r   r   r   r   r    s    	r  c                   @   sV   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w   Y  | | |jj d S r*   )r   r`   rp   r   r   r  rV  rc   )r   r   r   rX  r   r   r   assertPrintHelpExit  s   z3TestOptionalsHelpVersionActions.assertPrintHelpExitc                 G   s   |  t|j| d S r*   )r   r`   rp   r   r   rK   r   r   r   rl       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rv   r   r  r   r  rk   rd  r   r   r   test_version  s
   z,TestOptionalsHelpVersionActions.test_versionc                 C   sf   t dd}|jddddd | t}|dg W d    n1 s$w   Y  | d|jj d S )	NZPPPr   r  r  r  z%(prog)s 3.5r  zPPP 3.5
rv   r   r   r`   rp   r   rV  rc   rW  r   r   r   test_version_format  s   
z3TestOptionalsHelpVersionActions.test_version_formatc                 C   sH   t dd}|jddddd | |d | |d	 | tt|d
 d S )NFr  r  r  r  r  r  r  r  r  )rv   r   rl  r   r  rk   rd  r   r   r   test_version_no_help  s
   
z4TestOptionalsHelpVersionActions.test_version_no_helpc                 C   sd   t dd}|jdddd | t}|dg W d    n1 s#w   Y  | d|jj d S )Nr  r   r  r  z%(prog)s 3.7r  zXXX 3.7
r  rW  r   r   r   test_version_action  s   
z3TestOptionalsHelpVersionActions.test_version_actionc                 C   s>   t dd}| |d | |d | |d | |d d S )NFr  r  r  r  r  )rv   rl  rd  r   r   r   test_no_help  s
   
z,TestOptionalsHelpVersionActions.test_no_helpc                 C   sZ   t  }|jddd |jddd | |d | |d | |d | tt|d d S )	Nr   rs  r   r   r  r  r  r  )rv   r   r  rl  r   r  rk   rd  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 ]%}|D ]}d||f }q'| ||d  | ||d  | tt|d q#d S )Nr  r  r  r  r   r   r   r  )r   r   r   z-x barzbaz -xz--bad-optionzfoo bar bazz	%s %%s %sr  r  r  r   )r   r   Zvalid_prefixesZvalid_suffixesprefixsuffixr  r   r   r   !test_help_version_extra_arguments  s   
zATestOptionalsHelpVersionActions.test_help_version_extra_argumentsN)r   r   r   r  rl  r  r  r  r  r  r  r
  r   r   r   r   r    s    	r  c                   @   sN   e Zd Z	 dd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestStringsc                 C   s"   t tfD ]
}| ||| qd S r*   )r   r  r   )r   objZresult_stringfuncr   r   r   assertStringEqual  s   zTestStrings.assertStringEqualc                 C   s8   t jg dddddg dddd	d
	}d}| || d S )N)r   r  rf  r&  r2  r8  r   r  r0  r!  FZHELPZMETAVAR	r  r   rY   r  r  r<  rD  rs  rw  zAction(option_strings=['--foo', '-a', '-b'], dest='b', nargs='+', const=None, default=42, type='int', choices=[1, 2, 3], required=False, help='HELP', metavar='METAVAR'))rR  r_  r  )r   optionrM  r   r   r   test_optional  s   zTestStrings.test_optionalc                 C   s8   t jg dtddg ddddd	}d	t }| || d S )
Nr   r)  r  )r  g      ?r  TzH HH HzMV MV MVr  zAction(option_strings=[], dest='x', nargs='?', const=None, default=2.5, type=%r, choices=[0.5, 1.5, 2.5], required=True, help='H HH H', metavar='MV MV MV'))rR  r_  r  r  )r   argumentrM  r   r   r   test_argument+  s    zTestStrings.test_argumentc                 C   s"   t jddd}d}| || d S )Nr   r*  r  zNamespace(foo=42, bar='spam')rR  r]  r  r   r`  rM  r   r   r   test_namespace<  s   zTestStrings.test_namespacec                 C   (   t jdi ddi}d}| || d S )N"quotezNamespace(**{'"': 'quote'})r   r  r  r   r   r   'test_namespace_starkwargs_notidentifierA     z3TestStrings.test_namespace_starkwargs_notidentifierc                 C   s,   t jdddiddi}d}| || d S )Nr   r  r  r  z Namespace(a=1, **{'"': 'quote'})r   r  r  r   r   r   2test_namespace_kwargs_and_starkwargs_notidentifierF  s   z>TestStrings.test_namespace_kwargs_and_starkwargs_notidentifierc                 C   r  )NZvalidTzNamespace(valid=True)r   r  r  r   r   r   $test_namespace_starkwargs_identifierK  r  z0TestStrings.test_namespace_starkwargs_identifierc                 C   s&   t jdd}dt j }| || d S )Nrm  r   zvArgumentParser(prog='PROG', usage=None, description=None, formatter_class=%r, conflict_handler='error', add_help=True))rR  rS  HelpFormatterr  )r   r   rM  r   r   r   test_parserP  s   zTestStrings.test_parserN)r   r   r   r  r  r  r  r  r  r  r   r   r   r   r   r    s    r  c                   @   rO   )TestNamespacec                 C   sF   t  }| tt|d t jddd}| |jd | |jd d S )Nr   r   r*  r  )rR  r]  r   r  rk   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 )Nr  r0  r  )r&  r   )r   rk  )rR  r]  r   ZassertNotEqual
assertTrue)r   Zns1Zns2Zns3Zns4r   r   r   test_equalityf  s   zTestNamespace.test_equalityc                 C   s6   t jddd}| |d t | |d t d S )Nr  r0  r  )rR  r]  ZassertIsr^   NotImplemented__ne__r_  r   r   r   $test_equality_returns_notimplementedv  s   z2TestNamespace.test_equality_returns_notimplementedN)r   r   r   r"  r$  r'  r   r   r   r   r!  \  s    r!  c                   @   rO   )TestEncodingc                 C   sT   t j|\}}|d7 }t|ddd}|  W d    d S 1 s#w   Y  d S )Nz.pyr}  r   rA   )r.   r5   splitextrC   r  )r   r5   r   r   r   r   r   _test_module_encoding  s
   
"z"TestEncoding._test_module_encodingc                 C   s   |  tj d S r*   )r*  rR  __file__r   r   r   r   test_argparse_module_encoding  rS   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                   @   r   )TestArgumentErrorc                 C   s$   d}t d |}| t|| d S )Nzmy error here)rR  r  r   r   )r   r   rz   r   r   r   test_argument_error  s   z%TestArgumentError.test_argument_errorN)r   r   r   r/  r   r   r   r   r.    r'   r.  c                   @   r   )TestArgumentTypeErrorc                 C   sl   dd }t ddd}|jd|d | t}|dg W d    n1 s'w   Y  | d	|jj d S )
Nc                 S   s
   t d)Nspam!)rR  ArgumentTypeErrorrL  r   r   r   r*    r	  z<TestArgumentTypeError.test_argument_type_error.<locals>.spamrm  Fr  r   r  r  z-usage: PROG x
PROG: error: argument x: spam!
)rv   r   r   r`   rp   r   rV  rd   )r   r*  r   rX  r   r   r   test_argument_type_error  s   z.TestArgumentTypeError.test_argument_type_errorN)r   r   r   r3  r   r   r   r   r0    r'   r0  c                   @   rO   )TestMessageContentErrorc                 C   sj  t ddd}|jdtd |jdtdd |jd	td
d | t}|g  W d    n1 s2w   Y  t|j}| |d | |d | |d	 | t}|dg W d    n1 sdw   Y  t|j}| 	|d | |d | |d	 | t}|ddg W d    n1 sw   Y  t|j}| 	|d | 	|d | |d	 d S )Nrm  r   r  req_posr  -req_optTrC  Zneed_oner8  )rY   r  req_optZmyXargumentz
-req_opt=1)
rv   r   r   r2  r   r`   rp   rV  r  r^  r   r   rX  r   r   r   r   %test_missing_argument_name_in_message  s2   


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 s3w   Y  t|j}| 	|d | 	|d | 
|d | t}|dg W d    n1 sew   Y  t|j}| 	|d | 
|d | 
|d d S )Nrm  r   r  r5  r  z	--req_optTrC  z	--opt_optr)  )rY   r  r  r7  Zopt_optz--req_opt=1)rv   r   r   r2  boolr   r`   rp   rV  r  r^  r8  r   r   r   %test_optional_optional_not_in_message  s(   


z=TestMessageContentError.test_optional_optional_not_in_messagec                 C   s   t ddd}|d |jdddd | t}|g  W d    n1 s(w   Y  t|j}| |d | |d d S )	Nrm  r   r  r5  Zoptional_positionalr)  r<  r+  )	rv   r   r   r`   rp   r   rV  r  r^  r8  r   r   r   'test_optional_positional_not_in_message  s   

z?TestMessageContentError.test_optional_positional_not_in_messageN)r   r   r   r9  r;  r<  r   r   r   r   r4    s    r4  c                   @   r   )TestTypeFunctionCallOnlyOncec                    sH    fdd}t  }|jd|dd |d } tdd| d S )	Nc                         | d dS )Nr1  foo_convertedr   )Zstring_to_convertr   r   r   r*       zLTestTypeFunctionCallOnlyOnce.test_type_function_call_only_once.<locals>.spamr   r   r  z--foo spam!r?  r   )rR  rS  r   rp   r   r   rP   r   r*  r   rK   r   r   r   !test_type_function_call_only_once  s
   z>TestTypeFunctionCallOnlyOnce.test_type_function_call_only_onceN)r   r   r   rC  r   r   r   r   r=    r'   r=  c                   @   r(   )
TestTypeFunctionCalledOnDefaultc                    sD    fdd}t  }|jd|dd |g } tdd| d S )Nc                    r>  )Nr   r?  r@  Zint_to_convertr   r   r   r*     rA  z]TestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_default.<locals>.spamr   r   r  r   rR  rS  r   rp   r   rP   rB  r   r   r   /test_type_function_call_with_non_string_default  s
   
zOTestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_defaultc                 C   @   dd }t  }|jd|dd |g }| tdd| d S )Nc                 S   s   dS )Nr?  r   rE  r   r   r   r*    r  zYTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_default.<locals>.spamr   0r  r?  r   rF  rB  r   r   r   +test_type_function_call_with_string_default
  s
   
zKTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_defaultc                 C   rH  )Nc                 S   s   | d S )Nr4  r   )Zstr_to_convertr   r   r   rf    rO  zYTestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_default.<locals>.extend--testr4  r  z**)r9  rF  )r   rf  r   rK   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 )NrK  r9  r\  )r   rY   r  r   )rR  rS  r   r   rp   r   r9  r  r   r   r   test_issue_15906   s   

z0TestTypeFunctionCalledOnDefault.test_issue_15906N)r   r   r   rG  rJ  rL  rM  r   r   r   r   rD    s
    
rD  c                   @   rg  )TestParseKnownArgsc                 C   s   t  }|d d S )Nr   rR  rS  rp   rd  r   r   r   test_arguments_tuple0     z'TestParseKnownArgs.test_arguments_tuplec                 C   s   t  }|g  d S r*   rO  rd  r   r   r   test_arguments_list4  rQ  z&TestParseKnownArgs.test_arguments_listc                 C   s    t  }|d |d d S )Nr   r   rR  rS  r   rp   rd  r   r   r   test_arguments_tuple_positional8  s   
z2TestParseKnownArgs.test_arguments_tuple_positionalc                 C   s"   t  }|d |dg d S )Nr   rS  rd  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  )rR  rS  r   r  r   r   rP   )r   r   rK   extrasr   r   r   test_optionalsB  s
   
z!TestParseKnownArgs.test_optionalsc                 C   sr   t  }|jdddtd |jddd |d g d	}||\}}| td
ddd| | g d| d S )Nr  r)  r  )r  r   rY   r+  rM  r   r   )r   rJ  r   r  rx  r  r!  Tr   )vr*  r   )rJ  r   r  )rR  rS  r   r2  r  r   rP   )r   r   r   rK   rW  r   r   r   
test_mixedI  s   
zTestParseKnownArgs.test_mixedN)	r   r   r   rP  rR  rT  rU  rX  rZ  r   r   r   r   rN  .  s    rN  c                   @   r(   )
TestIntermixedArgsc                 C   s  t jdd}|jddd |jdddd	}|d
 |jddtd d }||}| tdd
dg dd| ||\}}| tdd
dg d| | g d| d }|	|\}}| tdd
ddgd| | g d| | 
|j | |jd d S )Nrm  r   r   r   r   r   r   Tr  cmdrestr4  )r  rY   zcmd --foo x 1 --bar y 2 3r  r   r  )r   r\  r   r]  r  r-  rx  z!cmd --foo x 1 --error 2 --bar y 3r  )z--errorr-  rx  )rR  rS  r   r2  r   parse_intermixed_argsr   rP   r  parse_known_intermixed_argsr  rt  rD  )r   r   r   r   rK   rW  r   r   r   
test_basicY  s"   

zTestIntermixedArgs.test_basicc                 C   s~   t dd}|d |d |jddd d }| t}|| W d    n1 s/w   Y  | t|jd	 d S )
Nrm  r   r   r   r  r  r  r  z\.\.\.)	rv   r   r   r   r   r_  r  r   rV  )r   r   r   rX  r   r   r   test_remaindert  s   


z!TestIntermixedArgs.test_remainderc                 C   s   t dd}|jdd}|jdddd |jd	d
d |jddddd |d }| tddgdd d| | t|jd  | |j	d d S )Nrm  r   Tr  r   r   r/  rr  r+  r0  r  r   r4  r   r1  r2  z	1 --foo 2r  r-  )r   r   r*  r  )
rv   r  r   r_  r   r   rP   r   r`   rD  )r   r   r   rK   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 )Nrm  r   Tr  r   r   r/  rr  r+  r0  r  r   r4  r   r1  r2  )rv   r  r   r   r   r_  r   rD  r  r   r   r   test_exclusive_incompatible  s   
z.TestIntermixedArgs.test_exclusive_incompatibleN)r   r   r   ra  rb  rc  rd  r   r   r   r   r[  X  s
    r[  c                   @   r   )!TestIntermixedMessageContentErrorc                 C   s   t ddd}|jdtd |jdtdd | t}|g  W d    n1 s*w   Y  t|j}| |d | |d	 | t}|	g  W d    n1 sUw   Y  t|j}| 
|d | |d	 d S )
Nrm  r   r  r5  r  r6  TrC  r7  )rv   r   r   r2  r   r`   rp   rV  r  r_  ZassertNotRegexr8  r   r   r   r9    s   

zGTestIntermixedMessageContentError.test_missing_argument_name_in_messageN)r   r   r   r9  r   r   r   r   re    s    re  c                   @   s  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLdM Z)dNdO Z*dPdQ Z+dRdS Z,dTdU Z-dVdW Z.dXdY Z/dZd[ Z0d\d] Z1d^d_ Z2d`S )aTestAddArgumentMetavarz,length of metavar tuple does not match nargsc                 C   s   t  }|jd||d d S )Nr   r  rw  )rR  rS  r   )r   r  rw  r   r   r   r   do_test_no_exception  s   z+TestAddArgumentMetavar.do_test_no_exceptionc                 C   s\   t  }| t}|jd||d W d    n1 sw   Y  | |jjd | j d S )Nr   rg  r   )	rR  rS  r   r8  r   r   rV  rK   EXPECTED_MESSAGE)r   r  rw  r   rX  r   r   r   do_test_exception  s
   z(TestAddArgumentMetavar.do_test_exceptionc                 C      | j d dd d S )Nr  rg  rh  r   r   r   r   test_nargs_None_metavar_string  r  z5TestAddArgumentMetavar.test_nargs_None_metavar_stringc                 C   s   | j d t d d S )Nrg  rj  tupler   r   r   r   test_nargs_None_metavar_length0  r  z6TestAddArgumentMetavar.test_nargs_None_metavar_length0c                 C   rk  )Nr  rg  rl  r   r   r   r   test_nargs_None_metavar_length1  r  z6TestAddArgumentMetavar.test_nargs_None_metavar_length1c                 C   rk  )Nr  r-  rg  rj  r   r   r   r   test_nargs_None_metavar_length2  r  z6TestAddArgumentMetavar.test_nargs_None_metavar_length2c                 C   rk  )Nr^  rg  rs  r   r   r   r   test_nargs_None_metavar_length3  r  z6TestAddArgumentMetavar.test_nargs_None_metavar_length3c                 C   r  )Nr)  r  rg  rl  r   r   r   r   "test_nargs_optional_metavar_string  r  z9TestAddArgumentMetavar.test_nargs_optional_metavar_stringc                 C      | j dt d d S )Nr)  rg  rn  r   r   r   r   #test_nargs_optional_metavar_length0  r  z:TestAddArgumentMetavar.test_nargs_optional_metavar_length0c                 C   r  )Nr)  r  rg  rl  r   r   r   r   #test_nargs_optional_metavar_length1  r  z:TestAddArgumentMetavar.test_nargs_optional_metavar_length1c                 C   r  )Nr)  rr  rg  rs  r   r   r   r   #test_nargs_optional_metavar_length2  r  z:TestAddArgumentMetavar.test_nargs_optional_metavar_length2c                 C   r  )Nr)  r^  rg  rs  r   r   r   r   #test_nargs_optional_metavar_length3  r  z:TestAddArgumentMetavar.test_nargs_optional_metavar_length3c                 C   r  )Nr4  r  rg  rl  r   r   r   r   $test_nargs_zeroormore_metavar_string  r  z;TestAddArgumentMetavar.test_nargs_zeroormore_metavar_stringc                 C   rw  )Nr4  rg  rn  r   r   r   r   %test_nargs_zeroormore_metavar_length0  r  z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length0c                 C   r  )Nr4  r  rg  rl  r   r   r   r   %test_nargs_zeroormore_metavar_length1  r  z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length1c                 C   r  )Nr4  rr  rg  rl  r   r   r   r   %test_nargs_zeroormore_metavar_length2  r  z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length2c                 C   r  )Nr4  r^  rg  rs  r   r   r   r   %test_nargs_zeroormore_metavar_length3  r  z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length3c                 C   r  )Nr8  r  rg  rl  r   r   r   r   #test_nargs_oneormore_metavar_string  r  z:TestAddArgumentMetavar.test_nargs_oneormore_metavar_stringc                 C   rw  )Nr8  rg  rn  r   r   r   r   $test_nargs_oneormore_metavar_length0  r  z;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length0c                 C   r  )Nr8  r  rg  rs  r   r   r   r   $test_nargs_oneormore_metavar_length1  r  z;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length1c                 C   r  )Nr8  rr  rg  rl  r   r   r   r   $test_nargs_oneormore_metavar_length2  r  z;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length2c                 C   r  )Nr8  r^  rg  rs  r   r   r   r   $test_nargs_oneormore_metavar_length3  r  z;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length3c                 C   r  )Nr  r  rg  rl  r   r   r   r   #test_nargs_remainder_metavar_string  r  z:TestAddArgumentMetavar.test_nargs_remainder_metavar_stringc                 C   rw  )Nr  rg  )rh  ro  r   r   r   r   $test_nargs_remainder_metavar_length0  r  z;TestAddArgumentMetavar.test_nargs_remainder_metavar_length0c                 C   r  )Nr  r  rg  rl  r   r   r   r   $test_nargs_remainder_metavar_length1	  r  z;TestAddArgumentMetavar.test_nargs_remainder_metavar_length1c                 C   r  )Nr  rr  rg  rl  r   r   r   r   $test_nargs_remainder_metavar_length2  r  z;TestAddArgumentMetavar.test_nargs_remainder_metavar_length2c                 C   r  )Nr  r^  rg  rl  r   r   r   r   $test_nargs_remainder_metavar_length3  r  z;TestAddArgumentMetavar.test_nargs_remainder_metavar_length3c                 C   r  )NA...r  rg  rl  r   r   r   r    test_nargs_parser_metavar_string  r  z7TestAddArgumentMetavar.test_nargs_parser_metavar_stringc                 C   rw  )Nr  rg  rn  r   r   r   r   !test_nargs_parser_metavar_length0  r  z8TestAddArgumentMetavar.test_nargs_parser_metavar_length0c                 C   r  )Nr  r  rg  rl  r   r   r   r   !test_nargs_parser_metavar_length1  r  z8TestAddArgumentMetavar.test_nargs_parser_metavar_length1c                 C   r  )Nr  rr  rg  rs  r   r   r   r   !test_nargs_parser_metavar_length2  r  z8TestAddArgumentMetavar.test_nargs_parser_metavar_length2c                 C   r  )Nr  r^  rg  rs  r   r   r   r   !test_nargs_parser_metavar_length3   r  z8TestAddArgumentMetavar.test_nargs_parser_metavar_length3c                 C   r  )Nr  r  rg  rl  r   r   r   r   test_nargs_1_metavar_string%  r  z2TestAddArgumentMetavar.test_nargs_1_metavar_stringc                 C   rw  )Nr  rg  rn  r   r   r   r   test_nargs_1_metavar_length0(  r  z3TestAddArgumentMetavar.test_nargs_1_metavar_length0c                 C   r  )Nr  r  rg  rl  r   r   r   r   test_nargs_1_metavar_length1+  r  z3TestAddArgumentMetavar.test_nargs_1_metavar_length1c                 C   r  )Nr  rr  rg  rs  r   r   r   r   test_nargs_1_metavar_length2.  r  z3TestAddArgumentMetavar.test_nargs_1_metavar_length2c                 C   r  )Nr  r^  rg  rs  r   r   r   r   test_nargs_1_metavar_length31  r  z3TestAddArgumentMetavar.test_nargs_1_metavar_length3c                 C   r  )Nr0  r  rg  rl  r   r   r   r   test_nargs_2_metavar_string6  r  z2TestAddArgumentMetavar.test_nargs_2_metavar_stringc                 C   rw  )Nr0  rg  rn  r   r   r   r   test_nargs_2_metavar_length09  r  z3TestAddArgumentMetavar.test_nargs_2_metavar_length0c                 C   r  )Nr0  r  rg  rs  r   r   r   r   test_nargs_2_metavar_length1<  r  z3TestAddArgumentMetavar.test_nargs_2_metavar_length1c                 C   r  )Nr0  rr  rg  rl  r   r   r   r   test_nargs_2_metavar_length2?  r  z3TestAddArgumentMetavar.test_nargs_2_metavar_length2c                 C   r  )Nr0  r^  rg  rs  r   r   r   r   test_nargs_2_metavar_length3B  r  z3TestAddArgumentMetavar.test_nargs_2_metavar_length3c                 C   r  )Nr!  r  rg  rl  r   r   r   r   test_nargs_3_metavar_stringG  r  z2TestAddArgumentMetavar.test_nargs_3_metavar_stringc                 C   rw  )Nr!  rg  rn  r   r   r   r   test_nargs_3_metavar_length0J  r  z3TestAddArgumentMetavar.test_nargs_3_metavar_length0c                 C   r  )Nr!  r  rg  rs  r   r   r   r   test_nargs_3_metavar_length1M  r  z3TestAddArgumentMetavar.test_nargs_3_metavar_length1c                 C   r  )Nr!  rr  rg  rs  r   r   r   r   test_nargs_3_metavar_length2P  r  z3TestAddArgumentMetavar.test_nargs_3_metavar_length2c                 C   r  )Nr!  r^  rg  rl  r   r   r   r   test_nargs_3_metavar_length3S  r  z3TestAddArgumentMetavar.test_nargs_3_metavar_length3N)3r   r   r   ri  rh  rj  rm  rp  rq  rt  ru  rv  rx  ry  rz  r{  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   rf    sb    rf  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   Z   t  }| t}|jd|d W d    n1 sw   Y  | |jjd | j d S Nr   r  r   )	rR  rS  r   r8  r   r   rV  rK   EXPECTED_RANGE_MESSAGEr   r  r   rX  r   r   r   do_test_range_exception^  
   z(TestInvalidNargs.do_test_range_exceptionc                 C   r  r  )	rR  rS  r   r8  r   r   rV  rK   EXPECTED_INVALID_MESSAGEr  r   r   r   do_test_invalid_exceptiond  r  z*TestInvalidNargs.do_test_invalid_exceptionc                 C   s   | j dd | j dd d S )Nr   r  Zabcd)r  r   r   r   r   test_nargs_alphabeticl  s   z&TestInvalidNargs.test_nargs_alphabeticc                 C   s   | j dd d S )Nr   r  )r  r   r   r   r   test_nargs_zerop  rS   z TestInvalidNargs.test_nargs_zeroN)	r   r   r   r  r  r  r  r  r  r   r   r   r   r  W  s    r  c                   @   r  )TestImportStarc                 C   s    t jD ]
}| tt | qd S r*   )rR  __all__r#  r   r  r   r   r   r9  y  s   
zTestImportStar.testc                 C   s0   dd t t D }| t|ttj d S )Nc                 S   s0   g | ]\}}| d s|dkst|s|qS )r   ngettext)
startswithinspectZismodule)rT   r>   rA  r   r   r   rV   ~  s    zJTestImportStar.test_all_exports_everything_but_modules.<locals>.<listcomp>)r[   rR  rX   r   rW   r  )r   rX   r   r   r   'test_all_exports_everything_but_modules}  s   
z6TestImportStar.test_all_exports_everything_but_modulesN)r   r   r   r9  r  r   r   r   r   r  w  s    r  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--proxyr  )r
   r&   rv   r   r   )r   rw  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>]

            options:
              -h, --help            show this help message and exit
              --proxy <http[s]://example:1234>
            )r   r  r   r  r  )r   	help_textr   r   r   test_help_with_metavar  s   
z*TestWrappingMetavar.test_help_with_metavar)r   r   r   r&   r  r   r   r   r   r   r    s    
r  c                   @   rO   )TestExitOnErrorc                 C   s$   t jdd| _| jjddtd d S )NF)exit_on_errorz
--integersN)rw  rY   )rR  rS  r   r   r2  r   r   r   r   r&     r  zTestExitOnError.setUpc                 C   s(   | j d }| |tjdd d S )Nz--integers 4r?  )Zintegers)r   rp   r   r   rR  r]  r_  r   r   r   !test_exit_on_error_with_good_args  s   z1TestExitOnError.test_exit_on_error_with_good_argsc                 C   sB   |  tj | jd  W d    d S 1 sw   Y  d S )Nz--integers a)r   rR  r  r   rp   r   r   r   r   r    test_exit_on_error_with_bad_args  s   "z0TestExitOnError.test_exit_on_error_with_bad_argsN)r   r   r   r&   r  r  r   r   r   r   r    s    r  c                   C   s   i t _t t_d S r*   )r  r  r  r  r   r   r   r   tearDownModule  s   r  __main__)r  r   r  r.   r9   r7   ri   r  r+   ZunittestrR  Ztest.supportr   r   TextIOWrapperr   r   r   r)   rJ   rP   ra   r`   ru   rS  rv   rY   r|   r   r}   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r  r   r(  r3  r7  r9  rB  rF  rI  rL  rN  rO  rZ  r[  rc  re  ro  rp  rr  rt  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  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rm   rn   r  r  r)  Z	eq_stderrr  r,  Z
eq_bstderrr  r  r  r  r  ZskipIfr   r!  r"  r*  r+  r-  r/  r7  r;  r?  rI  rK  rQ  r`  re  ri  r  r  r  r  r  r&  r(  r*  r.  r4  r:  r<  r=  r>  r@  rC  rD  rE  rF  rG  rH  rI  rJ  rY  r\  re  rf  ru  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r(  r.  r0  r4  r=  rD  rN  r[  re  rf  r  r  r  r  r  r   mainr   r   r   r   <module>   s
  
&q







""A   &' 4-0#+!$-*(),	^R$7/4(69$&"$.10/+!~-LI%=1*? ) 