
    daf                       d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlmZ d dlmZ  G d dej"                        Z G d dej&                        Z G d d	ej&                        Zej*                   G d
 de             Z G d de      Z G d de      Z G d de      Zd Z G d dej:                        Z G d de      Z efZ! e de!i       Z" G d de"      Z# G d de"      Z$ G d de"      Z% G d de"      Z& G d  d!e"      Z' G d" d#e"      Z( G d$ d%e"      Z) G d& d'e"      Z* G d( d)e"      Z+ G d* d+e"      Z, G d, d-e"      Z- G d. d/e"      Z. G d0 d1e"      Z/ G d2 d3e"      Z0 G d4 d5e"      Z1 G d6 d7e"      Z2 G d8 d9e"      Z3 G d: d;e"      Z4 G d< d=e"      Z5 G d> d?e"      Z6 G d@ dAe"      Z7 G dB dCe"      Z8 G dD dEe"      Z9 G dF dGe"      Z: G dH dIe"      Z; G dJ dKe"      Z< G dL dMe"      Z= G dN dOe"      Z> G dP dQe"      Z? G dR dSe"      Z@ G dT dUe"      ZA G dV dWe"      ZB G dX dYe"      ZC G dZ d[e"      ZD G d\ d]e"      ZE G d^ d_e"      ZF G d` dae"      ZG G db dce"      ZH G dd dee"      ZI G df dge"      ZJ G dh die"      ZK G dj dke"      ZL G dl dme"      ZM G dn doe"      ZN G dp dqe"      ZO G dr dse"      ZP G dt due"      ZQ G dv dwe"      ZR G dx dye"      ZS G dz d{e"      ZT G d| d}e"      ZU G d~ de"      ZV G d de"      ZW G d de"      ZX G d de"      ZY G d de"      ZZ G d de"      Z[ G d de"      Z\ G d de"      Z] G d de"      Z^ G d de"      Z_ G d de"      Z` G d de"      Za G d de"      Zb G d de"      Zc G d de"      Zd G d de"      Ze G d de"      Zf G d de"      Zg G d de"      Zh G d de"      Zi G d de"      Zj G d de"      Zk G d de"      Zl G d de"      Zm G d de"      Zn G d de"      Zo G d de"      Zp G d de"      Zq G d de"      Zr G d de"      Zs G d de"      Zt G d de"      Zu G d de"      Zv G d dee"      Zw G d dee"      Zx G dĄ de      Zy e       Zz e       Z{ G dƄ dǫ      Z| e|dȫ      Z} e|dɫ      Z~ e|dʫ      Z e|d˫      Z e|d̫      Z e|dͫ      Z G d΄ de      Z G dЄ dee"      Z G d҄ dee"      Z G dԄ dee"      Z G dք de      Zej                   G d؄ dee"             Zej                   G dڄ dee"             Zej                   G d܄ dee"             Zej                   G dބ de             Z G d de      Z G d de      Z G d de"      Z G d de"      Z G d de"      Z G d de      Z G d de"      Z G d de      Z G d de"      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d dee      Z G d dee      Z G d  dee      Z G d dee      Z G d dee      Z G d dee      Z G d d	ee      Z G d
 dee      Z G d dee      Z G d de      Z G d dee      Z G d dee      Z G d dee      Z G d dee      Z G d dee      Z G d dee      Z G d dee      Z G d dee      Z G d  d!e      Z G d" d#e      Z G d$ d%e      Z G d& d'e      ZefZ! ed(e!i       Z G d) d*e      Z G d+ d,e      Z G d- d.e      Z G d/ d0e      Z G d1 d2e      Z G d3 d4e      Z G d5 d6e      Z G d7 d8e      Z G d9 d:e      Z G d; d<e      Z G d= d>e      Z G d? d@e      Z G dA dBe      Z G dC dDe      Z G dE dFe      Z G dG dHe      Z G dI dJe      Z G dK dLe      Z G dM dNe      Z G dO dPe      Z G dQ dRe      Z G dS dTe      Z G dU dVe      Z G dW dXe      Z G dY dZe      Z G d[ d\e      Z G d] d^e      Z G d_ d`e      Z G da dbe      Z G dc dde      Z G de dfe      Z G dg dhe      Z G di dje      Z G dk dle      Z G dm dne      Z G do dpe      Z G dq dre      Z G ds dte      Z G du dve      Z G dw dxe      Z G dy dze      Z G d{ d|e      Z G d} d~e      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zd Zedk(  r ej                          yy(      N)	os_helper)mockc                   *     e Zd ZdZd fd	Zd Z xZS )StdIOBufferzReplacement for writable io.StringIO that behaves more like real file

    Unlike StringIO, provides a buffer attribute that holds the underlying
    binary data, allowing it to replace sys.stdout/sys.stderr in more
    contexts.
    c                     |j                  d      }t        | 	  t        j                  t        j
                  |            d|       y )Nutf-8)newline)encodesuper__init__ioBufferedWriterBytesIO)selfinitial_valuer	   	__class__s      -/root/Python-3.12.4/Lib/test/test_argparse.pyr   zStdIOBuffer.__init__   s@    %,,W5**2::m+DE ' 	 	3    c                     | j                          | j                  j                  j                         j	                  d      S )Nr   )flushbufferrawgetvaluedecoder   s    r   r   zStdIOBuffer.getvalue#   s-    

{{'')0099r   ) 
)__name__
__module____qualname____doc__r   r   __classcell__r   s   @r   r   r      s    3
:r   r   c                       e Zd Zd Zd Zy)StdStreamTestc                     t        j                         }t        j                  d       5  t	        j
                  d      5  |j                  dd       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nargparse._sys.exitr   foo)statusmessage)argparseArgumentParser
contextlibredirect_stderrr   patchexitr   parsers     r   test_skip_invalid_stderrz&StdStreamTest.test_skip_invalid_stderr*   sg    ((*&&t,	1JJ+,	1 KKq%K0		1 	1 	1 	1 	1 	1s#   A1 A%A1%A.	*A11A:c                 |   t        j                         }|j                  |j                  t	        j
                  |j                  dg      fD ]  }| j                  |      5  t        j                  d       5  t               5 }t        j                  |      5  t        j                  d      5   |        | j                  |j                         d       d d d        d d d        d d d        d d d        d d d         y # 1 sw Y   ,xY w# 1 sw Y   0xY w# 1 sw Y   4xY w# 1 sw Y   8xY w# 1 sw Y   xY w)N-h)funcr'   zusage:)r+   r,   print_usage
print_help	functoolspartial
parse_argssubTestr-   redirect_stdoutr   r.   r   r/   assertRegexr   )r   r2   r6   mocked_stderrs       r   test_skip_invalid_stdoutz&StdStreamTest.test_skip_invalid_stdout2   s7   ((*f//$8
 	FD $'	F**40	F 		F "/**=9	F 

/0	F   !7!7!99E	F 	F 	F 	F 	F 	F	F
	F 	F 	F 	F 	F 	F 	F 	F 	F 	Fsl   "D28D&D	D/(DDD	'D&/D2DDDD	D#D&&D/+D22D;	N)r   r   r    r3   r@    r   r   r%   r%   (   s    1Fr   r%   c                       e Zd Zd Zy)TestCasec                 T    | j                  t        j                               }d|d<   y )N80COLUMNS)enterContextr   EnvironmentVarGuardr   envs     r   setUpzTestCase.setUpG   s&     	 = = ?@Ir   N)r   r   r    rK   rA   r   r   rC   rC   E   s    r   rC   c                   $    e Zd Zd Zd Zd Zd Zy)TempDirMixinc                     t        j                         | _        t        j                         | _        t        j                  | j                         y N)tempfilemkdtemptemp_dirosgetcwdold_dirchdirr   s    r   rK   zTempDirMixin.setUpR   s/     ((*yy{
r   c                 |   t        j                  | j                         t        j                  | j                  d      D ]Y  \  }}}|D ]N  }t        j
                  t         j                  j                  | j                  |      t        j                         P [ t        j                  | j                  d       y )NF)topdownT)rS   rV   rU   walkrR   chmodpathjoinstatS_IWRITEshutilrmtree)r   rootdirsfilesnames        r   tearDownzTempDirMixin.tearDownW   s    
!#!F 	KD$ KdmmT:DMMJK	K 	dmmT*r   c                     t         j                  j                  | j                  |      }t	        |dd      5 }|j                  |       d d d        |S # 1 sw Y   |S xY w)Nwr   encoding)rS   r[   r\   rR   openwrite)r   filename	file_pathfiles       r   create_writable_filez!TempDirMixin.create_writable_file^   sP    GGLL9	)S73 	!tJJx 	!	!s   AAc                 j    t        j                  | j                  |      t        j                         y rO   )rS   rZ   ro   r]   S_IREAD)r   rl   s     r   create_readonly_filez!TempDirMixin.create_readonly_filed   s    
**84dllCr   N)r   r   r    rK   re   ro   rr   rA   r   r   rM   rM   O   s     
+Dr   rM   c                       e Zd Zd Zy)Sigc                      || _         || _        y rO   )argskwargsr   rv   rw   s      r   r   zSig.__init__i   s    	r   Nr   r   r    r   rA   r   r   rt   rt   g   s    r   rt   c                       e Zd Zd Zd Zd Zy)NSc                 :    | j                   j                  |       y rO   )__dict__update)r   rw   s     r   r   zNS.__init__p   s    V$r   c                     t        | j                  j                               }dj                  |D cg c]  }d|z  	 c}      }t	        |       j
                  d|dS c c}w )Nz, z%s=%r())sortedr}   itemsr\   typer   )r   sorted_itemstup	kwarg_strs       r   __repr__zNS.__repr__s   sQ    dmm1134IIEw}EF	:..	:: Fs   A!c                 0    t        |       t        |      k(  S rO   )varsr   others     r   __eq__z	NS.__eq__x   s    DzT%[((r   N)r   r   r    r   r   r   rA   r   r   r{   r{   n   s    %;
)r   r{   c                       e Zd ZddZy)ArgumentParserErrorNc                 l    t         j                  | |||       || _        || _        || _        || _        y rO   )	Exceptionr   r*   stdoutstderr
error_code)r   r*   r   r   r   s        r   r   zArgumentParserError.__init__~   s2    4&&9$r   )NNNry   rA   r   r   r   r   |   s    %r   r   c           
         t        t        j                  t              st        t        j                  t              r | |i |S t        j                  }t        j                  }t               t        _        t               t        _        	 	  | |i |}t        t        |            D ]  }t        ||      }|t        j                  u rt        |||       /|t        j                  j                  u rt        ||t        |dt                     h|t        j                  u rt        |||       |t        j                  j                  u st        ||t        |dt                      ||t        _        |t        _        S # t        $ r\}|j                  }	t        j                  j                         }
t        j                  j                         }t        d|
||	      d d }~ww xY w# |t        _        |t        _        w xY w)Nr   
SystemExit)
isinstancesysr   r   r   listr   getattrsetattrr   BIN_STDOUT_SENTINELBIN_STDERR_SENTINELr   coder   r   )r;   rv   rw   
old_stdout
old_stderrresultkeyattrer   r   r   s               r   stderr_to_parser_errorr      s    #**k*j[.Q4*6** JJCJCJ 	>00FDL) 	]vs+3::%FC4SZZ...FCXGZ)[\SZZ'FC4SZZ...FCXGZ)[\	]   

  	>66DZZ((*FZZ((*F%ffd49=>		>  

s,   C F F 	G)AG$$G))G, ,Hc                   2     e Zd Z fdZ fdZ fdZ xZS )ErrorRaisingArgumentParserc                 >    t         t        | 
  }t        |g|i |S rO   )r   r   r;   r   )r   rv   rw   r;   r   s       r   r;   z%ErrorRaisingArgumentParser.parse_args   s%    5tG
%jB4B6BBr   c                 >    t         t        | 
  }t        |g|i |S rO   )r   r   r0   r   )r   rv   rw   r0   r   s       r   r0   zErrorRaisingArgumentParser.exit   s%    /;%d<T<V<<r   c                 >    t         t        | 
  }t        |g|i |S rO   )r   r   errorr   )r   rv   rw   r   r   s       r   r   z ErrorRaisingArgumentParser.error   s%    0$=%e=d=f==r   )r   r   r    r;   r0   r   r"   r#   s   @r   r   r      s    C=> >r   r   c                       e Zd ZdZd Zy)ParserTesterMetaclassa}  Adds parser tests using the class attributes.

    Classes of this type should specify the following attributes:

    argument_signatures -- a list of Sig objects which specify
        the signatures of Argument objects to be created
    failures -- a list of args lists that should cause the parser
        to fail
    successes -- a list of (initial_args, options, remaining_args) tuples
        where initial_args specifies the string args to be parsed,
        options is a dict that should match the vars() of the options
        parsed out of initial_args, and remaining_args should be any
        remaining unparsed arguments
    c                     |dk(  ry t        | d      st               | _        t        | d      st        | _        d }d }d }d }d } G d	 d
t
              }	|||fD ]  }
||fD ]  } |	| |
|         y )NParserTestCaseparser_signatureparser_classc                 ^    |D ](  } | j                   |j                  i |j                   * y)z(Add all arguments directly to the parserN)add_argumentrv   rw   )r2   argument_signaturessigs      r   	no_groupsz1ParserTesterMetaclass.__init__.<locals>.no_groups   s.    * =###SXX<<=r   c                     | j                  d      }|D ](  } |j                  |j                  i |j                   * y)z4Add all arguments under a single group in the parserr(   N)add_argument_groupr   rv   rw   )r2   r   groupr   s       r   	one_groupz1ParserTesterMetaclass.__init__.<locals>.one_group   s>    --e4E* <"""CHH;

;<r   c                     t        |      D ]?  \  }}| j                  d|z        } |j                  |j                  i |j                   A y)z0Add each argument in its own group to the parserzfoo:%iN)	enumerater   r   rv   rw   )r2   r   ir   r   s        r   many_groupsz3ParserTesterMetaclass.__init__.<locals>.many_groups   sL    #$78 <311(Q,?"""CHH;

;<r   c                 $    | j                  |      S )z#Parse the args by passing in a list)r;   )r2   rv   s     r   listargsz0ParserTesterMetaclass.__init__.<locals>.listargs   s    $$T**r   c                     t         j                  }|d   g|z   t         _        	 | j                         |t         _        S # |t         _        w xY w)z(Parse the args by defaulting to sys.argvr   )r   argvr;   )r2   rv   old_sys_argvs      r   sysargsz/ParserTesterMetaclass.__init__.<locals>.sysargs   s>    88L$Q(4/CH(((*'<s	   ? Ac                   $    e Zd Zd Zd Zd Zd Zy)0ParserTesterMetaclass.__init__.<locals>.AddTestsc                 H   || _         || _        | j                   j                  }| j                  j                  }| j                  | j                  fD ]>  }|j                  }|||f}dj                  |      }	|fd}
	 |	|
_        t        ||	|
       @ y # t        $ r Y w xY w)N_c                      ||        y rO   rA   r   	test_funcs     r   wrapperzJParserTesterMetaclass.__init__.<locals>.AddTests.__init__.<locals>.wrapper  	    !$r   )_add_arguments_parse_argsr   test_failurestest_successesr\   	TypeErrorr   )r   
tester_clsadd_argumentsr;   add_arguments_nameparse_args_namer   	func_namenames	test_namer   s              r   r   z9ParserTesterMetaclass.__init__.<locals>.AddTests.__init__   s    &3##- %)%8%8%A%A""&"2"2";";"&"4"4d6I6I!J <I ) 2 2I%'9?JE #I09 (+4( J	7;< % s   >B	B! B!c                     |j                   j                  }|j                   j                  } |j                  |i |}| j	                  ||j
                         |S rO   )r   rv   rw   r   r   r   )r   testerrv   rw   r2   s        r   _get_parserz<ParserTesterMetaclass.__init__.<locals>.AddTests._get_parser  sV    ..330077,,,d=f=##FF,F,FGr   c                     | j                  |      }|j                  D ]C  }|j                         }|j                  t        |      5  |j                  |       d d d        E y # 1 sw Y   PxY w)N)msg)r   failuressplitassertRaisesr   r;   )r   r   r2   args_strrv   s        r   r   z>ParserTesterMetaclass.__init__.<locals>.AddTests.test_failures  sm    ))&1 & 0H#>>+D,,-@d,K 0))$/0 000 0s   A%%A.	c                     | j                  |      }|j                  D ]I  \  }}t        |t              r|j	                         }| j                  ||      }|j                  ||       K y rO   )r   	successesr   strr   r   assertEqual)r   r   r2   rv   expected_ns	result_nss         r   r   z?ParserTesterMetaclass.__init__.<locals>.AddTests.test_successes  sc    ))&1)/)9)9 ?%D+!$,#zz| $ 0 0 >I&&{I>	?r   N)r   r   r    r   r   r   r   rA   r   r   AddTestsr      s    <&0?r   r   )hasattrrt   r   r   r   object)clsrd   basesbodydictr   r   r   r   r   r   r   r;   s               r   r   zParserTesterMetaclass.__init__   s    ## s./#&5C sN+9C
	=
	<	<	+	()	?v )	?Z (K@ 	9M'1 9
mZ89	9r   N)r   r   r    r!   r   rA   r   r   r   r      s    _9r   r   r   c                       e Zd ZdZ ed      gZg dZd ed      fd ed      fd	 ed      fd
 ed      fd ed      fgZy)TestOptionalsSingleDash1Test an Optional with a single-dash option string-x)r   a--foo-x --fooz-x -yr   Nx-x ar   -xaz-x -1-1z-x-1	r   r   r    r!   rt   r   r   r{   r   rA   r   r   r   r   3  sY    ;t9+8H	R$Z	c	S		"t*	dIr   r   c                   t   e Zd ZdZ edd       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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y)TestOptionalsSingleDashCombinedr   r   
store_trueactionz-yyystore_const*   r   const-z)r   r   r   r   z-x -zz-z -xz-yxz-yz az-yyyxz-yyyzaz-xyzaz-x=r   FN)r   yyyzT-zar   -z az-xzaz-xz az-x -zaz-x -z a-yz-x -yyy -zaz-x -yyy -z ar   rA   r   r   r   r   A  s	   ; 	D&F=3D	
CH 
R%TT*+	rDdd+,	U,-	e-.	d,-	"t-.	2$#./	B43/0	rErT*+	et,-	TrS12	dc23Ir   r   c                       e Zd ZdZ ed      gZg dZd ed      fd ed      fd	 ed
      fd ed      fd ed      fgZy)TestOptionalsSingleDashLongzATest an Optional with a multi-character single-dash option string-foo)r  r   r   z
-foo --fooz-foo -y-fooar   Nr(   z-foo ar   z-foo -1r   z-fo a-f ar   rA   r   r   r  r  [  sY    Kv;-GH	RD\	2#;	B4L!	"+	Ir   r  c                       e Zd ZdZ 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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y)&TestOptionalsSingleDashSubsetAmbiguousz=Test Optionals where option strings are subsets of each other-f-foobar-foorab)r  r  -fo-foo bz-foobz-foobaz-foorar   N)ffoobarfoorabr  r   -fa-foaoar  ooa	-foobar a	-foorab ar   rA   r   r   r  r  i  s    Gt9c)nc)nEKH	R$tD12	c$t45	Sd34	d456	"uT$78	b4D9:	b4S9:Ir   r  c                       e Zd ZdZ ed       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d ed	d      fd edd	      fgZy) TestOptionalsSingleDashAmbiguousz7Test Optionals that partially match but are not subsetsr  r  )r  r  r  r  r  r  r  r   N)r  r  z-foob ar   z-foor az-fooba az-foora ar  r   r   rA   r   r   r"  r"  y  s    Ay>3y>:EH	RtD)*	Bc$/0	Bd3/0	Rs401	RtC01	bD12	bS12Ir   r"  c                       e Zd ZdZ edd      gZg dZd ed      fd	 ed
      fd ed
      fd ed      fgZy)TestOptionalsNumericz(Test an Optional with a short opt stringr   onedest)r   r   z-1 --fooz-1 -yz-1 -1z-1 -2r   N)r%  z-1 ar   z-1az-1-2-2r   rA   r   r   r$  r$    sQ    2t%01AH	RD\		s		Ir   r$  c                       e Zd ZdZ ed      gZg dZd ed      fd ed      fd	 ed      fd
 ed      fd ed      fgZy)TestOptionalsDoubleDashz1Test an Optional with a double-dash option stringr   )r   r  r  r   z--foo -xz--foo --barr   Nr  z--foo ar   z--foo=az
--foo -2.5z-2.5z
--foo=-2.5r   rA   r   r   r*  r*    sY    ;w<.FH	RD\	B3K 	B3K 	rf~&	rf~&Ir   r*  c            
           e Zd ZdZ edd       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d edd	
      fgZy	)#TestOptionalsDoubleDashPartialMatchz7Tests partial matching with a double-dash option string--badgerr   r   z--bat)--bar--b--ba--b=2z--ba=4	--badge 5r   FN)badgerbatz--bat XX--badT--badg--badger   rA   r   r   r,  r,    s    A 	J|,G HH	Ru$'(	Be-.	"Dd+,	2Tt,-	Bd-.	Rt./Ir   r,  c                       e Zd ZdZ edd       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d edd	
      fd edd	
      fgZy	)"TestOptionalsDoubleDashPrefixMatchz?Tests when one double-dash option string is a prefix of anotherr-  r   r   r0  )r.  r/  r0  r1  r2  r   FN)r3  baz--ba Xr5  z--ba=Xr6  Tr7  r8  r   rA   r   r   r:  r:    s    I 	J|,F >H	Ru&'	2Us+,	2Us+,	"DT*+	2Td+,	Bdt,-	Rt-.Ir   r:  c                       e Zd ZdZ edd       ed       ed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y)TestOptionalsSingleDoubleDashz<Test an Optional with single- and double-dash option stringsr  r   r   r.  -bazr  r  r  )r.  -fbarz-fbazz-bazf-b BBr   FNr  barbazTz--ba BrA  z
-f --bar Bz-f -bz-ba -fr   rA   r   r   r=  r=    s    F 	D&GF=3
 AH	R%Tt,-	rDd-.	23D12	rDct45	"t2./	2$B/0Ir   r=  c                       e Zd ZdZ edd      Z edd       ed       ed	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	y)!TestOptionalsAlternatePrefixCharsz9Test an Optional with option strings with custom prefixes+:/Fprefix_charsadd_help+fr   r   ::bar/bazr  r  r  )r.  r?  r@  rA  r  --bar Br>  r5   --helpz+hz::helpz/helpr   NrB  T::ba BrA  
