o
    g^                    @   s"  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZ d dlmZ d dlmZ G dd de
ZG dd	 d	ejZG d
d deZG dd deZG dd deZG dd deZdd ZG dd dejZG dd deZefZedei ZG dd deZG dd deZ G dd deZ!G dd  d eZ"G d!d" d"eZ#G d#d$ d$eZ$G d%d& d&eZ%G d'd( d(eZ&G d)d* d*eZ'G d+d, d,eZ(G d-d. d.eZ)G d/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ZqG dd deeZrG dd deeZsG ddĄ deZtG ddƄ dƃZueudǃZveudȃZweudɃZxG dd˄ deZyG dd̈́ deeZzG ddτ deeZ{G ddф deeZ|G ddӄ deZ}e~eedԃoe d kdաG ddׄ deeZG ddل deeZG ddۄ deZG dd݄ deZG dd߄ deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deeZG dd deeZG dd deeZG dd deeZG dd deeZG d d deeZG dd deeZG dd deeZG dd deeZG dd	 d	eZG d
d deeZG dd deeZG dd deeZG dd deeZG dd deeZG dd deeZG dd deeZG dd deeZG dd deZG dd deZG dd deZG d d! d!eZefZed"ei ZG d#d$ d$eZG d%d& d&eZG d'd( d(eZG d)d* d*eZG d+d, d,eZG d-d. d.eZG d/d0 d0eZG d1d2 d2eZG d3d4 d4eZG d5d6 d6eZG d7d8 d8eZG d9d: d:eZG d;d< d<eZG d=d> d>eZG d?d@ d@eZG dAdB dBeZG dCdD dDeZG dEdF dFeZG dGdH dHeZG dIdJ dJeZG dKdL dLeZG dMdN dNeZG dOdP dPeZG dQdR dReZG dSdT dTeZG dUdV dVeZG dWdX dXeZG dYdZ dZeZG d[d\ d\eZG d]d^ d^eZG d_d` d`eZG dadb dbeZG dcdd ddeZG dedf dfeZG dgdh dheZG didj djeZG dkdl dleZG dmdn dneZG dodp dpeZG dqdr dreZG dsdt dteZG dudv dveZG dwdx dxeZG dydz dze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Zdd Zedkre  dS dS (      N)StringIO)support)	os_helper)mockc                   @      e Zd ZdS )StdIOBufferN__name__
__module____qualname__ r   r   H/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_argparse.pyr          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__self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S )TempDirMixinc                 C   s$   t  | _t | _t| j d S N)tempfilemkdtemptemp_dirosgetcwdold_dirchdirr   r   r   r   r   "   s   

zTempDirMixin.setUpc                 C   s^   t | j t j| jddD ]\}}}|D ]}t t j| j|tj	 qqt
| jd d S )NF)topdownT)r    r#   r"   walkr   chmodpathjoinstatS_IWRITEshutilrmtree)r   rootdirsfilesnamer   r   r   tearDown'   s   zTempDirMixin.tearDownc                 C   sZ   t j| j|}t|ddd}|| W d    n1 sw   Y  t |tj d S )Nwutf-8encoding)	r    r(   r)   r   openwriter'   r*   S_IREAD)r   filenameZ	file_pathfiler   r   r   create_readonly_file.   s
   z!TempDirMixin.create_readonly_fileN)r	   r
   r   r   r2   r<   r   r   r   r   r       s    r   c                   @   r   )Sigc                 O   s   || _ || _d S r   )argskwargsr   r>   r?   r   r   r   __init__6   s   
zSig.__init__Nr	   r
   r   rA   r   r   r   r   r=   4   r   r=   c                   @   r   )NSc                 K   s   | j | d S r   )__dict__update)r   r?   r   r   r   rA   =      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>B   s    zNS.__repr__.<locals>.<listcomp>z%s(%s))sortedrD   itemsr)   typer	   )r   Zsorted_itemsZ	kwarg_strr   r   r   __repr__@   s   zNS.__repr__c                 C   s   t | t |kS r   )varsr   otherr   r   r   __eq__E   rF   z	NS.__eq__N)r	   r
   r   rA   rM   rQ   r   r   r   r   rC   ;   s    rC   c                   @      e Zd ZdddZdS )ArgumentParserErrorNc                 C   s,   t | ||| || _|| _|| _|| _d S r   )	ExceptionrA   messagestdoutstderr
error_code)r   rU   rV   rW   rX   r   r   r   rA   K   s
   
zArgumentParserError.__init__)NNNrB   r   r   r   r   rS   I       rS   c           
      O   s   t tjtst tjtr| |i |S tj}tj}t t_t t_zWz6| |i |}tt|D ]}t||tju r@t||| t||tju rNt||| q0|W W |t_|t_S  t	yx   t
 d j}tj }tj }	td||	|d w |t_|t_w )N   
SystemExit)
isinstancesysrW   r   rV   listrN   getattrsetattrr[   exc_infocodegetvaluerS   )

parse_argsr>   r?   Z
old_stdoutZ
old_stderrresultkeyrb   rV   rW   r   r   r   stderr_to_parser_errorS   s<   

rg   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   )superrh   rd   rg   )r   r>   r?   rd   	__class__r   r   rd   v      z%ErrorRaisingArgumentParser.parse_argsc                    ri   r   )rj   rh   exitrg   )r   r>   r?   rn   rk   r   r   rn   z   rm   zErrorRaisingArgumentParser.exitc                    ri   r   )rj   rh   errorrg   )r   r>   r?   ro   rk   r   r   ro   ~   rm   z ErrorRaisingArgumentParser.error)r	   r
   r   rd   rn   ro   __classcell__r   r   rk   r   rh   t   s    rh   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_argumentr>   r?   )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_grouprv   r>   r?   )rw   rx   groupry   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|   rv   r>   r?   )rw   rx   iry   r}   r   r   r   many_groups   s
   z3ParserTesterMetaclass.__init__.<locals>.many_groupsc                 S   s   	 |  |S r   )rd   )rw   r>   r   r   r   listargs   s   
z0ParserTesterMetaclass.__init__.<locals>.listargsc                 S   s2   	 t j}|d g| t _z|  W |t _S |t _w )Nr   )r]   argvrd   )rw   r>   Zold_sys_argvr   r   r   sysargs   s   z/ParserTesterMetaclass.__init__.<locals>.sysargsc                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
z0ParserTesterMetaclass.__init__.<locals>.AddTestsc              	   S   s   || _ || _| j j}| jj}| j| jfD ]*}|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_successesr)   	TypeErrorr`   )r   Z
tester_clsadd_argumentsrd   Zadd_arguments_nameZparse_args_namer   	func_namenames	test_namer   r   r   r   rA      s    


z9ParserTesterMetaclass.__init__.<locals>.AddTests.__init__c                 S   s2   |j j}|j j}|j|i |}| ||j |S r   )rt   r>   r?   ru   r   rx   )r   testerr>   r?   rw   r   r   r   _get_parser   s
   z<ParserTesterMetaclass.__init__.<locals>.AddTests._get_parserc              	   S   sZ   |  |}|jD ]"}| }|jt|d || W d    q1 s%w   Y  qd S )N)msg)r   failuressplitassertRaisesrS   rd   )r   r   rw   args_strr>   r   r   r   r      s   

z>ParserTesterMetaclass.__init__.<locals>.AddTests.test_failuresc                 S   sH   |  |}|jD ]\}}t|tr| }| ||}||| qd S r   )r   	successesr\   strr   r   assertEqual)r   r   rw   r>   expected_nsZ	result_nsr   r   r   r      s   

z?ParserTesterMetaclass.__init__.<locals>.AddTests.test_successesN)r	   r
   r   rA   r   r   r   r   r   r   r   AddTests   s
    r   )hasattrr=   rt   rh   ru   object)clsr1   basesbodydictrz   r~   r   r   r   r   r   rd   r   r   r   rA      s"   

	-zParserTesterMetaclass.__init__NrB   r   r   r   r   rr      s    rr   rs   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 -y Nx-x ar   -xaz-x -1-1z-x-1r	   r
   r   r=   rx   r   rC   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-xyzar   FN)r   yyyzT-zar   -z az-xzaz-xz az-x -zaz-x -z a-yz-x -yyy -zaz-x -yyy -z ar   r   r   r   r   r   	  s(    
r   c                   @   s`   e Zd Z	 edgZg dZdeddfdeddfded	dfd
eddfdeddfgZdS )TestOptionalsSingleDashLong-foo)r   r   r   z
-foo --fooz-foo -y-fooar   N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   1  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   A  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   Q  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   ^  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   l  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   r=   rt   rx   r   rC   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   rZ   nargsr   r   Nr   r   r   r   r   r   r   r    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  rL   r   r  2r   NT   r3   r   r  r   z-w 2z-x 2z-y 2z-z 2   	r	   r
   r   r=   intrx   r   rC   r   r   r   r   r   r  /  s$    
r  c                   @   s   e Zd Z	 edddeddddgZdgZded	dd
fdeg dd
fdedgdd
fdeddgdd
fded	g d
fded	dgd
fded	ddgd
fgZd	S )TestOptionalsNargsZeroOrMorer   *r  r   r!  r"  r   r   Nr  r   r  r  -y a-y a br   r   r   r   r   r*  F  s    
r*  c                	   @   s   e Zd Z	 edddeddddgZg dZded	dd
fdedgdd
fdeddgdd
fded	dgd
fded	ddgd
fgZd	S )TestOptionalsNargsOneOrMorer   +r  r   r!  r"  )r   r   r   r  za -y br   Nr  r   r   r  r  r,  r-  r   r   r   r   r   r.  Y  s    
r.  c                
   @   s   e Zd Z	 edddedeeddgZg dZded	d	d
fdedd	d
fdedd	d
fded	dd
fded	dd
fdeddd
fgZ	d	S )TestOptionalsChoicesr   abcchoicesz-g   rL   r3  )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   r=   r)  rangerx   r   rC   r   r   r   r   r   r0  j  s    
r0  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rL   requiredr   r   -x 1rZ   r   z-x42r   Nr(  r   r   r   r   r9  {  s    r9  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   r=        r=  c                   @   s@   e Zd Z	 eddedgZdgZdeddfdeedfgZdS )TestOptionalsActionStoreConstr   r   r   r   r   Nr  )	r	   r
   r   r=   r   rx   r   rC   r   r   r   r   r   r@    s    r@  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   rC    r?  rC  c                   @   rB  )
TestOptionalsActionStoreTruez--appler   r   )r   z	--apple=bz	--apple br   F)ZappleTNr   r   r   r   r   rE    r?  rE  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   rv   BooleanOptionalActionassertInr   	exceptionr   rw   cmr   r   r   
test_const  s
   z$TestBooleanOptionalAction.test_const)r	   r
   r   r=   rI  rK  rx   r   rC   r   rP  r   r   r   r   rF    s    rF  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)r;  r   r   r   rG  FN)
r	   r
   r   r=   rI  rK  rx   r   rC   r   r   r   r   r   rQ    s    rQ  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   rR    s    rR  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	  rS  r   r   r  rT  r   rW  rX  r   rY  )r   r   r  Nr   r   r   r   r   rZ    s    rZ  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   -crS  r  r   r   r   r_  za -cz-bxz-b xr   Nr  -b -cx -b -cyzr   yz	r	   r
   r   r=   rT   rx   r   rC   r   r   r   r   r   r\    s    r\  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 ))TestOptionalsActionAppendConstWithDefaultr]  r^  r   )r   r   r  r_  rS  r  r`  ra  r   rb  rc  r   rd  Nre  r   r   r   r   rf    s    rf  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   rZ   r   r   r   r   r   rg  
  r?  rg  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   ri    s    
ri  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$  Trj  r   r   r   r   r   rk  &  s    

rk  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 )0TestOptionalsDisallowLongAbbreviationPrefixCharsr/  Fr   rm  z++fooz++foodler   r   z++foonly)z+foon 3z++foon 3z++foodz++food ++foo 2r   Nrn  z++foo 3ro  z++foonly 7 ++foodle ++foo 2r$  Trj  r   r   r   r   r   rp  7  s    
rp  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 )/TestDisallowLongAbbreviationAllowsShortGroupingFrl  z-rr_  rh  r   z-c -rr   Nrr  z-rar   z-rccccz-ccr'  z-cc -raz-ccrccr   r   r   r   r   rr  H  s    

rr  c                
   @   s   e Zd Z	 edddZededddgZddgZd	ed
d
dfdedd
dfdedd
dfded
ddfdedddfdedddfgZd
S )5TestDisallowLongAbbreviationAllowsShortGroupingPrefixr/  Frq  z+rz+crh  r   z+c +rr   Nrs  z+rar   z+rccru  z+ccr'  z+cc +raz+ccrccr   r   r   r   r   rv  [  s    
rv  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   rw  r  s    
rw  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{   rZ   r  rx  r   r   Nr   r   r   r   r   rz  |  s    rz  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{   r'  r  )r   r   r   a b cry  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{   r+  r  r   r   r   r   ry  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{   r+  r   r"  r   r   r   r   ry  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{   r/  r  r   r   r   r   ry  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   ry  r   Nr   r   r   r   r   r   r   r    r?  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   ry  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  rL   r  )r   ry  1 2r   r   r   1rZ   Nr(  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|  ry  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   rZ   r  )r   r   r   r|  ry  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{   r'  r  r   r   r   r   ry  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   r+  r  r   r   r   r  ry  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   r/  r  r   r   r   ry  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  ry  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{   r+  r  r   r   r   r   r  ry  r  r|  r  Nr   r   r   r   r   r    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{   r/  r  r   r  ry  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  ry  r  Nr   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d	gg d
fdedd	gdgd
fgZdS )TestPositionalsNargs2ZeroOrMorer{   r'  r  r   r+  r  ry  r   r  r  r|  r  Nr   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{   r'  r  r   r/  )r   r   r   ry  r|  r   r  r  r  Nr   r   r   r   r   r  E  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{   r'  r  r   r   )r   r   r   r  ry  r   r  Nr  r|  r  r   r   r   r   r   r  O  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{   r+  r  r   rZ   r   r   r   r  ry  r  r|  r  Nr   r   r   r   r   r  Z  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{   r/  r  r   rZ   r  ry  r   r  r  r|  r  Nr   r   r   r   r   r  f  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   rZ   r  r   Nr  ry  r  r   r   r   r   r   r  q  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   r+  r  r   rZ   r  ry  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   r/  r  r   rZ   )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   rZ   r  r  ry  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   ry  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   r+  r   r   Nr  r   ry  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   r/  r   r   r   Nr  ry  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abcdefgr2  r   r   r  r#  Zefr   r!  r  N)	r	   r
   r   r=   setrx   r   rC   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!     r5  r  4r6  r  15   Nr7  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!  rS  r   r'  )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    s    
r  c                   @   s   e Zd ZeddZedddddedd	ed
deddddgZddgZdedd
ddfdedd
ddfdedd
ddfdeddddfdedd
ddfdedd
ddfgZ	dS ) TestPrefixCharacterOnlyArgumentsz-+r   -r   r   r   )r   r  r   r/  r  r   )r   rL   r  z-+-r   r   r  r   z+ -r   NFr  z- Xr   z+ -3Tz- ===z===)
r	   r
   r   r=   rt   r)  rx   r   rC   r   r   r   r   r   r  +  s    
r  c                   @   s   e Zd Z	 edddedddgZg Zdedg dfdeg g dfded	gg dfd
ed	gdgdfd	edd	gdfdeg d	gdfdedgd	gdfgZdS )TestNargsZeroOrMorer   r+  r  r  r   Nr  r   r   z	-x a -- br  r  r  r   r   r   r   r   r  >  s    r  c                	   @   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  N  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   rL   z-3r  )rL   r   r   r+  r  )r   z-y2.5r   z-x -az-x -3z-x -3.5z-3 -3.5z-x -2.5z	-x -2.5 az-3 -.5za x -1z-x -1 az-3 -1 ar   Nr  z-x 2.5      @z-x 2.5 ar   z-3.5      ?z-3-.5g      z-3 .5za -3.5za -x 1g      ?z-x 1 az-3 1 a)	r	   r
   r   r=   floatrx   r   rC   r   r   r   r   r   r  [  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   r+  r	  r   r[  r   r   r   r   ry  r  r  TrW  rU  r{   r   rV  r  N)
r	   r
   r   r=   rI  SUPPRESSrx   r   rC   r   r   r   r   r   r  v  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Zargument_defaultr{   r   r  r   r+  r	  r   r   r   r   r   r   ry  r  r  TrW  rU  r  rV  r  N)r	   r
   r   r=   rI  r  rt   rx   r   rC   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   r+  r	  r   r   r   r   )r{   r   r   r  r   ry  r  TrU  rV  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    q1 s(w   Y  qd S )N)hellozhello world!
)	recursivez-a
A
@hello)invalidz@no-such-path
r3   r4   r5   )rj   r  r   r7   r8   r   Z
file_textsr(   textr;   rk   r   r   r     s   zTestArgumentsFromFile.setUp@Zfromfile_prefix_chars-ar   r  r/  r  )r   r]  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   r=   rt   rx   r   rC   r   rp   r   r   rk   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    q1 s'w   Y  qd S )Nr  r3   r4   r5   )rj   r  r   r7   r8   r  rk   r   r   r     s   z$TestArgumentsFromFileConverter.setUpc                   @   r   )z>TestArgumentsFromFileConverter.FromFileConverterArgumentParserc                 c   s$    |  D ]
}| sq|V  qd S r   )r   strip)r   Z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  r/  r  r  )r  zworld!r   rA  )r	   r
   r   r   rh   r  ru   r=   rt   rx   r   rC   r   rp   r   r   rk   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 )Nrt  zFileType('r')rI  FileTyper   reprr   rL   r   r   r   test_r  s   
zTestFileTypeRepr.test_rc                 C   s    t dd}| dt| d S )NwbrZ   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 )Nrt  latin_1r5   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 )Nr3   big5ignore)r6   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  )Nrt  rZ   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   
   || _ d S r   )attr)r   r  r   r   r   rA        
zStdStreamComparer.__init__c                 C   s   |t t| jkS r   )r_   r]   r  rO   r   r   r   rQ     rF   zStdStreamComparer.__eq__Nr	   r
   r   rA   rQ   r   r   r   r   r    s    r  stdinrV   rW   c                   @   s    e Zd Zi Zdd Zdd ZdS )RFilec                 C   r  r   r1   r   r1   r   r   r   rA     r  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closer\   r   decoder1   r   rP   r  r   r   r   rQ     s   


zRFile.__eq__N)r	   r
   r   r  rA   rQ   r   r   r   r   r    s    r  c                	       s   e Zd Z	  fddZede dededdgZg dZde	d	e
dd
fde	e
de
dd
fde	e
de
dd
fde	eed
fde	d	e
dd
fgZ  ZS )TestFileTypeRc              	      sj   t t|   dD ]$}ttj| j|ddd}|| W d    q	1 s(w   Y  q	| 	d d S )Nr  r3   r4   r5   readonly)
rj   r  r   r7   r    r(   r)   r   r8   r<   r   	file_namer;   rk   r   r   r   ,  s   zTestFileTypeR.setUpr   r  r!  rt  )r   r   znon-existent-file.txtr{   Nr   r!  
-x foo barr   
bar -x foo-x - -r   r	   r
   r   r   r=   rI  r  rx   r   rC   r  eq_stdinr   rp   r   r   rk   r   r  )  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goodr3   r4   r5   )
rj   r	  r   r7   r    r(   r)   r   r8   r  )r   r;   rk   r   r   r   C  s   
zTestFileTypeDefaults.setUpr_  rt  zno-file.txtrL   r  r   z-c goodr
  )r  )r	   r
   r   r   r=   rI  r  rx   r   rC   r  r   rp   r   r   rk   r   r	  A  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    q	1 s(w   Y  q	d S )Nr  r3   r4   r5   )	rj   r  r   r7   r    r(   r)   r   r8   r  rk   r   r   r   U  s   zTestFileTypeRB.setUpr   rbr  r!  r   r{   Nr  r  r   r  r  r  r   r   rk   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   rA   l  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  modeencoder8   r  addr1   r  r   r   r   rQ   o  s   



zWFile.__eq__N)r	   r
   r   r  r  rA   rQ   r   r   r   r   r  i  s    r  geteuidznon-root user requiredc                       s   e Zd Z	  fddZededdededdgZg dZde	d	e
dd
fde	e
de
dd
fde	e
de
dd
fde	eed
fgZ  ZS )TestFileTypeWc                    s   t t|   | d d S )Nr   )rj   r  r   r<   r$   rk   r   r   r     s   zTestFileTypeW.setUpr   r3   r  r!  )r   r   r   r{   Nr  r  r   r  r  )r	   r
   r   r   r=   rI  r  rx   r   rC   r  	eq_stdoutr   rp   r   r   rk   r   r  z  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   r=   rI  r  rx   r   rC   r  r  r   r   r   r   r   r    s    r  c                   @   rq   )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  NNr3   rZ   )r3   rZ   NNr  r  )r3   r  Nr  r  r  r5   )r  r  r  Nr   l1strict)r3   r   r  r  zbuiltins.openr{   )rI  r  r   ZpatchZassert_called_with)r   ZFTcasesmrL   r>   r   r   r   test_open_args  s   
"z#TestFileTypeOpenArgs.test_open_argsN)r	   r
   r   r  r   r   r   r   r        r  c                   @   rq   )!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)	rI  rJ  r   
ValueErrorrv   r  r   r   rM  rN  r   r   r   test  s   z&TestFileTypeMissingInitialization.testNr	   r
   r   r   r   r   r   r   r    s    r  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   r=   complexr  rx   r   rC   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   r(  r   r   r   rA     r  z#TestTypeUserDefined.MyType.__init__c                 C      t | | jft ||jfkS r   rL   r(  rO   r   r   r   rQ        z!TestTypeUserDefined.MyType.__eq__Nr  r   r   r   r   MyType      r-  r   r  r!  r  r  r   r  -xf gr   r  N)
r	   r
   r   r   r-  r=   rx   r   rC   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'  r)  r   r   r   rA     r  zTestTypeClassicClass.C.__init__c                 C   r*  r   r+  rO   r   r   r   rQ     r,  zTestTypeClassicClass.C.__eq__Nr  r   r   r   r   C  r.  r1  r   r  r!  r  r  r   r  r/  r   r  N)	r	   r
   r   r1  r=   rx   r   rC   r   r   r   r   r   r0    s    
	
r0  c                   @   rq   )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_typerL   Zmy_typer   r  r  r  z
my_type{1}r  z-x 1 42zmy_type{42})rI  rJ  registerrv   r   rd   r   rC   )r   r5  rw   r   r   r   r     s   

zTestTypeRegistration.testNr!  r   r   r   r   r2    r  r2  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                   @   rR   )z$TestActionUserDefined.OptionalActionNc                 C   sr   zt dd}|dv rd|_n|dv rd|_ntd| W n ty0   t d }td	| w t|d
| d S )N      ?r  )      ?r  r'  )       @r%  	value: %srZ   zopt_action failed: %sr!  )rC   r   AssertionErrorr]   ra   rS   r`   r   rw   	namespacer(  option_stringr   er   r   r   __call__  s   
z-TestActionUserDefined.OptionalAction.__call__r   r	   r
   r   rB  r   r   r   r   OptionalAction  rY   rD  c                   @   rR   )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y8   t d
 }td| w t|d| d S )Nr'  r   )r   r%  r9  )rZ   r  )r'  r:  r<  rZ   zarg_action failed: %sr   )rC   r!  r=  r]   ra   rS   r`   r>  r   r   r   rB  1  s   
z/TestActionUserDefined.PositionalAction.__call__r   rC  r   r   r   r   PositionalAction/  rY   rF  z-sr!  r9  )r   r   rL   r  r   r   r'  )r   rL   r  r  z-s0.125r:  )r!  r   r#  r   z
-s 0.625 1r  rZ   z84 -s2r;  r%  N)r	   r
   r   rI  ActionrD  rF  r=   r  r)  rx   r   rC   r   r   r   r   r   r8    s"    r8  c                   @   s(   e Zd Z	 G dd dejZdd ZdS )TestActionRegistrationc                   @   rR   )zTestActionRegistration.MyActionNc                 C   s   t || jd|  d S )Nzfoo[%s])r`   r   )r   rw   r?  valuesr@  r   r   r   rB  ]     z(TestActionRegistration.MyAction.__call__r   rC  r   r   r   r   MyAction[  rY   rK  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]rE  r#  zfoo[42])rI  rJ  r7  rK  rv   r   rd   rC   r   rw   r   r   r   r   `  s
   zTestActionRegistration.testN)r	   r
   r   rI  rG  rK  r   r   r   r   r   rH  X  s    rH  c                   @   s6   e Zd ZedddedgZdZdeg ddfgZd	S )