+f ::bar B+f /b/ba +f
r   r   r    r!   rt   r   r   r   r{   r   rA   r   r   rF  rF    s    C>D&GF=3
 qH	R%Tt,-	rDd-.	23D12	rDct45	"t2./	2$B/0Ir   rF  c                       e Zd ZdZ edd      Z edd       ed       ed	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	y)*TestOptionalsAlternatePrefixCharsAddedHelpzWhen ``-`` not in prefix_chars, default operators created for help
       should use the prefix_chars in use rather than - or --
       http://bugs.python.org/issue9444rG  TrH  rK  r   r   rL  rM  r  r  r  )r.  r?  r@  rA  r  rN  r>  r   FNrB  rP  rA  rQ  rR  rS  rT  rA   r   r   rV  rV    s    + =D&GF=3
 HH	R%Tt,-	rDd-.	23D12	rDct45	"t2./	2$B/0Ir   rV  c            	           e Zd ZdZ edd      Z edd       edd       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gZ	y)2TestOptionalsAlternatePrefixCharsMultipleShortArgsz@Verify that Optionals must be called with their defined prefixesz+-FrH  r   r   r   z+yz+z)-wz-xyzz+xr
  z+xyzr   r   yr  Tz+y -xz+yz -xNrT  rA   r   r   rX  rX    s    Ju=D&D&D&
H 
R%5E*+	rDEU+,	"ttu-.	2-.	Ir   rX  c                       e Zd ZdZ eddddd      gZg dZd	 ed
      fd ed      fd ed      fd ed      fd ed      fgZy)TestOptionalsShortLongz<Test a combination of single- and double-dash option strings-v	--verbose-nz--noisyr   r   )z--x --verbosez-Nr   z-v xr   F)verboseTNr   rA   r   r   r]  r]    sn    F 	D+tY|D 4H	R	r$ 	b&'	r$ 	Bt$%Ir   r]  c                       e Zd ZdZ ed       edd      gZdgZd edd	
      fd ed	d
      fd edd
      fd edd
      fgZy	)TestOptionalsDestz*Tests various means of setting destinationz	--foo-bar--bazzabbazr&  r   z--foo-bar fr  N)foo_barre  z--baz ggz--foo-bar h --baz ihr   z--baz j --foo-bar kkjr   rA   r   r   rc  rc  -  sf    4{+Sx-HIuH	3t45	BtC01	3s ;<	3s ;<	Ir   rc  c                       e Zd ZdZ ed       edd      gZdgZd edd	      fd
 edd	      fd edd	      fgZy)TestOptionalsDefaultz*Tests specifying a default for an Optionalr   r
  r  defaultr   r   Nr   r[  z-xxr   z-yyr[  r   rA   r   r   rl  rl  :  sU    4t9c$&;<uH	R$"	SB 	TS!"Ir   rl  c                   V    e Zd ZdZ ed      gZddgZd ed      fd ed      fgZy)TestOptionalsNargsDefaultz7Tests not specifying the number of args for an Optionalr   r   r   Nr   r   r   rA   r   r   rq  rq  F  s9    At9+T{H	R$Z	cIr   rq  c                   \    e Zd ZdZ edd      gZddgZd ed      fd	 edg      fgZy)
TestOptionalsNargs1z&Tests specifying 1 arg for an Optionalr      nargsr   r   Nr   r   r   rA   r   r   rs  rs  Q  s?    0t1-.T{H	R$Z	seIr   rs  c                   ^    e Zd ZdZ edd      gZg dZd ed      fd	 eg d
      fgZy)TestOptionalsNargs3z'Tests specifying 3 args for an Optionalr      ru  )r   r   r   -x a ba -xa -x br   Nr   z-x a b cr   bcr   rA   r   r   rx  rx  \  s:    1t1-.>H	R$Z	R/*+Ir   rx  c                   Z   e Zd ZdZ edd       eddd       eddd	
       eddedd      gZ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d edddd      fd eddd	d      fd eddd	d      fg	Z	y)TestOptionalsNargsOptionalz0Tests specifying an Optional arg for an OptionalrY  ?ru  r   r  )rv  r  r
  spamrv  rn  r  4284)rv  r   r  rn  2r   NT   rg   r   r[  r  z-w 2z-x 2z-y 2z-z 2   
r   r   r    r!   rt   intr   r   r{   r   rA   r   r   r  r  g  s    : 	DD2&DV,D#T4@	 uH	R$$&B/0	rDDFb12	cTVr23	rDB&B/0	dcVr23	rDDDB/0	ddcR01	rDDFb12	ddf23
Ir   r  c                       e Zd ZdZ edd       eddd      gZdgZd	 ed
d      fd eg d      fd edgd      fd eddgd      fd ed
g       fd ed
dg      fd ed
ddg      fgZy
)TestOptionalsNargsZeroOrMore?Tests specifying args for an Optional that accepts zero or morer   *ru  r
  r  r  r   r   Nro  r   rz  r~  -y a-y a br   rA   r   r   r  r  ~  s    I 	DDV, uH	R$&!"	rB&!"	sev&'	2c
f-.	rDB 	dse$%	2c
+,Ir   r  c            
           e Zd ZdZ edd       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d ed
dg      fd ed
ddg      fgZy
)TestOptionalsNargsOneOrMorez>Tests specifying args for an Optional that accepts one or morer   +ru  r
  r  r  )r   r   r
  r{  za -y br   Nro  r   r   rz  r~  r  r  r   rA   r   r   r  r    s    H 	DDV, 3H	R$&!"	sev&'	2c
f-.	dse$%	2c
+,Ir   r  c            
           e Zd ZdZ edd       ede 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d e	dd      fgZ
y
)TestOptionalsChoicesz,Tests specifying the choices for an Optionalr  abcchoicesz-g   r   r  )r   z-f dz-fadz-gaz-g 6r   N)r  rg  r  r   z-f cr  z-g 0r   z-g 03ry  z-fb -g4r~     r   r   r    r!   rt   r  ranger   r   r{   r   rA   r   r   r  r    s    6 	D% DsE!H-/ 4H	R$$ 	cT"#	cT"#	da!	"tq/"	BN#Ir   r  c                   \    e Zd ZdZ eded      gZddgZd ed	      fd
 ed	      fgZ	y)TestOptionalsRequiredz)Tests an optional action that is requiredr   Tr   requiredr   r   -x 1rt  r   z-x42r  Nr  rA   r   r   r  r    sE    3 	DsT* RyH	a	bIr   r  c                   Z    e Zd ZdZ edd      gZddgZd ed	      fd
 ed	      fgZy)TestOptionalsActionStorez&Tests the store action for an Optionalr   storer   r   r{  r   Nr   z-xfoor(   r   rA   r   r   r  r    s=    0tG45V}H	R$Z	"u+Ir   r  c                   Z    e Zd ZdZ edde      gZdgZd ed      fd ee      fgZ	y)	TestOptionalsActionStoreConstz,Tests the store_const action for an Optionalr
  r  r  r   r   Nr[  )
r   r   r    r!   rt   r   r   r   r{   r   rA   r   r   r  r    s=    6tMHIuH	R$Z	rF|Ir   r  c                   Z    e Zd ZdZ edd      gZg dZd ed      fd ed	      fgZy
)TestOptionalsActionStoreFalsez,Tests the store_false action for an Optionalr  store_falser   )r   r  r	  r   T)r  FNr   rA   r   r   r  r    s9    6tM:;#H	R$Z	rE{Ir   r  c                   Z    e Zd ZdZ edd      gZg dZd ed      fd ed	      fgZy
)TestOptionalsActionStoreTruez+Tests the store_true action for an Optionalz--appler   r   )r   z	--apple=bz	--apple br   F)appleTNr   rA   r   r   r  r    s9    5y>?.H	Re_	BTN#Ir   r  c                       e Zd ZdZ edej                        gZddgZd e	d      fd e	d	      fd
 e	d      fd e	d      fd e	d	      fgZ
d Zd Zy)TestBooleanOptionalActionzTests BooleanOptionalActionr   r   	--foo bar	--foo=barr   Nr  T--no-fooFz--foo --no-fooz--no-foo --fooc                    t        j                         }| j                  t              5 }|j	                  ddt         j
                         d d d        | j                  dt        j                               y # 1 sw Y   /xY w)Nr   Tr  r   z*got an unexpected keyword argument 'const')	r+   r,   r   r   r   BooleanOptionalActionassertInr   	exceptionr   r2   cms      r   
test_constz$TestBooleanOptionalAction.test_const  sn    ((*y) 	\RtH<Z<Z[	\ 	BCDUV	\ 	\s   #A;;Bc                    t        j                         }| j                  t              5  |j	                  dt         j
                  d        d d d        | j                  t              5  |j	                  dt         j
                  t               d d d        | j                  t              5  |j	                  dt         j
                  d        d d d        | j                  t              5  |j	                  dt         j
                  d       d d d        | j                  t              5  |j	                  dt         j
                  d 	       d d d        | j                  t              5  |j	                  d
t         j
                  d	       d d d        y # 1 sw Y   OxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   |xY w# 1 sw Y   y xY w)N-a)r   r   -b-c)r   metavar-dd-e)r   r  r  rA   )r+   r,   assertWarnsDeprecationWarningr   r  boolr1   s     r   test_deprecated_init_kwz1TestBooleanOptionalAction.test_deprecated_init_kw   s   ((*01 	55   	 01 	55   	 01 	55   	 01 	55   	 01 	55   	 01 	55   	 	A	 		 		 		 		 		 	sG   #F*'F'.#F4.#G .#G.#GF$'F14F= G	GG!)r   r   r    r!   rt   r+   r  r   r   r{   r   r  r  rA   r   r   r  r    ss    %wx/M/MNO[)H	RD\	",	RE]#	2%=)	2$<(IW)r   r  c                   n    e Zd ZdZ eddej                        gZdgZd e	d      fd e	d      fgZ
y	)
!TestBooleanOptionalActionRequiredz$Tests BooleanOptionalAction requiredr   T)r  r   r   r  r  FN)r   r   r    r!   rt   r+   r  r   r   r{   r   rA   r   r   r  r  +  sI    . 	Gd8+I+IJ tH	",	RE]#Ir   r  c                   t    e Zd ZdZ edd      gZg dZd ed      fd	 ed
g      fd ed
dg      fgZy)TestOptionalsActionAppend'Tests the append action for an Optionalrd  appendr   r   rd  a --baz	--baz a br   NrD  --baz ar   --baz a --baz br~  r   rA   r   r   r  r  7  sL    1wx895H	RD\	BC5M"	BC:./Ir   r  c                   |    e Zd ZdZ edddg      gZg dZd edg      fd	 edd
g      fd eg d      fgZy)$TestOptionalsActionAppendWithDefaultr  rd  r  r5  r   rn  r  r   r  r  r   r  )r5  r   r~  Nr   rA   r   r   r  r  C  sQ    1wx#GH5H	RSE]	BC:&'	B?34Ir   r  c                       e Zd ZdZ edd       edd       edd       edd      gZg d	Zd
 edddd      fd edgddd      fd eddgdd      fd edddd      fd edddd      fgZy)!TestConstActionsMissingConstKwargz=Tests that const gets default value of None when not providedr  append_constr   r   r  r  r.  )z-f vr  r  r   N)r  r(   r~  rC  r   rA   r   r   r  r  O  s    G 	D(GN+D'GM*	 2H	R$DDd34	rTF$78	"t$4T:;	rDdd56	"t489Ir   r  c            	           e Zd ZdZ edde       eddd      gZg d	Zd
 ed      fd eeg      fd eededg      fgZ	y)TestOptionalsActionAppendConst-Tests the append_const action for an Optionalr  r  r  r  r  r~  r   r'  r   r  za -cz-bxz-b xr   Nr~  -b -cx -b -cyzr   yz
r   r   r    r!   rt   r   r   r   r{   r   rA   r   r   r  r  b  sf    7 	Dy9D, 2H	R$Z	rYK !	2CD ABCIr   r  c            
           e Zd ZdZ eddedg       eddd	      gZg d
Zd edg      fd edeg      fd edededg      fgZ	y))TestOptionalsActionAppendConstWithDefaultr  r  r  r5  )r   r  rn  r  r  r~  r  r  r   r  r  r   r  Nr  rA   r   r   r  r  q  sq    7 	Dy3%HD, 2H	R3%[	rS)$%&	2ii FGHIr   r  c                   Z    e Zd ZdZ edd      gZg dZd ed      fd ed	      fgZy)
TestOptionalsActionCountz&Tests the count action for an Optionalr   countr   )r   r   z-x bz	-x a -x br   Nr   rt  r   rA   r   r   r  r    s8    0tG451H	R$Z	rAwIr   r  c            	           e Zd ZdZ ed       ed       e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y
)"TestOptionalsAllowLongAbbreviationz2Allow long options to be abbreviated unambiguouslyr   z--foobazz--foobler   r   z--foob 5z--foobr   NF)r(   foobazfooblez--foo 77z	--fooba ar   z--foobl --foo grg  Tr   rA   r   r   r  r    s~    < 	GJJ|,
 H%H	RDe45	B3tE:;	bT#e<=	B3tDAB	Ir   r  c                       e Zd ZdZ ed      Z ed       e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gZ	y)%TestOptionalsDisallowLongAbbreviation1Do not allow abbreviations of long options at allFallow_abbrevr   z--foodler   r   z--foonly)z-foon 3z--foon 3z--foodz--food --foo 2r   Nr(   foodlefoonlyz--foo 33z--foonly 7 --foodle --foo 2r  Tr  rT  rA   r   r   r  r    sr    ;.GJ|,J
 CH	RDt45	B3uT:;	&s4(LMIr   r  c                       e Zd ZdZ edd      Z ed       e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gZ	y)0TestOptionalsDisallowLongAbbreviationPrefixCharszBDisallowing abbreviations works with alternative prefix charactersr  FrI  r  z++fooz++foodler   r   z++foonly)z+foon 3z++foon 3z++foodz++food ++foo 2r   Nr  z++foo 3r  z++foonly 7 ++foodle ++foo 2r  Tr  rT  rA   r   r   r  r    st    L%@GJ|,J
 CH	RDt45	B3uT:;	&s4(LMIr   r  c            
           e Zd ZdZ ed      Z ed       ed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d edd      fgZ	y
)/TestDisallowLongAbbreviationAllowsShortGroupingr  Fr  z-rr  r  r   z-c -rr   Nrr  z-rar   z-rccccz-ccr  z-cc -raz-ccrccrT  rA   r   r   r  r    s    ;.D	D! gH	R$$ 	SD!"	dd#$	TQ 	BN#	2?#Ir   r  c            
           e Zd ZdZ edd      Z ed       ed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d edd      fgZ	y)5TestDisallowLongAbbreviationAllowsShortGroupingPrefixzEShort option grouping works with custom prefix and allow_abbrev=Falser  Fr  z+rz+cr  r   z+c +rr   Nr  z+rar   z+rccr  z+ccr  z+cc +raz+ccrccrT  rA   r   r   r  r    s    O%@D	D! gH	R$$ 	SD!"	dd#$	TQ 	BN#	2?#Ir   r  c                   B    e Zd ZdZ ed      gZg dZd ed      fgZy)TestPositionalsNargsNonez,Test a Positional that doesn't specify nargsr(   r   r   a br   r  Nr   rA   r   r   r  r    s)    6u:, H	bSkIr   r  c                   H    e Zd ZdZ edd      gZg dZd edg      fgZy)	TestPositionalsNargs1z.Test a Positional that specifies an nargs of 1r(   rt  ru  r  r   r  Nr   rA   r   r   r  r    s/    8uA./ H	bcUmIr   r  c                   J    e Zd ZdZ edd      gZg dZd eddg	      fgZy
)TestPositionalsNargs2z.Test a Positional that specifies an nargs of 2r(   r  ru  )r   r   r   a b cr  r   r~  r  Nr   rA   r   r   r	  r	    s2    8uA./'H	Sz"#Ir   r	  c                   r    e Zd ZdZ edd      gZdgZd eg       fd edg      fd	 edd
g      fgZy)TestPositionalsNargsZeroOrMorez0Test a Positional that specifies unlimited nargsr(   r  ru  r   r   r  r   r  r~  Nr   rA   r   r   r  r    sN    :uC01vH	RBZ	bcUm	Sz"#Ir   r  c                   t    e Zd ZdZ eddd      gZdgZd ed      fd	 ed	g      fd
 ed	dg      fgZy)%TestPositionalsNargsZeroOrMoreDefaultz>Test a Positional that specifies unlimited nargs and a defaultr(   r  rC  r  r   r   r  r   r  r~  Nr   rA   r   r   r  r    sP    HuC?@vH	RE]	bcUm	Sz"#Ir   r  c                   `    e Zd ZdZ edd      gZddgZd edg      fd	 edd
g      fgZy)TestPositionalsNargsOneOrMorez2Test a Positional that specifies one or more nargsr(   r  ru  r   r   r   r  r  r~  Nr   rA   r   r   r  r    sD    <uC01DzH	bcUm	Sz"#Ir   r  c                   Z    e Zd ZdZ edd      gZddgZd ed	      fd
 ed
	      fgZy)TestPositionalsNargsOptionalzTests an Optional Positionalr(   r  ru  r   r  r   Nr  r   r   rA   r   r   r  r  )  s=    &uC01e}H	RD\	bSkIr   r  c                   \    e Zd ZdZ eddd      gZddgZd ed	      fd
 ed
	      fgZy)#TestPositionalsNargsOptionalDefaultz1Tests an Optional Positional with a default valuer(   r  r  r  r   r  r   r  r   Nr   rA   r   r   r  r  4  s?    ;uC<=e}H	RBZ	bSkIr   r  c                   ^    e Zd ZdZ edded      gZg dZd ed	      fd
 ed	      fgZ	y),TestPositionalsNargsOptionalConvertedDefaultznTests an Optional Positional with a default value
    that needs to be converted to the appropriate type.
    r(   r  r  )rv  r   rn  )r   r  1 2r   r  r  1rt  Nr  rA   r   r   r  r  ?  sE    
 	E35 $H	RBZ	bQiIr   r  c                   R    e Zd ZdZ ed       ed      gZg dZd edd      fgZy	)
TestPositionalsNargsNoneNonez-Test two Positionals that don't specify nargsr(   rC  )r   r   r   r
  r  r   r~  r(   rC  Nr   rA   r   r   r  r  N  s3    7u:s5z2'H	s$%Ir   r  c                   X    e Zd ZdZ ed       edd      gZg dZd edd	g
      fgZy)TestPositionalsNargsNone1z6Test a Positional with no nargs followed by one with 1r(   rC  rt  ru  )r   r   r   r
  r  r   r~  r  Nr   rA   r   r   r  r  X  s8    @u:s5':;*H	s&'Ir   r  c                   Z    e Zd ZdZ edd       ed      gZg dZd edd	gd
      fgZy)TestPositionalsNargs2Nonez8Test a Positional with 2 nargs followed by one with noner(   r  ru  rC  r   r   r   r  a b c dr
  r   r~  r  r  Nr   rA   r   r   r  r  b  s:    BuA.E
;3H	"#s-.Ir   r  c                       e Zd ZdZ ed       edd      gZddgZd edg 	      fd
 eddg	      fd edddg	      fgZy)"TestPositionalsNargsNoneZeroOrMorez>Test a Positional with no nargs followed by one with unlimitedr(   rC  r  ru  r   r   r   r  r  r~  r
  r  Nr   rA   r   r   r#  r#  l  s^    Hu:s5'<=G}H	bSb!"	s&'	"3*-.Ir   r#  c                   r    e Zd ZdZ ed       edd      gZg dZd edd	g
      fd edd	dg
      fgZy)!TestPositionalsNargsNoneOneOrMorez@Test a Positional with no nargs followed by one with one or morer(   rC  r  ru  r   r   r   r  r   r~  r  r
  r  Nr   rA   r   r   r%  r%  x  sK    Ju:s5'<=!H	s&'	"3*-.Ir   r%  c                   l    e Zd 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y) TestPositionalsNargsNoneOptionalz@Test a Positional with no nargs followed by one with an Optionalr(   rC  r  ru  r   r   r
  r   Nr  r  r~  r   rA   r   r   r(  r(    sE    Ju:s5'<=%H	bSd#$	s$%Ir   r(  c                       e Zd ZdZ edd       ed      gZddgZd eg d	      fd
 edgd	      fd eddgd	      fgZy)"TestPositionalsNargsZeroOrMoreNonez@Test a Positional with unlimited nargs followed by one with noner(   r  ru  rC  r   r   r   r  r  r~  r
  r  Nr   rA   r   r   r+  r+    s^    JuC0#e*=G}H	bRS!"	u#&'	"#s-.Ir   r+  c                   r    e Zd ZdZ edd       ed      gZg dZd edgd	
      fd edd	gd
      fgZy)!TestPositionalsNargsOneOrMoreNonezBTest a Positional with one or more nargs followed by one with noner(   r  ru  rC  r&  r  r   r~  r  r
  r  Nr   rA   r   r   r-  r-    sK    LuC0#e*=!H	u#&'	"#s-.Ir   r-  c                   n    e Zd ZdZ eddd       ed      gZg dZd edd	      fd
 edd	      fgZy) TestPositionalsNargsOptionalNonezBTest a Positional with an Optional nargs followed by one with noner(   r  r  r  rC  r)  r   r  r  r~  Nr   rA   r   r   r/  r/    sG    LuC<c%jI%H	bRS!"	s$%Ir   r/  c                   z    e Zd ZdZ edd       edd      gZg dZd ed	d
gg       fd ed	d
gdg      fgZy)TestPositionalsNargs2ZeroOrMorez=Test a Positional with 2 nargs followed by one with unlimitedr(   r  ru  rC  r  r&  r  r   r~  r  r
  r  Nr   rA   r   r   r1  r1    sR    GuA.E0EF!H	Szr*+	"#s#/0Ir   r1  c                   `    e Zd ZdZ edd       edd      gZg dZd ed	d
gdg      fgZy)TestPositionalsNargs2OneOrMorez?Test a Positional with 2 nargs followed by one with one or morer(   r  ru  rC  r  )r   r   r   r  r
  r   r~  r  r  Nr   rA   r   r   r3  r3    s?    IuA.E0EF(H	"#s#/0Ir   r3  c                   x    e Zd ZdZ edd       edd      gZg dZd ed	d
gd      fd ed	d
gd      fgZy)TestPositionalsNargs2Optionalz7Test a Positional with 2 nargs followed by one optionalr(   r  ru  rC  r  )r   r   r   r!  r  r   r~  Nr  r
  r  r   rA   r   r   r5  r5    sP    AuA.E0EF,H	Szt,-	"#s-.Ir   r5  c                       e Zd ZdZ edd       edd      gZddgZd	 eg d	g
      fd ed	gdg
      fd ed	dgdg
      fgZy)TestPositionalsNargsZeroOrMore1z=Test a Positional with unlimited nargs followed by one with 1r(   r  ru  rC  rt  r   r   r   r  r  r~  r
  r  Nr   rA   r   r   r7  r7    sg    GuC0#e12EFGH	bRcU#$	u3%()	"#s#/0Ir   r7  c                   z    e Zd ZdZ edd       edd      gZg dZd ed	gd
g      fd ed	d
gdg      fgZy)TestPositionalsNargsOneOrMore1z?Test a Positional with one or more nargs followed by one with 1r(   r  ru  rC  rt  r&  r  r   r~  r  r
  r  Nr   rA   r   r   r9  r9    sR    IuC0#e12EF!H	u3%()	"#s#/0Ir   r9  c                   t    e Zd ZdZ edd       edd      gZg dZd ed	dg
      fd eddg
      fgZy	)TestPositionalsNargsOptional1z?Test a Positional with an Optional nargs followed by one with 1r(   r  ru  rC  rt  r)  r   Nr  r  r~  r   rA   r   r   r;  r;    sL    IuC0#e12EF%H	bTu%&	s&'Ir   r;  c                       e Zd ZdZ ed       edd       edd      gZg dZd	 ed
g dg      fd ed
dgdg      fgZy)#TestPositionalsNargsNoneZeroOrMore1z=Test three Positionals: no nargs, unlimited nargs and 1 nargsr(   rC  r  ru  rD  rt  r&  r  r   r~  r(   rC  rD  r
  r  Nr   rA   r   r   r=  r=    s`    G 	E
EE
 "H	s./	"3%cU34Ir   r=  c                       e Zd ZdZ ed       edd       edd      gZg dZd	 ed
dgdg      fd ed
ddgdg      fgZy)"TestPositionalsNargsNoneOneOrMore1z?Test three Positionals: no nargs, one or more nargs and 1 nargsr(   rC  r  ru  rD  rt  )r   r   r   r~  r
  r   r~  r  r>  r!  r  Nr   rA   r   r   r@  r@    sd    I 	E
EE
 'H	"3%cU34	B3S#JSE:;Ir   r@  c                       e Zd ZdZ ed       eddd       edd	      gZg d
Zd edddg      fd edddg      fgZy)!TestPositionalsNargsNoneOptional1z;Test three Positionals: no nargs, optional narg and 1 nargsr(   rC  r        ?r  rD  rt  ru  r&  r  r   r~  r>  r
  r  Nr   rA   r   r   rB  rB    s`    E 	E