TestActionExtendr   extendr/  )r   r  rL   r   z--foo f1 --foo f2 f3 f4)f1f2Zf3Zf4r   N)	r	   r
   r   r=   r   rx   r   rC   r   r   r   r   r   rM  j  s    rM  c                       s   e Zd Z	 dd Z		d7d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  ZS )8TestAddSubparsersc                 O      | j tg|R i | d S r   r   rS   r@   r   r   r   assertArgumentParserErrorz  r,  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   r'  r{   r   foo helpr   helprW  rX  r   r   bar helprL   r[  r;  FZCOMMANDmetavarcommandstitlecommand helpr[  z1 descriptionrX  z1 helpZ1alias1Z1alias2aliasesr  r  zw helpr   r1  x helpr3  r[  z2 descriptionz2 helpr$  r   Z123y helpr   r+  zz help)rL   r  r[  z3 descriptionz3 helpro  tzt helpur  zu helpr  r[  r   r  )r$  )ro  )	rh   rv   r  add_subparsersrT  dict
add_parserr)  r%  )r   subparser_helpr   rd  rw   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)ro  )rj   r   r   rw   command_help_parserr$   rk   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   rT  rw   rd   )r   r   r>   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   r3   r   z0.25 --foo 2 -y 2 3j -- -1jTr9  r$  y              @y             )r{   r   r  r   z--foo 0.125 1 cr:  r  z-1.5 3 11 -- a --foo 7 -- br$     )r   r   rj  --r  )r{   r   rh  ri  )r   rw   rd   r   rC   r$   r   r   r   test_parse_args  s    z!TestAddSubparsers.test_parse_argsc              	   C   s   |  | jd tdddddg f |  | jd tddddddgf |  | jd	 tddddddgf |  | jd
 tdddddddgf |  | jd tdddddg df d S )Nru  Fr  rv  r  rw  z0.5 -p 1 b -w 7z-pz0.5 1 b -w 7 -pz0.5 1 b -q -rs -w 7z-qz-rsz0.5 -W 1 b -X Y -w 7 Z)z-Wz-Xr  r  )r   rw   parse_known_argsr   rC   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  )rh   rv   rl  rn  r   rC   rd   r   )r   rw   rp  rq  r   r   r   	test_dest  s   

zTestAddSubparsers.test_destc                 C   s,   | dg}| |jd | |j d d S )Nrunr   )rd   r   commandrT  )r   rw   retr   r   r   _test_required_subparsers  s   z+TestAddSubparsers._test_required_subparsersc                 C   s0   t  }|jdd}d|_|d | | d S )Nr  r   Tr~  )rh   rl  r;  rn  r  r   rw   rp  r   r   r   &test_required_subparsers_via_attribute  s
   
z8TestAddSubparsers.test_required_subparsers_via_attributec                 C   s,   t  }|jddd}|d | | d S )Nr  Tr   r;  r~  )rh   rl  rn  r  r  r   r   r   "test_required_subparsers_via_kwarg  s   
z4TestAddSubparsers.test_required_subparsers_via_kwargc                 C   s6   t  }|jdd}|d |d}| |j d S )Nr  r   r~  r   rh   rl  rn  rd   assertIsNoner  r   rw   rp  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r;  r{   r   r   z8error: the following arguments are required: {foo,bar}
$	rh   rl  rn  r   rS   rd   assertRegexrM  rW   r   rw   rp  excinfor   r   r   -test_required_subparsers_no_destination_error     

z?TestAddSubparsers.test_required_subparsers_no_destination_errorc                 C   r  )NTr  r{   r   rW  zPerror: argument {foo,bar}: invalid choice: 'baz' \(choose from 'foo', 'bar'\)\n$r  r  r   r   r   3test_wrong_argument_subparsers_no_destination_error  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   rw   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  rL  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 )	NrU  rV  r\  z--non-breakingrD  uR   help message containing non-breaking spaces shall not wrap at non-breaking spacesrZ  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
        )rh   rv   r   r  r  r  rL  r   r   r   test_help_non_breaking_spacesS  s   z/TestAddSubparsers.test_help_non_breaking_spacesc                 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  rL  r   r   r    test_help_alternate_prefix_charse  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   rs  r  r  r  r  r$   r   r   r   test_parser_command_helpw  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 )NrU  rV  r\  r   r   rY  rZ  r   r]  r[  Zsubcommandsrb  zadditional text)ra  rX  r[  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
            )	rh   rv   rl  rn  r   r  r  r  r  )r   rw   rp  rq  rr  r   r   r   test_subparser_title_help  s   


z+TestAddSubparsers.test_subparser_title_helpc                 C   sN   |  t}| j|  W d    n1 sw   Y  | ||jj d S r   )r   rS   rw   rd   r   r   rM  rV   )r   r   Zexpected_helprO  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  rJ  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_help  rJ  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rd  z0.5 1alias1 bFr  r  rw  z0.5 1alias2 b)r   r   r{  r   rC   rL  r   r   r   test_alias_invocation  s   z'TestAddSubparsers.test_alias_invocationc                 C   s"   | j dd}| |jd  d S )NTr  z0.5 1alias3 b)r   rT  rd   r   rL  r   r   r   test_error_alias_invocation  s   z-TestAddSubparsers.test_error_alias_invocationc                 C   s.   | j ddd}d | _| | td d S )NT)rd  ro  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  rL  r   r   r   test_alias_help  s   z!TestAddSubparsers.test_alias_help)FNF)r	   r
   r   rT  r   r   rt  rz  r|  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rp   r   r   rk   r   rQ  w  s<    
7	rQ  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$  ro  r  1 2 3)rh   rv   r|   rC   rd   r   r   r   rw   r}   expectedre   r   r   r   test_nongroup_first     



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$  ro  r  r  rh   r|   rv   rC   rd   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$  ro  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    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   rR  r   rS  r@   r   r   r   rT   	  r,  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   r]  r  z--dr  r   r   r   )rj   r   rh   wxyz_parentrv   r|   abcd_parentw_parentz_parentab_mutex_parentadd_mutually_exclusive_groupr    r(   basenamer]   r   main_program)r   Zx_groupc_groupr}   rk   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 3ro  r  r$  r3   r  r   )rh   r  r   rd   r   rC   rL  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  rd   rh   rL  r   r   r   test_single_parent_mutexD	  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  rh   r  rd   r   r  rw   r   r   r   test_single_granparent_mutexI	  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  Tr]  r_  )r   rC   rT  )r   rd   r   r   r   r  O	  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 4ro  r  r$  r  )r   r  r  r3   r  r   )r  r  rh   r   rd   r   rC   r  r   r   r   test_multiple_parentsY	  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$  ro  )r   r  r3   r  r   z-a --w 2 3 -bz-a -b --w 2 3)r  r  rh   r   rd   r   rC   rT  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   rI  ArgumentErrorrJ  r  r  r$   r   r   r   test_conflicting_parentsi	  
   

z*TestParentParsers.test_conflicting_parentsc                 C   r  r  )r   rI  r  rJ  r  r  r$   r   r   r   test_conflicting_parents_mutexo	  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  rh   r   rd   r   rC   r  r   r   r   test_same_argument_name_parentsu	  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  rA  zbar -b 1 --d 2 3 4ro  r  r$  r  )r   r  r  rA  )	rh   rl  rn  r  rv   r   rd   r   rC   )r   rw   rp  Zabcde_parserr   r   r   test_subparser_parents{	  s   
z(TestParentParsers.test_subparser_parentsc                 C   s   t  }| }| jg}|jd|d}|d}|d | j| jg}|jd|d}|d | |d	 t
dd	d
d | |d	 t
d	ddd dd
d | |jd	  | |jd	  d S )Nr{   r  r  r  r   rA  zfoo -a 4TFr  r  zbar -b  --w 2 3 4r$  ro  )r   r  r3   r  r   rA  zfoo -a -b 4zbar -b -a 4)rh   rl  r  rn  r|   rv   r  r   rd   r   rC   rT  )r   rw   rp  r  Z
abc_parserr  Zwxyzabe_parserr   r   r   test_subparser_parents_mutex	  s*   




z.TestParentParsers.test_subparser_parents_mutexc              	   C   sJ   | j | jg}t|d}| }| j}| |td||rdnd d S )Nr  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  rh   r  r  r   r  r  format)r   r  rw   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ra  rX  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   )rh   r|   rv   r  r   rS   rd   r  r  r   r  r  r  )r   parentr  r  rw   r  r  r   r   r   test_groups_parents	  s    






z%TestParentParsers.test_groups_parents)r	   r
   r   rT  r   r  r  r  r  r  r  r  r  r  r  r  r  r  rp   r   r   rk   r   r  	  s"    

r  c                   @   r   ) TestMutuallyExclusiveGroupErrorsc                 C   s    t  }| j}|t|jdd d S )Nr{   )ra  )rh   r   r   r  )r   rw   raisesr   r   r   test_invalid_add_argument_group	  s   z@TestMutuallyExclusiveGroupErrors.test_invalid_add_argument_groupc                 C   sl   t  }| }|j}| j}|t|ddd |t|d |t|ddd |t|ddd |t|dtjd d S )Nr   Tr  r   r/  r  rZ   )rh   r  rv   r   r  rI  ZPARSER)r   rw   r}   rv   r  r   r   r   test_invalid_add_argument	  s   z:TestMutuallyExclusiveGroupErrors.test_invalid_add_argumentc                 C   sp   t dd}| }|jddd |jddd | }|jddd |jd	dd d
}| | t| d S )NrU  rW  r   r   r   r   rD  z--soupz--nutsz            usage: PROG [-h] [--foo | --bar] [--soup | --nuts]

            options:
              -h, --help  show this help message and exit
              --foo
              --bar
              --soup
              --nuts
              )rh   r  rv   r   r  r  r  )r   rw   Zgroup1group2r  r   r   r   r  	  s   

z*TestMutuallyExclusiveGroupErrors.test_helpN)r	   r
   r   r  r  r  r   r   r   r   r  	  s    r  c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )MEMixinc                 C   s4   | j ddj}t}| jD ]}| |||  qd S NFr  
get_parserrd   rS   r   r   r   r   rd   ro   args_stringr   r   r   test_failures_when_not_required	  s
   
z'MEMixin.test_failures_when_not_requiredc                 C   s:   | j ddj}t}| jdg D ]}| |||  qd S )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  rd   r   successes_when_not_requiredr   r   )r   rd   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  rd   r   r   r   )r   rd   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  r[  r   r  r  r   r  r[  r   r   r   test_help_when_not_required
     z#MEMixin.test_help_when_not_requiredc                 C   r  r  )r  r  r  r[  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  	  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 )NrU  r  r  r   r]  r  r	  r   r  baz help)r  r   r[  rh   r  rv   r   r;  rw   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   rC   r   r  r  r  r[  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 )NrU  r  z--abcdez
abcde helpr  z--fghijz
fghij helpr  z--klmnoz
klmno helpz--pqrstz
pqrst helprh   rv   r  r  r   r   r   r  K
  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  I
  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 )
NrU  r  r  r   r  r   rD  rg  rZ  rh   r  rv   rI  r  r  r   r   r   r  v
  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	  t
  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 )NrU  r  r  --spamr   rZ  r   rD  z	--bladderr  r
  )r   r;  rw   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   rC   r   r  r  r  r[  r   r   r   r   r  
  s    	r  c                	   @   s   e Zd Zdd Zg dZdeddddfd	ed
dddfded
ddgdfded
dg ddfgZded
dddfgZdZdZ	dZ
dS )*TestMutuallyExclusiveOptionalAndPositionalc                 C   sJ   t dd}|j|d}|jdddd |jdd	d
 |jddddd |S )NrU  r  r  r   r   FOOrZ  r  SPAMr  r   r+  r   BADGERr  r  r[  r   r  r   r   r   r  
  s   
z5TestMutuallyExclusiveOptionalAndPositional.get_parser)z--foo --spam Sz
--spam S XzX --foozX Y Z --spam Sz	--foo X Yr   TNr   )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 )NrU  r  r   r   re  rZ  r  r  a helpr]  b helpr   rg  r_  c helpr  r  r   r   r   r  
  s   
z.TestMutuallyExclusiveOptionalsMixed.get_parser)z-a -b-b -cz-a -cz-a -b -cr  TFr   r  r  r   r  r]  r_  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   r  
  s     
	r  c                   @   s\   e Zd ZdddZddgZdedddfd	edd
dfgZdedddfgZdZdZ	dZ
dS )TestMutuallyExclusiveInGroupNc                 C   sD   t dd}|jddd}|j|d}|jddd	 |jd
dd	 |S )NrU  r  zTitled groupzGroup descriptionr  r  r   r]  r  r	  r  )rh   r|   r  rv   )r   r;  rw   Ztitled_groupZ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 )NrU  r  r   re  r  r   r   rg  rZ  r  r   r   r  rj  r]  r  r_  r  r  r  r   r   r   r  :  s   
z<TestMutuallyExclusiveOptionalsAndPositionalsMixed.get_parser)zX A -br  z-c X AzX Ar  Fr   r  zX -bNTzX -czX A -yzX -y -bzX -yz6        usage: PROG [-h] [-y] [-b] [-c] x [a]
        a   
        positional arguments:
          x           x help
          a           a help

        options:
          -h, --help  show this help message and exit
          -y          y help
          -b          b help
          -c          c help
        r  r   r   r   r   r  8  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 )
NrU  r  r  r  r]  r_  z-dz-er   r   )r   r;  rw   r}   r  Zgroup3r   r   r   r  c  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  r[  r  r  r  r  r   r   r   r   r  a  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)rW  r   r  )rj   r  r  rh   rW  )r   r;  r  rw   rk   r   r   r    s
   
zMEPBase.get_parserr   )r	   r
   r   r  rp   r   r   rk   r   r    s    r  c                   @   r   )&TestMutuallyExclusiveGroupErrorsParentNr   r   r   r   r   r        r  c                   @   r   )!TestMutuallyExclusiveSimpleParentNr   r   r   r   r   r!    r   r!  c                   @   r   )TestMutuallyExclusiveLongParentNr   r   r   r   r   r"    r   r"  c                   @   r   )*TestMutuallyExclusiveFirstSuppressedParentNr   r   r   r   r   r#    r   r#  c                   @   r   ))TestMutuallyExclusiveManySuppressedParentNr   r   r   r   r   r$    r   r$  c                   @   r   )0TestMutuallyExclusiveOptionalAndPositionalParentNr   r   r   r   r   r%    r   r%  c                   @   r   ))TestMutuallyExclusiveOptionalsMixedParentNr   r   r   r   r   r&    r   r&  c                   @   r   )7TestMutuallyExclusiveOptionalsAndPositionalsMixedParentNr   r   r   r   r   r'    r   r'  c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestSetDefaultsc              
   C   s   t  }|jdd |jddd | tdddd|g  | tdddd|g t  | tdddd|g tdd | tdddd|g tddd	 d S )
Nr{   r   r   rZ   )r  r   r  r   r'  )r   r   rh   set_defaultsr   rC   rd   rL  r   r   r   test_set_defaults_no_args  s   z)TestSetDefaults.test_set_defaults_no_argsc              	   C   s   t  }|jddd |jddd | tddd|g  | tddd|g t  | tddd|g tdd | td	dd|d
  | td	dd|d
 t  | td	dd|d
 tdd d S )Nr{   r   r  r   Zxfooxr  r   r   r  r<  )rh   r*  rv   r   rC   rd   r   rL  r   r   r   test_set_defaults_with_args  s*   z+TestSetDefaults.test_set_defaults_with_argsc                 C   sR   t  }|jdd | }|d}|jdd | tddd|d  d S )Nr{   r   r   r   rA  r  )rh   r*  rl  rn  r   rC   rd   r   )r   rw   rp  Zparser_ar   r   r   test_set_defaults_subparsers  s   