Ee,E
 "H	sC512	"#C512Ir   rB  c                       e Zd ZdZ edd       eddd      gZdd	gZd
 edd      fd edd      fd edd      fgZy)$TestPositionalsNargsOptionalOptionalzTest two optional nargsr(   r  ru  rC  r  r  r   r
  r   Nr  r   r  r~  r   rA   r   r   rE  rE    se    ! 	EEb) !H	RDb!"	bSb!"	s$%Ir   rE  c            	           e Zd ZdZ edd       edd      gZdgZd ed	g 
      fd edg 
      fd eddg
      fd edddg
      fgZy	)&TestPositionalsNargsOptionalZeroOrMorez1Test an Optional narg followed by unlimited nargsr(   r  ru  rC  r  r   r   Nr  r   r  r~  r
  r  r   rA   r   r   rG  rG  .  sn    ;uC0#e32GHyH	RDb!"	bSb!"	s&'	"3*-.	Ir   rG  c                       e Zd ZdZ edd       edd      gZddgZd	 ed
d	g      fd ed	dg      fd ed	ddg      fgZy
)%TestPositionalsNargsOptionalOneOrMorez3Test an Optional narg followed by one or more nargsr(   r  ru  rC  r  r   r   r   Nr  r  r~  r
  r  r   rA   r   r   rI  rI  ;  sc    =uC0#e32GHG}H	bTu%&	s&'	"3*-.Ir   rI  c                   f    e Zd ZdZ ed ed            gZg dZd ed      fd ed      fgZ	y	)
TestPositionalsChoicesStringz&Test a set of single-character choicesr  abcdefgr  r   r   rh  r  efr   r  rg  N)
r   r   r    r!   rt   setr   r   r{   r   rA   r   r   rK  rK  G  s=    0vs9~>?-H	bcl	bclIr   rK  c                   h    e Zd ZdZ ede ed            gZg dZd e	d      fd	 e	d
      fgZ
y)TestPositionalsChoicesIntzTest a set of integer choicesr     r  rM  4r  rO  15   Nr  rA   r   r   rR  rR  R  s?    'vCrCD-H	baj	rr{Ir   rR  c                   b    e Zd ZdZ edd       eddd      gZg dZd ed	d
dgg      fgZy)TestPositionalsActionAppendzTest the 'append' actionr  r  r   r  )r   rv  r   r
  r   r~  r  rO  Nr   rA   r   r   rX  rX  ]  sI    " 	F8$F81- 4H	"3c
+,-Ir   rX  c                       e Zd ZdZ edd       edd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gZy)"TestOptionalsNumericAndPositionalsz;Tests negative number args when numeric options are presentr   r  ru  z-4r[  r   r'  r   r(  z-315r   NFro  r   Tz-4 ar   rA   r   r   rZ  rZ  m  ss    E 	CsDs<0 f~H	R$% !	b3% !	rDD!"	cT"#	Ir   rZ  c            	           e Zd ZdZ edd       eddd      gZ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y)(TestOptionalsAlmostNumericAndPositionalszBTests negative number args when almost numeric options are presentr   r  ru  z-k4r[  r   r[  z-k3r   NFro  r(  r   Tz-k4 ar   rA   r   r   r]  r]  }  s    L 	CsEL1 wH	R$% !	rDE"#	b3% !	TT"#	"sd#$Ir   r]  c                      e Zd Z edd       eddd      gZdgZdg edd	
      fdg edd	
      fdg edd	
      fddg ed	d
      fddg ed	d
      fddg ed	d
      fdg ed	d
      fdg ed	d
      fgZy	)$TestEmptyAndSpaceContainingArgumentsr   r  ru  r
  z--yyyr[  r&  r   Nro  za badgerz	-a badgerz--yyy=a badgerz--yyy=-a badger)r   r   r    rt   r   r   r{   r   rA   r   r   r_  r_    s     	CsD'$ vH
rB$ 
rJ$/0
[D12
R$"%&

	R$*56
	b4;78
	R$*56
	b4;78	Ir   r_  c                       e Zd Z ed      Z edddd       edd	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	y) TestPrefixCharacterOnlyArgumentsz-+rI  -r   r  r3  )r'  rv  r  r  r[  r  )r'  r   rn  z-+-r  r   r[  r
  z+ -r   NFrZ  z- Xr5  z+ -3Tz- ===z===)
r   r   r    rt   r   r  r   r   r{   r   rA   r   r   ra  ra    s    -CcH5CcR0EL1
 e}H	R$"&'	b8rU+,	SB%()	dbE*+	TR4()	"ue,-Ir   ra  c                       e Zd ZdZ edd       edd      gZg Zd edg       fd eg g       fd	 ed
gg       fd ed
gdg      fd
 edd
g      fd eg d
g      fd edgd
g      fgZy)TestNargsZeroOrMorer  r   r  ru  r[  r   Nro  r   r   z	-x a -- br~  r{  r|  r   rA   r   r   rf  rf    s    It3/S1DEH	R$"	rB"~	ser"#	bC5SE*+	b4C5!"	bSE"#	2#'(Ir   rf  c            	           e Zd ZdZ ed       edd       ed      gZg dZd edg d	
      fd edg d
      fd edg dd	
      fd edddgd	
      fgZy	)TestNargsRemainderz2Tests specifying a positional with nargs=REMAINDERr   r[  ...ru  r  )r   r  z-z Zr5  NrZ  z-z Z XZ
X A B -z Z)ArA  r  rj  z	X Y --fooYr   r   rA   r   r   rh  rh    sv    <s8SE%:CIF!H	b3"%&	2rS)*	rC#8DAB	b33.D9:	Ir   rh  c                   l   e Zd ZdZ ede       eded       edd	      gZg d
Zd eddg       fd eddg       fd edddg      fd eddg       fd eddg       fd eddg       fd edddg      fd edddg      fd edddg      fd edddg      fd edddg      fgZ	y)TestOptionLikez.Tests options that may or may not be argumentsr   r   z-3r[  )r   r'  r  r  ru  )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   NrZ  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!   rt   floatr   r   r{   r   rA   r   r   ro  ro    s   8 	DuDu3'Cs
0H
 
R$$"%&	2tr*+	R##/0	dcR()	"ttr*+	"tsb)*	2u-.	b44C5)*	2tu-.	2tu-.	2u-.Ir   ro  c                      e Zd ZdZ eddej                         eddej                         eddej                  	      gZd
gZd e	       fd e	d      fd e	ddg      fd e	d      fd e	dd      fd e	ddgd      fgZ
y)TestDefaultSuppressz%Test actions with suppressed defaultsr(   r  r  rC  r  rd  r   r  r   r   r   r  r  r~  r  Tr  r  r(   rD  r  r>  N)r   r   r    r!   rt   r+   SUPPRESSr   r   r{   r   rA   r   r   ru  ru    s    / 	Eh&7&78Eh&7&78GL(2C2CD
 vH	RT
	bSk	s&'	",	B3D)*	bSse67Ir   ru  c                       e Zd ZdZ eej                        Z edd       edd       edd	
      gZdgZ	d e
       fd e
d      fd e
ddg      fd e
d      fd e
dd      fd e
ddgd      fgZy)TestParserDefaultSuppressz4Test actions with a parser-level default of SUPPRESSargument_defaultr(   r  ru  rC  r  rd  r   r   r   r   r   r  r  r~  r  Tr  r  rv  r  r>  N)r   r   r    r!   rt   r+   rw  r   r   r   r{   r   rA   r   r   ry  ry    s    >H,=,=>EEGL)
 vH	RT
	bSk	s&'	",	B3D)*	bSse67Ir   ry  c                      e Zd ZdZ ed      Z eddd       edd	
       edd
       edd      gZdgZd edddd      fd edddd      fd eddgdd      fd edddd      fd edddd      fd eddgdd      fgZ	y)TestParserDefault42z.Test actions with a parser-level default of 42r  rz  	--versionversion1.0r   r  r(   r  ru  rC  r  rd  r   r   r   r   )r(   rC  rD  r  r   r  r~  Tr  r  NrT  rA   r   r   r}  r}    s    8B/K	59EEGL)	 vH	RBBB34	bSbb"56	s2r:;	"r:;	B3BD"=>	bSserBCIr   r}  c                       e Zd ZdZ fdZ ed      Z ed       ed       edd	      gZg d
Zde	j                  z   Zd edddg      fd eddddg      fd ededg      fd eddeg      fd ededdg      fd eddedg      fg d edddg      fgZe	j                  rPe	j                  j                  d      Z ej$                  e      Zed ededg      fd eddeg      fgz  Z xZS dZ xZS )TestArgumentsFromFile"Test reading arguments from a filec                    t         t        |           dt        j                  | j
                        dz   fddd| j                  dz   fg}|D ]+  \  }}t        |d      5 }|j                  |       d d d        - y # 1 sw Y   8xY w)Nhello   
)	recursives   -a
A
@hello)invalids   @no-such-path
undecodablewb)	r   r  rK   rS   fsencoder  r  rj   rk   r   
file_textsr[   textrn   r   s        r   rK   zTestArgumentsFromFile.setUp+  s    #T02bkk$**-56% ,D,,u45

 % 	!JD$dD! !T

4 ! !	!! !s   A<<B	@fromfile_prefix_charsr  r   r[  r  ru  )r   r  r5  z@invalidz@missingzhello world!zX YNr5  rm  )r   r   r[  z
X -a A Y Zrl  rj  @hello XzX @helloz-a B @recursive Y ZzX @recursive Z -a BrA  )r  r   r5  rm  r      @z@undecodable XzX @undecodabler   )r   r   r    r!   rK   rt   r   r   r   r   FS_NONASCIIr  r{   r   TESTFN_UNDECODABLElstripr  rS   fsdecodedecoded_undecodabler"   r#   s   @r   r  r  (  sR   ,! 5D	CCs
 7HY222E	TSSE*+	rC33*56	R$%C512	R$#%12	SEc3Z @A	SCE3< @A	rB##78I ##2299$?)bkk+6rD,?C5IJrDC4G3HIJ
 	
	
 r   r  c                        e Zd ZdZ fdZ G d de      ZeZ ed      Z	 edd	      gZ
g Zd
 eg d      fgZ xZS )TestArgumentsFromFileConverterr  c                     t         t        |           dg}|D ]+  \  }}t        |d      5 }|j	                  |       d d d        - y # 1 sw Y   8xY w)N)r  s   hello world!
r  )r   r  rK   rj   rk   r  s        r   rK   z$TestArgumentsFromFileConverter.setUpX  sb    ,d9;(

 % 	!JD$dD! !T

4 ! !	!! !s   AA	c                       e Zd Zd Zy)>TestArgumentsFromFileConverter.FromFileConverterArgumentParserc              #   `   K   |j                         D ]  }|j                         s|  y wrO   )r   strip)r   arg_lineargs      r   convert_arg_line_to_argszWTestArgumentsFromFileConverter.FromFileConverterArgumentParser.convert_arg_line_to_argsc  s-     ~~' yy{	s   ,.N)r   r   r    r  rA   r   r   FromFileConverterArgumentParserr  a  s    	r   r  r  r  r[  r  ru  r  )r  zworld!r5  r  )r   r   r    r!   rK   r   r  r   rt   r   r   r   r{   r   r"   r#   s   @r   r  r  U  sX    ,!*D  3L5Cs H	R234Ir   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestFileTypeReprc                 d    t        j                  d      }| j                  dt        |             y )Nr  zFileType('r')r+   FileTyper   reprr   r   s     r   test_rzTestFileTypeRepr.test_ry  s&      %$t*5r   c                 f    t        j                  dd      }| j                  dt        |             y )Nr  rt  zFileType('wb', 1)r  r  s     r   	test_wb_1zTestFileTypeRepr.test_wb_1}  s)      q),d4j9r   c                 h    t        j                  dd      }| j                  dt        |             y )Nr  latin_1rh   z!FileType('r', encoding='latin_1')r  r  s     r   test_r_latinzTestFileTypeRepr.test_r_latin  s)      y9<d4jIr   c                 j    t        j                  ddd      }| j                  dt        |             y )Nrg   big5ignore)ri   errorsz/FileType('w', encoding='big5', errors='ignore')r  r  s     r   test_w_big5_ignorez#TestFileTypeRepr.test_w_big5_ignore  s.      vhGJd	%r   c                 j    t        j                  ddd      }| j                  dt        |             y )Nr  rt  replacer  z"FileType('r', 1, errors='replace')r  r  s     r   test_r_1_replacez!TestFileTypeRepr.test_r_1_replace  s+      a	:=tDzJr   N)r   r   r    r  r  r  r  r  rA   r   r   r  r  w  s    6:J%
Kr   r  c                       e Zd Zd Zd Zy)StdStreamComparerc                     t        j                  |      | _        |dk(  rt        | _        y |dk(  rt
        | _        y t               | _        y )Nstdout.bufferstderr.buffer)operator
attrgetterr   r   
backupattrr   r   )r   r   s     r   r   zStdStreamComparer.__init__  s=      **40?"1DO_$1DO$hDOr   c                 p    	 || j                  t              k(  S # t        $ r || j                  k(  cY S w xY wrO   )r   r   AttributeErrorr  r   s     r   r   zStdStreamComparer.__eq__  s9    	,DLL--- 	,DOO++	,s    55Nr   r   r    r   r   rA   r   r   r  r    s    ',r   r  stdinr   r   zstdin.bufferr  r  c                       e Zd Zi Zd Zd Zy)RFilec                     || _         y rO   rd   r   rd   s     r   r   zRFile.__init__  	    	r   c                 &   || j                   v r| j                   |   }n/|j                         x}| j                   |<   |j                          t        |t              s|j                  d      }| j                  |j                  cxk(  xr |k(  S c S )Nascii)seenreadcloser   r   r   rd   r   r   r  s      r   r   zRFile.__eq__  st    DII99U#D&+jjl2D499U#KKM$$;;w'DyyEJJ.$....r   N)r   r   r    r  r   r   rA   r   r   r  r    s    D/r   r  c                   J    e Zd ZdZ fdZ ed ej                                ed ej                  d            gZg dZ	d e
d	 ed      
      fd e
 ed       ed      
      fd e
 ed       ed      
      fd e
ee
      fd e
d	 ed      
      fgZ xZS )TestFileTypeR8Test the FileType option/argument type for reading filesc                    t         t        |           dD ]R  }t        t        j
                  j                  | j                  |      dd      5 }|j                  |       d d d        T | j                  d       y # 1 sw Y   pxY w)Nr  rg   r   rh   readonly)
r   r  rK   rj   rS   r[   r\   rR   rk   rr   r   	file_namern   r   s      r   rK   zTestFileTypeR.setUp  sz    mT(*' 	&Ibggll4==)<G- &04

9%& &	& 	!!*-& &s   A==B	r   rp  r  r  )r   r   znon-existent-file.txtr(   Nr   r  
-x foo barrC  
bar -x foo-x - -r  )r   r   r    r!   rK   rt   r+   r  r   r   r{   r  eq_stdinr   r"   r#   s   @r   r  r    s    B. 	D(x((*+F***3/0 3H	Te-.	rE%LuU|<=	rE%LuU|<=	2x01	R$U:%678Ir   r  c                        e Zd ZdZ fdZ ed ej                  d      d      gZdgZ	d e
 ed	      
      fgZ xZS )TestFileTypeDefaultsz<Test that a file is not created unless the default is neededc                     t         t        |           t        t        j
                  j                  | j                  d      dd      }|j                  d       |j                          y )Ngoodrg   r   rh   )
r   r  rK   rj   rS   r[   r\   rR   rk   r  )r   rn   r   s     r   rK   zTestFileTypeDefaults.setUp  sG    "D/1BGGLL7wO

6

r   r  r  zno-file.txtr   rn  r   z-c goodr  )r  )r   r   r    r!   rK   rt   r+   r  r   r   r{   r  r   r"   r#   s   @r   r  r    sN    F 	D(x((-}E tHR%-012Ir   r  c            	       *    e Zd ZdZ fdZ ed ej                  d             ed ej                  d            gZddgZ	d e
d	 ed      
      fd e
 ed       ed      
      fd e
 ed       ed      
      fd e
ee
      fgZ xZS )TestFileTypeRBr  c                     t         t        |           dD ]R  }t        t        j
                  j                  | j                  |      dd      5 }|j                  |       d d d        T y # 1 sw Y   _xY w)Nr  rg   r   rh   )	r   r  rK   rj   rS   r[   r\   rR   rk   r  s      r   rK   zTestFileTypeRB.setUp  sj    nd)+' 	&Ibggll4==)<G- &04

9%& &	&& &s   A,,A5	r   rbrp  r  r   r(   Nr  r  rC  r  r  )r   r   r    r!   rK   rt   r+   r  r   r   r{   r  	eq_bstdinr   r"   r#   s   @r   r  r    s    B& 	D(x((./F***401 bzH	Te-.	rE%LuU|<=	rE%LuU|<=	2		23	Ir   r  c                   &    e Zd Z e       Zd Zd Zy)WFilec                     || _         y rO   r  r  s     r   r   zWFile.__init__  r  r   c                 
   || j                   vr]d}d|j                  v r|j                  d      }|j                  |       |j	                          | j                   j                  |       | j                  |j                  k(  S )NzCheck that file is writable.r~  r  )r  moder
   rk   r  addrd   r  s      r   r   zWFile.__eq__  se    		!1Dejj {{7+KKKKMIIMM% yyEJJ&&r   N)r   r   r    rP  r  r   r   rA   r   r   r  r    s    5D'r   r  c            
       L    e Zd ZdZ fdZ ed ej                  d             ed ej                  d            gZg dZ	d e
d	 ed      
      fd e
d	 ed      
      fd e
 ed       ed      
      fd e
 ed       ed      
      fd e
ee
      fgZ xZS )TestFileTypeWz8Test the FileType option/argument type for writing filesc                 f    t         |           | j                  d       | j                  d       y Nr  writabler   rK   rr   ro   r   r   s    r   rK   zTestFileTypeW.setUp  (    !!*-!!*-r   r   rg   rp  r  )r   r   r  r(   Nr  r  r  rC  r  r  r   r   r    r!   rK   rt   r+   r  r   r   r{   r  	eq_stdoutr   r"   r#   s   @r   r  r    s    B. 	D(x((-.F***3/0 &H	Te-.	R$U:%678	rE%LuU|<=	rE%LuU|<=	2		23Ir   r  c                        e Zd ZdZ fdZ ed ej                  d             ed ej                  d            gZg dZ	d e
 ed	       ed
            fd e
ee      fgZ xZS )TestFileTypeXzATest the FileType option/argument type for writing new files onlyc                 f    t         |           | j                  d       | j                  d       y r  r  r  s    r   rK   zTestFileTypeX.setUp.  r  r   r   r   rp  r  )r   r   r  r  r  r(   rC  r  r  r  r#   s   @r   r  r  *  sy    K. 	D(x((-.F***3/0 2H	rE%LuU|<=	2		23Ir   r  c            	          e Zd ZdZ ed ej                  d             ed ej                  d            gZddgZd e	d e
d      	      fd
 e	 e
d       e
d      	      fd e	 e
d       e
d      	      fd e	ee	      fgZy)TestFileTypeWBz?Test the FileType option/argument type for writing binary filesr   r  rp  r  r   r(   Nr  r  rC  r  r  )r   r   r    r!   rt   r+   r  r   r   r{   r  
eq_bstdoutr   rA   r   r   r  r  >  s    I 	D(x((./F***401 bzH	Te-.	rE%LuU|<=	rE%LuU|<=	2
45	Ir   r  c                       e Zd ZdZ ed ej                  d             ed ej                  d            gZd e e	d       e	d      	      fd
 ee
e
	      fgZy)TestFileTypeXBzHTest the FileType option/argument type for writing new binary files onlyr   xbrp  r  r  r(   rC  r  r  N)r   r   r    r!   rt   r+   r  r   r{   r  r  r   rA   r   r   r   r   O  sn    N 	D(x((./F***401
 
rE%LuU|<=	2
45Ir   r   c                       e Zd ZdZd Zy)TestFileTypeOpenArgsz0Test that open (the builtin) is correctly calledc           
      2   t         j                  } |d      df |dd      df |dd      df |d	d
      df |dddd      dfg}t        j                  d      5 }|D ]   \  }} |d        |j                  dg|  " 	 d d d        y # 1 sw Y   y xY w)Nr  )r  NNrg   rt  )rg   rt  NNr  r  )rg   r  Nr  r  r  rh   )r  r  r  Nr   l1strict)rg   r   r  r  zbuiltins.openr(   )r+   r  r   r/   assert_called_with)r   FTcasesmr   rv   s         r   test_open_argsz#TestFileTypeOpenArgs.test_open_args`  s    X-.QZ-.I&(BCv&(@AQh')AB
 ZZ( 	3A# 3
dU$$$U2T23	3 	3 	3s   &BBN)r   r   r    r!   r  rA   r   r   r  r  ]  s
    :3r   r  c                       e Zd ZdZd Zy)!TestFileTypeMissingInitializationzx
    Test that add_argument throws an error if FileType class
    object was passed instead of instance of FileType
    c                 .   t        j                         }| j                  t              5 }|j	                  dt         j
                         d d d        | j                  t         j
                  dt        j                               y # 1 sw Y   @xY w)Nr   rp  z: is a FileType class object, instance of it must be passed)	r+   r,   r   
ValueErrorr   r  r   r   r  r  s      r   testz&TestFileTypeMissingInitialization.testu  sx    ((*z* 	>b8+<+<=	> 	  #	
	> 	>s   "BBNr   r   r    r!   r  rA   r   r   r  r  o  s    
	
r   r  c                       e Zd ZdZ ede       ede      gZg dZd e	dd	      fd
 e	dd	      fd e	dd	      fgZ
y)TestTypeCallablez,Test some callables as option/argument typesz--eggsrp  r  )r   42jz--eggs az	--eggs 2iz--eggs=42 42r  g      E@)eggsr  z--eggs 2j -- -1.5y               @      z1024.675Ng3333@)r   r   r    r!   rt   complexrs  r   r   r{   r   rA   r   r   r  r    s^    6 	H7#F 5H	$/0	bbt45	RT12Ir   r  c                       e Zd ZdZ G d de      Z ede       ede      gZg Zd e	 ed       ed	      
      fd e	 ed       ed      
      fgZ
y)TestTypeUserDefinedz(Test a user-defined option/argument typec                       e Zd Zd Zd Zy)TestTypeUserDefined.MyTypec                     || _         y rO   valuer   r  s     r   r   z#TestTypeUserDefined.MyType.__init__  	    DJr   c                 `    t        |       | j                  ft        |      |j                  fk(  S rO   r   r  r   s     r   r   z!TestTypeUserDefined.MyType.__eq__  '    J

+UU[[/IIIr   Nr  rA   r   r   MyTyper        		Jr   r%  r   rp  r  r|  r~  r   r  -xf gr  rg  N)r   r   r    r!   rC   r%  rt   r   r   r{   r   rA   r   r   r  r    sm    2J J 	DvF  H	2s&+67	"vc{56Ir   r  c                       e Zd ZdZ G d d      Z ede       ede      gZg Zd e ed       ed	      
      fd e ed       ed      
      fgZ	y)TestTypeClassicClasszTest a classic class typec                       e Zd Zd Zd Zy)TestTypeClassicClass.Cc                     || _         y rO   r  r   s     r   r   zTestTypeClassicClass.C.__init__  r!  r   c                 `    t        |       | j                  ft        |      |j                  fk(  S rO   r#  r   s     r   r   zTestTypeClassicClass.C.__eq__  r$  r   Nr  rA   r   r   Cr+    r&  r   r.  r   rp  r  r|  r~  r   r  r'  r  rg  N)
r   r   r    r!   r.  rt   r   r   r{   r   rA   r   r   r)  r)    sk    #J J 	DqF H	2#QsV,-	"qvAcF+,Ir   r)  c                       e Zd ZdZd Zy)TestTypeRegistrationz*Test a user-defined type by registering itc                    d }t        j                         }|j                  dd|       |j                  dd       |j                  dd       | j	                  |j                  dj                               t        d d	             | j	                  |j                  d
j                               t        dd	             y )Nc                     d| z  S )Nzmy_type{%s}rA   strings    r   get_my_typez.TestTypeRegistration.test.<locals>.get_my_type  s     6))r   r   my_typer   rp  r[  r  z
my_type{1}ro  z-x 1 42zmy_type{42})r+   r,   registerr   r   r;   r   r{   )r   r5  r2   s      r   r  zTestTypeRegistration.test  s    	* ((*	;7Dy1Ci0**399;7dl3	5**9??+<=lm<	>r   Nr  rA   r   r   r0  r0    s
    4>r   r0  c                       e Zd ZdZ G d dej
                        Z G d dej
                        Z eddee	d	       ed
ee
dd      gZg Zd edd      fd edd      fd edd      fd edd      fgZy)TestActionUserDefinedz*Test a user-defined option/argument actionc                       e Zd ZddZy)$TestActionUserDefined.OptionalActionNc                 L   	 | j                   dk(  sJ d| j                   z         |dk(  s
J d|z         t        d      }|dv rd|_        n|d	v rd
|_        nt        d|z        ||k(  sJ d|d|       	 t        |d|       y # t        $ r}t	        d|z        d }~ww xY w)Nr  dest: %s-szflag: %s      ?rO  )      ?rC  r  )       @r  	value: %s	expected , got zopt_action failed: %s)r'  r{   r3  AssertionErrorr   r   r   r2   	namespacer  option_stringr   r   s          r   __call__z-TestActionUserDefined.OptionalAction.__call__  s    GyyF*BJ,BB*$,Hj=.HH, !dmN*)*K&e^)+K&(u)<=="i/ L3>	3K L/ Ivu- " G)*AA*EFFGs   A6B 	B#BB#rO   r   r   r    rI  rA   r   r   OptionalActionr;    s    	.r   rK  c                       e Zd ZddZy)&TestActionUserDefined.PositionalActionNc                 ^   	 |
J d|z         | j                   dk(  sJ d| j                   z         t        d      }|dv rd|_        n&|dv rd	|_        n|d
v rd|_        nt        d|z        ||k(  sJ d|d|       	 t        |d|       y # t        $ r}t	        d|z        d }~ww xY w)Nzoption_string: %sr3  r=  r  r3  )r  r  r?  )rt  rC  )r  r@  rB  rC  rD  zarg_action failed: %s)r'  r{   r  rE  r   r   rF  s          r   rI  z/TestActionUserDefined.PositionalAction.__call__  s    G$, >/B/<0= >, yyH,Dj499.DD, !lH$'+K$c\',K$c\',K$(u)<=="i/ L3>	3K L/ Ix/ " G)*AA*EFFGs   A?B 	B,B''B,rO   rJ  rA   r   r   PositionalActionrM    s    	0r   rP  r>  r  r?  )r'  r   r   rn  r3  r  r  )r   r   rv  rn  z-s0.125r@  )r  r3  r  r  z
-s 0.625 1rC  rt  z84 -s2rA  r  N)r   r   r    r!   r+   ActionrK  rP  rt   rs  r  r   r   r{   r   rA   r   r   r9  r9    s    4. .,08?? 04 	Dvn	&H-C	, H	BE!,-	rtB'(	ruQ/0	23r*+	Ir   r9  c                   @    e Zd ZdZ G d dej
                        Zd Zy)TestActionRegistrationz5Test a user-defined action supplied by registering itc                       e Zd ZddZy)TestActionRegistration.MyActionNc                 8    t        || j                  d|z         y )Nzfoo[%s])r   r'  )r   r2   rG  valuesrH  s        r   rI  z(TestActionRegistration.MyAction.__call__  s    Ityy)f*<=r   rO   rJ  rA   r   r   MyActionrU    s    	>r   rX  c                 <   t        j                         }|j                  dd| j                         |j	                  dd       | j                  |j                  dg      t        d             | j                  |j                  dg      t        d	             y )
Nr   	my_actionr3  r   r  zfoo[1]rO  r  zfoo[42])r+   r,   r7  rX  r   r   r;   r{   r1   s     r   r  zTestActionRegistration.test  s{    ((*+t}}=H[9**C512X3FG**D62Bi4HIr   N)r   r   r    r!   r+   rQ  rX  r  rA   r   r   rS  rS    s    ?>8?? >
Jr   rS  c                   F    e Zd Z eddde      gZdZd eg d      fgZy	)
TestActionExtendr   extendr  )r   rv  r   rA   z--foo f1 --foo f2 f3 f4)f1f2f3f4r  N)	r   r   r    rt   r   r   r   r{   r   rA   r   r   r\  r\  &  s4    GHCc: H	"B+C$DEIr   r\  c                        e Zd ZdZd Z	 	 ddZ fdZd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZ S )TestAddSubparserszTest the add_subparsers methodc                 8     | j                   t        g|i | y rO   r   r   rx   s      r   assertArgumentParserErrorz+TestAddSubparsers.assertArgumentParserError6      -???r   c                 T   |r,t        dd|      }|j                  |d   dz  dz   dd	       n!t        dd
      }|j                  ddd	       |j                  dt        d       ddi}|rd|d<   d|d<   nd|d<    |j                  d4i |}| j	                  |j                         t        d      }|rd|d<   |rddg|d<    |j                  d5i |}|j                  dt        d       |j                  dd d!"       t        d#      }	|rd$|	d<    |j                  d6i |	}
|
j                  d%d&d'"       |
j                  d(t        d)d*+       t        d,      }|rd-|d<    |j                  d7i |}|j                  d.t        d/       |j                  d0d1d23       |S )8NPROGmain description)progdescriptionrI  r   r  r(   r   foo helpr   helprk  rl  r   rC  bar helpr   ro  r  FCOMMANDr  commandstitlecommand helpro  z1 descriptionrl  z1 help1alias11alias2aliasesrY  zw helpr   r  x helpr  ro  z2 descriptionz2 helpr
  123y helpr  r  zz help)r   rv  ro  z3 descriptionz3 helptzt helpuri  zu helprv  ro  rA   r  )r  )r  )	r   r   rs  add_subparsersrf  dict
add_parserr  r  )r   subparser_helprI  rz  r2   subparsers_kwargs
subparsersparser1_kwargsparser1parser2_kwargsparser2parser3_kwargsparser3s                r   r   zTestAddSubparsers._get_parser9  s    /);,XFQ!#e+Lz   S 0);=F:   ?J 	 	0 (/+4i()3g&(6f%*V**?->?
&&v'<'<= /:%-N6")2I(>N9%'*''>~>T(;S%h? /:%-N6"'*''>~>T5x@SwcI /:%-N6"'*''>~>Ss:SH= r   c                 z    t         |           | j                         | _        | j                  d      | _        y )NT)r  )r   rK   r   r2   command_help_parserr  s    r   rK   zTestAddSubparsers.setUpp  s2    &&(#'#3#34#3#H r   c                 ~    dD ]8  }|j                         }| j                  | j                  j                  |       : y )N)r   r   za az0.5 az0.5 1z0.5 1 -yz0.5 2 -w)r   rf  r2   r;   )r   r   rv   s      r   test_parse_args_failuresz*TestAddSubparsers.test_parse_args_failuresu  s;    1 	IH>>#D**4;;+A+A4H	Ir   c           
      <   | j                  | j                  j                  dj                               t	        dddd             | j                  | j                  j                  dj                               t	        dd	d
ddg             | j                  | j                  j                  dj                               t	        ddd d             | j                  | j                  j                  dj                               t	        dddg d             y )N0.5 1 b -w 7Frr     r~  r(   rC  rg   r   z0.25 --foo 2 -y 2 3j -- -1jTr?  r  y              @y             )r(   rC  r[  r  z--foo 0.125 1 cr@  r  z-1.5 3 11 -- a --foo 7 -- br     )r   r   r  --r~  )r(   rC  r  r  )r   r2   r;   r   r{   r   s    r   test_parse_argsz!TestAddSubparsers.test_parse_args|  s    KK"">#7#7#9:5cQ#.	
 	KK""#@#F#F#HI4TSRI6	
 	KK""#4#:#:#<=4Udc2	
 	KK""#@#F#F#HI5db,JK	
r   c           	         | j                  | j                  j                  dj                               t	        dddd      g f       | j                  | j                  j                  dj                               t	        dddd      dgf       | j                  | j                  j                  d	j                               t	        dddd      dgf       | j                  | j                  j                  d
j                               t	        dddd      ddgf       | j                  | j                  j                  dj                               t	        dddd      g df       y )Nr  Frr  r  r~  r  z0.5 -p 1 b -w 7-pz0.5 1 b -w 7 -pz0.5 1 b -q -rs -w 7z-qz-rsz0.5 -W 1 b -X Y -w 7 Z)z-Wz-Xrm  rj  )r   r2   parse_known_argsr   r{   r   s    r   test_parse_known_argsz'TestAddSubparsers.test_parse_known_args  sC   KK(()=)=)?@Esa3/4	
 	KK(():)@)@)BCEsa3/$8	
 	KK(():)@)@)BCEsa3/$8	
 	KK(()>)D)D)FGEsa3/$?	
 	KK(()A)G)G)IJEsa3/1GH	
r   c                    t               }|j                  dddd       |j                  dddd       | j                  |j                  ddg      t	        d	d
      dgf       | j                  |j                  ddg      t	        d	d
      dgf       | j                  |j                  dg      t	        d	d
      dgf       | j                  |j                  dg       | j                  |j                  dg      t	        dd
      dgf       | j                  |j                  dg      t	        dd
      dgf       | j                  |j                  dg      t	        d	d
      dgf       | j                  |j                  dg       | j                  |j                  dg      t	        d	d
      dgf       | j                  |j                  dg      t	        d	d	
      dgf       | j                  |j                  dg       | j                  |j                  dg       | j                  |j                  dg       | j                  |j                  dg      t	        d	d	
      dgf       y )Nz-kz--knownr  r   r  r`  z--newz-urt  )knownnewz-kuz-k=uz-ukz-u=kz	-kunknownz-unknownz
-k=unknownz
-ku=nknownz	-u=nknownz-knewz-ewz-kn=ewz-k-newz-kn-ewz-kne-wz-e-w)r   r   r   r  r{   rf  r1   s     r   -test_parse_known_args_with_single_dash_optionz?TestAddSubparsers.test_parse_known_args_with_single_dash_option  sR   +-D)GQGD''1E00$>1!,tf5	700$>1!,tf5	700%91!,tf5	7&&v'>'>I00%91!,ug6	800&:1!,vh7	900+?1!,zl;	=&&v'>'>O00,@1!,{m<	>00';1!,ug6	8&&v'>'>
K&&v'>'>
K&&v'>'>
K00(<1!,vh7	9r   c                    t               }|j                  dd       |j                  d      }|j                  d      }|j                  d       | j	                  t        ddd	
      |j                  dj                                      y )Nr   r   r   rC  r&  r  rD  Fr  r>  r  )r   r   r  r  r   r{   r;   r   )r   r2   r  r  s       r   	test_destzTestAddSubparsers.test_dest  s{    +-GL9***6
'',U#3C8**5;;=9	;r   c                     |j                  dg      }| j                  |j                  d       | j                  |j                   d       y )NrunrA   )r;   r   commandrf  )r   r2   rets      r   _test_required_subparsersz+TestAddSubparsers._test_required_subparsers  s@    (e, 	&&v'8'8"=r   c                     t               }|j                  d      }d|_        |j                  d       | j	                  |       y )Nr  r&  Tr  )r   r  r  r  r  r   r2   r  s      r   &test_required_subparsers_via_attributez8TestAddSubparsers.test_required_subparsers_via_attribute  sA    +-**	*:
"
e$&&v.r   c                     t               }|j                  dd      }|j                  d       | j                  |       y )Nr  Tr'  r  r  )r   r  r  r  r  s      r   "test_required_subparsers_via_kwargz4TestAddSubparsers.test_required_subparsers_via_kwarg  s;    +-**	D*I
e$&&v.r   c                     t               }|j                  d      }|j                  d       |j                  d      }| j	                  |j
                         y )Nr  r&  r  rA   r   r  r  r;   assertIsNoner  r   r2   r  r  s       r    test_required_subparsers_defaultz2TestAddSubparsers.test_required_subparsers_default  sM    +-**	*:
e$##++&r   c                 B   t               }|j                  d      }|j                  d       |j                  d       | j                  t              5 }|j                  d       d d d        | j                  j                  j                  d       y # 1 sw Y   0xY w)NTr  r(   rC  rA   z8error: the following arguments are required: {foo,bar}
$	r   r  r  r   r   r;   r>   r  r   r   r2   r  excinfos       r   -test_required_subparsers_no_destination_errorz?TestAddSubparsers.test_required_subparsers_no_destination_error  s    +-**D*9
e$e$23 	"wb!	"$$G	
	" 	"   BBc                 B   t               }|j                  d      }|j                  d       |j                  d       | j                  t              5 }|j                  d       d d d        | j                  j                  j                  d       y # 1 sw Y   0xY w)NTr  r(   rC  r  zPerror: argument {foo,bar}: invalid choice: 'baz' \(choose from 'foo', 'bar'\)\n$r  r  s       r   3test_wrong_argument_subparsers_no_destination_errorzETestAddSubparsers.test_wrong_argument_subparsers_no_destination_error  s    +-**D*9
e$e$23 	(wh'	($$_	
	( 	(r  c                     t               }|j                  dd      }|j                  d       |j                  d      }| j	                  |j
                         y )Nr  Fr  r  rA   r  r  s       r   test_optional_subparsersz*TestAddSubparsers.test_optional_subparsers  sO    +-**	E*J
e$##++&r   c                     | j                  | j                  j                         d       | j                  | j                  j                         t	        j
                  d             y )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   r2   format_usageformat_helptextwrapdedentr   s    r   	test_helpzTestAddSubparsers.test_help	  sQ    113E	G002HOO E 5 	r   c                     | j                  d      }| j                  |j                         d       | j                  |j                         t	        j
                  d             y )Nz+:-rb  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  r1   s     r   test_help_extra_prefix_charsz.TestAddSubparsers.test_help_extra_prefix_chars	  s\    !!u!5,,.E	G++-x @ 0 	r   c                     t        dd      }|j                  ddd       | j                  |j                         t	        j
                  d             y )	Nri  rj  rp  z--non-breakingr  uR   help message containing non-breaking spaces shall not wrap at non-breaking spacesrn  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
        r   r   r   r  r  r  r1   s     r   test_help_non_breaking_spacesz/TestAddSubparsers.test_help_non_breaking_spaces+	  s[    +%79]; 	 	< 	++-x 	@ 	0 		r   c                 R   t        dd      }|j                  dd       | j                  |j                         t	        j
                  d             t        dd      }|j                  dg d	       | j                  |j                         t	        j
                  d
             y )Nri  rj  rp  r(   z    ro  z            usage: PROG [-h] foo

            main description

            positional arguments:
              foo         

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

            main description

            positional arguments:
              {}          

            options:
              -h, --help  show this help message and exit
        r  r1   s     r   test_help_blankz!TestAddSubparsers.test_help_blank=	  s    +%79 	 	 	++-x 	@ 	0 		 ,%792 	 	  	++-x 	@ 	0 		r   c                     | j                  d      }| j                  |j                         d       | j                  |j                         t	        j
                  d             y )NrG  rb  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  r1   s     r    test_help_alternate_prefix_charsz2TestAddSubparsers.test_help_alternate_prefix_chars_	  s\    !!u!5,,.E	G++-x @ 0 	r   c                     | j                  | j                  j                         d       | j                  | j                  j                         t	        j
                  d             y )Nr  a              usage: PROG [-h] [--foo] bar {1,2,3} ...

            main description

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

            options:
              -h, --help  show this help message and exit
              --foo       foo help
            )r   r  r  r  r  r  r   s    r   test_parser_command_helpz*TestAddSubparsers.test_parser_command_helpq	  sU    11>>@E	G11==?! * 	r   c                 ~   t        dd      }|j                  ddd       |j                  dd	
       |j                  ddd      }|j                  d      }|j                  d      }| j	                  |j                         d       | j	                  |j                         t        j                  d             y )Nri  rj  rp  r   r   rm  rn  rC  rq  r  subcommandsrv  zadditional text)ru  rl  ro  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
            )	r   r   r  r  r   r  r  r  r  )r   r2   r  r  r  s        r   test_subparser_title_helpz+TestAddSubparsers.test_subparser_title_help	  s    +8JLGLzJE
3**7E0A + C
 '','',,,.C	E++-x @ 0 	r   c                     | j                  t              5 }| j                  j                  |j	                                d d d        | j                  |j                  j                         y # 1 sw Y   0xY wrO   )r   r   r2   r;   r   r   r  r   )r   r   expected_helpr  s       r   _test_subparser_helpz&TestAddSubparsers._test_subparser_help	  s[    23 	5rKK""8>>#34	5(;(;<	5 	5s   *A//A8c                 N    | j                  dt        j                  d             y )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   s    r   test_subparser1_helpz&TestAddSubparsers.test_subparser1_help	  "    !!*hoo ? / 	r   c                 N    | j                  dt        j                  d             y )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   s    r   test_subparser2_helpz&TestAddSubparsers.test_subparser2_help	  r  r   c           	          | j                  d      }| j                  |j                  dj                               t	        ddd d      g f       | j                  |j                  dj                               t	        ddd d      g f       y )	NTrz  z0.5 1alias1 bFrr  r~  r  z0.5 1alias2 b)r   r   r  r   r{   r1   s     r   test_alias_invocationz'TestAddSubparsers.test_alias_invocation	  s    !!$!/##O$9$9$;<Esdc2B7	
 	##O$9$9$;<Esdc2B7	
r   c                 |    | j                  d      }| j                  |j                  dj                                y )NTr  z0.5 1alias3 b)r   rf  r;   r   r1   s     r   test_error_alias_invocationz-TestAddSubparsers.test_error_alias_invocation	  s8    !!$!/&&v'8'8'6'<'<'>	@r   c                     | j                  dd      }d | _        | j                  |j                         t	        j
                  d             y )NT)rz  r  a	              usage: PROG [-h] [--foo] bar COMMAND ...

            main description

            positional arguments:
              bar                   bar help

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

            commands:
              COMMAND
                1 (1alias1, 1alias2)
                                    1 help
                2                   2 help
                3                   3 help
            )r   maxDiffr   r  r  r  r1   s     r   test_alias_helpz!TestAddSubparsers.test_alias_help	  sH    !!$t!D++-x @ 0 	r   )FNF)!r   r   r    r!   rf  r   rK   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"   r#   s   @r   rc  rc  3  s    (@ >B!5nI
I
&
,98;>//'



'"&$ D$*<=
	
@
r   rc  c                   "    e Zd ZdZd Zd Zd Zy)TestPositionalsGroupsz@Tests that order of group positionals matches construction orderc                    t               }|j                  d       |j                  d      }|j                  d       |j                  d       t        ddd      }|j	                  d	j                               }| j                  ||       y )
Nr(   rg  rC  rD  r  r  r  r>  1 2 3)r   r   r   r{   r;   r   r   r   r2   r   expectedr   s        r   test_nongroup_firstz)TestPositionalsGroups.test_nongroup_first	  sx    +-E"))#.5!E"#3C0""7==?36*r   c                    t               }|j                  d      }|j                  d       |j                  d       |j                  d       t        ddd      }|j	                  d	j                               }| j                  ||       y )
Nxxxr(   rC  rD  r  r  r  r>  r  r   r   r   r{   r;   r   r   r  s        r   test_group_firstz&TestPositionalsGroups.test_group_first	  sx    +-))%05!E"E"#3C0""7==?36*r   c                 d   t               }|j                  d      }|j                  d       |j                  d       |j                  d       |j                  d      }|j                  d       t        ddd	d
      }|j	                  dj                               }| j                  ||       y )Nr  r(   rC  rD  r  frellr  r  r  rT  )r(   rC  rD  r  z1 2 3 4r  r  s        r   test_interleaved_groupsz-TestPositionalsGroups.test_interleaved_groups
  s    +-))%0E"5!E"))%07##3Cs;""9??#456*r   N)r   r   r    r!   r  r  r  rA   r   r   r  r  	  s    J++
+r   r  c                   v     e Zd ZdZd Z fdZd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Z xZS )TestParentParsersz5Tests that parsers can be created with parent parsersc                 8     | j                   t        g|i | y rO   re  rx   s      r   rf  z+TestParentParsers.assertArgumentParserError
  rg  r   c                    t         |           t        d      | _        | j                  j	                  d       | j                  j                  d      }|j	                  d       | j                  j	                  d       t        d      | _        | j                  j	                  d       | j                  j	                  d       | j                  j                  d	      }|j	                  d
       t        d      | _        | j                  j	                  d       t        d      | _        | j                  j	                  d       t        d      | _	        | j                  j                         }|j	                  dd       |j	                  dd       t        j                  j                  t        j                  d         | _        y )NFrJ  z--wr   r
  r  r   r  r  z--dr  r   r   r   )r   rK   r   wxyz_parentr   r   abcd_parentw_parentz_parentab_mutex_parentadd_mutually_exclusive_grouprS   r[   basenamer   r   main_program)r   x_groupc_groupr   r   s       r   rK   zTestParentParsers.setUp
  sb   5uE%%e,""55c:T"%%c*5uE%%c*%%d+""55c:U#2EB""5)2EB""3'  :5I$$AAC4545GG,,SXXa[9r   c                     t        | j                  g      }| j                  |j                  dj	                               t        ddd             y )Nparentsz-y 1 2 --w 3r  r  r  rg   r[  r  )r   r  r   r;   r   r{   r1   s     r   test_single_parentz$TestParentParsers.test_single_parent9
  sE    +T5E5E4FG**>+?+?+ABcSC0	2r   c                     | j                  | j                  j                         t        | j                  g      }| j                  |j                         y Nr  )_test_mutex_abr  r;   r   r1   s     r   test_single_parent_mutexz*TestParentParsers.test_single_parent_mutex>
  sC    D00;;<+T5I5I4JKF--.r   c                     | j                   g}t        d|      }t        |g      }| j                  |j                         y )NF)rJ  r  r  )r  r   r  r;   r   r  r2   s      r   test_single_granparent_mutexz.TestParentParsers.test_single_granparent_mutexC
  s<    ''(+UGL+VH=F--.r   c                    | j                   |g       t        dd             | j                   |dg      t        dd             | j                   |dg      t        dd             | j                  |ddg       | j                  |ddg       | j                  |dg       | j                  |ddg       | j                  |ddg       y )NFr   r~  r  Tr  r  )r   r{   rf  )r   r;   s     r   r  z TestParentParsers._test_mutex_abI
  s    Beu)=>TF+R$%-@ATF+R%4-@A&&zD$<@&&zD$<@&&zD6:&&zD$<@&&zD$<@r   c                     | j                   | j                  g}t        |      }| j                  |j	                  dj                               t        dd ddd d             y )Nr  z--d 1 --w 2 3 4r  r  r  rT  )r   r~  r  rg   r[  r  )r  r  r   r   r;   r   r{   r  s      r   test_multiple_parentsz'TestParentParsers.test_multiple_parentsS
  sZ    ##T%5%56+G<**+<+B+B+DEcTSC43G	Ir   c           
      n   | j                   | j                  g}t        |      }| j                  |j	                  dj                               t        dddd d             | j                  |j                  dj                                | j                  |j                  d	j                                y )
Nr  z
-a --w 2 3TFr  r  )r   r~  rg   r[  r  z-a --w 2 3 -bz-a -b --w 2 3)r  r  r   r   r;   r   r{   rf  r  s      r   test_multiple_parents_mutexz-TestParentParsers.test_multiple_parents_mutexY
  s    '')9)9:+G<**<+=+=+?@desdcB	D&&446	8&&446	8r   c                     | j                  t        j                  t        j                  | j                  | j
                  g       y r
  )r   r+   ArgumentErrorr,   r  r  r   s    r   test_conflicting_parentsz*TestParentParsers.test_conflicting_parentsc
  s9    ""##]]D$4$45 	 	7r   c                     | j                  t        j                  t        j                  | j                  | j
                  g       y r
  )r   r+   r  r,   r  r  r   s    r   test_conflicting_parents_mutexz0TestParentParsers.test_conflicting_parents_mutexi
  s;    ""##%%t';';< 	 	>r   c                     | j                   | j                  g}t        |      }| j                  |j	                  dj                               t        d d d             y )Nr  r  r  r  )r  r  r   r   r;   r   r{   r  s      r   test_same_argument_name_parentsz1TestParentParsers.test_same_argument_name_parentso
  sM    ##T]]3+G<**5;;=9ddc2	4r   c           	         t               }|j                         }|j                  d| j                  g      }|j	                  d       | j                  |j                  dj                               t        dddd	             y )