z,TestSetDefaults.test_set_defaults_subparsersc                 C   s>   t dd}|jdd t |gd}| tdd|g  d S )NFr  r{   r   r  r)  )r   r  rw   r   r   r   test_set_defaults_parents  s   
z)TestSetDefaults.test_set_defaults_parentsc                 C   sL   t  }| d}|jdd |jdd | tdd|dg d S )Nr   rZ   r   r'  )rI  rJ  rl  rn  r*  r   rC   rd   )r   rw   Zxparserr   r   r   )test_set_defaults_on_parent_and_subparser  s
   z9TestSetDefaults.test_set_defaults_on_parent_and_subparserc                 C   s   t  }|jddddd |d |jddd	 |jd
dd |jdddd | tddddd|g  |jddddd | tddddd|g  d S )NWr   r  r  r&  r  r   XXr  r  r   r  r   ZZr"  WWYY)rh   r*  rv   r   rC   rd   rL  r   r   r   &test_set_defaults_same_as_add_argument  s   
z6TestSetDefaults.test_set_defaults_same_as_add_argumentc                 C   s   t  }|jddddd |d}|d |jdd	d
 |jddd |jdddd | tdd	ddd|g  |jddddd | tddddd|g  d S )Nr0  r   r  r  r&  r{   r  r   r1  r  r  r   r  r   r2  r"  r3  r4  )rh   r*  r|   rv   r   rC   rd   r   rw   r}   r   r   r   ,test_set_defaults_same_as_add_argument_group  s   

z<TestSetDefaults.test_set_defaults_same_as_add_argument_groupN)
r	   r
   r   r+  r,  r-  r.  r/  r5  r7  r   r   r   r   r(    s    	r(  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   )rh   r  Zget_defaultrv   r)  r   r*  rL  r   r   r   test_get_default!  s   
zTestGetDefault.test_get_defaultN)r	   r
   r   r9  r   r   r   r   r8    r   r8  c                   @   r  )TestNamespaceContainsSimplec                 C   s$   t  }| d| | d| d S )Nr   r   )rI  	NamespaceassertNotInr   nsr   r   r   
test_empty8     z&TestNamespaceContainsSimple.test_emptyc                 C   sN   t jddd}| d| | d| | d| | d| | d| d S )	NrZ   r'  r  r   r   r  xxr   )rI  r;  r<  rL  r=  r   r   r   test_non_empty=  s   z*TestNamespaceContainsSimple.test_non_emptyN)r	   r
   r   r?  rB  r   r   r   r   r:  6  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_wrapperZ  r   zUTestHelpFormattingMetaclass.__init__.<locals>.AddTests.__init__.<locals>.test_wrapper)func_suffixstd_nametest_format
test_printtest_print_filer	   r   r`   )r   Z
test_classrG  rH  r   r   rF  r   r   r   rA   Q  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 )Nrx   argument_group_signaturessubparsers_signatures)
rI  rJ  rt   r>   r?   r_   rv   r|   rl  rn  )r   r   rw   Zargument_sigZ
group_sigsZ	group_sigZargument_sigsr}   Zsubparsers_sigsrp  Zsubparser_sigr   r   r   r   b  s6   



zBTestHelpFormattingMetaclass.__init__.<locals>.AddTests._get_parserc                 S   s&   t || j}t|}||| d S r   )r_   rG  r  r  r   )r   r   parser_textZexpected_textr   r   r   _testx  s   
z<TestHelpFormattingMetaclass.__init__.<locals>.AddTests._testc                 S   s,   |  |}t|d| j }| ||  d S )Nz	format_%s)r   r_   rG  rO  )r   r   rw   r  r   r   r   rI  }  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   r_   rG  r]   rH  r`   r   rc   rO  )r   r   rw   print_Z
old_streamrN  r   r   r   rJ    s   
 zATestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_printc                 S   s@   |  |}t|d| j }t }|| | }| || d S rP  )r   r_   rG  r   rc   rO  )r   r   rw   rQ  ZsfilerN  r   r   r   rK    s   
zFTestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_print_fileN)	r	   r
   r   rA   r   rO  rI  rJ  rK  r   r   r   r   r   O  s    r   ))usagerV   )r[  rV   )r   )r   r1   r   r   r   rG  rH  r   r   r   rA   K  s   Hz$TestHelpFormattingMetaclass.__init__NrB   r   r   r   r   rC  I  r   rC  rD  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 )TestHelpBiggerOptionalsrU  DESCRIPTIONEPILOGrW  rX  Zepilogr  r  r  0.1r  r   r   X HELPrZ  --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   r=   rt   rx   rL  rR  r[  r  r   r   r   r   rS    s    


rS  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     r@  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   rS  rt   rx   rL  rR  r[  r  r   r   r   r   r_    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 )"TestHelpBiggerOptionalGroupsrU  rT  rU  rV  r  r  r  rW  r  r   r   rX  rZ  rY  rZ  r  r{   r[  r   r\  zGROUP TITLEzGROUP DESCRIPTIONrc  r   zBAZ HELPr   r/  zZ HELPrj  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USAGErT  rR  rX  r   r   rX  rZ  rY  rZ  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   ra  )  s    


ra  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 )TestHelpReformattingrU  ze   oddly    formatted
description