NrC  r  r   zbar -b 1 --d 2 3 4r  r  r  rT  )r   r~  r  r   )	r   r  r  r  r   r   r;   r   r{   )r   r2   r  abcde_parsers       r   test_subparser_parentsz(TestParentParsers.test_subparser_parentsu
  sw    +-**,
!,,UT=M=M<N,O!!#&**+?+E+E+GHcSC37	9r   c                    t               }|j                         }| j                  g}|j                  d|      }|j	                  d      }|j                  d       | j                  | j                  g}|j                  d|      }|j                  d       | j                  |j                  dj                               t        dd	d
             | j                  |j                  dj                               t        d	ddd dd
             | j                  |j                  dj                                | j                  |j                  dj                                y )Nr(   r  r  r  rC  r   zfoo -a 4TFrT  r}  zbar -b  --w 2 3 4r  r  )r   r~  rg   r[  r  r   zfoo -a -b 4zbar -b -a 4)r   r  r  r  r   r   r  r   r;   r   r{   rf  )r   r2   r  r  
abc_parserr  wxyzabe_parsers          r   test_subparser_parents_mutexz.TestParentParsers.test_subparser_parents_mutex}
  s>   +-**,
''(**5'*B
//	:S!##T%9%9:#..ug.F##C(**:+;+;+=>des3	5**+>+D+D+FGetsdcSI	K&&}224	6&&}224	6r   c           	          | j                   | j                  g}t        |      }|j                         }| j                  }| j                  |t        j                  dj                  ||rdnd                   y )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  r   r  r  r   r  r  format)r   r  r2   parser_helpprognames        r   test_parent_helpz"TestParentParsers.test_parent_help
  sm    ##T%5%56+G<((*$$hoo 7" F8HS"6#'8 	9r   c           	         t        d      }|j                  dd      }|j                  d       |j                  d       |j                         }|j                  d       |j                  d	       t        |g
      }| j	                  t
        |j                  g d       |j                         }| j                  }| j                  |t        j                  dj                  ||rdnd                   y )NFr  rg  gdru  rl  rY  r   r
  r  r  )r
  rm  r  rj  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   )r   r   r   r  r   r   r;   r  r  r   r  r  r&  )r   parentrg  r  r2   r'  r(  s          r   test_groups_parentsz%TestParentParsers.test_groups_parents
  s    +U;%%CT%B	t	t//1	t	t+VH=-v/@/@"	$ ((*$$hoo 7 F8HS"6'8 	9r   )r   r   r    r!   rf  rK   r  r  r  r  r  r  r  r  r  r  r#  r)  r.  r"   r#   s   @r   r  r  
  sT    ?@:82
/
/AI87>496&909r   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy) TestMutuallyExclusiveGroupErrorsc                 b    t               }| j                  } |t        |j                  d       y )Nr(   )ru  )r   r   r   r  )r   r2   raisess      r   test_invalid_add_argument_groupz@TestMutuallyExclusiveGroupErrors.test_invalid_add_argument_group
  s'    +-""y&==UKr   c                     t               }|j                         }|j                  }| j                  } |t        |dd        |t        |d        |t        |dd        |t        |dd        |t        |dt
        j                         y )Nr   Tr  rC  r  ru  rt  )r   r  r   r   r  r+   PARSER)r   r2   r   r   r2  s        r   test_invalid_add_argumentz:TestMutuallyExclusiveGroupErrors.test_invalid_add_argument
  sv    +-335))""z<4@z</z<c:z<a8z<hooFr   c                 ^   t        d      }|j                         }|j                  dd       |j                  dd       |j                         }|j                  dd       |j                  d	d       d
}| j                  |j	                         t        j                  |             y )Nri  rk  r   r   r   r.  r  z--soupz--nutsz            usage: PROG [-h] [--foo | --bar] [--soup | --nuts]

            options:
              -h, --help  show this help message and exit
              --foo
              --bar
              --soup
              --nuts
              )r   r  r   r   r  r  r  )r   r2   group1group2r  s        r   r  z*TestMutuallyExclusiveGroupErrors.test_help
  s    +8446GL9GM:446H\:H];	 	++-xx/HIr   c           	         d | _         t        d      }|j                  dd      }|j                  d      }|j	                         }|j                  ddt        j                  	       |j                  d
dt        j                  	       d}d}|j                  |       d| d| d| d| d	}| j                  |j                         t        j                  |             y )Nri  r8  rt  r  )ru  r'  r(   r_  r   rn  z--quietz--longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglongڀLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGz>            usage: PROG foo [-h]
                            [r%  zj]

            options:
              -h, --help            show this help message and exit
              z
              )r  r   r  r  r  r   r+   rw  r   r  r  r  )r   r2   rt  cmd_foor   longoptlongmetar  s           r   Ctest_help_subparser_all_mutually_exclusive_group_members_suppressedzdTestMutuallyExclusiveGroupErrors.test_help_subparser_all_mutually_exclusive_group_members_suppressed
  s    +8((z	(J%%e,446;|(BSBST9\@Q@QR"W%%Yaz 2 iq
 # 	,,.0IJr   c                     t        j                         }|j                         }| j                  t              5  |j                  dg       d d d        y # 1 sw Y   y xY w)Nr5   )r+   r,   r  r   r  r;   r   r2   r   s      r   test_empty_groupz1TestMutuallyExclusiveGroupErrors.test_empty_group  sQ    ((*335z* 	&tf%	& 	& 	&s   AAN)r   r   r    r3  r6  r  r@  rC  rA   r   r   r0  r0  
  s    L
	GJ(K*&r   r0  c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
MEMixinc                     | j                  d      j                  }t        }| j                  D ]#  }| j	                  |||j                                % y NFr  
get_parserr;   r   r   r   r   r   r;   r   args_strings       r   test_failures_when_not_requiredz'MEMixin.test_failures_when_not_required  sM    __e_4??
#== 	FKeZ1B1B1DE	Fr   c                     | j                  d      j                  }t        }| j                  dgz   D ]#  }| j	                  |||j                                % y )NTr  r   rH  rJ  s       r   test_failures_when_requiredz#MEMixin.test_failures_when_required  sT    __d_3>>
#==B4/ 	FKeZ1B1B1DE	Fr   c                     | j                  d      j                  }| j                  | j                  z   }|D ]-  \  }} ||j	                               }| j                  ||       / y rG  )rI  r;   r   successes_when_not_requiredr   r   )r   r;   r   rK  r   	actual_nss         r    test_successes_when_not_requiredz(MEMixin.test_successes_when_not_required  sc    __e_4??
NNT%E%EE	(1 	5$K";#4#4#67IY4	5r   c                     | j                  d      j                  }| j                  D ]-  \  }} ||j                               }| j	                  ||       / y NTr  )rI  r;   r   r   r   )r   r;   rK  r   rQ  s        r   test_successes_when_requiredz$MEMixin.test_successes_when_required!  sS    __d_3>>
(, 	5$K";#4#4#67IY4	5r   c                     | j                  d      j                  }| j                  }| j                   |       t	        j
                  |             y rG  )rI  r  usage_when_not_requiredr   r  r  r   r  expected_usages      r   test_usage_when_not_requiredz$MEMixin.test_usage_when_not_required'  s>    6CC55)HIr   c                     | j                  d      j                  }| j                  }| j                   |       t	        j
                  |             y rT  )rI  r  usage_when_requiredr   r  r  rX  s      r   test_usage_when_requiredz MEMixin.test_usage_when_required,  s>    5BB11)HIr   c                     | j                  d      j                  }| j                  | j                  z   }| j	                   |       t        j                  |             y rG  )rI  r  rW  ro  r   r  r  r   r  ro  s      r   test_help_when_not_requiredz#MEMixin.test_help_when_not_required1  sG    oouo5AA++dii7(=>r   c                     | j                  d      j                  }| j                  | j                  z   }| j	                   |       t        j                  |             y rT  )rI  r  r\  ro  r   r  r  r_  s      r   test_help_when_requiredzMEMixin.test_help_when_required6  sG    ooto4@@''$))3(=>r   N)r   r   r    rL  rN  rR  rU  rZ  r]  r`  rb  rA   r   r   rE  rE    s.    FF55J
J
?
?r   rE  c                       e Zd Zdd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gZd edd      fgZdZdZ	dZ
y)TestMutuallyExclusiveSimpleNc                     t        d      }|j                  |      }|j                  dd       |j                  ddd	d
       |S )Nri  r8  r  r.  rq  r  rd  r  rj  baz help)rv  r  ro  r   r  r   r   r  r2   r   s       r   rI  z&TestMutuallyExclusiveSimple.get_parser>  sN    +833X3F747#SzJr   --bar X --baz Yz--bar X --baz--bar Xr5  rC  rD  z--bar X --bar Zrj  --baz Yrm  rd  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
        rO   r   r   r    rI  r   r{   r   rP  rW  r\  ro  rA   r   r   rd  rd  <  s     "?3H	B3D)*	B3D12	B4S)*	"3'(	I 
RDd#$#Dr   rd  c            
           e Zd ZddZ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 edddd      fgZdZdZ	dZ
y)TestMutuallyExclusiveLongNc                     t        d      }|j                  dd       |j                  dd       |j                  |      }|j                  d	d
       |j                  dd       |S )Nri  r8  z--abcdez
abcde helpr  z--fghijz
fghij helpr  z--klmnoz
klmno helpz--pqrstz
pqrst helpr   r   r  rh  s       r   rI  z$TestMutuallyExclusiveLong.get_parsera  sp    +8IL9IL933X3F9<89<8r   z--klmno X --pqrst Yz	--klmno Xr5  )abcdefghijklmnopqrstz--abcde Y --klmno Xrm  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
    rO   rm  rA   r   r   ro  ro  _  s     &&H	bt4s$GH	SCt<	>	bt4t3GH	TD<	>I 
Rd$d$?@#Dr   ro  c                       e Zd Zd ZdgZd edd      fd edd      fd	 ed
d      fgZd ed
d      fgZdZdZ	dZ
y
)$TestMutuallyExclusiveFirstSuppressedc                     t        d      }|j                  |      }|j                  dt        j                         |j                  ddd	       |S )
Nri  r8  r  r   r  r
  r  r~  rn  r   r  r   r+   rw  rh  s       r   rI  z/TestMutuallyExclusiveFirstSuppressed.get_parser  sR    +833X3F4h&7&784HEr   z-x X -yz-x Xr5  Tro  z	-x X -x Yrm  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
        rm  rA   r   r   rw  rw    st     {H	cT"#	b3$'(	rDE"#I 
R$$ #Dr   rw  c            	           e Zd Zd 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gZd eddd      fgZdxZZ	dZ
y)#TestMutuallyExclusiveManySuppressedc                     t        d      }|j                  |      }|j                  } |ddt        j                          |ddt        j                          |d	t        j                  
       |S )Nri  r8  r  --spamr   rn  r-  r  z	--bladderr  ry  )r   r  r2   r   r  s        r   rI  z.TestMutuallyExclusiveManySuppressed.get_parser  sc    +833X3F  H\0A0ABJ}83D3DEKh//0r   )z--spam --badgerz--badger --bladder Bz--bladder B --spamr}  TN)r  r3  bladderr-  Fz--bladder BrA  z--spam --spamr   z!        usage: PROG [-h]
        P
        options:
          -h, --help  show this help message and exit
        r   r   r    rI  r   r{   r   rP  r\  rW  ro  rA   r   r   r{  r{    s    H 
24d;<	RU5$?@	dC@A	"$tTBC	I 
RU467#5 1Dr   r{  c            
           e Zd Zd Zg dZd eddd      fd ed	d
d      fd ed	ddg      fd ed	dg d      fgZd ed	dd      fgZdZdZ	dZ
y)*TestMutuallyExclusiveOptionalAndPositionalc                     t        d      }|j                  |      }|j                  ddd       |j                  dd	
       |j                  dddd       |S )Nri  r8  r  r   r   FOOrn  r}  SPAMr  r3  r  r5  BADGERrv  rn  ro  rg  rh  s       r   rI  z5TestMutuallyExclusiveOptionalAndPositional.get_parser  sc    +833X3F7<eD8&183(Kr   )z--foo --spam Sz
--spam S XzX --foozX Y Z --spam Sz	--foo X Yr   TNr5  )r(   r  r3  z--spam SFSzX Y Z)r5  rm  rj  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
        rm  rA   r   r   r  r    s    H 
"D56	REC89	bUse45	"T/BC	I 
RES12#	Dr   r  c                   *   e Zd Zd Zg d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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gZdxZZ	dZ
y)#TestMutuallyExclusiveOptionalsMixedc                 
   t        d      }|j                  ddd       |j                  |      }|j                  ddd	       |j                  d
dd       |j                  ddd       |j                  ddd       |S )Nri  r8  r   r   r{  rn  r  r  a helpr  b helpr
  r~  r  c helprq  rh  s       r   rI  z.TestMutuallyExclusiveOptionalsMixed.get_parser  s    +8DHE33X3F48D48DDHE48Dr   )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  rA   r   r   r  r    s     7H	rDEUeu=>	rETUeu=>	rEUdeu=>	"tu?@	"u$?@	R%5DDDABI 
R%5EUe<=	rEUetu=>	rEUeu=>#5 1	Dr   r  c                   r    e Zd ZddZddgZd edd      fd edd	      fgZd
 edd      fgZdZdZ	dZ
y)TestMutuallyExclusiveInGroupNc                     t        d      }|j                  dd      }|j                  |      }|j                  dd	       |j                  d
d	       |S )Nri  r8  zTitled groupzGroup descriptionr,  r  r.  rq  r  rd  rf  )r   r   r  r   )r   r  r2   titled_groupmutex_groups        r   rI  z'TestMutuallyExclusiveInGroup.get_parser(  sk    +800 .A 1 C 55x5H 	  z :  z :r   ri  z--baz X --bar Yrj  r5  rk  rl  rm  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
        rO   rm  rA   r   r   r  r  &  si     "#45H	B3D)*	B4S)*I
 
RDd#$#
Dr   r  c                       e Zd Zd Zg d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gZd ed	dddd      fd ed	dddd
      fgZdxZZ	dZ
y	)1TestMutuallyExclusiveOptionalsAndPositionalsMixedc                    t        d      }|j                  dd       |j                  ddd	       |j                  |
      }|j                  ddd       |j                  ddd	       |j                  ddd	       |S )Nri  r8  r   r{  r  r
  r   r~  rn  r  r   r  r  r  r  r  r  r  rq  rh  s       r   rI  z<TestMutuallyExclusiveOptionalsAndPositionalsMixed.get_parserP  s    +8Ch/DHE33X3F3c948D48Dr   )zX A -br  z-c X AzX Arl  Fr5  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  rA   r   r   r  r  N  s     -H	SEUcU;<	ddese<=	detse<=	2u=>	B#>?I 
b45ESE:;	deut<=#
5 1Dr   r  c                   .    e Zd Zd ZdZdZdZdZdZdZ	dZ
y)TestMutuallyExclusiveNestedc                 b   t        d      }|j                  |      }|j                  d       |j                  d       t        j                         5  t        j
                  dt               |j                  |      }d d d        j                  d       |j                  d       t        j                         5  t        j
                  dt               |j                  |      }d d d        j                  d	       |j                  d
       |S # 1 sw Y   xY w# 1 sw Y   9xY w)Nri  r8  r  r  r  r  r  r  r  r  )r   r  r   warningscatch_warningssimplefilterr  )r   r  r2   r   r:  group3s         r   rI  z&TestMutuallyExclusiveNested.get_parser~  s   +833X3F4 4 $$& 	K!!(,>?777JF	K 	D!D!$$& 	L!!(,>?88(8KF	L 	D!D!	K 	K
	L 	Ls   -D -D%D"%D.zO        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    rI  rW  r\  ro  rL  rN  rR  rU  rA   r   r   r  r  w  s8    "
D '+#"&'+$#' r   r  c                         e Zd Zd fd	Z xZS )MEPBasec                 b    t         t        |   |      }t        |j                  d|g      }|S )Nr  F)rk  rJ  r  )r   r  rI  r   rk  )r   r  r-  r2   r   s       r   rI  zMEPBase.get_parser  s4    w0(0C+uvh@r   rO   )r   r   r    rI  r"   r#   s   @r   r  r    s     r   r  c                       e Zd Zy)&TestMutuallyExclusiveGroupErrorsParentNr   r   r    rA   r   r   r  r        r   r  c                       e Zd Zy)!TestMutuallyExclusiveSimpleParentNr  rA   r   r   r  r    r  r   r  c                       e Zd Zy)TestMutuallyExclusiveLongParentNr  rA   r   r   r  r    r  r   r  c                       e Zd Zy)*TestMutuallyExclusiveFirstSuppressedParentNr  rA   r   r   r  r    r  r   r  c                       e Zd Zy))TestMutuallyExclusiveManySuppressedParentNr  rA   r   r   r  r    r  r   r  c                       e Zd Zy)0TestMutuallyExclusiveOptionalAndPositionalParentNr  rA   r   r   r  r    r  r   r  c                       e Zd Zy))TestMutuallyExclusiveOptionalsMixedParentNr  rA   r   r   r  r    r  r   r  c                       e Zd Zy)7TestMutuallyExclusiveOptionalsAndPositionalsMixedParentNr  rA   r   r   r  r    r  r   r  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestSetDefaultsc           
      
   t               }|j                  d       |j                  dd       | j                  t        ddd      |j	                  g              | j                  t        ddd      |j	                  g t                            | j                  t        ddd      |j	                  g t        d                   | j                  t        ddd      |j	                  g t        dd	                   y )
Nr(   r   rC  rt  )r[  r  rZ  rD  r  )r   r  r   set_defaultsr   r{   r;   r1   s     r   test_set_defaults_no_argsz)TestSetDefaults.test_set_defaults_no_args  s    +-e$eq)eu2**2.	0eu2**2rt4	6eu2**2rE{;	=eu2**2rEQ/?@	Br   c           	         t               }|j                  dd       |j                  dd       | j                  t	        dd      |j                  g              | j                  t	        dd      |j                  g t	                            | j                  t	        dd      |j                  g t	        d                   | j                  t	        d	d      |j                  d
j                                      | j                  t	        d	d      |j                  d
j                         t	                            | j                  t	        d	d      |j                  d
j                         t	        d                   y )Nr(   rC  ro  r   xfooxrm  rD  r   r  r  )r   r  r   r   r{   r;   r   r1   s     r   test_set_defaults_with_argsz+TestSetDefaults.test_set_defaults_with_args  s6   +-eu-D'2g/**2.	0g/**2rt4	6eu-**2rE{;	=cU+**6<<>:	<cU+**6<<>24@	BcU+**6<<>2;G	Ir   c                    t               }|j                  d       |j                         }|j                  d      }|j                  d       | j	                  t        dd      |j                  dj                                      y )Nr(   r   r   rC  r  ro  )r   r  r  r  r   r{   r;   r   )r   r2   r  parser_as       r   test_set_defaults_subparsersz,TestSetDefaults.test_set_defaults_subparsers   su    +-e$**,
((-&eu-**399;7	9r   c                     t        d      }|j                  d       t        |g      }| j                  t        d      |j	                  g              y )NFr  r(   r   r  r  )r   r-  r2   s      r   test_set_defaults_parentsz)TestSetDefaults.test_set_defaults_parents	  sH    +U;e$+VH=ef&7&7&;<r   c                 
   t        j                         }|j                         j                  d      }|j	                  d       |j	                  d       | j                  t        d      |j                  dg             y )Nr5  rt  r  r  )r+   r,   r  r  r  r   r{   r;   )r   r2   xparsers      r   )test_set_defaults_on_parent_and_subparserz9TestSetDefaults.test_set_defaults_on_parent_and_subparser  sl    ((*'')44S9"#F$5$5se$<=r   c                    t               }|j                  dddd       |j                  d       |j                  dd	       |j                  d
d       |j                  ddd       | j                  t	        dddd      |j                  g              |j                  dddd       | j                  t	        dddd      |j                  g              y )NWr5  rm  rj  r  rY  r   XXrm  r[  r  ru  r  ZZr  WWYY)r   r  r   r   r{   r;   r1   s     r   &test_set_defaults_same_as_add_argumentz6TestSetDefaults.test_set_defaults_same_as_add_argument  s    +-cSC37D!D$/Cs+CsD9 	cTSD9**2.	0 	dcTS9dcTS9**2.	0r   c                    t               }|j                  dddd       |j                  d      }|j                  d       |j                  dd	
       |j                  dd       |j                  ddd       | j	                  t        dd	dd      |j                  g              |j                  dddd       | j	                  t        dddd      |j                  g              y )Nr  r5  rm  rj  r  r(   rY  r   r  rm  r[  r  ru  r  r  r  r  r  )r   r  r   r   r   r{   r;   rB  s      r   ,test_set_defaults_same_as_add_argument_groupz<TestSetDefaults.test_set_defaults_same_as_add_argument_group'  s    +-cSC37))%04 4.3c*3c48 	cTSD9**2.	0 	dcTS9dcTS9**2.	0r   N)
r   r   r    r  r  r  r  r  r  r  rA   r   r   r  r    s'    BI"9=>0"0r   r  c                       e Zd Zd Zy)TestGetDefaultc                    t               }| j                  |j                  d             | j                  |j                  d             |j                  d       | j                  |j                  d             | j                  |j                  d             |j                  dt        d       | j                  |j                  d             | j                  d|j                  d             |j                  d       | j                  d|j                  d             | j                  d|j                  d             y )	Nr(   rC  r   r.  r  r  r3  r  )r   r  get_defaultr   r  r   r  r1   s     r   test_get_defaultzTestGetDefault.test_get_default@  s   +-&,,U34&,,U34G$&,,U34&,,U34G#r:&,,U34V//67)6#5#5e#<=V//67r   N)r   r   r    r  rA   r   r   r  r  >  s    8r   r  c                       e Zd Zd Zd Zy)TestNamespaceContainsSimplec                 t    t        j                         }| j                  d|       | j                  d|       y )Nr   r   )r+   	NamespaceassertNotInr   nss     r   
test_emptyz&TestNamespaceContainsSimple.test_emptyW  s0    !R b!r   c                     t        j                  dd      }| j                  d|       | j                  d|       | j                  d|       | j                  d|       | j                  d|       y )	Nrt  r  ro  r   r   r[  xxr  )r+   r  r  r  r  s     r   test_non_emptyz*TestNamespaceContainsSimple.test_non_empty\  s`    !q)R c2c2r"b!r   N)r   r   r    r  r  rA   r   r   r  r  U  s    "
"r   r  c                       e Zd Zd Zy)TestHelpFormattingMetaclassc                 V    |dk(  ry  G d dt               }dD ]  \  }} || ||        y )NHelpTestCasec                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)6TestHelpFormattingMetaclass.__init__.<locals>.AddTestsc                     || _         || _        | j                  | j                  | j                  fD ]-  }|j
                  d|}|fd}	 ||_        t        |||       / y # t        $ r Y w xY w)Nr   c                      ||        y rO   rA   r   s     r   test_wrapperzUTestHelpFormattingMetaclass.__init__.<locals>.AddTests.__init__.<locals>.test_wrappery  r   r   )func_suffixstd_nametest_format
test_printtest_print_filer   r   r   )r   
test_classr  r  r   r   r  s          r   r   z?TestHelpFormattingMetaclass.__init__.<locals>.AddTests.__init__p  s    #.  ("&"2"2"&//"&"6"6"8 AI ,5+=+={ KI5> (09- J	<@A % s   A##	A/.A/c                 \   t        j                  |j                  j                  i |j                  j                  }t        |dg       D ](  } |j                  |j                  i |j                   * t        |dg       }|D ]X  \  }} |j                  |j                  i |j                  }|D ](  } |j                  |j                  i |j                   * Z t        |dg       }|r=|j                         }	|D ](  }
 |	j                  |
j                  i |
j                   * |S )Nr   argument_group_signaturessubparsers_signatures)
r+   r,   r   rv   rw   r   r   r   r  r  )r   r   r2   argument_sig
group_sigs	group_sigargument_sigsr   subparsers_sigsr  subparser_sigs              r   r   zBTestHelpFormattingMetaclass.__init__.<locals>.AddTests._get_parser  s`   !00,,116--446 %,F4I2$N ?L'F''):): ?*6*=*=?? %V-H"M
0: B,I}5F55y~~ J8A8H8HJE(5 B***L,=,= B-9-@-@BBB #*&2I2"N"!'!6!6!8J)8 G-
--}/A/A G1>1E1EGG r   c                     t        || j                        }t        j                  |      }d |_        |j                  ||       y rO   )r   r  r  r  r  r   )r   r   parser_textexpected_texts       r   _testz<TestHelpFormattingMetaclass.__init__.<locals>.AddTests._test  s9     '0@0@ A ( >!%""=+>r   c                     | j                  |      }t        |d| j                  z        }| j                  | |              y )Nz	format_%s)r   r   r  r  )r   r   r2   r&  s       r   r  zBTestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_format  s9    ))&1 t7G7G)GH

668,r   c                    | j                  |      }t        |d| j                  z        }t        t        | j                        }t        t        | j                  t                      	  |        t        t        | j                        j                         }t        t        | j                  |       | j                  ||       y # t        t        | j                  |       w xY wNzprint_%s)	r   r   r  r   r  r   r   r   r  )r   r   r2   print_
old_streamr  s         r   r  zATestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_print  s    ))&1 d6F6F)FG$S$--8
T]]KM:<H")#t}}"="F"F"HKC
;

6;/ C
;s   )/C C#c                     | j                  |      }t        |d| j                  z        }t               } ||       |j	                         }| j                  ||       y r  )r   r   r  r   r   r  )r   r   r2   r  sfiler  s         r   r  zFTestHelpFormattingMetaclass.__init__.<locals>.AddTests.test_print_file  sQ    ))&1 d6F6F)FG#u#nn.

6;/r   N)	r   r   r    r   r   r  r  r  r  rA   r   r   r   r  n  s!    A",?-

00r   r   ))usager   )ro  r   )r   )r   rd   r   r   r   r  r  s          r   r   z$TestHelpFormattingMetaclass.__init__j  s>    >!F	0v F	0R&: 	1!KS+x0	1r   Nry   rA   r   r   r  r  h  s    O1r   r  r  c                       e Zd ZdZ eddd      Z edddd	
       eddd       edd       edd       edd      gZg ZdZedz   Z	dZ
y)TestHelpBiggerOptionals;Make sure that argument help aligns when options are longerri  DESCRIPTIONEPILOGrk  rl  epilogr^  r~  r  0.1r  r   r   X HELPrn  --yY HELPr  r(   FOO HELPrC  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   r   r   r  r  ro  r  rA   r   r   r  r    s    EM"*, 	D+i?DH5E!E
#E
# !#E   D Gr   r  c                       e Zd ZdZd Zej                  Zej                  Zej                  ZdZ	e	dz   Z
ej                  Zy)TestShortColumnszTest extremely small number of columns.

    TestCase prevents "COLUMNS" from being too small in the tests themselves,
    but we don't want any exceptions thrown in such cases. Only ugly representation.
    c                 n    | j                  t        j                               }|j                  dd       y )NrF   rU  )rG   r   rH   rP  rI   s     r   rK   zTestShortColumns.setUp  s)    	 = = ?@	4 r   z        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!   rK   r  r   r   r  r  ro  r  rA   r   r   r  r    sW    
! #:"J"J"9"M"M"9"S"SE   D: #:"A"AGr   r  c                       e Zd ZdZ eddd      Z edddd	
       eddd       edd       edd       edd      gZ edd       edd       eddd      gfgZdZed z   Z	d!Z
y")#TestHelpBiggerOptionalGroupsr  ri  r  r  r  r^  r~  r  r
  r  r   r   r  rn  r  r  r  r(   r  rC  r  zGROUP TITLEzGROUP DESCRIPTIONrw  rD  zBAZ HELPr  r  zZ HELPr  zN        usage: PROG [-h] [-v] [-x] [--y Y] [-z Z [Z ...]] foo bar baz
        a  
        DESCRIPTION

        positional arguments:
          foo            FOO HELP
          bar            BAR HELP

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

        GROUP TITLE:
          GROUP DESCRIPTION

          baz            BAZ HELP
          -z Z [Z ...]   Z HELP

        EPILOG
    r  Nr  rA   r   r   r  r    s    EM"*, 	D+i?DH5E!E
#E
# 
](;	<J'Ch/?1 	2!
E   D,Gr   r  c                       e Zd ZdZ edd      Z eddd       ed	d
       edd       edd      gZg ZdZedz   Z	dZ
y)TestHelpBiggerPositionalsz4Make sure that help aligns when arguments are longerUSAGEr  r  rl  r   r   r  rn  r  r  r  ekiekiekifekangzEKI HELPrC  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  rA   r   r   r  r  H  sl    >mDDH5E!J/E
#	 !#E   D Gr   r  c                       e Zd ZdZ edd      Z eddd       ed	d
d      gZ edd       eddd      gfgZdZedz   Z	dZ
y)TestHelpReformatting>Make sure that text after short names starts on the first lineri  ze   oddly    formatted
description

that is so long that it should go onto multiple lines when wrappedrp  r   r  zoddly
    formatted -x helpr  ro  r[  r  znormal y helpru  z'
    oddly formatted group

descriptionrw  r  r   z` oddly 
formatted    -a  help  
    again, so long that it should be wrapped over multiple linesrn  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  rA   r   r   r  r  g  s    H)* 	D$ &= 	>C_5 
W #0 
1 d<$% 
&		'
!E   D( Gr   r  c                       e Zd ZdZ edd      Z eddd       ed	d
d      gZ ed       eddd      gfgZdZedz   Z	dZ
y)TestHelpWrappingShortNamesr  ri  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
Drp  r   r  zxXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXr   r[  r  dYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHALPHASr  r   zPAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHArn  r!  a  
        D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD
        DD DD DD DD D

        positional arguments:
          yyy         YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH
                      YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH

        options:
          -h, --help  show this help message and exit
          -x XX       XHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH
                      HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HX

        ALPHAS:
          -a          AHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH
                      HHAAHHH HHAAHHH HHA
        r   Nr  rA   r   r   r#  r#    sz    H[AD$]3C\2
 
X\@B 	C!E   D, Gr   r#  c                       e Zd ZdZ edd      Z edddd	       ed
dd       eddd      gZ ed       eddd       eddd      gfgZdZedz   Z	dZ
y)TestHelpWrappingLongNamesz<Make sure that text after long names starts on the next liner  zZD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD Dr  r^  r~  r  zZV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV Vr  r   XXXXXXXXXXXXXXXXXXXXXXXXXzdXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHr   r[  yyyyyyyyyyyyyyyyyyyyyyyyyr$  r%  r  AAAAAAAAAAAAAAAAAAAAAAAAAzdAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHr  zzzzzzzzzzzzzzzzzzzzzzzzzzdZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHr  ag  
        D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD
        DD DD DD DD D

        positional arguments:
          yyyyyyyyyyyyyyyyyyyyyyyyy
                                YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH
                                YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH

        options:
          -h, --help            show this help message and exit
          -v, --version         show program's version number and exit
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
                                XH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH
                                XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XH

        ALPHAS:
          -a AAAAAAAAAAAAAAAAAAAAAAAAA
                                AH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH
                                AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AH
          zzzzzzzzzzzzzzzzzzzzzzzzz
                                ZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH
                                ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZH
        zs        V VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV
        VV VV VV VV V
        Nr  rA   r   r   r'  r'    s    FzBD+iDD(6C5 
Xh\:XL9; 	<!
E   D<Gr   r'  c                      e Zd ZdZ ed      Z eddd       edd	d
       edd       eddd       eddd       eddej                         edddej                         edddej                         edej                  ej                  d      g	Z	 ed        ed!dd"       ed#d$d%       ed&d&d	       ed'd'd      gfgZ
d(Zed)z   Zd*Zy+),TestHelpUsageTest basic usage messagesri  r8  rY  r  rg   r  r   r  r   r   r  r~  r  )ro  rv  r  r  r   zWhether to foo)ro  r   r.  zWhether to barT)ro  rn  r   r  z--foobarz--barfoor   z--bazzzBazz!)r   rn  ro  r   r
  r[  r  ry  r  r  r   a/          usage: PROG [-h] [-w W [W ...]] [-x [X ...]] [--foo | --no-foo]
                    [--bar | --no-bar]
                    [-f | --foobar | --no-foobar | --barfoo | --no-barfoo]
                    [--bazz | --no-bazz] [-y [Y]] [-z Z Z Z]
                    a b b [c] [d ...] e [e ...]
        az  
        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
          -f, --foobar, --no-foobar, --barfoo, --no-barfoo
          --bazz, --no-bazz     Bazz!

        group:
          -y [Y]                y
          -z Z Z Z              z
          d                     d
          e                     e
        r   N)r   r   r    r!   rt   r   r+   r  rw  r   r  r  ro  r  rA   r   r   r-  r-    s   #'D#&D#&CcCc#Cc%G*83Q3QRG*D$::	<D*j1O1OPHX;;&//g	? 
WCc*AC(#S)#S)	
 	!E   D, Gr   r-  c                   Z    e Zd Z ed      Z edd       eddd      gZd	Zed
z   ZdZy)TestHelpUsageWithParenthesesri  r8  
positionalz(example) positionalr  r  z
--optionalz{1 (option A), 2 (option B)}zX        usage: PROG [-h] [-p {1 (option A), 2 (option B)}] (example) positional
        z
        positional arguments:
          (example) positional

        options:
          -h, --help            show this help message and exit
          -p {1 (option A), 2 (option B)}, --optional {1 (option A), 2 (option B)}
        r   N)	r   r   r    rt   r   r   r  ro  r  rA   r   r   r0  r0  2  sL    'L"89D,(FG
E   D Gr   r0  c                       e Zd ZdZ edd      Zg Z ed       edd       ed	d	      gf ed
       edd       edd      gfgZdZedz   Z	dZ
y)TestHelpOnlyUserGroupsr.  ri  Frk  rJ  xxxxr   r   r  r   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  rA   r   r   r4  r4  H  s    #7	V3#
 	 
V#3
 		!E  	 	D Gr   r4  c                   |    e Zd ZdZ ed      Z edd       edd       ed	       ed
      gZg ZdZedz   Z	dZ
y)TestHelpUsageLongProgz*Test usage messages where the prog is long<PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPr8  rY  r  r2  r   r5  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  rA   r   r   r9  r9  g  sa    4)D#D#CC	 !#E  
 
D Gr   r9  c                       e Zd ZdZ ed      Z edd       edd       ed	d
       edd       ed       ed      gZg ZdZedz   Z	dZ
y) TestHelpUsageLongProgOptionsWrapzATest usage messages where the prog is long and the optionals wrapr:  r8  rY  WWWWWWWWWWWWWWWWWWWWWWWWWr2  r   r(  r
  YYYYYYYYYYYYYYYYYYYYYYYYYr  ZZZZZZZZZZZZZZZZZZZZZZZZZr   r~  a          usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] [-x XXXXXXXXXXXXXXXXXXXXXXXXX]
               [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
               a b
        a-  
        positional arguments:
          a
          b

        options:
          -h, --help            show this help message and exit
          -w WWWWWWWWWWWWWWWWWWWWWWWWW
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        r   Nr  rA   r   r   r<  r<    su    K)D(#D(#D(#D(#CC !#E   D Gr   r<  c                   h    e Zd ZdZ edd      Z ed       ed       ed      gZg ZdZed	z   Z	d
Z
y)$TestHelpUsageLongProgPositionalsWrapzCTest usage messages where the prog is long and the positionals wrapr:  Fr5  aaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccz        usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
               ccccccccccccccccccccccccc
        
        positional arguments:
          aaaaaaaaaaaaaaaaaaaaaaaaa
          bbbbbbbbbbbbbbbbbbbbbbbbb
          ccccccccccccccccccccccccc
        r   Nr  rA   r   r   rA  rA    sV    M59HHH
 !#E
   D Gr   rA  c            	           e Zd ZdZ ed      Z edd       edd       ed	d
       edd       ed       ed       ed      gZg ZdZedz   Z	dZ
y)TestHelpUsageOptionalsWrapz,Test usage messages where the optionals wrapri  r8  rY  r=  r2  r   r(  r
  r>  r  r?  r   r~  r  z        usage: PROG [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] [-x XXXXXXXXXXXXXXXXXXXXXXXXX]
                    [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
                    a b c
        a9  
        positional arguments:
          a
          b
          c

        options:
          -h, --help            show this help message and exit
          -w WWWWWWWWWWWWWWWWWWWWWWWWW
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        r   Nr  rA   r   r   rG  rG    s|    6'D(#D(#D(#D(#CCC !#E   D Gr   rG  c                       e Zd ZdZ ed      Z ed       ed       ed       ed       ed       ed	      gZg Zd
Zedz   Z	dZ
y)TestHelpUsagePositionalsWrapz.Test usage messages where the positionals wrapri  r8  r   r
  r  rB  rC  rD  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  rA   r   r   rI  rI    si    8'D	D	D	HHH !#E
   D Gr   rI  c                       e Zd ZdZ ed      Z edd       edd       ed	d
       ed       ed       ed      gZg ZdZedz   Z	dZ
y)%TestHelpUsageOptionalsPositionalsWrapz<Test usage messages where the optionals and positionals wrapri  r8  r   r(  r2  r
  r>  r  r?  rB  rC  rD  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  rA   r   r   rK  rK  	  sr    F'D(#D(#D(#HHH !#E   D Gr   rK  c                   r    e Zd ZdZ ed      Z edd       edd       ed	d
      gZg ZdZedz   Z	dZ
y)TestHelpUsageOptionalsOnlyWrapz@Test usage messages where there are only optionals and they wrapri  r8  r   r(  r2  r
  r>  r  r?  z        usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] [-y YYYYYYYYYYYYYYYYYYYYYYYYY]
                    [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
        z
        options:
          -h, --help            show this help message and exit
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        r   Nr  rA   r   r   rM  rM  -  s]    J'D(#D(#D(#
 !#E
   D Gr   rM  c                   h    e Zd ZdZ edd      Z ed       ed       ed      gZg ZdZed	z   Z	d
Z
y) TestHelpUsagePositionalsOnlyWrapzBTest usage messages where there are only positionals and they wrapri  Fr5  rB  rC  rD  z~        usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
                    ccccccccccccccccccccccccc
        rE  r   Nr  rA   r   r   rO  rO  G  sV    L7HHH
 !#E   D Gr   rO  c            
           e Zd ZdZ ed      Z eded       eddd	d
d       eddd       eddddgdd       edd       eddd      gZ ed       ed d!       ed"d#d$      gfgZd%Z	e	d&z   Z
d'Zy())TestHelpVariableExpansionz:Test that variables are expanded properly in help messagesri  r8  r   z"x %(prog)s %(default)s %(type)s %%rr  r
  r  r  XXXz y %(prog)s %(default)s %(const)s)r   rn  r  ro  r   r  z$foo %(prog)s %(default)s %(choices)sr|  r.  rD  rt  r  BBBz!bar %(prog)s %(default)s %(dest)s)rn  r  r  ro  r  zspam %(prog)s %(default)sr  r3  rr  zbadger %(prog)s %(default)s)rn  ro  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   r  r   r  r  ro  r  rA   r   r   rQ  rQ  _  s    D'Ds5	7D%3	5GU7	9GUQFE4	6F45Hc(EF 
W34b'?@
 	!E   D" Gr   rQ  c                   >    e Zd ZdZ edd      Zg Zg ZdZedz   Z	dZ
y)	&TestHelpVariableExpansionUsageSuppliedz@Test that variables are expanded properly when usage= is presentri  z%(prog)s FOOrk  r  z         usage: PROG FOO
        r  r   Nr  rA   r   r   rU  rU    s=    Jn= "E   D
 Gr   rU  c                   8    e Zd ZdZ edd      Zg Zg ZdZeZ	dZ
y)$TestHelpVariableExpansionNoArgumentsz;Test that variables are expanded properly with no argumentsri  Fr5  z        usage: PROG
        r   Nr  rA   r   r   rX  rX    s1    E7 "E DGr   rX  c                   p    e Zd ZdZ edej                        Z edd       edd      gZg Z	d	Z
d
Zd
Zy)TestHelpSuppressUsagez3Test that items can be suppressed in usage messagesri  rV  r   rm  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!   rt   r+   rw  r   r   r  ro  r  r  rA   r   r   rZ  rZ    sO    =h.?.?@G*%F% !#D EGr   rZ  c                   v    e Zd ZdZ edd      Z edej                         edd      gZg Z	d	Z
e
d
z   ZdZy)TestHelpSuppressOptionalz?Test that optional arguments can be suppressed in help messagesri  Fr5  r   r  r  r[  z!        usage: PROG spam
        zA
        positional arguments:
          spam  spam help
        r   Nr   r   r    r!   rt   r   r+   rw  r   r  r  ro  r  rA   r   r   r]  r]    s[    I7G(++,F% !#E   D
 Gr   r]  c                       e Zd ZdZ ed      Z edd       edd      gZ ed	       ed
ej                        gfgZ	dZ
e
dz   ZdZy)TestHelpSuppressOptionalGroupz<Test that optional groups can be suppressed in help messagesri  r8  r   rm  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   r   r   r+   rw  r  r  ro  r  rA   r   r   r`  r`    sq    F'G*%F%
 
WG(*;*;<=>!E   D Gr   r`  c                   t    e Zd ZdZ ed      Z edd       edej                        gZg Z	dZ
e
d	z   Zd
Zy)TestHelpSuppressPositionalzATest that positional arguments can be suppressed in help messagesri  r8  r   rm  r  r  z-        usage: PROG [-h] [--foo FOO]
        o
        options:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        r   Nr^  rA   r   r   rd  rd    sY    K'G*%F**+ !#E   D Gr   rd  c                   P    e Zd ZdZ ed      Z eddd      gZg ZdZed	z   Z	d
Z
y)TestHelpRequiredOptionalz.Test that required options don't look optionalri  r8  r   Trm  )r  ro  z+        usage: PROG [-h] --foo FOO
        re  r   Nr  rA   r   r   rg  rg    sK    8'Gd4 !#E   D Gr   rg  c                   h    e Zd 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   Z	dZ
y)TestHelpAlternatePrefixCharsz:Test that options display with different prefix charactersri  z^;F)rk  rI  rJ  z^^foor   rm  rn  z;bz;;barrq  r  z-        usage: PROG [^^foo] [;b BAR]
        zf
        options:
          ^^foo              foo help
          ;b BAR, ;;bar BAR  bar help
        r   Nr  rA   r   r   ri  ri    s[    DTEJGLz:D'
+ !#E   D Gr   ri  c                   b    e Zd ZdZ edd      Z edd       edd	      gZg Zd
Zedz   Z	dZ
y)TestHelpNoHelpOptionalz=Test that the --help argument can be suppressed help messagesri  Fr5  r   rm  r  r  r[  z-        usage: PROG [--foo FOO] spam
        zv
        positional arguments:
          spam       spam help

        options:
          --foo FOO  foo help
        r   Nr  rA   r   r   rk  rk  ,  sU    G7G*%F% !#E   D Gr   rk  c                   X    e Zd ZdZ ed      Z ed       ed      gZg ZdZedz   Z	dZ
y	)
TestHelpNonez1Test that no errors occur if no help is specifiedri  r8  r   r  ra  z
        positional arguments:
          spam

        options:
          -h, --help  show this help message and exit
          --foo FOO
        r   Nr  rA   r   r   rm  rm  C  sM    ;'GF !#E   D Gr   rm  c            	           e Zd ZdZ ed      Z edddd       ed	d
dd       edddd       edddd      gZg ZdZedz   Z	dZ
y)TestHelpTupleMetavarz"Test specifying metavar as a tupleri  r8  rY  rg   r  )W1W2)ro  rv  r  r   r   r  )X1X2r
  r[  ry  )Y1Y2Y3r  r  r  )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  rA   r   r   ro  ro  [  sx    ,'Ds#|<Ds#|<Ds!-?@Ds#x8	 !#E   D Gr   ro  c                       e Zd ZdZ edej                  d      Z edd       edd	      gZ ed
d       edd      gfgZ	dZ
e
dz   ZdZy)TestHelpRawTextTest the RawTextHelpFormatterri  7Keep the formatting
    exactly as it is written

here
rk  formatter_classrl  r   z-    foo help should also
appear as given herer  r  r[  ru  ?    This text
  should be indented
    exactly like it is here
rw  r.  rq  >        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!   rt   r+   RawTextHelpFormatterr   r   r  r  ro  r  rA   r   r   ry  ry  v  s    'X%B%B 	G 1 	2F% 
W #B 
C gJ
'	(	*!E   D, Gr   ry  c                       e Zd ZdZ edej                  d      Z edd       edd	      gZ ed
d       edd      gfgZ	dZ
e
dz   ZdZy)TestHelpRawDescriptionrz  ri  r{  r|  r   z4  foo help should not
    retain this odd formattingr  r  r[  ru  r~  rw  r.  rq  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!   rt   r+   RawDescriptionHelpFormatterr   r   r  r  ro  r  rA   r   r   r  r    s    'X%I%I 	G ; 	<F% 
W #B 
C gJ
'	(	*!E   D* Gr   r  c                   J   e Zd ZdZ edej                  d      Z edd       edd	d
       edej                  dd       edej                  dej                         eddd       edd       edddd      gZ
 edd       ededd !      gfgZd"Zed#z   Zd$Zy%)&TestHelpArgumentDefaultsz&Test the ArgumentDefaultsHelpFormatterri  rl  r|  r   z)foo help - oh and by the way, %(default)sr  r.  r   rq  rn  z--tazzWhether to taz itT)r   ro  rn  z--corgezWhether to corge itz--quuxzSet the quuxr  )ro  rn  r  r[  r3  r  woodenzbadger helpr  ru  rw  rd  rf  )r   rn  ro  z        usage: PROG [-h] [--foo FOO] [--bar] [--taz | --no-taz] [--corge | --no-corge]
                    [--quux QUUX] [--baz BAZ]
                    spam [badger]
        ay  
        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)
          --corge, --no-corge  Whether to corge it
          --quux QUUX          Set the quux (default: 42)

        title:
          description

          --baz BAZ            baz help (default: 42)
        r   N)r   r   r    r!   rt   r+   ArgumentDefaultsHelpFormatterr   r  rw  r   r  r  r  ro  r  rA   r   r   r  r    s    0X%K%K!#
 	GEFGLz:GH::$d	4Ih<<&0A0A	CH>26F%HCF
 
W-	0
gC*
=	>	@!E
   D* Gr   r  c                   T    e Zd ZdZ edd      Z edddd	      gZg Zd
Zedz   Z	dZ
y)TestHelpVersionActionz,Test the default help for the version actionri  rl  rp  -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  rA   r   r   r  r  	  sK    6MBt[ERS "E   D Gr   r  c                       e Zd ZdZ ed      Z eddddej                         ed	d
       edd      gZg Z	dZ
e
dz   Zy)TestHelpVersionActionSuppresszCTest that the --version argument can be suppressed in help messagesri  r8  r^  r~  r  r  )r   r  ro  r   rm  r  r  r[  ra  rb  N)r   r   r    r!   rt   r   r+   rw  r   r  r  ro  rA   r   r   r  r    se    M'D+i""	$G*%F%	 !#E   Dr   r  c                       e Zd ZdZ edd      Z edddd	      gZd
D  cg c]  }t	        |       c}}} ZdZedz   Z	dZ
yc c}}} w )TestHelpSubparsersOrdering5Test ordering of subcommands in help matches the coderi  display some subcommandsrp  r^  r~  r  r
  r  )r   r~  r  r  r   r  6        usage: PROG [-h] [-v] {a,b,c,d,e} ...
        z
        display some subcommands

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

        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   r   r   r  r  ro  r  ).0rd   rt   s   000r   r  r  6  sw    ?'ACt[ERS *CD D!% !d^ DE  
 
DG'Ds   Ar  c            
           e Zd ZdZ edd      Z edddd	      gZd