that is so long that it should go onto multiple lines when wrappedr\  r   r1  zoddly
    formatted -x helpr_  r[  r  r   znormal y helpra  z'
    oddly formatted group

descriptionrc  r  r   z` oddly 
formatted    -a  help  
    again, so long that it should be wrapped over multiple linesrZ  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   re  H  s$    
re  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 )TestHelpWrappingShortNamesrU  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   r1  zxXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXrf  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 HHArZ  rg  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   rh  |  s    rh  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 )TestHelpWrappingLongNamesrb  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 Drc  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 XHrf  r  Zyyyyyyyyyyyyyyyyyyyyyyyyyri  rj  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 ZHrd  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   rk    s    rk  c                   @   s   e Zd Z	 eddZeddddeddd	ded
d
deddddeddddeddejdedddejdedddejdgZededdddedd d!ded"d"dded#d#ddgfgZd$Z	e	d% Z
d&Zd'S )(TestHelpUsagerU  r  r  r/  r3   rj  r   r+  r   r   r  r  r'  )r[  r  r  r   r   zWhether to foo)r[  r   r   zWhether to barT)r[  r  r   r   z--foobarz--barfoor   r}   r   r  r   r  r   r  rA  a          usage: PROG [-h] [-w W [W ...]] [-x [X ...]] [--foo | --no-foo]
                    [--bar | --no-bar]
                    [-f | --foobar | --no-foobar | --barfoo | --no-barfoo] [-y [Y]]
                    [-z Z Z Z]
                    a b b [c] [d ...] e [e ...]
        ad  
        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

        group:
          -y [Y]                y
          -z Z Z Z              z
          d                     d
          e                     e
        r   N)r	   r
   r   r=   rt   rI  rK  rx   rL  rR  r[  r  r   r   r   r   rm    s0    

rm  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 )TestHelpOnlyUserGroupsrU  FrW  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   rn    s     





rn  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  r0  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   rp  /  s    


rp  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 ) TestHelpUsageLongProgOptionsWraprq  r  r  WWWWWWWWWWWWWWWWWWWWWWWWWrr  r   rl  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   rs  L  s    




rs  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 )$TestHelpUsageLongProgPositionalsWraprq  Fro  aaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccz        usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
               ccccccccccccccccccccccccc
        
        positional arguments:
          aaaaaaaaaaaaaaaaaaaaaaaaa
          bbbbbbbbbbbbbbbbbbbbbbbbb
          ccccccccccccccccccccccccc
        r   Nr^  r   r   r   r   rx  p  s    rx  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 )TestHelpUsageOptionalsWraprU  r  r  rt  rr  r   rl  r   ru  r   rv  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 )TestHelpUsagePositionalsWraprU  r  r   r   r   ry  rz  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~    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 )%TestHelpUsageOptionalsPositionalsWraprU  r  r   rl  rr  r   ru  r   rv  ry  rz  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    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 )TestHelpUsageOptionalsOnlyWraprU  r  r   rl  rr  r   ru  r   rv  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                   @   rw  ) TestHelpUsagePositionalsOnlyWraprU  Fro  ry  rz  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 )(TestHelpVariableExpansionrU  r  r   z"x %(prog)s %(default)s %(type)s %%r^  r   r   r   XXXz y %(prog)s %(default)s %(const)s)r   r  r   r[  r   r1  z$foo %(prog)s %(default)s %(choices)srf  r   r   rZ   r'  ZBBBz!bar %(prog)s %(default)s %(dest)s)r  r3  r_  r[  r!  zspam %(prog)s %(default)sr  r   r  zbadger %(prog)s %(default)s)r  r[  r}   r  za %(prog)s %(default)sr]  r  zb %(prog)s %(default)szw        usage: PROG [-h] [-x X] [-y] [--foo {a,b,c}] [--bar BBB] [-a A] [-b B]
                    spam badger
        a  
        positional arguments:
          spam           spam PROG None
          badger         badger PROG 0.5

        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   r=   rt   r)  rx   rL  rR  r[  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 )&TestHelpVariableExpansionUsageSuppliedrU  z%(prog)s FOOrW  rR  z         usage: PROG FOO
        r  r   Nr^  r   r   r   r   r  U  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 )$TestHelpVariableExpansionNoArgumentsrU  Fro  z        usage: PROG
        r   Nr^  r   r   r   r   r  f  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 )TestHelpSuppressUsagerU  r  r   rY  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   r=   rI  r  rt   rx   rL  r[  rR  r  r   r   r   r   r  s  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 )TestHelpSuppressOptionalrU  Fro  r   r  r!  r  z!        usage: PROG spam
        zA
        positional arguments:
          spam  spam help
        r   Nr	   r
   r   r=   rt   rI  r  rx   rL  rR  r[  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 )TestHelpSuppressOptionalGrouprU  r  r   rY  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   r=   rt   rx   rI  r  rL  rR  r[  r  r   r   r   r   r    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 )TestHelpSuppressPositionalrU  r  r   rY  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    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 )TestHelpRequiredOptionalrU  r  r   TrY  )r;  r[  z+        usage: PROG [-h] --foo FOO
        r  r   Nr^  r   r   r   r   r    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 )TestHelpAlternatePrefixCharsrU  z^;F)rW  r   r   z^^foor   rY  rZ  z;bz;;barr]  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    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 )TestHelpNoHelpOptionalrU  Fro  r   rY  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 )	TestHelpNonerU  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 )TestHelpTupleMetavarrU  r  r  r3   r/  )ZW1ZW2)r[  r  r_  r   r   r+  )ZX1ZX2r   r  r  )ZY1ZY2ZY3r   r   r   )ZZ1z]        usage: PROG [-h] [-w W1 [W2 ...]] [-x [X1 [X2 ...]]] [-y Y1 Y2 Y3] [-z [Z1]]
        z
        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 )TestHelpRawTextrU  7Keep the formatting
    exactly as it is written

here
rW  formatter_classrX  r   z-    foo help should also
appear as given herer  r!  r  ra  ?    This text
  should be indented
    exactly like it is here
rc  r   r]  >        usage: PROG [-h] [--foo FOO] [--bar BAR] spam
        a  
        Keep the formatting
            exactly as it is written

        here

        positional arguments:
          spam        spam help

        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   r=   rI  ZRawTextHelpFormatterrt   rx   rL  rR  r[  r  r   r   r   r   r  >  s     


r  c                   @   r  )TestHelpRawDescriptionrU  r  r  r   z4  foo help should not
    retain this odd formattingr  r!  r  ra  r  rc  r   r]  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   r=   rI  ZRawDescriptionHelpFormatterrt   rx   rL  rR  r[  r  r   r   r   r   r  o  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 )#TestHelpArgumentDefaultsrU  rX  r  r   z)foo help - oh and by the way, %(default)sr  r   r   r]  rZ  z--tazzWhether to taz itT)r   r[  r  z--quuxzSet the quuxr   )r[  r  r!  r  r   r   Zwoodenzbadger helpr  ra  rc  r	  r  )rL   r  r[  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   r=   rI  ZArgumentDefaultsHelpFormatterrt   rK  rx   r)  rL  rR  r[  r  r   r   r   r   r    s,    



r  c                   @   s@   e Zd Z	 edddZedddddgZg Zd	Zed
 ZdZ	dS )TestHelpVersionActionrU  rX  r\  -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    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 )TestHelpVersionActionSuppressrU  r  r  r  r  r  )r   r  r[  r   rY  r  r!  r  r  r  N)r	   r
   r   r=   rt   rI  r  rx   rL  rR  r[  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 )TestHelpSubparsersOrderingrU  display some subcommandsr\  r  r  r  rW  r  c                 C   s   g | ]}t |d qS )r  r=   )rG   r1   r   r   r   rI     s    z%TestHelpSubparsersOrdering.<listcomp>)r   r  r  r  rA  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   r=   rt   rx   rM  rR  r[  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 )"TestHelpSubparsersWithHelpOrderingrU  r  r\  r  r  r  rW  r  ))r   za subcommand help)r  zb subcommand help)r  zc subcommand help)r  zd subcommand help)rA  ze subcommand helpc                 C   s   g | ]
\}}t ||d qS ))r1   r[  r  )rG   r1   r[  r   r   r   rI   %  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   r=   rt   rx   Zsubcommand_datarM  rR  r[  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   r3  r   r   r   custom_typeE     z(TestHelpMetavarTypeFormatter.custom_typerU  rX  )rW  rX  r  r   r  r]  r_  z
SOME FLOAT)rL   r_  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  r=   rI  ZMetavarTypeHelpFormatterrt   r)  r  rx   rL  rR  r[  r  r   r   r   r   r  C  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   )rI  rJ  r   r   rv   r   r>   r?   rw   r   r   r   assertTypeErrorg     
z/TestInvalidArgumentConstructors.assertTypeErrorc                 O   r  r   )rI  rJ  r   r  rv   r  r   r   r   assertValueErrorl  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_argumentsq  s   z>TestInvalidArgumentConstructors.test_invalid_keyword_argumentsc                 C   s"   |    dD ]}| j |d qd S )N)rS  r>  r   r  r   r   r   r   r   test_missing_destinationw  s   z8TestInvalidArgumentConstructors.test_missing_destinationc                 C   s   |  d |  d d S )Nry  z---r  r$   r   r   r   test_invalid_option_strings|  s   
z;TestInvalidArgumentConstructors.test_invalid_option_stringsc                 C   s$   | j ddd | j dttfd d S )Nr   r)  r  )r  r)  r  r$   r   r   r   test_invalid_type     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   r>  rS  z
store-truezunknown action)	r  rI  rJ  r   r  rv   rL  r   rM  rN  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)rI  rJ  rv   r   r  rL  r   rM  rN  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   rD  r^  rh  r  r/  r  abr2  r   r   )r   )rm  r)  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   rD  rh  r   r{   rH  r+  r  r   r  r  r   r   r   !test_no_argument_no_const_actions  s   zATestInvalidArgumentConstructors.test_no_argument_no_const_actionsc                 C   s\   dD ])}| 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!  )rZ   r+  r/  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   r^  r   r/  r  r  r  r   r   r   test_required_const_actions  s   z;TestInvalidArgumentConstructors.test_required_const_actionsc                 C   s4   | j ddd | j dddd | j ddtjd d S )Nr  Zparsersr   rU  )r   rW  )r   ru   )r  rI  rJ  r$   r   r   r   "test_parsers_action_missing_params  s
   
zBTestInvalidArgumentConstructors.test_parsers_action_missing_paramsc                 C      | j ddd d S )Nr{   Tr  r  r$   r   r   r   test_required_positional     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>.SuccessNr   r   r   r   r   Success  r   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  r;  r  r   r   rA     s   zQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__init__c                 _   s   d S r   r   r@   r   r   r   rB    r  zQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__call__N)F)r	   r
   r   rA   rB  r   r  r   r   rG    s    rG  r  )r   r  r   r!  )rT   r   rI  rJ  r   rv   )r   rG  rw   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  d  s"    	
r  c                   @   r  )TestActionsReturnedc                 C   sX   t  }|d}| |jd |dd}| |jd |dd}| |jd d S )	Nr   r{   r]  r   r   r   r   r   )rI  rJ  rv   r   r   r   rw   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%  rZ   r'  r  ZBARr   )r  r   r  rL   r3  r[  r_  r   )rI  rJ  rv   r)  r   r  r   r  rL   r3  r[  r_  r   r  r   r   r   	test_misc  s   

zTestActionsReturned.test_miscN)r	   r
   r   r}  r  r   r   r   r   r    s    	r  c                   @   r   )TestConflictHandlingc                 C   s   | j ttjdd d S )Nr{   )conflict_handler)r   r  rI  rJ  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  )rI  rJ  rv   r   r  rL  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 )NrU  resolve)rW  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_SPAMrr  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
            )rI  rJ  rv   r   r  r  r  )r   r  rw   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   rS   rd   r   r   r  rM  rV   )r   rw   r   rO  r   r   r   assertPrintHelpExit0  s   z3TestOptionalsHelpVersionActions.assertPrintHelpExitc                 G   s   |  t|j| d S r   )r   rS   rd   r   rw   r>   r   r   r   rT  5     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rh   rv   r  r   AttributeErrorr_   rL  r   r   r   test_version8  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
rh   rv   r   rS   rd   r   rM  rV   rN  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  )rh   rv   rT  r   r  r_   rL  r   r   r   test_version_no_helpF  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  rN  r   r   r   test_version_actionM  s   
z3TestOptionalsHelpVersionActions.test_version_actionc                 C   s>   t dd}| |d | |d | |d | |d d S )NFr  r   r   r  r  )rh   rT  rL  r   r   r   test_no_helpT  s
   
z,TestOptionalsHelpVersionActions.test_no_helpc                 C   sZ   t  }|jddd |jddd | |d | |d | |d | tt|d d S )	Nr   r[  r   r   r  r  r  r  )rh   rv   r  rT  r   r  r_   rL  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   rw   Zvalid_prefixesZvalid_suffixesprefixsuffixr  r   r   r   !test_help_version_extra_argumentsd  s   
zATestOptionalsHelpVersionActions.test_help_version_extra_argumentsN)r	   r
   r   r  rT  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   s6   t jg dddddg dddd	}d
}| || d S )N)r   r  r]  r  r)  r/  r   rZ   r'  r  ZHELPZMETAVARr  r   rL   r  r  r3  r[  r_  zAction(option_strings=['--foo', '-a', '-b'], dest='b', nargs='+', const=None, default=42, type='int', choices=[1, 2, 3], help='HELP', metavar='METAVAR'))rI  rG  r  )r   Zoptionr4  r   r   r   test_optional  s   
zTestStrings.test_optionalc              
   C   s6   t jg dtddg dddd}dt }| || d S )	Nr   r   r  )r  g      ?r  zH HH HzMV MV MVr  zAction(option_strings=[], dest='x', nargs='?', const=None, default=2.5, type=%r, choices=[0.5, 1.5, 2.5], help='H HH H', metavar='MV MV MV'))rI  rG  r  r  )r   Zargumentr4  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')rI  r;  r  r   r>  r4  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_notidentifier     z3TestStrings.test_namespace_starkwargs_notidentifierc                 C   s,   t jdddiddi}d}| || d S )Nr   rZ   r  r  z Namespace(a=1, **{'"': 'quote'})r   r  r  r   r   r   2test_namespace_kwargs_and_starkwargs_notidentifier  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_identifier  r  z0TestStrings.test_namespace_starkwargs_identifierc                 C   s&   t jdd}dt j }| || d S )NrU  r  zvArgumentParser(prog='PROG', usage=None, description=None, formatter_class=%r, conflict_handler='error', add_help=True))rI  rJ  ZHelpFormatterr  )r   rw   r4  r   r   r   test_parser  s   zTestStrings.test_parserN)r	   r
   r   r  r  r  r  r  r  r  r  r   r   r   r   r  y  s    r  c                   @   r   )TestNamespacec                 C   sF   t  }| tt|d t jddd}| |jd | |jd d S )Nr   r   r!  r  )rI  r;  r   r  r_   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 )NrZ   r'  r  )r  r   )r   rb  )rI  r;  r   ZassertNotEqual
assertTrue)r   Zns1Zns2Zns3Zns4r   r   r   test_equality  s   zTestNamespace.test_equalityc                 C   s6   t jddd}| |d t | |d t d S )NrZ   r'  r  )rI  r;  ZassertIsrQ   NotImplemented__ne__r=  r   r   r   $test_equality_returns_notimplemented  s   z2TestNamespace.test_equality_returns_notimplementedN)r	   r
   r   r  r  r  r   r   r   r   r    s    r  c                   @   r   )TestEncodingc                 C   sT   t j|\}}|d7 }t|ddd}|  W d    d S 1 s#w   Y  d S )Nz.pyrt  r4   r5   )r    r(   splitextr7   r  )r   r(   r   r   r   r   r   _test_module_encoding  s
   
"z"TestEncoding._test_module_encodingc                 C   s   |  tj d S r   )r  rI  __file__r$   r   r   r   test_argparse_module_encoding  rF   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)rI  r  r   r   )r   r   ro   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!)rI  ZArgumentTypeErrorr3  r   r   r   r!    r  z<TestArgumentTypeError.test_argument_type_error.<locals>.spamrU  Fro  r   r  r  z-usage: PROG x
PROG: error: argument x: spam!
)rh   rv   r   rS   rd   r   rM  rW   )r   r!  rw   rO  r   r   r   test_argument_type_error  s   z.TestArgumentTypeError.test_argument_type_errorN)r	   r
   r   r  r   r   r   r   r    r   r  c                   @   r   )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 )NrU  r   r  req_posr  -req_optTr:  Zneed_oner/  )rL   r  req_optZmyXargumentz
-req_opt=1)
rh   rv   r   r)  r   rS   rd   rM  r  r<  r   rw   rO  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 )NrU  r   r  r	  r  z	--req_optTr:  z	--opt_optr   )rL   r  r  r  Zopt_optz--req_opt=1)rh   rv   r   r)  boolr   rS   rd   rM  r  r<  r  r   r   r   %test_optional_optional_not_in_message/  s(   


z=TestMessageContentError.test_optional_optional_not_in_messagec                 C   s   t ddd}|d |jdddd | t}|g  W d    n1 s(w   Y  t|j}| |d | |d d S )	NrU  r   r  r	  Zoptional_positionalr   r#  r"  )	rh   rv   r   rS   rd   r   rM  r  r<  r  r   r   r   'test_optional_positional_not_in_messageB  s   

z?TestMessageContentError.test_optional_positional_not_in_messageN)r	   r
   r   r  r  r  r   r   r   r   r    s    r  c                   @   r   )TestTypeFunctionCallOnlyOncec                    sH    fdd}t  }|jd|dd |d } tdd| d S )	Nc                         | d dS )Nr  foo_convertedr   )Zstring_to_convertr$   r   r   r!  T     zLTestTypeFunctionCallOnlyOnce.test_type_function_call_only_once.<locals>.spamr   r   r  z--foo spam!r  r   )rI  rJ  rv   rd   r   r   rC   r   r!  rw   r>   r   r$   r   !test_type_function_call_only_onceS  s
   z>TestTypeFunctionCallOnlyOnce.test_type_function_call_only_onceN)r	   r
   r   r  r   r   r   r   r  Q  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!  d  r  z]TestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_default.<locals>.spamr   r   r  r   rI  rJ  rv   rd   r   rC   r  r   r$   r   /test_type_function_call_with_non_string_defaultc  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   r  r   r   r   r!  o  r  zYTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_default.<locals>.spamr   0r  r  r   r  r  r   r   r   +test_type_function_call_with_string_defaultn  s
   
zKTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_defaultc                 C   r  )Nc                 S   s   | d S )Nr+  r   )Zstr_to_convertr   r   r   rN  y  r6  zYTestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_default.<locals>.extend--testr+  r  z**)r   r  )r   rN  rw   r>   r   r   r   )test_no_double_type_conversion_of_defaultx  s
   
zITestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_defaultc                 C   s8   t  }|jddtg dd |g }| |jg  d S )Nr  r   rS  )r   rL   r  r   )rI  rJ  rv   r   rd   r   r   r  r   r   r   test_issue_15906  s   

z0TestTypeFunctionCalledOnDefault.test_issue_15906N)r	   r
   r   r  r  r   r!  r   r   r   r   r  a  s
    
r  c                   @   rE  )TestParseKnownArgsc                 C   s   t  }|d d S )Nr   rI  rJ  rd   rL  r   r   r   test_arguments_tuple     z'TestParseKnownArgs.test_arguments_tuplec                 C   s   t  }|g  d S r   r#  rL  r   r   r   test_arguments_list  r%  z&TestParseKnownArgs.test_arguments_listc                 C   s    t  }|d |d d S )Nr   r   rI  rJ  rv   rd   rL  r   r   r   test_arguments_tuple_positional  s   
z2TestParseKnownArgs.test_arguments_tuple_positionalc                 C   s"   t  }|d |dg d S )Nr   r'  rL  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	  )rI  rJ  rv   r{  r   r   rC   )r   rw   r>   extrasr   r   r   test_optionals  s
   
z!TestParseKnownArgs.test_optionalsc                 C   sr   t  }|jdddtd |jddd |d g d	}||\}}| td
ddd| | g d| d S )Nr  r   rZ   )r  r   rL   r  rD  r   r   )r   r1  r   r  ro  r  r  Tr   )vr!  r   )r1  r   r  )rI  rJ  rv   r)  r{  r   rC   )r   rw   r   r>   r+  r   r   r   
test_mixed  s   
zTestParseKnownArgs.test_mixedN)	r	   r
   r   r$  r&  r(  r)  r,  r.  r   r   r   r   r"    s    r"  c                   @   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 )NrU  r  r   r{   r   r   r   Tr  cmdrestr+  )r  rL   zcmd --foo x 1 --bar y 2 3r  r   r  )r   r0  r{   r1  r  r$  ro  z!cmd --foo x 1 --error 2 --bar y 3rZ   )z--errorr$  ro  )rI  rJ  rv   r)  r   parse_intermixed_argsr   rC   r{  Zparse_known_intermixed_argsr  rR  r;  )r   rw   r   r   r>   r+  r   r   r   
test_basic  s"   

zTestIntermixedArgs.test_basicc                 C   s~   t dd}|d |d |jddd d }| t}|| W d    n1 s/w   Y  | t|jd	 d S )
NrU  r  r   r   r  r  r  r  z\.\.\.)	rh   rv   r   r   r   r3  r  r   rM  )r   rw   r   rO  r   r   r   test_remainder  s   


z!TestIntermixedArgs.test_remainderc                 C   s   t dd}|jdd}|jdddd |jd	d
d |jddddd |d }| tddgdd d| | t|jd  | |j	d d S )NrU  r  Tr  r   r   r  rZ  r  r  r  r   r+  r   r  r  z	1 --foo 2r  r$  )r   r{   r!  r  )
rh   r  rv   r3  r   r   rC   r   rS   r;  )r   rw   r}   r>   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 )NrU  r  Tr  r   r   r  rZ  r  r  r  r   r+  r   r  r  )rh   r  rv   r   r   r3  r   r;  r6  r   r   r   test_exclusive_incompatible  s   
z.TestIntermixedArgs.test_exclusive_incompatibleN)r	   r
   r   r4  r5  r6  r7  r   r   r   r   r/    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 )
NrU  r   r  r	  r  r
  Tr:  r  )rh   rv   r   r)  r   rS   rd   rM  r  r3  ZassertNotRegexr  r   r   r   r    s   

zGTestIntermixedMessageContentError.test_missing_argument_name_in_messageN)r	   r
   r   r  r   r   r   r   r8    s    r8  c                   @   s  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLdM Z)dNdO Z*dPdQ Z+dRdS Z,dTdU Z-dVdW Z.dXdY Z/dZd[ Z0d\d] Z1d^d_ Z2d`S )aTestAddArgumentMetavarz,length of metavar tuple does not match nargsc                 C   s   t  }|jd||d d S )Nr   r  r_  )rI  rJ  rv   )r   r  r_  rw   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   r:  r   )	rI  rJ  r   r  rv   r   rM  r>   EXPECTED_MESSAGE)r   r  r_  rw   rO  r   r   r   do_test_exception  s
   z(TestAddArgumentMetavar.do_test_exceptionc                 C      | j d dd d S )Nr  r:  r;  r$   r   r   r   test_nargs_None_metavar_string#  r  z5TestAddArgumentMetavar.test_nargs_None_metavar_stringc                 C   s   | j d t d d S )Nr:  r=  tupler$   r   r   r   test_nargs_None_metavar_length0&  r  z6TestAddArgumentMetavar.test_nargs_None_metavar_length0c                 C   r>  )Nrk  r:  r?  r$   r   r   r   test_nargs_None_metavar_length1)  r  z6TestAddArgumentMetavar.test_nargs_None_metavar_length1c                 C   r>  )Nr  r$  r:  r=  r$   r   r   r   test_nargs_None_metavar_length2,  r  z6TestAddArgumentMetavar.test_nargs_None_metavar_length2c                 C   r>  )Nr2  r:  rF  r$   r   r   r   test_nargs_None_metavar_length3/  r  z6TestAddArgumentMetavar.test_nargs_None_metavar_length3c                 C   r  )Nr   r  r:  r?  r$   r   r   r   "test_nargs_optional_metavar_string4  r  z9TestAddArgumentMetavar.test_nargs_optional_metavar_stringc                 C      | j dt d d S )Nr   r:  rA  r$   r   r   r   #test_nargs_optional_metavar_length07  r  z:TestAddArgumentMetavar.test_nargs_optional_metavar_length0c                 C   r  )Nr   rk  r:  r?  r$   r   r   r   #test_nargs_optional_metavar_length1:  r  z:TestAddArgumentMetavar.test_nargs_optional_metavar_length1c                 C   r  )Nr   rE  r:  rF  r$   r   r   r   #test_nargs_optional_metavar_length2=  r  z:TestAddArgumentMetavar.test_nargs_optional_metavar_length2c                 C   r  )Nr   r2  r:  rF  r$   r   r   r   #test_nargs_optional_metavar_length3@  r  z:TestAddArgumentMetavar.test_nargs_optional_metavar_length3c                 C   r  )Nr+  r  r:  r?  r$   r   r   r   $test_nargs_zeroormore_metavar_stringE  r  z;TestAddArgumentMetavar.test_nargs_zeroormore_metavar_stringc                 C   rJ  )Nr+  r:  rA  r$   r   r   r   %test_nargs_zeroormore_metavar_length0H  r  z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length0c                 C   r  )Nr+  rk  r:  r?  r$   r   r   r   %test_nargs_zeroormore_metavar_length1K  r  z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length1c                 C   r  )Nr+  rE  r:  r?  r$   r   r   r   %test_nargs_zeroormore_metavar_length2N  r  z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length2c                 C   r  )Nr+  r2  r:  rF  r$   r   r   r   %test_nargs_zeroormore_metavar_length3Q  r  z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length3c                 C   r  )Nr/  r  r:  r?  r$   r   r   r   #test_nargs_oneormore_metavar_stringV  r  z:TestAddArgumentMetavar.test_nargs_oneormore_metavar_stringc                 C   rJ  )Nr/  r:  rA  r$   r   r   r   $test_nargs_oneormore_metavar_length0Y  r  z;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length0c                 C   r  )Nr/  rk  r:  rF  r$   r   r   r   $test_nargs_oneormore_metavar_length1\  r  z;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length1c                 C   r  )Nr/  rE  r:  r?  r$   r   r   r   $test_nargs_oneormore_metavar_length2_  r  z;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length2c                 C   r  )Nr/  r2  r:  rF  r$   r   r   r   $test_nargs_oneormore_metavar_length3b  r  z;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length3c                 C   r  )Nr  r  r:  r?  r$   r   r   r   #test_nargs_remainder_metavar_stringg  r  z:TestAddArgumentMetavar.test_nargs_remainder_metavar_stringc                 C   rJ  )Nr  r:  )r;  rB  r$   r   r   r   $test_nargs_remainder_metavar_length0j  r  z;TestAddArgumentMetavar.test_nargs_remainder_metavar_length0c                 C   r  )Nr  rk  r:  r?  r$   r   r   r   $test_nargs_remainder_metavar_length1m  r  z;TestAddArgumentMetavar.test_nargs_remainder_metavar_length1c                 C   r  )Nr  rE  r:  r?  r$   r   r   r   $test_nargs_remainder_metavar_length2p  r  z;TestAddArgumentMetavar.test_nargs_remainder_metavar_length2c                 C   r  )Nr  r2  r:  r?  r$   r   r   r   $test_nargs_remainder_metavar_length3s  r  z;TestAddArgumentMetavar.test_nargs_remainder_metavar_length3c                 C   r  )NA...r  r:  r?  r$   r   r   r    test_nargs_parser_metavar_stringx  r  z7TestAddArgumentMetavar.test_nargs_parser_metavar_stringc                 C   rJ  )Nr^  r:  rA  r$   r   r   r   !test_nargs_parser_metavar_length0{  r  z8TestAddArgumentMetavar.test_nargs_parser_metavar_length0c                 C   r  )Nr^  rk  r:  r?  r$   r   r   r   !test_nargs_parser_metavar_length1~  r  z8TestAddArgumentMetavar.test_nargs_parser_metavar_length1c                 C   r  )Nr^  rE  r:  rF  r$   r   r   r   !test_nargs_parser_metavar_length2  r  z8TestAddArgumentMetavar.test_nargs_parser_metavar_length2c                 C   r  )Nr^  r2  r:  rF  r$   r   r   r   !test_nargs_parser_metavar_length3  r  z8TestAddArgumentMetavar.test_nargs_parser_metavar_length3c                 C   r  )NrZ   r  r:  r?  r$   r   r   r   test_nargs_1_metavar_string  r  z2TestAddArgumentMetavar.test_nargs_1_metavar_stringc                 C   rJ  )NrZ   r:  rA  r$   r   r   r   test_nargs_1_metavar_length0  r  z3TestAddArgumentMetavar.test_nargs_1_metavar_length0c                 C   r  )NrZ   rk  r:  r?  r$   r   r   r   test_nargs_1_metavar_length1  r  z3TestAddArgumentMetavar.test_nargs_1_metavar_length1c                 C   r  )NrZ   rE  r:  rF  r$   r   r   r   test_nargs_1_metavar_length2  r  z3TestAddArgumentMetavar.test_nargs_1_metavar_length2c                 C   r  )NrZ   r2  r:  rF  r$   r   r   r   test_nargs_1_metavar_length3  r  z3TestAddArgumentMetavar.test_nargs_1_metavar_length3c                 C   r  )Nr'  r  r:  r?  r$   r   r   r   test_nargs_2_metavar_string  r  z2TestAddArgumentMetavar.test_nargs_2_metavar_stringc                 C   rJ  )Nr'  r:  rA  r$   r   r   r   test_nargs_2_metavar_length0  r  z3TestAddArgumentMetavar.test_nargs_2_metavar_length0c                 C   r  )Nr'  rk  r:  rF  r$   r   r   r   test_nargs_2_metavar_length1  r  z3TestAddArgumentMetavar.test_nargs_2_metavar_length1c                 C   r  )Nr'  rE  r:  r?  r$   r   r   r   test_nargs_2_metavar_length2  r  z3TestAddArgumentMetavar.test_nargs_2_metavar_length2c                 C   r  )Nr'  r2  r:  rF  r$   r   r   r   test_nargs_2_metavar_length3  r  z3TestAddArgumentMetavar.test_nargs_2_metavar_length3c                 C   r  )Nr  r  r:  r?  r$   r   r   r   test_nargs_3_metavar_string  r  z2TestAddArgumentMetavar.test_nargs_3_metavar_stringc                 C   rJ  )Nr  r:  rA  r$   r   r   r   test_nargs_3_metavar_length0  r  z3TestAddArgumentMetavar.test_nargs_3_metavar_length0c                 C   r  )Nr  rk  r:  rF  r$   r   r   r   test_nargs_3_metavar_length1  r  z3TestAddArgumentMetavar.test_nargs_3_metavar_length1c                 C   r  )Nr  rE  r:  rF  r$   r   r   r   test_nargs_3_metavar_length2  r  z3TestAddArgumentMetavar.test_nargs_3_metavar_length2c                 C   r  )Nr  r2  r:  r?  r$   r   r   r   test_nargs_3_metavar_length3  r  z3TestAddArgumentMetavar.test_nargs_3_metavar_length3N)3r	   r
   r   r<  r;  r=  r@  rC  rD  rG  rH  rI  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  r   r   r   r   r9    sb    r9  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   )	rI  rJ  r   r  rv   r   rM  r>   EXPECTED_RANGE_MESSAGEr   r  rw   rO  r   r   r   do_test_range_exception  
   z(TestInvalidNargs.do_test_range_exceptionc                 C   rt  ru  )	rI  rJ  r   r  rv   r   rM  r>   EXPECTED_INVALID_MESSAGErw  r   r   r   do_test_invalid_exception  ry  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_alphabetic  s   z&TestInvalidNargs.test_nargs_alphabeticc                 C   s   | j dd d S )Nr   r  )rx  r$   r   r   r   test_nargs_zero  rF   z TestInvalidNargs.test_nargs_zeroN)	r	   r
   r   rz  rv  rx  r{  r|  r}  r   r   r   r   rs    s    rs  c                   @   r  )TestImportStarc                 C   s    t jD ]
}| tt | qd S r   )rI  __all__r  r   r  r   r   r   r     s   
zTestImportStar.testc                 C   s0   dd t t D }| t|ttj d S )Nc                 S   s0   g | ]\}}| d s|dkst|s|qS )r   Zngettext)
startswithinspectZismodule)rG   r1   r(  r   r   r   rI     s    zJTestImportStar.test_all_exports_everything_but_modules.<locals>.<listcomp>)rN   rI  rK   r   rJ   r  )r   rK   r   r   r   'test_all_exports_everything_but_modules  s   
z6TestImportStar.test_all_exports_everything_but_modulesN)r	   r
   r   r   r  r   r   r   r   r~    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--proxyrr  )rj   r   rh   rw   rv   )r   r_  rk   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>
            )rw   r  r   r  r  )r   Z	help_textr   r   r   test_help_with_metavar  s   