ZeD  cg c]  \  }}t	        ||       c}}}} ZdZ	e	dz   Z
dZyc c}}}} w )"TestHelpSubparsersWithHelpOrderingr  ri  r  rp  r^  r~  r  r
  r  ))r   za subcommand help)r~  zb subcommand help)r  zc subcommand help)r  zd subcommand help)r   ze subcommand help)rd   ro  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   r   r   subcommand_datar  r  ro  r  )r  rd   ro  rt   s   0000r   r  r  S  s    ?'ACt[ERSO 0?@ @!+t !d6 @E   D"G1@s   A
r  c                       e Zd Zd Z eddej                        Z ede       ede       ede	d	
      gZ
g ZdZedz   ZdZy)TestHelpMetavarTypeFormatterc                     | S rO   rA   r3  s    r   custom_typez(TestHelpMetavarTypeFormatter.custom_type  s    r   ri  rl  )rk  rl  r}  r   rp  r  r  z
SOME FLOAT)r   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  rt   r+   MetavarTypeHelpFormatterr   r  rs  r   r  r  ro  r  rA   r   r   r  r  ~  sr     M+3+L+LNs-t+6t%FH !#E   D Gr   r  c                   j    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zy)TestInvalidArgumentConstructorsz-Test a bunch of invalid Argument constructorsc                 v    t        j                         } | j                  t        |j                  g|i | y rO   )r+   r,   r   r   r   r   rv   rw   r2   s       r   assertTypeErrorz/TestInvalidArgumentConstructors.assertTypeError  s:    ((*)V%8%8 	+	+#)	+r   c                 v    t        j                         } | j                  t        |j                  g|i | y rO   )r+   r,   r   r  r   r  s       r   assertValueErrorz0TestInvalidArgumentConstructors.assertValueError  s:    ((**f&9&9 	+	+#)	+r   c                     | j                  dd        | j                  dd       | j                  dd       | j                  di        y )	Nr   )rC  r
  r(   )callbackrA   )callback_args)callback_kwargsr  r   s    r   test_invalid_keyword_argumentsz>TestInvalidArgumentConstructors.test_invalid_keyword_arguments  sN    Tt,TE2T4T26r   c                 V    | j                          dD ]  }| j                  |        y )N)r  r  r   r  r   r   s     r   test_missing_destinationz8TestInvalidArgumentConstructors.test_missing_destination  s.    ) 	0F   /	0r   c                 H    | j                  d       | j                  d       y )Nr  z---r  r   s    r   test_invalid_option_stringsz;TestInvalidArgumentConstructors.test_invalid_option_strings  s    d#e$r   c                 d    | j                  dd       | j                  dt        t        f       y )Nr   r  rp  )r  r  rs  r   s    r   test_invalid_typez1TestInvalidArgumentConstructors.test_invalid_type  s,    gE2gS%L9r   c                 b   | j                  dd       | j                  dd       | j                  dd       t        j                         }| j                  t              5 }|j                  dd       d d d        | j                  dt        j                               y # 1 sw Y   /xY w)	Nr   r(   r   rD  r   r  r  z
store-truezunknown action)	r  r+   r,   r   r  r   r  r   r  r  s      r   test_invalid_actionz3TestInvalidArgumentConstructors.test_invalid_action  s    d51eE2g.AB((*z* 	>b=	>&BLL(9:	> 	>s   #B%%B.c                    t        j                         }|j                  d       | j                  t              5 }|j                  dd       d d d        | j                  dt        j                               y # 1 sw Y   /xY w)Nr(   r&  rC  rD  z+dest supplied twice for positional argument)r+   r,   r   r   r  r  r   r  r  s      r   test_multiple_destz2TestInvalidArgumentConstructors.test_multiple_dest  st    ((*'z* 	3bE2	3C",,'	)	3 	3s   A>>Bc                     dD ]B  }t        t              t        d      t        d      fD ]  } | j                  dd|i|  D y )	N)r  r   r  r  r  rp  r  ru  abr  r   )r   )r  r  r  )r   r   attrss      r   test_no_argument_actionsz8TestInvalidArgumentConstructors.test_no_argument_actions  sU    0 	CFC.$S/t,. C$$$B&BEBC	Cr   c                 b    dD ]*  }| j                  dd|       | j                  dd|       , y )N)r   r  r  r   r(   r  r  rv  r   r  r  s     r   !test_no_argument_no_const_actionszATestInvalidArgumentConstructors.test_no_argument_no_const_actions  sA    < 	AF   U6 B   S @	Ar   c                     dD ][  }| j                  dd|       | j                  dd|       dD ],  }| j                  dd||       | j                  dd||       . ] y )	Nr  r   r   r  r  )rt  r  r  r(   )r  rv  r   r  )r   r   rv  s      r   #test_more_than_one_argument_actionszCTestInvalidArgumentConstructors.test_more_than_one_argument_actions  s    ) 	BF !!$a!?!!&&!A ' B%%d%,1& & B%%fE,1& & BB	Br   c                 :    dD ]  }| j                  dd|        y )N)r  r  r   r  r  r  r  s     r   test_required_const_actionsz;TestInvalidArgumentConstructors.test_required_const_actions  s*    5 	AF   S @	Ar   c                     | j                  dd       | j                  ddd       | j                  ddt        j                         y )Nr  parsersr   ri  )r   rk  )r   r   )r  r+   r,   r   s    r   "test_parsers_action_missing_paramszBTestInvalidArgumentConstructors.test_parsers_action_missing_params  sK    Yy9YyvFYy*2*A*A 	 	Cr   c                 *    | j                  dd       y )Nr(   Tr  r  r   s    r   test_required_positionalz8TestInvalidArgumentConstructors.test_required_positional  s    UT2r   c                      G d dt                G fddt              }t        j                         }| j	                  |j
                  d|       | j	                  |j
                  d|       y )Nc                       e Zd Zy)ITestInvalidArgumentConstructors.test_user_defined_action.<locals>.SuccessNr  rA   r   r   Successr     s    r   r  c                   "    e Zd Z	 d fd	Zd Zy)HTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Actionc                 2    |dk(  r|u r|u r        y y y )Nr  rA   )r   option_stringsr'  r  rn  r  r  s         r   r   zQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__init__  s2     6>'"g-"))O . ( "r   c                      y rO   rA   rx   s      r   rI  zQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__call__  s    r   N)F)r   r   r    r   rI  )r  s   r   rQ  r    s     #(	,r   rQ  r}  )r   rn  r  r  )r   r   r+   r,   r   r   )r   rQ  r2   r  s      @r   test_user_defined_actionz8TestInvalidArgumentConstructors.test_user_defined_action  sy    	i 		V 	  ((*'6#6#6!' 	 	I'6#6#6!' 	 	Ir   N)r   r   r    r!   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rA   r   r   r  r    sV    7+
+
70
%:;)CABAC3Ir   r  c                       e Zd Zd Zd Zy)TestActionsReturnedc                 >   t        j                         }|j                  d      }| j                  |j                  d       |j                  dd      }| j                  |j                  d       |j                  dd      }| j                  |j                  d       y )	Nr   r(   r  r.  rC  r   r
  r   )r+   r,   r   r   r'  r   r2   r   s      r   r  zTestActionsReturned.test_dest  s    ((*$$W-e,$$T73e,$$T40c*r   c                 8   t        j                         }|j                  ddddt        ddgddd	
	      }| j	                  |j
                  d       | j	                  |j                  d       | j	                  |j                  d       | j	                  |j                  t               | j	                  |j                  ddg       | j	                  |j                  d       | j	                  |j                  d       | j	                  |j                  d	       y )Nr   r  r  r  rt  r  r  BARrD  )rv  r  rn  r   r  ro  r  r'  )r+   r,   r   r  r   rv  r  rn  r   r  ro  r  r'  r  s      r   	test_misczTestActionsReturned.test_misc(  s    ((*$$WCr-/cAq6*/U % L 	s+r*,c*!Q0e,/e,r   N)r   r   r    r  r  rA   r   r   r  r    s    +-r   r  c                   $    e Zd Zd Zd Zd Zd Zy)TestConflictHandlingc                 P    | j                  t        t        j                  d       y )Nr(   )conflict_handler)r   r  r+   r,   r   s    r   test_bad_typez"TestConflictHandling.test_bad_type=  s"    *h&=&=+0 	 	2r   c                    t        j                         }|j                  d       | j                  t         j                  |j                  d       |j                  d       | j                  t         j                  |j                  d       y )Nr   r}  )r+   r,   r   r   r  r1   s     r   test_conflict_errorz(TestConflictHandling.test_conflict_errorA  sn    ((*D!(00 --t	5H%(00 --x	9r   c                    t         j                  } |dd      }|j                  dd       |j                  dd       | j                  |j	                         t        j                  d             |j                  d	d
       |j                  d	d       | j                  |j	                         t        j                  d             y )Nri  resolve)rk  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}  OLD_SPAMr2  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
            )r+   r,   r   r   r  r  r  )r   rI  r2   s      r   test_resolve_errorz'TestConflictHandling.test_resolve_errorJ  s    ,,
)DDw/Dw/++-x @ 0 	 	Hj9Hj9++-x @ 0 	r   c                    t        j                         }|j                         }|j                  ddg       | j	                  t         j
                  |j                  d       | j	                  t         j
                  |j                  d       | j	                  t         j
                  |j                  ddg       | j	                  t         j
                  |j                  ddg       y )Nfullnamealiasr  r   )r+   r,   r  r  r   r  )r   r2   sps      r   test_subparser_conflictz,TestConflictHandling.test_subparser_conflictc  s    ((*""$
j7)4(00--	5(00--	2(00--:, 	 	H(00--7) 	 	Er   N)r   r   r    r  r  r  r  rA   r   r   r  r  ;  s    292Er   r  c                   F    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)TestOptionalsHelpVersionActionsz!Test the help and version actionsc                     | j                  t              5 }|j                  |j                                d d d        | j	                  |j                         j                  j                         y # 1 sw Y   >xY wrO   )r   r   r;   r   r   r  r  r   )r   r2   r   r  s       r   assertPrintHelpExitz3TestOptionalsHelpVersionActions.assertPrintHelpExitx  s`    23 	0rhnn./	0++-r||/B/BC	0 	0s    A33A<c                 F    | j                  t        |j                  |       y rO   )r   r   r;   r   r2   rv   s      r   rf  z9TestOptionalsHelpVersionActions.assertArgumentParserError}  s    -v/@/@$Gr   c                     t               }|j                  dddd       | j                  |d       | j                  |d       | j                  t        t
        |d       y )	Nr^  r~  r  r  r  r5   rO  format_versionr   r   r  r   r  r   r1   s     r   test_versionz,TestOptionalsHelpVersionActions.test_version  sV    +-D+iO  .  2.'6;KLr   c                 
   t        d      }|j                  dddd       | j                  t              5 }|j	                  dg       d d d        | j                  dj                  j                         y # 1 sw Y   0xY w)	NPPPr8  r^  r~  r  z%(prog)s 3.5r  zPPP 3.5
r   r   r   r   r;   r   r  r   r  s      r   test_version_formatz3TestOptionalsHelpVersionActions.test_version_format  ss    +7D+iX23 	&rtf%	&bll&9&9:	& 	&s   A99Bc                     t        d      }|j                  dddd       | j                  |d       | j                  |d	       | j                  t        t
        |d
       y )NFr  r^  r~  r  r  r  r5   rO  r  )r   r   rf  r   r  r   r1   s     r   test_version_no_helpz4TestOptionalsHelpVersionActions.test_version_no_help  sX    +U;D+iO&&vt4&&vx8.'6;KLr   c                    t        d      }|j                  ddd       | j                  t              5 }|j	                  dg       d d d        | j                  dj                  j                         y # 1 sw Y   0xY w)NrR  r8  r  r  z%(prog)s 3.7r  zXXX 3.7
r  r  s      r   test_version_actionz3TestOptionalsHelpVersionActions.test_version_action  sq    +7DNK23 	&rtf%	&bll&9&9:	& 	&s   A88Bc                     t        d      }| j                  |d       | j                  |d       | j                  |d       | j                  |d       y )NFr  r5   rO  r^  r~  )r   rf  r1   s     r   test_no_helpz,TestOptionalsHelpVersionActions.test_no_help  sL    +U;&&vt4&&vx8&&vt4&&v{;r   c                    t               }|j                  dd       |j                  dd       | j                  |d       | j                  |d       | j                  |d       | j	                  t
        t        |d       y )	Nr   ro  r   r
  r  r^  r~  r  )r   r   r  rf  r   r  r   r1   s     r   test_alternate_help_versionz;TestOptionalsHelpVersionActions.test_alternate_help_version  su    +-D0D3  .&&vt4&&v{;.'6;KLr   c                 T   t               }|j                  ddd       |j                  dd       |j                  d       g d	}|d
dgz   }|D ]V  }|D ]	  }|d|} | j                  |dz         | j                  ||dz         | j                  t        t
        |d       X y )Nr~  r  r  r  r   r   r   r[  )r   r   r(   z-x barzbaz -xz--bad-optionzfoo bar bazz %s r5   rO  r  r  )r   r2   valid_prefixesvalid_suffixesprefixsuffixr&  s          r   !test_help_version_extra_argumentszATestOptionalsHelpVersionActions.test_help_version_extra_arguments  s    +-K	5ID6C  ?'>=*II$ 	QF( 8(.78$$VVd];$$VVh->?ngv?OP	Qr   N)r   r   r    r!   r  rf  r  r  r  r  r  r  r  rA   r   r   r  r  u  s8    +D
HM;M;<MQr   r  c                   @    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestStringsz3Test str()  and repr() on Optionals and Positionalsc                 V    t         t        fD ]  }| j                   ||      |        y rO   )r   r  r   )r   objresult_stringr6   s       r   assertStringEqualzTestStrings.assertStringEqual  s)    $K 	7DT#Y6	7r   c                 p    t        j                  g dddddg dddd	
	      }d}| j                  ||       y )N)r   r  r  r~  r  r  r  rt  r  ry  FHELPMETAVAR	r  r'  r   rv  rn  r  r  ro  r  zAction(option_strings=['--foo', '-a', '-b'], dest='b', nargs='+', const=None, default=42, type='int', choices=[1, 2, 3], required=False, help='HELP', metavar='METAVAR'))r+   rQ  r  )r   optionr4  s      r   test_optionalzTestStrings.test_optional  sH    0	Q 	 	vv.r   c                     t        j                  g dt        ddg dddd	      }d	t        z  }| j                  ||       y )
Nr   r  rq  )rr  g      ?rq  TzH HH HzMV MV MVr  zAction(option_strings=[], dest='x', nargs='?', const=None, default=2.5, type=%r, choices=[0.5, 1.5, 2.5], required=True, help='H HH H', metavar='MV MV MV'))r+   rQ  rs  r  )r   argumentr4  s      r   test_argumentzTestStrings.test_argument  sQ    ??#	 @BGH 	 	x0r   c                 Z    t        j                  dd      }d}| j                  ||       y )Nr  r  r  zNamespace(foo=42, bar='spam')r+   r  r  r   r  r4  s      r   test_namespacezTestStrings.test_namespace  s)    BF30r6*r   c                 Z    t        j                  di ddi}d}| j                  ||       y )N"quotezNamespace(**{'"': 'quote'})rA   r  r  s      r   'test_namespace_starkwargs_notidentifierz3TestStrings.test_namespace_starkwargs_notidentifier  s.    13.12r6*r   c                 ^    t        j                  dddiddi}d}| j                  ||       y )Nr   rt  r  r  z Namespace(a=1, **{'"': 'quote'})rA   r  r  s      r   2test_namespace_kwargs_and_starkwargs_notidentifierz>TestStrings.test_namespace_kwargs_and_starkwargs_notidentifier  s3    6!6W~67r6*r   c                 Z    t        j                  di ddi}d}| j                  ||       y )NvalidTzNamespace(valid=True)rA   r  r  s      r   $test_namespace_starkwargs_identifierz0TestStrings.test_namespace_starkwargs_identifier  s.    27D/2(r6*r   c                 z    t        j                  d      }dt         j                  z  }| j                  ||       y )Nri  r8  zvArgumentParser(prog='PROG', usage=None, description=None, formatter_class=%r, conflict_handler='error', add_help=True))r+   r,   HelpFormatterr  )r   r2   r4  s      r   test_parserzTestStrings.test_parser  s<    ((f5'556 	 	vv.r   N)r   r   r    r!   r  r  r  r  r  r  r  r"  rA   r   r   r  r    s-    =7/"1"+
+
+
+
/r   r  c                       e Zd Zd Zd Zd Zy)TestNamespacec                    t        j                         }| j                  t        t        |d       t        j                  dd      }| j                  |j                  d       | j                  |j                  d       y )Nr   r  r  r  )r+   r  r   r  r   r   r   r~  r  s     r   test_constructorzTestNamespace.test_constructor  s^    !.'2s;"/r"v&r   c                    t        j                  dd      }t        j                  dd      }t        j                  d      }t        j                  d      }| j                  ||       | j                  ||       | j                  ||       | j                  ||       | j                  ||       | j	                  ||k7         | j	                  ||k7         | j	                  ||k7         | j	                  ||k7         y )Nrt  r  r  )r~  r   )r   r  )r+   r  r   assertNotEqual
assertTrue)r   ns1ns2ns3ns4s        r   test_equalityzTestNamespace.test_equality  s      1*  1*  1%  1%c"C%C%C%C%s
#s
#s
#s
#r   c                     t        j                  dd      }| j                  |j                  d       t               | j                  |j                  d       t               y )Nrt  r  r  )r+   r  assertIsr   NotImplemented__ne__r  s     r   $test_equality_returns_notimplementedz2TestNamespace.test_equality_returns_notimplemented$  s@    !q)biio~6biio~6r   N)r   r   r    r&  r.  r3  rA   r   r   r$  r$  
  s    '$ 7r   r$  c                       e Zd Zd Zd Zd Zy)TestEncodingc                     t         j                  j                  |      \  }}|dz  }t        |dd      5 }|j	                          d d d        y # 1 sw Y   y xY w)Nz.pyr  r   rh   )rS   r[   splitextrj   r  )r   r[   r   r  s       r   _test_module_encodingz"TestEncoding._test_module_encoding1  sO    ''""4(a$g. 	!FFH	 	 	s   AAc                 B    | j                  t        j                         y rO   )r8  r+   __file__r   s    r   test_argparse_module_encodingz*TestEncoding.test_argparse_module_encoding7  s    ""8#4#45r   c                 .    | j                  t               y rO   )r8  r:  r   s    r   "test_test_argparse_module_encodingz/TestEncoding.test_test_argparse_module_encoding:  s    ""8,r   N)r   r   r    r8  r;  r=  rA   r   r   r5  r5  /  s    6-r   r5  c                       e Zd Zd Zy)TestArgumentErrorc                 j    d}t        j                  d |      }| j                  t        |      |       y )Nzmy error here)r+   r  r   r   )r   r   r   s      r   test_argument_errorz%TestArgumentError.test_argument_errorC  s-    &&tS1US)r   N)r   r   r    rA  rA   r   r   r?  r?  A  s    *r   r?  c                       e Zd Zd Zy)TestArgumentTypeErrorc                    d }t        dd      }|j                  d|       | j                  t              5 }|j	                  dg       d d d        | j                  dj                  j                         y # 1 sw Y   0xY w)	Nc                 ,    t        j                  d      )Nspam!)r+   ArgumentTypeErrorr3  s    r   r  z<TestArgumentTypeError.test_argument_type_error.<locals>.spamP  s    ,,W55r   ri  Fr5  r   rp  rR  z-usage: PROG x
PROG: error: argument x: spam!
)r   r   r   r   r;   r   r  r   )r   r  r2   r  s       r   test_argument_type_errorz.TestArgumentTypeError.test_argument_type_errorN  s|    	6 ,%HCd+23 	'rug&	'J,,	.	' 	's   A;;BN)r   r   r    rH  rA   r   r   rC  rC  L  s    
.r   rC  c                       e Zd Zd Zd Zd Zy)TestMessageContentErrorc                    t        dd      }|j                  dt               |j                  dt        d       |j                  d	t        d
       | j	                  t
              5 }|j                  g        d d d        t        j                        }| j                  |d       | j                  |d       | j                  |d	       | j	                  t
              5 }|j                  dg       d d d        t        |j                        }| j                  |d       | j                  |d       | j                  |d	       | j	                  t
              5 }|j                  ddg       d d d        t        |j                        }| j                  |d       | j                  |d       | j                  |d	       y # 1 sw Y   MxY w# 1 sw Y   xY w# 1 sw Y   nxY w)Nri  r   rV  req_posrp  -req_optTr  need_oner  )r   rv  req_optmyXargumentz
-req_opt=1)
r   r   r   r  r   r   r;   r  r>   r  r   r2   r  r   s       r   %test_missing_argument_name_in_messagez=TestMessageContentError.test_missing_argument_name_in_message`  s   +rBIC0JS4@JS<23 	"rb!	"",,i(i(j)23 	/r}o.	/",,i(i(j)23 	=r}l;<	=",,i(i(j)#	" 	"	/ 	/	= 	=s$   *G$GG GG G)c                    t        dd      }|j                  dt               |j                  dt        d       |j                  d	t        d
d       | j                  t              5 }|j                  g        d d d        t        j                        }| j                  |d       | j                  |d       | j                  |d       | j                  t              5 }|j                  dg       d d d        t        |j                        }| j                  |d       | j                  |d       | j                  |d       y # 1 sw Y   xY w# 1 sw Y   axY w)Nri  r   rV  rL  rp  z	--req_optTr  z	--opt_optr  )r   rv  rn  rO  opt_optz--req_opt=1)r   r   r   r  r  r   r   r;   r  r>   r  rQ  s       r   %test_optional_optional_not_in_messagez=TestMessageContentError.test_optional_optional_not_in_messagey  s8   +rBIC0KcDAKd#$( 	 	*23 	"rb!	"",,i(i(i(23 	/r}o.	/",,i(i(i(	" 	"	/ 	/s   +E%EEE!c                 P   t        dd      }|j                  d       |j                  ddd       | j                  t              5 }|j	                  g        d d d        t        j                        }| j                  |d       | j                  |d       y # 1 sw Y   CxY w)	Nri  r   rV  rL  optional_positionalr  r  r  )	r   r   r   r   r;   r   r  r>   r  rQ  s       r   'test_optional_positional_not_in_messagez?TestMessageContentError.test_optional_positional_not_in_message  s    +rBI&1fM23 	"rb!	"",,i(34		" 	"s   BB%N)r   r   r    rR  rU  rX  rA   r   r   rJ  rJ  ^  s    *2)&5r   rJ  c                       e Zd Zd Zy)TestTypeFunctionCallOnlyOncec                       fd}t        j                         }|j                  d|d       |j                  dj	                               } j                  t        d      |       y )Nc                 *    j                  | d       y)NrF  foo_convertedr   )string_to_convertr   s    r   r  zLTestTypeFunctionCallOnlyOnce.test_type_function_call_only_once.<locals>.spam  s    .8"r   r   rC  r  z--foo spam!r]  r  )r+   r,   r   r;   r   r   r{   r   r  r2   rv   s   `   r   !test_type_function_call_only_oncez>TestTypeFunctionCallOnlyOnce.test_type_function_call_only_once  s[    	# ((*G$>  !4!4!670$7r   N)r   r   r    ra  rA   r   r   rZ  rZ    s    8r   rZ  c                   $    e Zd Zd Zd Zd Zd Zy)TestTypeFunctionCalledOnDefaultc                       fd}t        j                         }|j                  d|d       |j                  g       } j	                  t        d      |       y )Nc                 *    j                  | d       y)Nr   r]  r^  )int_to_convertr   s    r   r  z]TestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_default.<locals>.spam  s    ^Q/"r   r   r   r  r  r+   r,   r   r;   r   r{   r`  s   `   r   /test_type_function_call_with_non_string_defaultzOTestTypeFunctionCalledOnDefault.test_type_function_call_with_non_string_default  sQ    	# ((*G$:  $D)r   c                     d }t        j                         }|j                  d|d       |j                  g       }| j	                  t        d      |       y )Nc                      y)Nr]  rA   )rf  s    r   r  zYTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_default.<locals>.spam  s    "r   r   0r  r]  r  rg  r`  s       r   +test_type_function_call_with_string_defaultzKTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_default  sQ    	# ((*G$<  $0$7r   c                     d }t        j                         }|j                  d|d       |j                  g       }| j	                  t        d      |       y )Nc                     | dz   S )Nr  rA   )str_to_converts    r   r]  zYTestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_default.<locals>.extend  s    !C''r   --testr  r  z**)r  rg  )r   r]  r2   rv   s       r   )test_no_double_type_conversion_of_defaultzITestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_default  sR    	( ((*H63?  $ 	-r   c                     t        j                         }|j                  ddt        g d       |j	                  g       }| j                  |j                  g        y )Nrp  r  r  )r'  r   rn  r   )r+   r,   r   r   r;   r   r  r  s      r   test_issue_15906z0TestTypeFunctionCalledOnDefault.test_issue_15906  sT     ((*H6$&x 	 	9  $B'r   N)r   r   r    rh  rl  rq  rs  rA   r   r   rc  rc    s    	*8
.(r   rc  c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestParseKnownArgsc                 N    t        j                         }|j                  d       y )NrA   r+   r,   r;   r1   s     r   test_arguments_tuplez'TestParseKnownArgs.test_arguments_tuple      ((*"r   c                 N    t        j                         }|j                  g        y rO   rw  r1   s     r   test_arguments_listz&TestParseKnownArgs.test_arguments_list  ry  r   c                 p    t        j                         }|j                  d       |j                  d       y )Nr   r   r+   r,   r   r;   r1   s     r   test_arguments_tuple_positionalz2TestParseKnownArgs.test_arguments_tuple_positional  s,    ((*C &!r   c                 r    t        j                         }|j                  d       |j                  dg       y )Nr   r}  r1   s     r   test_arguments_list_positionalz1TestParseKnownArgs.test_arguments_list_positional  s.    ((*C 3% r   c                     t        j                         }|j                  d       |j                  dj	                               \  }}| j                  t        d      |       | j                  ddg|       y )Nr   z--foo F --bar --bazFr  r.  rd  )r+   r,   r   r  r   r   r{   )r   r2   rv   extrass       r   test_optionalsz!TestParseKnownArgs.test_optionals  se    ((*G$../D/J/J/LMfd+'7+V4r   c                 :   t        j                         }|j                  dddt               |j                  dd       |j                  d       g d	}|j	                  |      \  }}| j                  t        d
dd      |       | j                  g d|       y )Nr^  r  rt  )rv  r  r   r}  r  r   r3  )rA  r.  r   r^  r  rT  ry  TrA  )vr  r3  )r.  r   rT  )r+   r,   r   r  r  r   r{   )r   r2   r   rv   r  s        r   
test_mixedzTestParseKnownArgs.test_mixed  s    ((*D13?H];H%2..t4fad37>,f5r   c                     t        j                         }|j                  ddd       |j                  g       }| j	                  t        g       |       y )Nr   r  ro  )rv  r  r   rg  r  s      r   test_zero_or_more_optionalz-TestParseKnownArgs.test_zero_or_more_optional  sI    ((*CsJ?  $b4(r   c                 b   t        j                         }|j                  ddd       |j                  dd       |j                  dg      }| j	                  t        dgg       |       |j                  ddg      }| j	                  t        g g       |       |j                  d	g      }| j	                  t        dgg       |       |j                  ddg      }| j	                  t        g g       |       |j                  g d
      }| j	                  t        ddgddg      |       y )Nr  r   r  ru  rC  z--foo=--r  r  z-f--)r   r   r~  r  r  r  r   r~  r  r  rg  r  s      r   test_double_dashz#TestParseKnownArgs.test_double_dash  s   ((*D'5E-  *.B/6  '41+T2  &*B/6  $.+T2  !DEc
c
;TBr   N)r   r   r    rx  r{  r~  r  r  r  r  r  rA   r   r   ru  ru    s+    "
!
5	6)Cr   ru  c                   $    e Zd Zd Zd Zd Zd Zy)TestIntermixedArgsc           	          t        j                  d      }|j                  dd       |j                  ddd	      }|j                  d
       |j                  ddt               dj	                         }|j                  |      }| j                  t        dd
dg d      |       |j                  |      \  }}| j                  t        dd
dg       |       | j                  g d|       dj	                         }|j                  |      \  }}| j                  t        dd
ddg      |       | j                  g d|       | j                  |j                         | j                  |j                  d       y )Nri  r8  r   r(   r&  r.  rC  Tr  cmdrestr  )rv  r   zcmd --foo x 1 --bar y 2 3r[  r   r
  )rC  r  r(   r  r  r  r  z!cmd --foo x 1 --error 2 --bar y 3rt  )z--errorr  r  )r+   r,   r   r  r   parse_intermixed_argsr   r{   r  parse_known_intermixed_argsr  r  r  )r   r2   rC  r   rv   r  s         r   
test_basiczTestIntermixedArgs.test_basic  sO   ((f5G%0!!'!EE"F#C8*002++D1CiH$O..t4fCbA4H&1288:99$?fCqcBDI.7 	&,,'t,r   c                 f   t        d      }|j                  d       |j                  d       |j                  dd       dj                         }| j                  t              5 }|j                  |       d d d        | j                  t        j                        d	       y # 1 sw Y   /xY w)
Nri  r8  r  r   r[  ri  ru  rk  z\.\.\.)	r   r   r   r   r   r  r>   r   r  )r   r2   r   r  s       r   test_remainderz!TestIntermixedArgs.test_remainder9  s    +8D!C Cu-!!# y) 	/R((.	/R\\*I6	/ 	/s   'B''B0c                    t        d      }|j                  d      }|j                  ddd       |j                  d	d
       |j                  dddd       |j                  dj	                               }| j                  t        ddgdd       |       | j                  t        |j                  dj	                                | j                  |j                  d       y )Nri  r8  Tr  r   r   r  rn  r}  r  r  r3  r  r5  r  r  z	1 --foo 2r  r  )r3  r(   r  r  )
r   r  r   r  r   r   r{   r   r   r  )r   r2   r   rv   s       r   test_exclusivez!TestIntermixedArgs.test_exclusiveF  s    +833T3B7<eD8&1HC8L++K,=,=,?@C:4dCTJ-v/K/KU[[][.r   c                 2   t        d      }|j                  d      }|j                  ddd       |j                  d	d
       |j                  dddd       | j                  t        |j
                  g        | j                  |j                  d       y )Nri  r8  Tr  r   r   r  rn  r}  r  r  r3  r  r5  r  r  )r   r  r   r   r   r  r   r  rB  s      r   test_exclusive_incompatiblez.TestIntermixedArgs.test_exclusive_incompatibleR  s    +833T3B7<eD8&183(K)V%A%A2F.r   N)r   r   r    r  r  r  r  rA   r   r   r  r    s    -67
//r   r  c                       e Zd Zd Zy)!TestIntermixedMessageContentErrorc                 L   t        dd      }|j                  dt               |j                  dt        d       | j	                  t
              5 }|j                  g        d d d        t        j                        }| j                  |d       | j                  |d	       | j	                  t
              5 }|j                  g        d d d        t        |j                        }| j                  |d       | j                  |d	       y # 1 sw Y   xY w# 1 sw Y   OxY w)
Nri  r   rV  rL  rp  rM  Tr  rO  )r   r   r   r  r   r   r;   r  r>   r  assertNotRegexrQ  s       r   rR  zGTestIntermixedMessageContentError.test_missing_argument_name_in_message_  s    +rBIC0JS4@23 	"rb!	"",,i(i(23 	-r((,	-",,C+i(	" 	"	- 	-s   D:DDD#N)r   r   r    rR  rA   r   r   r  r  \  s    )r   r  c                   *   e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2y1)2TestAddArgumentMetavarz,length of metavar tuple does not match nargsc                 T    t        j                         }|j                  d||       y )Nr   rv  r  )r+   r,   r   )r   rv  r  r2   s       r   do_test_no_exceptionz+TestAddArgumentMetavar.do_test_no_exceptionx  s%    ((*G5'Br   c                    t        j                         }| j                  t              5 }|j	                  d||       d d d        | j                  j                  j                  d   | j                         y # 1 sw Y   =xY w)Nr   r  r   )	r+   r,   r   r  r   r   r  rv   EXPECTED_MESSAGE)r   rv  r  r2   r  s        r   do_test_exceptionz(TestAddArgumentMetavar.do_test_exception|  ss    ((*z* 	GbugF	G**1-t/D/DE	G 	Gs   A;;Bc                 *    | j                  d d       y )Nr  r  r  r   s    r   test_nargs_None_metavar_stringz5TestAddArgumentMetavar.test_nargs_None_metavar_string  s    !!c!:r   c                 :    | j                  d t                      y )Nr  r  tupler   s    r   test_nargs_None_metavar_length0z6TestAddArgumentMetavar.test_nargs_None_metavar_length0  s    T57;r   c                 *    | j                  d d       y )Nr  r  r  r   s    r   test_nargs_None_metavar_length1z6TestAddArgumentMetavar.test_nargs_None_metavar_length1  s    !!f!=r   c                 *    | j                  d d       y )Nr  r  r  r  r   s    r   test_nargs_None_metavar_length2z6TestAddArgumentMetavar.test_nargs_None_metavar_length2  s    T:>r   c                 *    | j                  d d       y )Nr  r  r  r   s    r   test_nargs_None_metavar_length3z6TestAddArgumentMetavar.test_nargs_None_metavar_length3  s    T?Cr   c                 *    | j                  dd       y )Nr  r  r  r  r   s    r   "test_nargs_optional_metavar_stringz9TestAddArgumentMetavar.test_nargs_optional_metavar_string      !!S!9r   c                 :    | j                  dt                      y )Nr  r  r  r   s    r   #test_nargs_optional_metavar_length0z:TestAddArgumentMetavar.test_nargs_optional_metavar_length0      S%':r   c                 *    | j                  dd       y )Nr  r  r  r  r   s    r   #test_nargs_optional_metavar_length1z:TestAddArgumentMetavar.test_nargs_optional_metavar_length1      !!V!<r   c                 *    | j                  dd       y )Nr  r  r  r  r   s    r   #test_nargs_optional_metavar_length2z:TestAddArgumentMetavar.test_nargs_optional_metavar_length2  s    S*=r   c                 *    | j                  dd       y )Nr  r  r  r  r   s    r   #test_nargs_optional_metavar_length3z:TestAddArgumentMetavar.test_nargs_optional_metavar_length3      S/Br   c                 *    | j                  dd       y )Nr  r  r  r  r   s    r   $test_nargs_zeroormore_metavar_stringz;TestAddArgumentMetavar.test_nargs_zeroormore_metavar_string  r  r   c                 :    | j                  dt                      y )Nr  r  r  r   s    r   %test_nargs_zeroormore_metavar_length0z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length0  r  r   c                 *    | j                  dd       y )Nr  r  r  r  r   s    r   %test_nargs_zeroormore_metavar_length1z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length1  r  r   c                 *    | j                  dd       y )Nr  r  r  r  r   s    r   %test_nargs_zeroormore_metavar_length2z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length2      !!Z!@r   c                 *    | j                  dd       y )Nr  r  r  r  r   s    r   %test_nargs_zeroormore_metavar_length3z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length3  r  r   c                 *    | j                  dd       y )Nr  r  r  r  r   s    r   #test_nargs_oneormore_metavar_stringz:TestAddArgumentMetavar.test_nargs_oneormore_metavar_string  r  r   c                 :    | j                  dt                      y )Nr  r  r  r   s    r   $test_nargs_oneormore_metavar_length0z;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length0  r  r   c                 *    | j                  dd       y )Nr  r  r  r  r   s    r   $test_nargs_oneormore_metavar_length1z;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length1  s    S&9r   c                 *    | j                  dd       y )Nr  r  r  r  r   s    r   $test_nargs_oneormore_metavar_length2z;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length2  r  r   c                 *    | j                  dd       y )Nr  r  r  r  r   s    r   $test_nargs_oneormore_metavar_length3z;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length3  r  r   c                 *    | j                  dd       y )Nri  r  r  r  r   s    r   #test_nargs_remainder_metavar_stringz:TestAddArgumentMetavar.test_nargs_remainder_metavar_string  s    !!s!;r   c                 :    | j                  dt                      y )Nri  r  )r  r  r   s    r   $test_nargs_remainder_metavar_length0z;TestAddArgumentMetavar.test_nargs_remainder_metavar_length0  s    !!uw!?r   c                 *    | j                  dd       y )Nri  r  r  r  r   s    r   $test_nargs_remainder_metavar_length1z;TestAddArgumentMetavar.test_nargs_remainder_metavar_length1  s    !!v!>r   c                 *    | j                  dd       y )Nri  r  r  r  r   s    r   $test_nargs_remainder_metavar_length2z;TestAddArgumentMetavar.test_nargs_remainder_metavar_length2  s    !!z!Br   c                 *    | j                  dd       y )Nri  r  r  r  r   s    r   $test_nargs_remainder_metavar_length3z;TestAddArgumentMetavar.test_nargs_remainder_metavar_length3  s    !!!Gr   c                 *    | j                  dd       y )NA...r  r  r  r   s    r    test_nargs_parser_metavar_stringz7TestAddArgumentMetavar.test_nargs_parser_metavar_string  s    !!!<r   c                 :    | j                  dt                      y )Nr  r  r  r   s    r   !test_nargs_parser_metavar_length0z8TestAddArgumentMetavar.test_nargs_parser_metavar_length0  s    VUW=r   c                 *    | j                  dd       y )Nr  r  r  r  r   s    r   !test_nargs_parser_metavar_length1z8TestAddArgumentMetavar.test_nargs_parser_metavar_length1  s    !!!?r   c                 *    | j                  dd       y )Nr  r  r  r  r   s    r   !test_nargs_parser_metavar_length2z8TestAddArgumentMetavar.test_nargs_parser_metavar_length2  s    VZ@r   c                 *    | j                  dd       y )Nr  r  r  r  r   s    r   !test_nargs_parser_metavar_length3z8TestAddArgumentMetavar.test_nargs_parser_metavar_length3  s    V_Er   c                 *    | j                  dd       y )Nrt  r  r  r  r   s    r   test_nargs_1_metavar_stringz2TestAddArgumentMetavar.test_nargs_1_metavar_string      !!3!7r   c                 :    | j                  dt                      y )Nrt  r  r  r   s    r   test_nargs_1_metavar_length0z3TestAddArgumentMetavar.test_nargs_1_metavar_length0      Q8r   c                 *    | j                  dd       y )Nrt  r  r  r  r   s    r   test_nargs_1_metavar_length1z3TestAddArgumentMetavar.test_nargs_1_metavar_length1  s    !!6!:r   c                 *    | j                  dd       y )Nrt  r  r  r  r   s    r   test_nargs_1_metavar_length2z3TestAddArgumentMetavar.test_nargs_1_metavar_length2      Q
;r   c                 *    | j                  dd       y )Nrt  r  r  r  r   s    r   test_nargs_1_metavar_length3z3TestAddArgumentMetavar.test_nargs_1_metavar_length3      Q@r   c                 *    | j                  dd       y )Nr  r  r  r  r   s    r   test_nargs_2_metavar_stringz2TestAddArgumentMetavar.test_nargs_2_metavar_string  r  r   c                 :    | j                  dt                      y )Nr  r  r  r   s    r   test_nargs_2_metavar_length0z3TestAddArgumentMetavar.test_nargs_2_metavar_length0  r  r   c                 *    | j                  dd       y )Nr  r  r  r  r   s    r   test_nargs_2_metavar_length1z3TestAddArgumentMetavar.test_nargs_2_metavar_length1      Q7r   c                 *    | j                  dd       y )Nr  r  r  r  r   s    r   test_nargs_2_metavar_length2z3TestAddArgumentMetavar.test_nargs_2_metavar_length2  s    !!:!>r   c                 *    | j                  dd       y )Nr  r  r  r  r   s    r   test_nargs_2_metavar_length3z3TestAddArgumentMetavar.test_nargs_2_metavar_length3  r  r   c                 *    | j                  dd       y )Nry  r  r  r  r   s    r   test_nargs_3_metavar_stringz2TestAddArgumentMetavar.test_nargs_3_metavar_string  r  r   c                 :    | j                  dt                      y )Nry  r  r  r   s    r   test_nargs_3_metavar_length0z3TestAddArgumentMetavar.test_nargs_3_metavar_length0  r  r   c                 *    | j                  dd       y )Nry  r  r  r  r   s    r   test_nargs_3_metavar_length1z3TestAddArgumentMetavar.test_nargs_3_metavar_length1  r  r   c                 *    | j                  dd       y )Nry  r  r  r  r   s    r   test_nargs_3_metavar_length2z3TestAddArgumentMetavar.test_nargs_3_metavar_length2  r  r   c                 *    | j                  dd       y )Nry  r  r  r  r   s    r   test_nargs_3_metavar_length3z3TestAddArgumentMetavar.test_nargs_3_metavar_length3  s    !!?!Cr   N)3r   r   r    r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  rA   r   r   r  r  t  s   ECF;<>?D
:;=>C
:;=AC
:;:AC
<@?CH
=>@AF
89;<A
898?A
898<Dr   r  c                   ,    e Zd ZdZdZd Zd Zd Zd Zy)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                    t        j                         }| j                  t              5 }|j	                  d|       d d d        | j                  j                  j                  d   | j                         y # 1 sw Y   =xY wNr   ru  r   )	r+   r,   r   r  r   r   r  rv   EXPECTED_RANGE_MESSAGEr   rv  r2   r  s       r   do_test_range_exceptionz(TestInvalidNargs.do_test_range_exception#  sm    ((*z* 	6bu5	6**1-t/J/JK	6 	6   A::Bc                    t        j                         }| j                  t              5 }|j	                  d|       d d d        | j                  j                  j                  d   | j                         y # 1 sw Y   =xY wr  )	r+   r,   r   r  r   r   r  rv   EXPECTED_INVALID_MESSAGEr  s       r   do_test_invalid_exceptionz*TestInvalidNargs.do_test_invalid_exception)  sm    ((*z* 	6bu5	6**1-t/L/LM	6 	6r  c                 L    | j                  d       | j                  d       y )Nr   ru  abcd)r  r   s    r   test_nargs_alphabeticz&TestInvalidNargs.test_nargs_alphabetic1  s$    &&S&1&&V&4r   c                 (    | j                  d       y )Nr   ru  )r  r   s    r   test_nargs_zeroz TestInvalidNargs.test_nargs_zero5  s    $$1$-r   N)	r   r   r    r  r  r  r  r  r   rA   r   r   r  r    s'    4LLN5.r   r  c                       e Zd Zd Zd Zy)TestImportStarc                 l    t         j                  D ]!  }| j                  t        t         |             # y rO   )r+   __all__r)  r   r  s     r   r  zTestImportStar.test>  s*    $$ 	5DOOGHd34	5r   c                 (   t        t              j                         D cg c]2  \  }}|j                  d      s|dk(  st	        j
                  |      s|4 }}}| j                  t        |      t        t        j                               y c c}}w )Nr   ngettext)	r   r+   r   
startswithinspectismoduler   r   r$  )r   rd   r  r   s       r   'test_all_exports_everything_but_modulesz6TestImportStar.test_all_exports_everything_but_modulesB  sy      $H~335
eOOC(DJ,>##E* 
 
 	x/?/?(@A
s   7BN)r   r   r    r  r*  rA   r   r   r"  r"  <  s    5Br   r"  c                   $     e Zd Z fdZd Z xZS )TestWrappingMetavarc                     t         |           t        d      | _        d}| j                  j	                  d|       y )N9this_is_spammy_prog_with_a_long_name_sorry_about_the_namez<http[s]://example:1234>z--proxyr2  )r   rK   r   r2   r   )r   r  r   s     r   rK   zTestWrappingMetavar.setUpN  s9    0G

 -  G <r   c                     | j                   j                         }| j                  |t        j                  d             y )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>
            )r2   r  r   r  r  )r   	help_texts     r   test_help_with_metavarz*TestWrappingMetavar.test_help_with_metavarX  s4    KK++-	HOO 5 % 	r   )r   r   r    rK   r1  r"   r#   s   @r   r,  r,  L  s    =	r   r,  c                       e Zd Zd Zd Zd Zy)TestExitOnErrorc                 ~    t        j                  d      | _        | j                  j                  ddt               y )NF)exit_on_errorz
--integersN)r  r   )r+   r,   r2   r   r  r   s    r   rK   zTestExitOnError.setUpf  s-    --EB  s Er   c                     | j                   j                  dj                               }| j                  |t	        j
                  d             y )Nz--integers 4r  )integers)r2   r;   r   r   r+   r  r  s     r   !test_exit_on_error_with_good_argsz1TestExitOnError.test_exit_on_error_with_good_argsj  s:    [[##N$8$8$:;X//;<r   c                     | j                  t        j                        5  | j                  j	                  dj                                d d d        y # 1 sw Y   y xY w)Nz--integers a)r   r+   r  r2   r;   r   r   s    r    test_exit_on_error_with_bad_argsz0TestExitOnError.test_exit_on_error_with_bad_argsn  sF    x556 	;KK"">#7#7#9:	; 	; 	;s   *AAN)r   r   r    rK   r9  r;  rA   r   r   r3  r3  d  s    F=;r   r3  c                  @    i t         _        t               t        _        y rO   )r  r  rP  r  rA   r   r   tearDownModuler=  s  s    EJEJr   __main__)r-   r9   r(  r   r  rS   r_   r]   r   r  rP   unittestr+   r  test.supportr   r   TextIOWrapperr   rC   r%   skip_unless_working_chmodr   rM   rt   r{   r   r   r   r,   r   r   r   r   r   r   r   r  r  r"  r$  r*  r,  r:  r=  rF  rV  rX  r]  rc  rl  rq  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-  r/  r1  r3  r5  r7  r9  r;  r=  r@  rB  rE  rG  rI  rK  rR  rX  rZ  r]  r_  ra  rf  rh  ro  ru  ry  r}  r  r  r  r   r   r  r  r  	eq_stderrr  r  
eq_bstderrr  r  r  r  r  skip_if_dac_overrider  r  r  r   r  r  r  r  r)  r0  r9  rS  r\  rc  r  r  r0  rE  rd  ro  rw  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r'  r-  r0  r4  r9  r<  rA  rG  rI  rK  rM  rO  rQ  rU  rX  rZ  r]  r`  rd  rg  ri  rk  rm  ro  ry  r  r  r  r  r  r  r  r  r  r  r  r  r$  r5  r?  rC  rJ  rZ  rc  ru  r  r  r  r  r"  r,  r3  r=  r   mainrA   r   r   <module>rG     sX      	  	   
      " :""" :$FH%% F:x    $$D6 D %D.& ) )%) %# L>!8!8 >o9D o9b 		&'7Cn n 4. ^  ~  
> 
n . $ &N & ( , .^  
 
	> 	 . .  .> &. "> "
N 
~ N N > > >@
 
	 		> 	 &^  ~  "N "~ "n &N .~ N N 	^ 		N 	N > . > >   	 	 ~ 	 	 ~ n ^ N 	n 	^ N .   > 
^ 
	N 	>  
. 
   ~ "> &~ &.  
 
^ 6. & (. **L. *Z\> DKx K0 h h , ,, W%h'	h'	n-	/
/
/F /"L. 03< 3"\> .'F '" L.   , L.   & \>     
] 
  
38 3$
 
$~ . ,> ,>8 >.>N >BJX J$~ w wz!+H !+Nm9 m9f@&x @&D-?f -?` '8  F( (V7H B!'8 !H*( *Z''8 'T%7H %P' 'R/('8 /(jf 	-	
	(	
	&	
	1	
	0	
	7	
	0	
	>	X0h X0|8X 8."( "&Q1$ Q1f 		*>5"E"l "H3B| 3Bl,< ,^ >1< 1h% %P3 3l6L 6r< ,\ >L :!| !H< 2# #L< D!L !H\ 4| 0+ +\\ "
< 
L *| (L 4 *| (< *\ .< 0< 6.l .b-\ -`0| 0dL (L 2 :' 'V< BxIh xI|-( -<3E8 3EtEQh EQXC/( C/R7H 7J-8 -$* *.H .$65h 65z
88 
8 +(h +(b:C :CB=/ =/~) )0eDX eDP.x .@BX B ( 0;h ; zHMMO r   