z*TestWrappingMetavar.test_help_with_metavar)r	   r
   r   r   r  rp   r   r   rk   r   r    s    
r  c                   @   r   )TestExitOnErrorc                 C   s$   t jdd| _| jjddtd d S )NF)Zexit_on_errorz
--integersN)r_  rL   )rI  rJ  rw   rv   r)  r$   r   r   r   r     r  zTestExitOnError.setUpc                 C   s(   | j d }| |tjdd d S )Nz--integers 4r6  )Zintegers)rw   rd   r   r   rI  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   rI  r  rw   rd   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   t t i t_t t_d S r   )r   Zrun_unittestr	   r  r  r  r  r   r   r   r   	test_main  s   
r  __main__)r  r    r,   r*   r]   r  r   ZunittestrI  ior   r   r   Ztest.supportr   r   r   r   r   r   r=   rC   rT   rS   rg   rJ  rh   rL   rr   r   rs   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r*  r.  r0  r9  r=  r@  rC  rE  rF  rQ  rR  rZ  r\  rf  rg  ri  rk  rp  rr  rv  rw  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  r  r  r  r  r  r  r  Z	eq_stderrr  r  r	  r  r  ZskipIfr   r  r  r  r  r  r"  r&  r0  r2  r8  rH  rM  rQ  r  r  r  r  r  r  r	  r  r  r  r  r  r  r  r  r!  r"  r#  r$  r%  r&  r'  r(  r8  r:  rC  rD  rS  r_  r`  ra  re  rh  rk  rm  rn  rp  rs  rx  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/  r8  r9  rs  r~  r  r  r  r	   r   r   r   r   <module>   s  
!q







""C   ' 4&0#+!$-*(),	^R$7/4(66$&"$.10/+!~-LG%=1*? ) 
