
    6bhi                       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 d dlmZmZ d dlmZ  G d dej,                        Z G d d	ej0                        Z G d
 dej0                        Zej4                   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jD                        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'      Z0 G d, d-e'      Z1 G d. d/e'      Z2 G d0 d1e'      Z3 G d2 d3e'      Z4 G d4 d5e'      Z5 G d6 d7e'      Z6 G d8 d9e'      Z7 G d: d;e'      Z8 G d< d=e'      Z9 G d> d?e'      Z: G d@ dAe'      Z; G dB dCe'      Z< G dD dEe'      Z= G dF dGe'      Z> G dH dIe'      Z? G dJ dKe'      Z@ G dL dMe'      ZA G dN dOe'      ZB G dP dQe'      ZC G dR dSe'      ZD G dT dUe'      ZE G dV dWe'      ZF G dX dYe'      ZG G dZ d[e'      ZH G d\ d]e'      ZI G d^ d_e'      ZJ G d` dae'      ZK G db dce'      ZL G dd dee'      ZM G df dge'      ZN G dh die'      ZO G dj dke'      ZP G dl dme'      ZQ G dn doe      ZR G dp dqe'      ZS G dr dse'      ZT G dt due'      ZU G dv dwe'      ZV G dx dye'      ZW G dz d{e'      ZX G d| d}e'      ZY G d~ de'      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'      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e'      Z~ G dȄ dee'      Z G dʄ de      Z e       Z e       Z G d̄ dͫ      Z edΫ      Z edϫ      Z edЫ      Z edѫ      Z edҫ      Z edӫ      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  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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 d0 d1e      Z G d2 d3e$      ZefZ& ed4e&i       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 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(  rZ eej                        dkD  r0ej                  d   dk(  r ee        ej                  d         ej                          yy(      N)StrEnum)	os_helper)TestTranslationsBaseupdate_translation_snapshots)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      </opt/python-3.12.12/usr/lib/python3.12/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,   sX    ((*&&t,JJ+,KKq%K0 - -,,, -,s#   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subTestr0   redirect_stdoutr	   r1   r   r2   assertRegexr   )r   r5   r9   mocked_stderrs       r   test_skip_invalid_stdoutz&StdStreamTest.test_skip_invalid_stdout4   s    ((*f//$8
D $'**40**=9

/0  !7!7!99E 1 :  1 ('
 10 :9  10 ('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#   r6   rC    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.setUpI   s&     	 = = ?@Ir   N)r!   r"   r#   rN   rD   r   r   rF   rF   G   s    r   rF   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   rN   zTempDirMixin.setUpT   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)rV   rY   rX   walkrU   chmodpathjoinstatS_IWRITEshutilrmtree)r   rootdirsfilesnames        r   tearDownzTempDirMixin.tearDownY   sv    
!#!FD$dmmT:DMMJ  "G 	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)rV   r^   r_   rU   openwrite)r   filename	file_pathfiles       r   create_writable_filez!TempDirMixin.create_writable_file`   sK    GGLL9	)S73tJJx  4 4s   AAc                 j    t        j                  | j                  |      t        j                         y rR   )rV   r]   rr   r`   S_IREAD)r   ro   s     r   create_readonly_filez!TempDirMixin.create_readonly_filef   s    
**84dllCr   N)r!   r"   r#   rN   rh   rr   ru   rD   r   r   rP   rP   Q   s     
+Dr   rP   c                       e Zd Zd Zy)Sigc                      || _         || _        y rR   )argskwargsr   ry   rz   s      r   r   zSig.__init__k   s    	r   Nr!   r"   r#   r   rD   r   r   rw   rw   i   s    r   rw   c                       e Zd Zd Zd Zd Zy)NSc                 :    | j                   j                  |       y rR   )__dict__update)r   rz   s     r   r   zNS.__init__r   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__u   sU    dmm1134IIEw}EF	:..	:: Fs   A!c                 0    t        |       t        |      k(  S rR   )varsr   others     r   __eq__z	NS.__eq__z   s    DzT%[((r   N)r!   r"   r#   r   r   r   rD   r   r   r~   r~   p   s    %;
)r   r~   c                       e Zd ZddZy)ArgumentParserErrorNc                 l    t         j                  | |||       || _        || _        || _        || _        y rR   )	Exceptionr   r-   stdoutstderr
error_code)r   r-   r   r   r   s        r   r   zArgumentParserError.__init__   s2    4&&9$r   )NNNr|   rD   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>   ry   rz   
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 rR   )r   r   r>   r   )r   ry   rz   r>   r   s       r   r>   z%ErrorRaisingArgumentParser.parse_args   s%    5tG
%jB4B6BBr   c                 >    t         t        | 
  }t        |g|i |S rR   )r   r   r3   r   )r   ry   rz   r3   r   s       r   r3   zErrorRaisingArgumentParser.exit   s%    /;%d<T<V<<r   c                 >    t         t        | 
  }t        |g|i |S rR   )r   r   errorr   )r   ry   rz   r   r   s       r   r   z ErrorRaisingArgumentParser.error   s%    0$=%e=d=f==r   )r!   r"   r#   r>   r3   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_argumentry   rz   )r5   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   ry   rz   )r5   r   groupr   s       r   	one_groupz1ParserTesterMetaclass.__init__.<locals>.one_group   s9    --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   ry   rz   )r5   r   ir   r   s        r   many_groupsz3ParserTesterMetaclass.__init__.<locals>.many_groups   sG    #$78311(Q,?"""CHH;

; 9r   c                 $    | j                  |      S )z#Parse the args by passing in a list)r>   )r5   ry   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>   )r5   ry   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 rR   rD   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!JI ) 2 2I%'9?JE #I09 (+4( J	7; "K % s   >B	B! B!c                     |j                   j                  }|j                   j                  } |j                  |i |}| j	                  ||j
                         |S rR   )r   ry   rz   r   r   r   )r   testerry   rz   r5   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                 0   | j                  |      }|j                  D ]^  }|j                         }|j                  |      5  |j	                  t
        |      5  |j                  |       d d d        d d d        ` y # 1 sw Y   xY w# 1 sw Y   wxY w)Nry   )msg)r   failuressplitr?   assertRaisesr   r>   )r   r   r5   args_strry   s        r   r   z>ParserTesterMetaclass.__init__.<locals>.AddTests.test_failures  s}    ))&1 &H#>>+DT2#001D$0O"--d3 P 32 !0 PO 32s$   BB -B B	BB	c                 $   | j                  |      }|j                  D ]d  \  }}t        |t              r|j	                         }|j                  |      5  | j                  ||      }|j                  ||       d d d        f y # 1 sw Y   qxY w)Nr   )r   	successesr   strr   r?   r   assertEqual)r   r   r5   ry   expected_ns	result_nss         r   r   z?ParserTesterMetaclass.__init__.<locals>.AddTests.test_successes!  s}    ))&1)/)9)9%D+!$,#zz|T2$($4$4VT$B	**;	B 32 *: 32s   %BB	N)r!   r"   r#   r   r   r   r   rD   r   r   AddTestsr      s    <&4Cr   r   )hasattrrw   r   r   r   object)clsrg   basesbodydictr   r   r   r   r   r   r   r>   s               r   r   zParserTesterMetaclass.__init__   s    ## s./#&5C sN+9C
	=
	<	<	+	(+	Cv +	C^ (K@M'1
mZ8 2 Ar   N)r!   r"   r#   r$   r   rD   r   r   r   r      s    a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$   rw   r   r   r~   r   rD   r   r   r   r   7  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   rD   r   r   r  r  E  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   rD   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   rD   r   r   r  r  m  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                   Z   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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  z-f=az-foo=br   N)r  r  z-foob ar   z-foob=az-foor az-foor=az-fooba az-fooba=az-foora az-foora=ar#  z	-foobar=ar$  z	-foorab=ar   rD   r   r   r&  r&  }  s    Ay>3y>:"H 
RtD)*	Bc$/0	Bc$/0	Bd3/0	Bd3/0	Rs401	Rs401	RtC01	RtC01	bD12	bD12	bS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   rD   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   rD   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   rD   r   r   r0  r0    s    A 	J|,G HH	Ru$'(	Be-.	"Dd+,	2Tt,-	Bd-.	Rt./Ir   r0  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 anotherr1  r  r  r4  )r2  r3  r4  r5  r6  r   FN)r7  baz--ba Xr9  z--ba=Xr:  Tr;  r<  r   rD   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  r2  -bazr  r  r  )r2  -fbarz-fbazz-bazf-b BBr   FNr  barbazTz--ba BrE  z
-f --bar Bz-f -bz-ba -fr   rD   r   r   rA  rA    s    F 	D&GF=3
 AH	R%Tt,-	rDd-.	23D12	rDct45	"t2./	2$B/0Ir   rA  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  )r2  rC  rD  rE  r  --bar BrB  r8   --helpz+hz::helpz/helpr   NrF  T::ba BrE  
+f ::bar B+f /b/ba +f
r!   r"   r#   r$   rw   r   r   r   r~   r   rD   r   r   rJ  rJ    s    C>D&GF=3
 qH	R%Tt,-	rDd-.	23D12	rDct45	"t2./	2$B/0Ir   rJ  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/issue9444rK  TrL  rO  r  r  rP  rQ  r  r  r  )r2  rC  rD  rE  r  rR  rB  r   FNrF  rT  rE  rU  rV  rW  rX  rD   r   r   rZ  rZ    s    + =D&GF=3
 HH	R%Tt,-	rDd-.	23D12	rDct45	"t2./	2$B/0Ir   rZ  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+-FrL  r   r  r  z+yz+z)-wz-xyzz+xr  z+xyzr   r   yr  Tz+y -xz+yz -xNrX  rD   r   r   r\  r\    s    Ju=D&D&D&
H 
R%5E*+	rDEU+,	"ttu-.	2-.	Ir   r\  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   rD   r   r   ra  ra  (  sn    F 	D+tY|D 4H	R	r$ 	b&'	r$ 	Bt$%Ir   ra  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_barri  z--baz ggz--foo-bar h --baz ihr   z--baz j --foo-bar kkjr   rD   r   r   rg  rg  8  sf    4{+Sx-HIuH	3t45	BtC01	3s ;<	3s ;<	Ir   rg  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   rD   r   r   rp  rp  E  sU    4t9c$&;<uH	R$"	SB 	TS!"Ir   rp  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   rD   r   r   ru  ru  Q  s9    At9+T{H	R$Z	cIr   ru  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   rD   r   r   rw  rw  \  s?    0t1-.T{H	R$Z	seIr   rw  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      ry  )r   r   r   -x a ba -xa -x br   Nr   z-x a b cr   bcr   rD   r   r   r|  r|  g  s:    1t1-.>H	R$Z	R/*+Ir   r|  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 Optionalr]  ?ry  r   r  )rz  r  r  spamrz  rr  r	  4284)rz  r   r  rr  2r   NT   rj   r   r_  r  z-w 2z-x 2z-y 2z-z 2   
r!   r"   r#   r$   rw   intr   r   r~   r   rD   r   r   r  r  r  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   *ry  r  r  r  r   r   Nrs  r   r~  r  -y a-y a br   rD   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   +ry  r  r  r  )r   r   r  r  za -y br   Nrs  r   r   r~  r  r  r  r   rD   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-f abz-fadz-gaz-g 6r   N)r  rk  r  r   z-f cr  z-g 0r   z-g 03r}  z-fb -g4r     r!   r"   r#   r$   rw   r  ranger   r   r~   r   rD   r   r   r  r    s    6 	D% DsE!H-/ =H	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 1rx  r   z-x42r  Nr  rD   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   rD   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$   rw   r   r   r   r~   r   rD   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   rD   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   rD   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   r5   cms      r   
test_constz$TestBooleanOptionalAction.test_const  sc    ((*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  rD   )r.   r/   assertWarnsDeprecationWarningr   r  boolr4   s     r   test_deprecated_init_kwz1TestBooleanOptionalAction.test_deprecated_init_kw  s   ((*0155    2 0155    2 0155    2 0155    2 0155    2 0155    21A 21 21 21 21 21 21sG   #F*'F'.#F4.#G .#G.#GF$'F14F= G	GG!)r!   r"   r#   r$   rw   r.   r  r   r   r~   r   r  r  rD   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$   rw   r.   r  r   r   r~   r   rD   r   r   r  r  6  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 Optionalrh  appendr  r   rh  a --baz	--baz a br   NrH  --baz ar   --baz a --baz br  r   rD   r   r   r  r  B  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  rh  r  r9  r  rr  r  r   r  r  r   r  )r9  r   r  Nr   rD   r   r   r  r  N  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  r2  )z-f vr  r  r   N)r  r+   r  rG  r   rD   r   r   r  r  Z  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$   rw   r   r   r   r~   r   rD   r   r   r  r  m  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  r9  )r  r  rr  r  r  r  r  r  r   r  r  r   r  Nr  rD   r   r   r  r  |  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   rx  r   rD   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d ed
dd      fd edd
d      fgZy
)"TestOptionalsAllowLongAbbreviationz2Allow long options to be abbreviated unambiguouslyr   --foobaz--foobler  r  z--foob 5--foobr   NF)r+   foobazfooblez--foo 77z--foo=7z	--fooba ar   z	--fooba=az--foobl --foo grk  Tr   rD   r   r   r  r    s    < 	GJJ|,
 H%H	RDe45	B3tE:;	B3tE:;	bT#e<=	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   --foodler  r  --foonly)-foon 3z--foon 3--foodz--food --foo 2r   Nr+   foodlefoonlyz--foo 33z--foonly 7 --foodle --foo 2r  Tr  rX  rD   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rM  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  rX  rD   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       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)/TestOptionalsDisallowSingleDashLongAbbreviationr  Fr  r  z-foodler  r  z-foonly)r  z-foodz-food -foo 2r   Nr  z-foo 3r  z-foonly 7 -foodle -foo 2r  Tr  rX  rD   r   r   r  r    sq    ;.FIl+I
 4H	RDt45	2#eD9:	#RCS%IJ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-ccrccrX  rD   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+ccrccrX  rD   r   r   r  r    s    O%@D	D! gH	R$$ 	SD!"	dd#$	TQ 	BN#	2?#Ir   r  c                   4    e Zd Z G d de      Zd Zd Zd Zy)TestStrEnumChoicesc                       e Zd ZdZdZdZy)TestStrEnumChoices.ColorredgreenblueN)r!   r"   r#   REDGREENBLUErD   r   r   Colorr    s    r   r  c                     t        j                         }|j                  d| j                         |j	                  ddg      }| j                  |j                  | j                  j                         y )N--colorr  r  )r.   r/   r   r  r>   r   colorr  r   r5   ry   s      r   test_parse_enum_valuez(TestStrEnumChoices.test_parse_enum_value  sX    ((*Itzz:  )U!34TZZ^^4r   c                     t        j                         }|j                  d| j                  d       | j	                  d|j                                | j	                  d|j                                y )Nr  zChoose a colorr  helpz[--color {red,green,blue}]z  --color {red,green,blue})r.   r/   r   r  r  format_usageformat_helpr4   s     r   'test_help_message_contains_enum_choicesz:TestStrEnumChoices.test_help_message_contains_enum_choices  sZ    ((*Itzz@PQ2F4G4G4IJ2F4F4F4HIr   c                     t        j                  d      }|j                  d| j                         | j	                  t         j
                  d|j                  ddg       y )NFexit_on_errorr  r  z9invalid choice: 'yellow' \(choose from red, green, blue\)yellow)r.   r/   r   r  assertRaisesRegexArgumentErrorr>   r4   s     r   $test_invalid_enum_value_raises_errorz7TestStrEnumChoices.test_invalid_enum_value_raises_error  sT    ((u=Itzz:""H!		
r   N)r!   r"   r#   r   r  r  r$  r+  rD   r   r   r  r    s     
5J
r   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   rD   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+   rx  ry  r.  r   r  Nr   rD   r   r   r1  r1  ,  s/    8uA./ H	bcUmIr   r1  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  ry  )r   r   r   a b cr/  r   r  r  Nr   rD   r   r   r3  r3  6  s2    8uA./'H	Sz"#Ir   r3  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  ry  r   r   r  r   r/  r  Nr   rD   r   r   r6  r6  @  sN    :uC01vH	RBZ	bcUm	Sz"#Ir   r6  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  rG  r  r   r   r  r   r/  r  Nr   rD   r   r   r8  r8  L  sP    HuC?@vH	RE]	bcUm	Sz"#Ir   r8  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  ry  r   r   r   r  r/  r  Nr   rD   r   r   r:  r:  X  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  ry  r   r/  r   Nr  r   r   rD   r   r   r<  r<  c  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   rD   r   r   r>  r>  n  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  rz  r   rr  )r   r/  1 2r   r  r  1rx  Nr  rD   r   r   r@  r@  y  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+   rG  )r   r   r   r4  r/  r   r  r+   rG  Nr   rD   r   r   rE  rE    s3    7u:s5z2'H	s$%Ir   rE  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+   rG  rx  ry  )r   r   r   r4  r/  r   r  rF  Nr   rD   r   r   rH  rH    s8    @u:s5':;*H	s&'Ir   rH  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  ry  rG  r   r   r   r/  a b c dr4  r   r  r  rF  Nr   rD   r   r   rJ  rJ    s:    BuA.E
;3H	"#s-.Ir   rJ  c                   n   e Zd ZdZ ed       ed       edd      gZg dZd ed	dg 
      fd ed	ddg
      fd ed	d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dg
      fd eddddg
      fd eddddg
      fgZy	)"TestPositionalsNargsNoneZeroOrMorez>Test a Positional with no nargs followed by one with unlimitedr   r+   rG  r  ry  )r   r   
a b -x X cr   Nr   r+   rG  r/  r  r4  r  -x X ar9  a -x X-x X a ba -x X ba b -x X
-x X a b c
a -x X b c
a b c -x Xr   rD   r   r   rN  rN    s    Ht9c%j#e32GH*H	b4Sb)*	Ts./	"t3*56	2"-.	2"-.	R#3SE23	R#3SE23	R#3SE23	rCSsCj9:	rCSsCj9:	rCSsCj9:Ir   rN  c                   &   e Zd ZdZ ed       ed       edd      gZg dZd ed	d
dg      fd ed	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dg      fd edd
ddg      fd edd
ddg      fgZy	)!TestPositionalsNargsNoneOneOrMorez@Test a Positional with no nargs followed by one with one or morer   r+   rG  r  ry  r   r   r   rO  r/  Nr   r  rP  r4  r  rS  r9  rT  rU  rV  rW  rX  r   rD   r   r   rZ  rZ    s    Jt9c%j#e32GH/H	Ts./	"t3*56	R#3SE23	R#3SE23	R#3SE23	rCSsCj9:	rCSsCj9:	rCSsCj9:	Ir   rZ  c                       e Zd ZdZ ed       e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d eddd
      fd eddd
      fd eddd
      fgZy	) TestPositionalsNargsNoneOptionalz@Test a Positional with no nargs followed by one with an Optionalr   r+   rG  r  ry  r   r   r4  r   NrP  r/  r  rQ  r9  rR  rS  rT  rU  r   rD   r   r   r]  r]    s    Jt9c%j#e32GH%H	b4Sd+,	Ts,-	2$/0	2$/0	R#3C01	R#3C01	R#3C01Ir   r]  c                   8   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	dgd
      fd ed	ddgd
      fd edg d
      fd edg d
      fd eddgd
      fd eddgd
      fd edddgd
      fd edddgd
      fg	Zy	)"TestPositionalsNargsZeroOrMoreNonez@Test a Positional with unlimited nargs followed by one with noner   r+   r  ry  rG  )r   r   rT  rW  rO  r   NrP  r/  r  r4  r  rQ  r9  rR  rS  rU  rV  rX  r   rD   r   r   r`  r`    s    Jt9c%s&;SZHDH	b4RS)*	Tu#./	"t#s56	2-.	2-.	R#C5c23	R#C5c23	rCc3ZS9:	rCc3ZS9:
Ir   r`  c                   
   e Zd ZdZ ed       edd       ed      gZg dZd ed	d
gd      fd ed	d
dgd      fd edd
gd      fd edd
gd      fd edd
gd      fd edd
dgd      fd edd
dgd      fgZy	)!TestPositionalsNargsOneOrMoreNonezBTest a Positional with one or more nargs followed by one with noner   r+   r  ry  rG  )r   r   r   rW  rO  r/  Nr   r  rP  r4  r  rS  r9  rT  rU  rV  rX  r   rD   r   r   rb  rb    s    Lt9c%s&;SZH=H	Tu#./	"t#s56	R#C5c23	R#C5c23	R#C5c23	rCc3ZS9:	rCc3ZS9:Ir   rb  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  rG  r^  r   rF  r/  r  Nr   rD   r   r   rd  rd    sG    LuC<c%jI%H	bRS!"	s$%Ir   rd  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  ry  rG  r  r   r   r   r/  r   r  rF  r4  r  Nr   rD   r   r   rf  rf    sR    GuA.E0EF!H	Szr*+	"#s#/0Ir   rf  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  ry  rG  r  )r   r   r   r/  r4  r   r  r  rF  Nr   rD   r   r   ri  ri    s?    IuA.E0EF(H	"#s#/0Ir   ri  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  ry  rG  r  )r   r   r   rL  r/  r   r  NrF  r4  r  r   rD   r   r   rk  rk    sP    AuA.E0EF,H	Szt,-	"#s-.Ir   rk  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  ry  rG  rx  r   r   r   rF  r/  r  r4  r  Nr   rD   r   r   rm  rm  (  sg    GuC0#e12EFGH	bRcU#$	u3%()	"#s#/0Ir   rm  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  ry  rG  rx  rg  r/  r   r  rF  r4  r  Nr   rD   r   r   ro  ro  4  sR    IuC0#e12EF!H	u3%()	"#s#/0Ir   ro  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  ry  rG  rx  r^  r   NrF  r/  r  r   rD   r   r   rq  rq  ?  sL    IuC0#e12EF%H	bTu%&	s&'Ir   rq  c                   H   e Zd ZdZ ed       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d eddg dg      fd eddg dg      fd eddg dg      fd edddgdg      fd edddgdg      fd edddgdg      fgZy)#TestPositionalsNargsNoneZeroOrMore1z=Test three Positionals: no nargs, unlimited nargs and 1 nargsr   r+   rG  r  ry  rH  rx  r[  r/  Nr   r  r   r+   rG  rH  r4  r  rS  r9  rT  rU  rV  rW  rX  r   rD   r   r   rs  rs  J  s    G 	D	E
EE	 0H	Ts67	"t3%cU;<	R#3BSE:;	R#3BSE:;	R#3BSE:;	rCSse#?@	rCSse#?@	rCSse#?@	Ir   rs  c                   v   e Zd ZdZ ed       ed       edd       edd      gZg d	Zd
 edddgdg      fd eddddgdg      fd edddgdg      fd edddgdg      fd edddgdg      fd edddgdg      fd eddddgdg      fd eddddgdg      fd eddddgdg      fg	Zy)"TestPositionalsNargsNoneOneOrMore1z?Test three Positionals: no nargs, one or more nargs and 1 nargsr   r+   rG  r  ry  rH  rx  )r   r   r   r  za b -x X c dza b c -x X dr4  Nr   r  r  rt  rL  r  rV  r9  rW  rO  rX  z-x X a b c dza -x X b c dza b c d -x Xr   rD   r   r   rv  rv  `  s   I 	D	E
EE	 GH	"t3%cU;<	B3S#JSEBC	rCSse#?@	rCSse#?@	rCSse#?@	rCSse#?@	csc
FG	csc
FG	csc
FG
Ir   rv  c                   B   e Zd ZdZ ed       ed       eddd       edd	
      gZg dZd eddddg      fd eddddg      fd eddddg      fd eddddg      fd eddddg      fd eddddg      fd eddddg      fd eddddg      fgZy)!TestPositionalsNargsNoneOptional1z;Test three Positionals: no nargs, optional narg and 1 nargsr   r+   rG  r        ?r  rH  rx  ry  r[  r/  Nr   r  rt  r4  r  rS  r9  rT  rU  rV  rW  rX  r   rD   r   r   rx  rx  w  s    E 	D	E
Ee,E	 0H	TsC59:	"t#C59:	R#3Eu=>	R#3Eu=>	R#3Eu=>	rCScu=>	rCScu=>	rCScu=>	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gZy)$TestPositionalsNargsOptionalOptionalzTest two optional nargsr+   r  ry  rG  r  r  r   r4  r   NrF  r   r/  r  r   rD   r   r   r{  r{    se    ! 	EEb) !H	RDb!"	bSb!"	s$%Ir   r{  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  ry  rG  r  r   r   NrF  r   r/  r  r4  r  r   rD   r   r   r}  r}    sn    ;uC0#e32GHyH	RDb!"	bSb!"	s&'	"3*-.	Ir   r}  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  ry  rG  r  r   r   r   NrF  r/  r  r4  r  r   rD   r   r   r  r    sc    =uC0#e32GHG}H	bTu%&	s&'	"3*-.Ir   r  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   rl  r  efr   r  rk  N)
r!   r"   r#   r$   rw   setr   r   r~   r   rD   r   r   r  r    s=    0vs9~>?-H	bcl	bclIr   r  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  r  4r  r  15   Nr  rD   r   r   r  r    s?    'vCrCD-H	baj	rr{Ir   r  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  rz  rK  r4  r   r  r  r  Nr   rD   r   r   r  r    sI    " 	F8$F81- 4H	"3c
+,-Ir   r  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  ry  z-4r_  r  r+  r  r,  z-315r   NFrs  r   Tz-4 ar   rD   r   r   r  r    ss    E 	CsDs<0 f~H	R$% !	b3% !	rDD!"	cT"#	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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  ry  z-k4r_  r  r  z-k3r   NFrs  r,  r   Tz-k4 ar   rD   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  ry  r  z--yyyr_  r*  r   Nrs  za badgerz	-a badgerz--yyy=a badgerz--yyy=-a badger)r!   r"   r#   rw   r   r   r~   r   rD   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-+rM  -r   r  r7  )r+  rz  r  r  r_  r  )r+  r   rr  z-+-r  r  r  r  z+ -r   NFr^  z- Xr9  z+ -3Tz- ===z===)
r!   r"   r#   rw   r   r  r   r   r~   r   rD   r   r   r  r    s    -CcH5CcR0EL1
 e}H	R$"&'	b8rU+,	SB%()	dbE*+	TR4()	"ue,-Ir   r  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  ry  r_  r   Nrs  r   r   z	-x a -- br  r  r  r   rD   r   r   r  r  "  s    It3/S1DEH	R$"	rB"~	ser"#	bC5SE*+	b4C5!"	bSE"#	2#'(Ir   r  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ddgd
      fd edg dd	
      fd edg d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_  ...ry  r	  )r   r	  z-z Zr9  Nr^  z-z Z XZz
-z Z X A BArE  z
X -z Z A B)r	  r  r  rE  z
X A -z Z B)r  r	  r  rE  
X A B -z Z)r  rE  r	  r  z	X Y --fooYr   r   rD   r   r   r  r  2  s    <s8SE%:CIF!H	b3"%&	2rS)*	rCC:56	rC#8DAB	rC#8DAB	rC#8DAB	b33.D9:Ir   r  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  ry  )r   z-y2.5r   z-x -az-x -3z-x -3.5z-3 -3.5z-x -2.5z	-x -2.5 az-3 -.5za x -1z-x -1 az-3 -1 ar   Nr^  z-x 2.5      @z-x 2.5 ar   z-3.5      ?z-3-.5g      z-3 .5za -3.5za -x 1g      ?z-x 1 az-3 1 a)
r!   r"   r#   r$   rw   floatr   r   r~   r   rD   r   r   r  r  B  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   r  c                      e Zd ZdZ eddeej                         eddeej                         eddej                  	       ed
deej                         eddeej                        gZg d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d
 e
d      fd e
d      fd e
g       fd e
ddg      fg
Zy)TestDefaultSuppressz%Test actions with suppressed defaultsr+   r  rA  rG  r  rh  r  r  z--qux--quux)r   r   z1 ar   rC  rx  r  rB  r  rF  Tr  z1 --bazr+   rH  z	--baz 1 2r+   rG  rH  N)quxz--qux 1)quuxz
--quux 1 2)r!   r"   r#   r$   rw   r  r.   SUPPRESSr   r   r~   r   rD   r   r   r  r  ]  s   / 	E30A0ABE30A0ABGL(2C2CDG3S(2C2CDHCc83D3DE "H	RT
	bQi	qqc"#	",	B1$'(	bQQCT23	",	B1I	22;	r1v'Ir   r  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  ry  rG  r  rh  r  r  r   r   r   r  r/  r  rF  Tr  r  r  r  r  N)r!   r"   r#   r$   rw   r.   r  r   r   r   r~   r   rD   r   r   r  r  v  s    >H,=,=>EEGL)
 vH	RT
	bSk	s&'	",	B3D)*	bSse67Ir   r  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  r  	--versionversion1.0r  r  r+   r  ry  rG  r  rh  r  r  r   r   )r+   rG  rH  r  r   r/  r  Tr  r  NrX  rD   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  rN   rV   fsencoder  r  rm   rn   r   
file_textsr^   textrq   r   s        r   rN   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  ry  )r   r  r9  z@invalidz@missingzhello world!zX YNr9  r  )r   r   r_  z
X -a A Y Zr  r  @hello XzX @helloz-a B @recursive Y ZzX @recursive Z -a BrE  )r  r   r9  r  r      @z@undecodable XzX @undecodabler   )r!   r"   r#   r$   rN   rw   r   r   r   r   FS_NONASCIIr  r~   r   TESTFN_UNDECODABLElstripr  rV   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  rN   rm   rn   r  s        r   rN   z$TestArgumentsFromFileConverter.setUp  sR    ,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rR   )r   strip)r   arg_lineargs      r   convert_arg_line_to_argszWTestArgumentsFromFileConverter.FromFileConverterArgumentParser.convert_arg_line_to_args  s(     ~~'yy{	 (s   ,.N)r!   r"   r#   r  rD   r   r   FromFileConverterArgumentParserr    s    	r   r  r  r  r_  r  ry  r  )r  zworld!r9  r  )r!   r"   r#   r$   rN   r   r  r   rw   r   r   r   r~   r   r%   r&   s   @r   r  r    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_r  s&      %$t*5r   c                 f    t        j                  dd      }| j                  dt        |             y )Nr  rx  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_1rk   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 )Nrj   big5ignore)rl   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  rx  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  rD   r   r   r  r    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rR   )r   r   AttributeErrorr  r   s     r   r   zStdStreamComparer.__eq__  s9    	,DLL--- 	,DOO++	,s    55Nr!   r"   r#   r   r   rD   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 rR   rg   r   rg   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   rg   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   rD   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)NrF  rj   r   rk   readonly)
r   r  rN   rm   rV   r^   r_   rU   rn   ru   r   	file_namerq   r   s      r   rN   zTestFileTypeR.setUp<  sp    mT(*'Ibggll4==)<G-04

9%- - ( 	!!*-- -s   A==B	r   r  r  r  )r   r   znon-existent-file.txtr+   Nr   r  
-x foo barrG  
bar -x foo-x - -r  )r!   r"   r#   r$   rN   rw   r.   r  r   r   r~   r  eq_stdinr   r%   r&   s   @r   r  r  9  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goodrj   r   rk   )
r   r  rN   rm   rV   r^   r_   rU   rn   r  )r   rq   r   s     r   rN   zTestFileTypeDefaults.setUpS  sG    "D/1BGGLL7wO

6

r   r  r  zno-file.txtr   rr  r   z-c goodr  )r  )r!   r"   r#   r$   rN   rw   r.   r  r   r   r~   r  r   r%   r&   s   @r   r  r  Q  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)NrF  rj   r   rk   )	r   r   rN   rm   rV   r^   r_   rU   rn   r  s      r   rN   zTestFileTypeRB.setUpe  s`    nd)+'Ibggll4==)<G-04

9%- - (- -s   A,,A5	r   rbr  r  r   r+   Nr  r  rG  r  r  )r!   r"   r#   r$   rN   rw   r.   r  r   r   r~   r  	eq_bstdinr   r%   r&   s   @r   r   r   b  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 rR   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   rn   r  addrg   r  s      r   r   zWFile.__eq__  se    		!1Dejj {{7+KKKKMIIMM% yyEJJ&&r   N)r!   r"   r#   r  r
  r   r   rD   r   r   r%  r%  y  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   rN   ru   rr   r   r   s    r   rN   zTestFileTypeW.setUp  (    !!*-!!*-r   r   rj   r  r  )r   r   r  r+   Nr  r.  r  rG  r  r  r!   r"   r#   r$   rN   rw   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/  r0  s    r   rN   zTestFileTypeX.setUp  r1  r   r   r   r  r  )r   r   r  r.  r  r+   rG  r  r  r2  r&   s   @r   r5  r5    sy    K. 	D(x((-.F***3/0 2H	rE%LuU|<=	2		23Ir   r5  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  r  r  r   r+   Nr  r  rG  r  r  )r!   r"   r#   r$   rw   r.   r  r   r   r~   r%  
eq_bstdoutr   rD   r   r   r8  r8    s    I 	D(x((./F***401 bzH	Te-.	rE%LuU|<=	rE%LuU|<=	2
45	Ir   r8  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   xbr  r  r  r+   rG  r  r  N)r!   r"   r#   r$   rw   r.   r  r   r~   r%  r9  r   rD   r   r   r;  r;    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"  NNrj   rx  )rj   rx  NNr  r  )rj   r@  Nr  r  r  rk   )r  r@  r  Nr   l1strict)rj   r   rA  rB  zbuiltins.openr+   )r.   r  r   r2   assert_called_with)r   FTcasesmr   ry   s         r   test_open_argsz#TestFileTypeOpenArgs.test_open_args  s    X-.QZ-.I&(BCv&(@AQh')AB
 ZZ(A#
dU$$$U2T2 $ )((s   &BBN)r!   r"   r#   r$   rG  rD   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   r  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.test  sq    ((*z*b8+<+<= + 	  #	
 +*s   "BBNr!   r"   r#   r$   rL  rD   r   r   rI  rI    s    
	
r   rI  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--eggsr  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$   rw   complexr  r   r   r~   r   rD   r   r   rO  rO    s^    6 	H7#F 5H	$/0	bbt45	RT12Ir   rO  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 rR   valuer   rZ  s     r   r   z#TestTypeUserDefined.MyType.__init__  	    DJr   c                 `    t        |       | j                  ft        |      |j                  fk(  S rR   r   rZ  r   s     r   r   z!TestTypeUserDefined.MyType.__eq__  '    J

+UU[[/IIIr   Nr   rD   r   r   MyTyperW  
      		Jr   r`  r   r  r  r  r  r   r  -xf gr  rk  N)r!   r"   r#   r$   rF   r`  rw   r   r   r~   r   rD   r   r   rU  rU    sm    2J J 	DvF  H	2s&+67	"vc{56Ir   rU  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 rR   rY  r[  s     r   r   zTestTypeClassicClass.C.__init__"  r\  r   c                 `    t        |       | j                  ft        |      |j                  fk(  S rR   r^  r   s     r   r   zTestTypeClassicClass.C.__eq__%  r_  r   Nr   rD   r   r   Crf     ra  r   ri  r   r  r  r  r  r   r  rb  r  rk  N)
r!   r"   r#   r$   ri  rw   r   r   r~   r   rD   r   r   rd  rd    sk    #J J 	DqF H	2#QsV,-	"qvAcF+,Ir   rd  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}rD   strings    r   get_my_typez.TestTypeRegistration.test.<locals>.get_my_type8  s     6))r   r   my_typer   r  r_  rC  z
my_type{1}rs  z-x 1 42zmy_type{42})r.   r/   registerr   r   r>   r   r~   )r   rp  r5   s      r   rL  zTestTypeRegistration.test6  s    	* ((*	;7Dy1Ci0**399;7dl3	5**9??+<=lm<	>r   NrM  rD   r   r   rk  rk  3  s
    4>r   rk  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                     	 t        d      }|dv rd|_        n|dv rd|_        nt        d|z        t	        |d	|       y # t        $ r}t        d|z        d }~ww xY w)
N      ?r  )      ?ry  r  )       @r  	value: %szopt_action failed: %sr  )r~   r7  AssertionErrorr   r   r   r5   	namespacerZ  option_stringr   r   s          r   __call__z-TestActionUserDefined.OptionalAction.__call__O  su    G !dmN*)*K&e^)+K&(u)<==
 Ivu- " G)*AA*EFFGs   2A 	AAArR   r!   r"   r#   r  rD   r   r   OptionalActionrv  M  s    	.r   r  c                       e Zd ZddZy)&TestActionUserDefined.PositionalActionNc                     	 t        d      }|dv rd|_        n&|dv rd|_        n|dv rd|_        nt        d	|z        t	        |d|       y # t        $ r}t        d
|z        d }~ww xY w)Nr  r7  )r  r  rx  )rx  ry  )r  ry  r{  zarg_action failed: %sr7  )r~   r  r|  r   r   r}  s          r   r  z/TestActionUserDefined.PositionalAction.__call__e  s    G !lH$'+K$c\',K$c\',K$(u)<==
 Ix/ " G)*AA*EFFGs   >A 	A*A%%A*rR   r  rD   r   r   PositionalActionr  c  s    	0r   r  z-sr  rx  )r+  r  r   rr  r7  r  r  )r  r   rz  rr  z-s0.125ry  )r  r7  r  r  z
-s 0.625 1ry  rx  z84 -s2rz  r  N)r!   r"   r#   r$   r.   Actionr  r  rw   r  r  r   r   r~   r   rD   r   r   rt  rt  J  s    4. .,08?? 04 	Dvn	&H-C	, H	BE!,-	rtB'(	ruQ/0	23r*+	Ir   rt  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   r5   r~  valuesr  s        r   r  z(TestActionRegistration.MyAction.__call__  s    Ityy)f*<=r   rR   r  rD   r   r   MyActionr    s    	>r   r  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_actionr7  r  rC  zfoo[1]r  r  zfoo[42])r.   r/   rr  r  r   r   r>   r~   r4   s     r   rL  zTestActionRegistration.test  s{    ((*+t}}=H[9**C512X3FG**D62Bi4HIr   N)r!   r"   r#   r$   r.   r  r  rL  rD   r   r   r  r    s    ?>8?? >
Jr   r  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  rz  r   rD   z--foo f1 --foo f2 f3 f4)f1f2f3f4r  N)	r!   r"   r#   rw   r   r   r   r~   r   rD   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d Z d Z! xZ"S )!TestAddSubparserszTest the add_subparsers methodc                 8     | j                   t        g|i | y rR   r   r   r{   s      r   assertArgumentParserErrorz+TestAddSubparsers.assertArgumentParserError      -???r   c                 |   |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                  d5i |}| j	                  t
        j                  d|j                         t        d      }|rd|d<   |rddg|d<    |j                  d6i |}|j                  dt        d       |j                  d g d!d"#       t        d$      }	|rd%|	d<    |j                  d7i |	}
|
j                  d&g d'd(#       |
j                  d)t        d*d+,       t        d-      }|rd.|d<    |j                  d8i |}|j                  d/t        d0       |j                  d1d2d34       |S )9NPROGmain description)progdescriptionrM  r   r  r+   r  foo helpr  r!  r  r  r   rG  bar helpr   r!  r  FCOMMANDr  commandstitlecommand helpr!  z(cannot have multiple subparser argumentsz1 descriptionr  z1 help1alias11alias2aliasesr]  w helpr   r  x helpr   z2 descriptionz2 helpr  rC  r  r  y helpr  r  z help)r   rz  r!  z3 descriptionz3 helptzt helpur  zu helprz  r!  rD   rC  )r  )r  )r   r   r  add_subparsersr)  r.   r*  dict
add_parserr  rS  )r   subparser_helprM  r  r5   subparsers_kwargs
subparsersparser1_kwargsparser1parser2_kwargsparser2parser3_kwargsparser3s                r   r   zTestAddSubparsers._get_parser  s    /);,XFQ!#e+Lz   S 0);=F:   ?J 	 	0 (/+4i()3g&(6f%*V**?->?
x55I%44	6
 /:%-N6")2I(>N9%'*''>~>T(;S/I /:%-N6"'*''>~>T?JSwcI /:%-N6"'*''>~>Ss:SH= r   c                 z    t         |           | j                         | _        | j                  d      | _        y )NT)r  )r   rN   r   r5   command_help_parserr0  s    r   rN   zTestAddSubparsers.setUp  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   r  r5   r>   )r   r   ry   s      r   test_parse_args_failuresz*TestAddSubparsers.test_parse_args_failures  s4    1H>>#D**4;;+A+A4H1r   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 7Fr     r  r+   rG  rj   r   z0.25 --foo 2 -y 2 3j -- -1jTrx  r  y              @y             )r+   rG  r_  r  z--foo 0.125 1 cry  r  z-1.5 3 11 -- a --foo 7 -- brR     )r   r   r  --r  )r+   rG  r  r  )r   r5   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  Fr  r  r  r  z0.5 -p 1 b -w 7-p0.5 1 b -w 7 -pz0.5 1 b -q -rs -w 7z-qz-rsz0.5 -W 1 b -X Y -w 7 Z)z-Wz-Xr  r  )r   r5   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    G d d      }| j                  | j                  j                  dj                         |      |dgf       | j	                  |j
                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                  d	       y )
Nc                       e Zd Zy)ETestAddSubparsers.test_parse_known_args_to_class_namespace.<locals>.CNr!   r"   r#   rD   r   r   ri  r  	      r   ri  r  )r~  r  Fr  r  r  )	r   r5   r  r   assertIsr+   rG  rj   r   )r   ri  s     r   (test_parse_known_args_to_class_namespacez:TestAddSubparsers.test_parse_known_args_to_class_namespace	  s    	 	KK(():)@)@)Ba(PK	
 	aeeU#$a c"r   c           	      :   t               }|j                  d       |j                  d       |j                         }|j                  d      }|j                  d       |j                  d       | j	                  |j                  g d      t        dd d d              | j	                  |j                  g d	      t        d dd d              | j                  |j
                  g d
       | j	                  |j                  g d      t        d d dd              | j	                  |j                  g d      t        d d d d             | j	                  |j                  g d      t        d d d d             | j                  |j
                  g d       y )Nr  r  rG  --foz--foonew)r  rH  rG  rH  )r   r  fofoonew)--foonrH  rG  )r  rH  rG  )rG  r  rH  )rG  r   rH  )rG  r  rH  )rG  r  rH  )r   r   r  r  r   r>   r~   r  r   r5   r  r  s       r   test_abbreviationz#TestAddSubparsers.test_abbreviation*	  se   +-J'J'**,
''.V$Z(**+CD5$tL	N**+CD4$tL	N&&v'8'8:PQ**+AB4tL	N**+BC4eL	N**+CD4eL	N&&v'8'8:RSr   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  rd  z--newz-urx  )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~   r  r4   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  rG  r*  rC  rH  Fr  r  rB  )r   r   r  r  r   r~   r>   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runrD   )r>   r   commandr  )r   r5   rets      r   _test_required_subparsersz+TestAddSubparsers._test_required_subparserse	  s@    (e, 	&&v'8'8"=r   c                     t               }|j                  d      }d|_        |j                  d       | j	                  |       y )Nr  r*  Tr  )r   r  r  r  r  r   r5   r  s      r   &test_required_subparsers_via_attributez8TestAddSubparsers.test_required_subparsers_via_attributem	  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_kwargt	  s;    +-**	D*I
e$&&v.r   c                     t               }|j                  d      }|j                  d       |j                  d      }| j	                  |j
                         y )Nr  r*  r  rD   r   r  r  r>   assertIsNoner  r   r5   r  r  s       r    test_required_subparsers_defaultz2TestAddSubparsers.test_required_subparsers_defaultz	  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+   rG  rD   z8error: the following arguments are required: {foo,bar}
$	r   r  r  r   r   r>   rA   r  r   r   r5   r  excinfos       r   -test_required_subparsers_no_destination_errorz?TestAddSubparsers.test_required_subparsers_no_destination_error	  s    +-**D*9
e$e$23wb! 4$$G	
 43   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+   rG  r  zLerror: 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3wh' 4$$[	
 43r   c                     t               }|j                  dd      }|j                  d       |j                  d      }| j	                  |j
                         y )Nr  Fr  r  rD   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   r5   r"  r#  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+:-r  z)usage: PROG [-h] [++foo] bar {1,2,3} ...
a?              usage: PROG [-h] [++foo] bar {1,2,3} ...

            main description

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

            options:
              -h, --help  show this help message and exit
              ++foo       foo help
            r   r   r"  r#  r  r  r4   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 )	Nr  r  r  z--non-breakingr  uR   help message containing non-breaking spaces shall not wrap at non-breaking spacesr  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  r4   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 )Nr  r  r  r+   z    r!  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  r4   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 )NrK  r  z)usage: PROG [+h] [++foo] bar {1,2,3} ...
a?              usage: PROG [+h] [++foo] bar {1,2,3} ...

            main description

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

            options:
              +h, ++help  show this help message and exit
              ++foo       foo help
            r  r4   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_help
  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 )Nr  r  r  r   r  r  r  rG  r  r  subcommandsr  zadditional text)r  r  r!  rC  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   r5   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rR   )r   r   r5   r>   r   r   r  r   )r   r   expected_helpr  s       r   _test_subparser_helpz&TestAddSubparsers._test_subparser_help?
  sT    23rKK""8>>#34 4(;(;< 43s   *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_helpD
  "    !!*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_helpR
  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r  z0.5 1alias1 bFr  r  r  z0.5 1alias2 b)r   r   r  r   r~   r4   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   r  r>   r   r4   s     r   test_error_alias_invocationz-TestAddSubparsers.test_error_alias_invocationk
  s8    !!$!/&&v'8'8'6'<'<'>	@r   c                     | j                  dd      }d | _        | j                  |j                         t	        j
                  d             y )NT)r  r  a	              usage: PROG [-h] [--foo] bar COMMAND ...

            main description

            positional arguments:
              bar                   bar help

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

            commands:
              COMMAND
                1 (1alias1, 1alias2)
                                    1 help
                2                   2 help
                3                   3 help
            )r   maxDiffr   r#  r  r  r4   s     r   test_alias_helpz!TestAddSubparsers.test_alias_helpp
  sH    !!$t!D++-x @ 0 	r   )FNF)#r!   r"   r#   r$   r  r   rN   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&   s   @r   r  r    s    (@ >B!7rI
I
&
,
#T,98;>//'



'"&$ D$*<=
	
@
r   r  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+   rk  rG  rH  rC  r  r  r  1 2 3)r   r   r   r~   r>   r   r   r   r5   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+   rG  rH  rC  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 )Nr3  r+   rG  rH  r
  frellrC  r  r  r  )r+   rG  rH  r7  z1 2 3 4r4  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$   r1  r5  r8  rD   r   r   r,  r,  
  s    J++
+r   r,  c                   |     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d Z xZS )TestParentParsersz5Tests that parsers can be created with parent parsersc                 8     | j                   t        g|i | y rR   r  r{   s      r   r  z+TestParentParsers.assertArgumentParserError
  r  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rN  z--wr   r  r  r   r  r  z--dr  r  r  r   )r   rN   r   wxyz_parentr   r   abcd_parentw_parentz_parentab_mutex_parentadd_mutually_exclusive_grouprV   r^   basenamer   r   main_program)r   x_groupc_groupr   r   s       r   rN   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  rC  r  rj   r_  r  )r   r>  r   r>   r   r~   r4   s     r   test_single_parentz$TestParentParsers.test_single_parent
  sE    +T5E5E4FG**>+?+?+ABcSC0	2r   c                     | j                  | j                  j                         t        | j                  g      }| j                  |j                         y NrI  )_test_mutex_abrB  r>   r   r4   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)rN  rJ  rI  )rB  r   rO  r>   r   rJ  r5   s      r   test_single_granparent_mutexz.TestParentParsers.test_single_granparent_mutex
  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~   r  )r   r>   s     r   rO  z TestParentParsers._test_mutex_ab
  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 )NrI  z--d 1 --w 2 3 4r  rC  r  r  )r   r  r  rj   r_  r  )r?  r>  r   r   r>   r   r~   rR  s      r   test_multiple_parentsz'TestParentParsers.test_multiple_parents
  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 )
NrI  z
-a --w 2 3TFr  r  )r   r  rj   r_  r  z-a --w 2 3 -bz-a -b --w 2 3)rB  r>  r   r   r>   r   r~   r  rR  s      r   test_multiple_parents_mutexz-TestParentParsers.test_multiple_parents_mutex
  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 rN  )r   r.   r*  r/   r@  r>  r   s    r   test_conflicting_parentsz*TestParentParsers.test_conflicting_parents
  s9    ""##]]D$4$45 	 	7r   c                     | j                  t        j                  t        j                  | j                  | j
                  g       y rN  )r   r.   r*  r/   r?  rB  r   s    r   test_conflicting_parents_mutexz0TestParentParsers.test_conflicting_parents_mutex  s;    ""##%%t';';< 	 	>r   c                     | j                   | j                  g}t        |      }| j                  |j	                  dj                               t        d d d             y )NrI  rB  r  rK  )r>  rA  r   r   r>   r   r~   rR  s      r   test_same_argument_name_parentsz1TestParentParsers.test_same_argument_name_parents
  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 )
NrG  rI  r   zbar -b 1 --d 2 3 4r  rC  r  r  )r   r  r  r   )	r   r  r  r?  r   r   r>   r   r~   )r   r5   r  abcde_parsers       r   test_subparser_parentsz(TestParentParsers.test_subparser_parents  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+   rI  rG  r  rG  r   zfoo -a 4TFr  r  zbar -b  --w 2 3 4r  r  )r   r  rj   r_  r  r   zfoo -a -b 4zbar -b -a 4)r   r  rB  r  r   r   r>  r   r>   r   r~   r  )r   r5   r  rJ  
abc_parserrG  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 )NrI  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#  rE  r   r  r  format)r   rJ  r5   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=  rk  gdr  r  r]  r   r  r	  rI  r  r  r	  r  z            usage: {}{}[-h] [-w W] [-x X] [-y Y | -z Z]

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

            g:
              gd

              -w W
              -x X
        rh  r   )r   r   r   rC  r   r   r>   r#  rE  r   r  r  ri  )r   parentrk  rF  r5   rj  rk  s          r   test_groups_parentsz%TestParentParsers.test_groups_parentsC  s    +U;%%CT%B	t	t//1	t	t+VH=-v/@/@"	$ ((*$$hoo 7 F8HS"6'8 	9r   c                    t        d      }|j                  dd      }|j                  d       |j                  d       |j                         }|j                  d       |j                  d	       t        d
|g      }| j	                  t
        |j                  g d       |j                         }| j                  |t        j                  d             y )NFr=  rk  rn  ro  r]  r   r  r	  r  )r  rJ  rp  z            usage: PROG [-h] [-w W] [-x X] [-y Y | -z Z]

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

            g:
              gd

              -w W
              -x X
              -y Y
              -z Z
        )r   r   r   rC  r   r   r>   r#  r   r  r  )r   rq  rk  rF  r5   rj  s         r   test_mutex_groups_parentsz+TestParentParsers.test_mutex_groups_parentsa  s    +U;%%CT%B	t	t**,	t	t+&J-v/@/@"	$ ((*hoo 7 ' 	r   )r!   r"   r#   r$   r  rN   rL  rP  rS  rO  rW  rY  r[  r]  r_  rb  rf  rl  rr  rt  r%   r&   s   @r   r:  r:  
  sY    ?@:82
/
/AI87>496&909<r   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+   )r  )r   r   r   rC  )r   r5   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  rG  r  ry  rx  )r   rC  r   r   rK  r.   PARSER)r   r5   r   r   rx  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 )Nr  r  r   r  r  r2  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   rC  r   r   r#  r  r  )r   r5   group1group2r0  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 )Nr  r~  r  r  )r  r+  r+   rc  r  r  z--quietz--longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglongڀLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGz>            usage: PROG foo [-h]
                            [rh  zj]

            options:
              -h, --help            show this help message and exit
              z
              )r)  r   r  r  rC  r   r.   r  r   r#  r  r  )r   r5   r  cmd_foor   longoptlongmetar0  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)Nr8   )r.   r/   rC  r   rK  r>   r   r5   r   s      r   test_empty_groupz1TestMutuallyExclusiveGroupErrors.test_empty_group  sH    ((*335z*tf% +**s   AAN)r!   r"   r#   ry  r|  r	  r  r  rD   r   r   rv  rv    s    L
	GJ(K*&r   rv  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	                  |      5  | j                  |||j                                d d d        @ y # 1 sw Y   KxY wNFr  r   
get_parserr>   r   r   r?   r   r   r   r>   r   args_strings       r   test_failures_when_not_requiredz'MEMixin.test_failures_when_not_required  sc    __e_4??
#==K;/!!%[5F5F5HI 0/ )//s   "A11A:	c                    | j                  d      j                  }t        }| j                  dgz   D ]>  }| j	                  |      5  | j                  |||j                                d d d        @ y # 1 sw Y   KxY w)NTr  r   r   r  r  s       r   test_failures_when_requiredz#MEMixin.test_failures_when_required  sj    __d_3>>
#==B4/K;/!!%[5F5F5HI 0/ 0//s   "A55A>	c                     | j                  d      j                  }| j                  | j                  z   }|D ]H  \  }}| j	                  |      5   ||j                               }| j                  ||       d d d        J y # 1 sw Y   UxY wr  )r  r>   r   successes_when_not_requiredr?   r   r   )r   r>   r   r  r   	actual_nss         r    test_successes_when_not_requiredz(MEMixin.test_successes_when_not_required  s{    __e_4??
NNT%E%EE	(1$K;/&{'8'8':;	  K8 0/ )2//s   )BB	c                    | j                  d      j                  }| j                  D ]H  \  }}| j                  |      5   ||j	                               }| j                  ||       d d d        J y # 1 sw Y   UxY w)NTr  r   )r  r>   r   r?   r   r   )r   r>   r  r   r  s        r   test_successes_when_requiredz$MEMixin.test_successes_when_required  sk    __d_3>>
(,$K;/&{'8'8':;	  K8 0/ )7//s   )A55A>	c                     | j                  d      j                  }| j                  }| j                   |       t	        j
                  |             y NFr  )r  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 NTr  )r  r"  usage_when_requiredr   r  r  r  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 r  )r  r#  r  r!  r   r  r  r   r#  r!  s      r   test_help_when_not_requiredz#MEMixin.test_help_when_not_required  sG    oouo5AA++dii7(=>r   c                     | j                  d      j                  }| j                  | j                  z   }| j	                   |       t        j                  |             y r  )r  r#  r  r!  r   r  r  r  s      r   test_help_when_requiredzMEMixin.test_help_when_required  sG    ooto4@@''$))3(=>r   N)r!   r"   r#   r  r  r  r  r  r  r  r  rD   r   r   r  r    s.    JJ99J
J
?
?r   r  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 )Nr  r~  r  r2  r  r  rh  r  r  baz help)rz  r  r!  r   rC  r   r   r  r5   r   s       r   r  z&TestMutuallyExclusiveSimple.get_parser  sN    +833X3F747#SzJr   --bar X --baz Yz--bar X --baz--bar Xr9  rG  rH  z--bar X --bar Zr  --baz Yr  rh  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
        rR   r!   r"   r#   r  r   r~   r   r  r  r  r!  rD   r   r   r  r    s     "?3H	B3D)*	B3D12	B4S)*	"3'(	I 
RDd#$#Dr   r  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 )Nr  r~  z--abcdez
abcde helpr  z--fghijz
fghij helpr  z--klmnoz
klmno helpz--pqrstz
pqrst helpr   r   rC  r  s       r   r  z$TestMutuallyExclusiveLong.get_parser  sp    +8IL9IL933X3F9<89<8r   z--klmno X --pqrst Yz	--klmno Xr9  )abcdefghijklmnopqrstz--abcde Y --klmno Xr  z	--pqrst Xz--pqrst X --fghij Yr   zi    usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ]
                [--klmno KLMNO | --pqrst PQRST]
    zi    usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ]
                (--klmno KLMNO | --pqrst PQRST)
    z
    options:
      -h, --help     show this help message and exit
      --abcde ABCDE  abcde help
      --fghij FGHIJ  fghij help
      --klmno KLMNO  klmno help
      --pqrst PQRST  pqrst help
    rR   r  rD   r   r   r  r    s     &&H	bt4s$GH	SCt<	>	bt4t3GH	TD<	>I 
Rd$d$?@#Dr   r  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 )
Nr  r~  r  r   r  r  r  r  r  r   rC  r   r.   r  r  s       r   r  z/TestMutuallyExclusiveFirstSuppressed.get_parserH  sR    +833X3F4h&7&784HEr   z-x X -yz-x Xr9  Trs  z	-x X -x Yr  r  NFr   z&        usage: PROG [-h] [-y]
        z$        usage: PROG [-h] -y
        zm
        options:
          -h, --help  show this help message and exit
          -y          y help
        r  rD   r   r   r  r  F  st     {H	cT"#	b3$'(	rDE"#I 
R$$ #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
      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 )Nr  r~  r  --spamr  r  r1  r  z	--bladderr  r  )r   r  r5   r   r)  s        r   r  z.TestMutuallyExclusiveManySuppressed.get_parseri  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  r7  bladderr1  Fz--bladder BrE  z--spam --spamr   z!        usage: PROG [-h]
        P
        options:
          -h, --help  show this help message and exit
        r!   r"   r#   r  r   r~   r   r  r  r  r!  rD   r   r   r  r  g  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g       fd edd	g       fd
 eddd
g      fd eddg d      fgZd eddg       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       |S )Nr  r~  r  r   r  FOOr  r  SPAMr  r7  r  BADGERr  r  r  s       r   r  z5TestMutuallyExclusiveOptionalAndPositional.get_parser  sa    +833X3F7<eD8&183X>r   )z--foo --spam Sz
--spam S XzX --foozX Y Z --spam S	--foo X Yr   TNr+   r  r7  z--spam SFSr9  zX Y Z)r9  r  r  r   zD        usage: PROG [-h] [--foo | --spam SPAM | badger ...]
        zD        usage: PROG [-h] (--foo | --spam SPAM | badger ...)
        z
        positional arguments:
          badger       BADGER

        options:
          -h, --help   show this help message and exit
          --foo        FOO
          --spam SPAM  SPAM
        r  rD   r   r   r  r    s    H 
"D45	REB78	bUse45	"T/BC	I 
RER01#	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 )Nr  r~  r   r  r  r  r  r  a helpr  b helpr  r  r  c helpr  r  s       r   r  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  rD   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 )Nr  r~  zTitled groupzGroup descriptionro  r  r2  r  r  rh  r  )r   r   rC  r   )r   r  r5   titled_groupmutex_groups        r   r  z'TestMutuallyExclusiveInGroup.get_parser  sk    +800 .A 1 C 55x5H 	  z :  z :r   r  z--baz X --bar Yr  r9  r  r  r  r   z9        usage: PROG [-h] [--bar BAR | --baz BAZ]
        z9        usage: PROG [-h] (--bar BAR | --baz BAZ)
        z
        options:
          -h, --help  show this help message and exit

        Titled group:
          Group description

          --bar BAR   bar help
          --baz BAZ   baz help
        rR   r  rD   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 )Nr  r~  r   r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  s       r   r  z<TestMutuallyExclusiveOptionalsAndPositionalsMixed.get_parser  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 Ar  Fr9  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  rD   r   r   r  r  
  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)Nr  r~  r  r  r  r  r  r  r  r  )r   rC  r   warningscatch_warningssimplefilterr  )r   r  r5   r   r  group3s         r   r  z&TestMutuallyExclusiveNested.get_parser:  s    +833X3F4 4 $$&!!(,>?777JF ' 	D!D!$$&!!(,>?88(8KF ' 	D!D! '&
 '&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#   r  r  r  r!  r  r  r  r  rD   r   r   r  r  3  s8    "
D '+#"&'+$#' r   r  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gZd
 edd      fgZdZdZ	dZ
y)%TestMutuallyExclusiveOptionalOptionalNc                     t        d      }|j                  |      }|j                  d       |j                  dd       |S )Nr  r~  r  r   r2  r  ry  r  r  s       r   r  z0TestMutuallyExclusiveOptionalOptional.get_parserf  sE    +833X3F7#7#.r   --foo X --bar Yz--foo X --bar--foo Xr9  rF  r  r2  r   z;        usage: PROG [-h] (--foo FOO | --bar [BAR])
        z;        usage: PROG [-h] [--foo FOO | --bar [BAR]]
        z{
        options:
          -h, --help   show this help message and exit
          --foo FOO
          --bar [BAR]
        rR   r  rD   r   r   r  r  e  s|     	H
 
B3D)*	B4S)*	"4()I 
RDd#$#Dr   r  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gZd edd      fgZdZdZ	dZ
y)(TestMutuallyExclusiveOptionalWithDefaultNc                     t        d      }|j                  |      }|j                  d       |j                  dt        d       |S )Nr  r~  r  r   r2  Tr  r   rC  r   r  r  s       r   r  z3TestMutuallyExclusiveOptionalWithDefault.get_parser  sG    +833X3F7#7t<r   r  z--foo X --bar=r  r9  TrF  r  z--bar=Fr   z9        usage: PROG [-h] (--foo FOO | --bar BAR)
        z9        usage: PROG [-h] [--foo FOO | --bar BAR]
        zx
        options:
          -h, --help  show this help message and exit
          --foo FOO
          --bar BAR
        rR   r  rD   r   r   r  r    s|     	H
 
B3D)*	B4T*+	2$E*+I 
RDd#$#Dr   r  c                   p    e Zd ZddZ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)*TestMutuallyExclusivePositionalWithDefaultNc                     t        d      }|j                  |      }|j                  d       |j                  ddt        d       |S )	Nr  r~  r  r   rG  r  TrA  r  r  s       r   r  z5TestMutuallyExclusivePositionalWithDefault.get_parser  sI    +833X3F7#5$Er   r  r  r9  TrF  r   z3        usage: PROG [-h] (--foo FOO | bar)
        z3        usage: PROG [-h] [--foo FOO | bar]
        z
        positional arguments:
          bar

        options:
          -h, --help  show this help message and exit
          --foo FOO
        rR   r  rD   r   r   r  r    sj     	H 
B3D)*	bTt$%I
 
RDd#$#Dr   r  c                         e Zd Zd fd	Z xZS )MEPBasec                 b    t         t        |   |      }t        |j                  d|g      }|S )Nr  F)r  rN  rJ  )r   r  r  r   r  )r   r  rq  r5   r   s       r   r  zMEPBase.get_parser  s4    w0(0C+uvh@r   rR   )r!   r"   r#   r  r%   r&   s   @r   r  r    s     r   r  c                       e Zd Zy)&TestMutuallyExclusiveGroupErrorsParentNr  rD   r   r   r  r        r   r  c                       e Zd Zy)!TestMutuallyExclusiveSimpleParentNr  rD   r   r   r  r    r  r   r  c                       e Zd Zy)TestMutuallyExclusiveLongParentNr  rD   r   r   r  r    r  r   r  c                       e Zd Zy)*TestMutuallyExclusiveFirstSuppressedParentNr  rD   r   r   r  r    r  r   r  c                       e Zd Zy))TestMutuallyExclusiveManySuppressedParentNr  rD   r   r   r  r    r  r   r  c                       e Zd Zy)0TestMutuallyExclusiveOptionalAndPositionalParentNr  rD   r   r   r  r    r  r   r  c                       e Zd Zy))TestMutuallyExclusiveOptionalsMixedParentNr  rD   r   r   r  r    r  r   r  c                       e Zd Zy)7TestMutuallyExclusiveOptionalsAndPositionalsMixedParentNr  rD   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   rG  rx  )r_  r  r^  rH  r  )r   r  r   set_defaultsr   r~   r>   r4   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+   rG  rs  r   xfooxrq  rH  r   rC  r  )r   r  r   r   r~   r>   r   r4   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   rG  r  rs  )r   r  r  r  r   r~   r>   r   )r   r5   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   rI  r  )r   rq  r5   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 )Nr9  rx  r  r  )r.   r/   r  r  r  r   r~   r>   )r   r5   xparsers      r   )test_set_defaults_on_parent_and_subparserz9TestSetDefaults.test_set_defaults_on_parent_and_subparser4  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Wr9  r  r  r  r]  r   XXrq  r_  r  ry  r  ZZr  WWYY)r   r  r   r   r~   r>   r4   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  r9  r  r  r  r+   r]  r   r  rq  r_  r  ry  r  r  r  r  r  )r   r  r   r   r   r~   r>   r  s      r   ,test_set_defaults_same_as_add_argument_groupz<TestSetDefaults.test_set_defaults_same_as_add_argument_groupL  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!  rD   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+   rG  r   r2  r  r  r7  r  )r   r  get_defaultr   r  r   r  r4   s     r   test_get_defaultzTestGetDefault.test_get_defaulte  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&  rD   r   r   r#  r#  c  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_empty|  s0    !R b!r   c                     t        j                  dd      }| j                  d|       | j                  d|       | j                  d|       | j                  d|       | j                  d|       y )	Nrx  r  rs  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.  r1  rD   r   r   r(  r(  z  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 rR   rD   r   s     r   test_wrapperzUTestHelpFormattingMetaclass.__init__.<locals>.AddTests.__init__.<locals>.test_wrapper  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__  s    #.  ("&"2"2"&//"&"6"6"8I ,5+=+={ KI5> (09- J	<@"8 % 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   ry   rz   r   r   r   r  r  )r   r   r5   argument_sig
group_sigs	group_sigargument_sigsr   subparsers_sigsr  subparser_sigs              r   r   zBTestHelpFormattingMetaclass.__init__.<locals>.AddTests._get_parser  sG   !00,,116--446 %,F4I2$NL'F''):): ?*6*=*=? %O %V-H"M
0:,I}5F55y~~ J8A8H8HJE(5***L,=,= B-9-@-@B )6 1; #*&2I2"N"!'!6!6!8J)8-
--}/A/A G1>1E1EG *9 r   c                     t        || j                        }t        j                  |      }d |_        |j                  ||       y rR   )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;  rM  )r   r   r5   ri  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   rM  )r   r   r5   print_
old_streamrK  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 rP  )r   r   r;  r	   r   rM  )r   r   r5   rQ  sfilerK  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   rM  r=  r>  r?  rD   r   r   r   r7    s!    A",?-

00r   r   ))usager   )r!  r   )r   )r   rg   r   r   r   r;  r<  s          r   r   z$TestHelpFormattingMetaclass.__init__  s9    >!F	0v F	0R&:!KS+x0&:r   Nr|   rD   r   r   r3  r3    s    O1r   r3  r5  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 longerr  DESCRIPTIONEPILOGr  r  epilogrb  r  r  0.1r  r   r  X HELPr  --yY HELPr  r+   FOO HELPrG  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$   rw   r   r   rB  rU  r!  r  rD   r   r   rW  rW    s    EM"*, 	D+i?DH5E!E
#E
# !#E   D Gr   rW  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 )NrI   r  )rJ   r   rK   r  rL   s     r   rN   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$   rN   rW  r   r   rB  rU  r!  r  rD   r   r   rf  rf    sW    
! #:"J"J"9"M"M"9"S"SE   D: #:"A"AGr   rf  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")#TestHelpBiggerOptionalGroupsrX  r  rY  rZ  r[  rb  r  r  r]  r  r   r  r^  r  r_  r`  r  r+   ra  rG  rb  zGROUP TITLEzGROUP DESCRIPTIONr  rH  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
    rc  Nrd  rD   r   r   ri  ri  >  s    EM"*, 	D+i?DH5E!E
#E
# 
](;	<J'Ch/?1 	2!
E   D,Gr   ri  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USAGErY  rU  r  r   r  r^  r  r_  r`  r  ekiekiekifekangzEKI HELPrG  rb          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   Nrd  rD   r   r   rk  rk  m  sl    >mDDH5E!J/E
#	 !#E   D Gr   rk  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 liner  ze   oddly    formatted
description

that is so long that it should go onto multiple lines when wrappedr  r   r  zoddly
    formatted -x helpr  r!  r_  r
  znormal y helpr  z'
    oddly formatted group

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

        positional arguments:
          yyy         normal y help

        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   Nrd  rD   r   r   rq  rq    s    H)* 	D$ &= 	>C_5 
W #0 
1 d<$% 
&		'
!E   D( Gr   rq  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)TestHelpWrappingShortNamesrr  r  zZD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
DD
Dr  r   r  zxXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXrs  r_  r
  dYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHALPHASr  r  zPAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAr  rt  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   Nrd  rD   r   r   rv  rv    sz    H[AD$]3C\2
 
X\@B 	C!E   D, Gr   rv  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 linerl  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 Drm  rb  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 XHrs  r_  yyyyyyyyyyyyyyyyyyyyyyyyyrw  rx  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 ZHro  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
        Nrd  rD   r   r   rz  rz    s    FzBD+iDD(6C5 
Xh\:XL9; 	<!
E   D<Gr   rz  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 messagesr  r~  r]  r  rj   r  r   r  r   r   r  r  r  )r!  rz  r  r  r   zWhether to foo)r!  r  r2  zWhether to barT)r!  rr  r  r  z--foobarz--barfoor  z--bazzzBazz!)r  rr  r!  r   r  r_  r	  r}  r  r  r   a/          usage: PROG [-h] [-w W [W ...]] [-x [X ...]] [--foo | --no-foo]
                    [--bar | --no-bar]
                    [-f | --foobar | --no-foobar | --barfoo | --no-barfoo]
                    [--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$   rw   r   r.   r  r  r   rB  rU  r!  r  rD   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)TestHelpUsageWithParenthesesr  r~  
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#   rw   r   r   rU  r!  r  rD   r   r   r  r  W  sL    'L"89D,(FG
E   D Gr   r  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  r  Fr  rN  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   Nrd  rD   r   r   r  r  m  s    #7	V3#
 	 
V#3
 		!E  	 	D Gr   r  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<PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPr~  r]  r  r  r   r9  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   Nrd  rD   r   r   r  r    sa    4)D#D#CC	 !#E  
 
D Gr   r  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  r~  r]  WWWWWWWWWWWWWWWWWWWWWWWWWr  r   r{  r  YYYYYYYYYYYYYYYYYYYYYYYYYr	  ZZZZZZZZZZZZZZZZZZZZZZZZZr   r  a          usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] [-x XXXXXXXXXXXXXXXXXXXXXXXXX]
               [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
               a b
        a-  
        positional arguments:
          a
          b

        options:
          -h, --help            show this help message and exit
          -w WWWWWWWWWWWWWWWWWWWWWWWWW
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        r   Nrd  rD   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  Fr  aaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccz        usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
               aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
               ccccccccccccccccccccccccc
        
        positional arguments:
          aaaaaaaaaaaaaaaaaaaaaaaaa
          bbbbbbbbbbbbbbbbbbbbbbbbb
          ccccccccccccccccccccccccc
        r   Nrd  rD   r   r   r  r    sV    M59HHH
 !#E
   D Gr   r  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 wrapr  r~  r]  r  r  r   r{  r  r  r	  r  r   r  r  z        usage: PROG [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] [-x XXXXXXXXXXXXXXXXXXXXXXXXX]
                    [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
                    a b c
        a9  
        positional arguments:
          a
          b
          c

        options:
          -h, --help            show this help message and exit
          -w WWWWWWWWWWWWWWWWWWWWWWWWW
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        r   Nrd  rD   r   r   r  r    s|    6'D(#D(#D(#D(#CCC !#E   D Gr   r  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 wrapr  r~  r   r  r	  r  r  r  z        usage: PROG [-h] [-x X] [-y Y] [-z Z]
                    aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
                    ccccccccccccccccccccccccc
        a  
        positional arguments:
          aaaaaaaaaaaaaaaaaaaaaaaaa
          bbbbbbbbbbbbbbbbbbbbbbbbb
          ccccccccccccccccccccccccc

        options:
          -h, --help            show this help message and exit
          -x X
          -y Y
          -z Z
        r   Nrd  rD   r   r   r  r    si    8'D	D	D	HHH !#E
   D Gr   r  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 wrapr  r~  r   r{  r  r  r  r	  r  r  r  r  a          usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] [-y YYYYYYYYYYYYYYYYYYYYYYYYY]
                    [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
                    aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
                    ccccccccccccccccccccccccc
        aZ  
        positional arguments:
          aaaaaaaaaaaaaaaaaaaaaaaaa
          bbbbbbbbbbbbbbbbbbbbbbbbb
          ccccccccccccccccccccccccc

        options:
          -h, --help            show this help message and exit
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        r   Nrd  rD   r   r   r  r  .  sr    F'D(#D(#D(#HHH !#E   D Gr   r  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 wrapr  r~  r   r{  r  r  r  r	  r  z        usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] [-y YYYYYYYYYYYYYYYYYYYYYYYYY]
                    [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ]
        z
        options:
          -h, --help            show this help message and exit
          -x XXXXXXXXXXXXXXXXXXXXXXXXX
          -y YYYYYYYYYYYYYYYYYYYYYYYYY
          -z ZZZZZZZZZZZZZZZZZZZZZZZZZ
        r   Nrd  rD   r   r   r  r  R  s]    J'D(#D(#D(#
 !#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) TestHelpUsagePositionalsOnlyWrapzBTest usage messages where there are only positionals and they wrapr  Fr  r  r  r  z~        usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb
                    ccccccccccccccccccccccccc
        r  r   Nrd  rD   r   r   r  r  l  sV    L7HHH
 !#E   D Gr   r  c            
           e Zd ZdZ ed      Z eded       eddd	d
d       edg 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 messagesr  r~  r   z"x %(prog)s %(default)s %(type)s %%r  r  r  r  XXXz y %(prog)s %(default)s %(const)s)r  rr  r  r!  r   r  z$foo %(prog)s %(default)s %(choices)sr   r2  rH  rx  r  BBBz!bar %(prog)s %(default)s %(dest)s)rr  r  r  r!  r  zspam %(prog)s %(default)sr  r7  r  zbadger %(prog)s %(default)s)rr  r!  r   r  za %(prog)s %(default)sr  r@  zb %(prog)s %(default)szw        usage: PROG [-h] [-x X] [-y] [--foo {a,b,c}] [--bar BBB] [-a A] [-b B]
                    spam badger
        a  
        positional arguments:
          spam           spam PROG None
          badger         badger PROG 0.5

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

        group:
          -a A           a PROG None
          -b B           b PROG -1
        r   N)r!   r"   r#   r$   rw   r   r  r   rB  rU  r!  r  rD   r   r   r  r    s    D'Ds5	7D%3	5G_7	9GUQFE4	6F45Hc(EF 
W34b'?@
 	!E   D" Gr   r  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 presentr  z%(prog)s FOOr  rU  z         usage: PROG FOO
        r  r   Nrd  rD   r   r   r  r    s=    Jn= "E   D
 Gr   r  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 argumentsr  Fr  z        usage: PROG
        r   Nrd  rD   r   r   r  r    s1    E7 "E DGr   r  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 messagesr  r  r   r  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$   rw   r.   r  r   r   rB  r!  rU  r  rD   r   r   r  r    sO    =h.?.?@G*%F% !#D EGr   r  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 messagesr  Fr  r   r  r  r  z!        usage: PROG spam
        zA
        positional arguments:
          spam  spam help
        r   Nr!   r"   r#   r$   rw   r   r.   r  r   rB  rU  r!  r  rD   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 messagesr  r~  r   r  r  r  r  r   r2  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$   rw   r   r   r.   r  rB  rU  r!  r  rD   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 messagesr  r~  r   r  r  r  z-        usage: PROG [-h] [--foo FOO]
        o
        options:
          -h, --help  show this help message and exit
          --foo FOO   foo help
        r   Nr  rD   r   r   r  r    sY    K'G*%F**+ !#E   D Gr   r  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 optionalr  r~  r   Tr  )r  r!  z+        usage: PROG [-h] --foo FOO
        r  r   Nrd  rD   r   r   r  r  (  sK    8'Gd4 !#E   D Gr   r  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 charactersr  z^;F)r  rM  rN  z^^foor  r  r  z;bz;;barr  r  z-        usage: PROG [^^foo] [;b BAR]
        zf
        options:
          ^^foo              foo help
          ;b BAR, ;;bar BAR  bar help
        r   Nrd  rD   r   r   r  r  <  s[    DTEJGLz:D'
+ !#E   D Gr   r  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 messagesr  Fr  r   r  r  r  r  z-        usage: PROG [--foo FOO] spam
        zv
        positional arguments:
          spam       spam help

        options:
          --foo FOO  foo help
        r   Nrd  rD   r   r   r  r  Q  sU    G7G*%F% !#E   D Gr   r  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 specifiedr  r~  r   r  r  z
        positional arguments:
          spam

        options:
          -h, --help  show this help message and exit
          --foo FOO
        r   Nrd  rD   r   r   r  r  h  sM    ;'GF !#E   D Gr   r  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)TestHelpTupleMetavarOptionalz"Test specifying metavar as a tupler  r~  r]  rj   r  W1W2r!  rz  r  r   r   r  X1X2r  r_  r}  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   Nrd  rD   r   r   r  r    sx    ,'Ds#|<Ds#|<Ds!-?@Ds#x8	 !#E   D Gr   r  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)TestHelpTupleMetavarPositionalz2Test specifying metavar on a Positional as a tupler  r~  rj   r  r  r  r  r   r  r  r  r_  r  r}  r  r  r  r  r  zI        usage: PROG [-h] W1 [W2 ...] [X1 [X2 ...]] Y1 Y2 Y3 [Z1]
        z
        positional arguments:
          W1 W2       w help
          X1 X2       x help
          Y1 Y2 Y3    y help
          Z1          z help

        options:
          -h, --help  show this help message and exit
        r   Nrd  rD   r   r   r  r    sx    <'Chc<@Chc<@Cha1CDChc7;	 !#E  
 
D Gr   r  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 RawTextHelpFormatterr  7Keep the formatting
    exactly as it is written

here
r  formatter_classr  r   z-    foo help should also
appear as given herer  r  r  r  ?    This text
  should be indented
    exactly like it is here
r  r2  r  >        usage: PROG [-h] [--foo FOO] [--bar BAR] spam
        a  
        Keep the formatting
            exactly as it is written

        here

        positional arguments:
          spam        spam help

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

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

          --bar BAR   bar help
        r   N)r!   r"   r#   r$   rw   r.   RawTextHelpFormatterr   r   rB  rU  r!  r  rD   r   r   r  r    s    'X%B%B 	G 1 	2F% 
W #B 
C gJ
'	(	*!E   D, Gr   r  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)TestHelpRawDescriptionr  r  r  r  r   z4  foo help should not
    retain this odd formattingr  r  r  r  r  r  r2  r  r  a  
        Keep the formatting
            exactly as it is written

        here

        positional arguments:
          spam        spam help

        options:
          -h, --help  show this help message and exit
          --foo FOO   foo help should not retain this odd formatting

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

          --bar BAR   bar help
        r   N)r!   r"   r#   r$   rw   r.   RawDescriptionHelpFormatterr   r   rB  rU  r!  r  rD   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 ArgumentDefaultsHelpFormatterr  r  r  r   z)foo help - oh and by the way, %(default)sr  r2  r  r  r  z--tazzWhether to taz itT)r  r!  rr  z--corgezWhether to corge itr  zSet the quuxr  )r!  rr  r  r  r7  r  woodenzbadger helprz  rr  r!  r  r  rh  r  )r   rr  r!  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$   rw   r.   ArgumentDefaultsHelpFormatterr   r  r  r   r  rB  rU  r!  r  rD   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 actionr  r  r  -Vr  r  z3.6r  z&        usage: PROG [-h] [-V]
        z
        description

        options:
          -h, --help     show this help message and exit
          -V, --version  show program's version number and exit
        r   Nrd  rD   r   r   r  r  J  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 messagesr  r~  rb  r  r  r  )r  r  r!  r   r  r  r  r  r  r  N)r!   r"   r#   r$   rw   r   r.   r  r   rB  rU  r!  rD   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 coder  display some subcommandsr  rb  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
        rc  N)r!   r"   r#   r$   rw   r   r   rC  rU  r!  r  ).0rg   rw   s   000r   r  r  w  sv    ?'ACt[ERS *CD)B !d^)B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  r  r  r  rb  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)rg   r!  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
        rc  N)r!   r"   r#   r$   rw   r   r   subcommand_datarC  rU  r!  r  )r  rg   r!  rw   s   0000r   r  r    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 rR   rD   rn  s    r   custom_typez(TestHelpMetavarTypeFormatter.custom_type  s    r   r  r  )r  r  r  r   r  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  rw   r.   MetavarTypeHelpFormatterr   r  r  r   rB  rU  r!  r  rD   r   r   r  r    sr     M+3+L+LNs-t+6t%FH !#E   D Gr   r  c                       e Zd ZdZdZd Zy)!TestHelpUsageLongSubparserCommandz<Test that subparser commands are formatted correctly in helpNc                 <   d }t        j                  d|      }|j                  ddd      }|j                  dd	
       |j                  dd
       |j                  dd
       |j	                         }| j                  |t        j                  d             y )Nc                 0    t        j                  | d      S )N2   )max_help_position)r.   r  r~  s    r   custom_formatterzLTestHelpUsageLongSubparserCommand.test_parent_help.<locals>.custom_formatter  s    00LLr   r  )r  r  r  CMDzcommand to use)r  r  r!  r)  zadd somethingr  removezremove somethingza-very-long-commandzcommand that does somethinga}              usage: PROG [-h] CMD ...

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

            commands:
              CMD                    command to use
                add                  add something
                remove               remove something
                a-very-long-command  command that does something
        )r.   r/   r  r  r#  r   r  r  )r   r  parent_parsercmd_subparsersrj  s        r   rl  z2TestHelpUsageLongSubparserCommand.test_parent_help  s    	M !// 0

 '55J>C;K 6 M 	!!%'6 	" 	8 	!!('9 	" 	; 	!!"7'D 	" 	F $//1hoo 7 ' 	r   )r!   r"   r#   r$   r)  rl  rD   r   r   r  r    s    FG!r   r  c                   v    e Zd ZdZdddZdd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 constructorsN)errmsgc                x    t        j                         } | j                  t        ||j                  g|i | y rR   )r.   r/   r)  r   r   r   r  ry   rz   r5   s        r   assertTypeErrorz/TestInvalidArgumentConstructors.assertTypeError  s<    ((*y&&2E2E 	0 $	0(.	0r   c                x    t        j                         } | j                  t        ||j                  g|i | y rR   )r.   r/   r)  rK  r   r  s        r   assertValueErrorz0TestInvalidArgumentConstructors.assertValueError  s<    ((*z663F3F 	0 $	0(.	0r   c                     | j                  dd        | j                  dd       | j                  dd       | j                  di        y )	Nr   )rG  r  r+   )callbackrD   )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                     | j                          dD ]/  }| j                  |      5  | j                  |       d d d        1 y # 1 sw Y   <xY w)Nr  r  r  r  )r  r?   r   r  s     r   test_missing_destinationz8TestInvalidArgumentConstructors.test_missing_destination  sF    3FV,$$F$3 -, 4,,s   AA	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  r  )r  r  r  r   s    r   test_invalid_typez1TestInvalidArgumentConstructors.test_invalid_type%  s,    gE2gS%L9r   c                     | j                  dd       | j                  dd       | j                  dd       | j                  ddd	       y )
Nr   r+   r  rH  r   )r  r  z
store-truezunknown action)r  r  r  r   s    r   test_invalid_actionz3TestInvalidArgumentConstructors.test_invalid_action)  sV    d51eE2g.ABgl%5 	 	7r   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*  rG  rH  z+dest supplied twice for positional argument)r.   r/   r   r   rK  r  r   r  r  s      r   test_multiple_destz2TestInvalidArgumentConstructors.test_multiple_dest0  sm    ((*'z*bE2 +C",,'	) +*s   A>>Bc           	         dD ]  }| j                  |      5  t        t              t        d      t        ddg      fD ]E  }| j                  |	      5   | j                  dd|i|  | j                  dd|i| d d d        G | j                  d
|d       | j                  d|d       d d d         y # 1 sw Y   xY w# 1 sw Y   xY w)N)r  r  r  r  r  r  r  r  ry  r   r  r  )attrsr   r  r   r   r  )r   r   )r?   r  r  r  )r   r  r  s      r   test_no_argument_actionsz8TestInvalidArgumentConstructors.test_no_argument_actions8  s    0FV,"ndo"C:68EE2,,,J&JEJ,,,II5I 328
 $$T&$B$$Sq$A -,0
 32 -,s#   ?C	)B=	 2C	=CC		C	c                     dD ]E  }| j                  |      5  | j                  dd|       | j                  dd|       d d d        G y # 1 sw Y   RxY w)N)r  r  r  r  r   r+   r  r  rz  r  r?   r  r  s     r   !test_no_argument_no_const_actionszATestInvalidArgumentConstructors.test_no_argument_no_const_actionsD  sU    <FV,$$Tv$F $$TV$D -, =,,s   )AA	c           
      :   dD ]  }| j                  |      5  |dk(  rdn|}| j                  dd|d| d	       | j                  d
d|d| d	       dD ],  }| j                  dd||       | j                  d
d||       . 	 d d d         y # 1 sw Y   xY w)Nr  r  r  r  r   r   z
nargs for z actions must be != 0)rz  r  r  r  )rx  r  r  r+   )r  rz  r  )r?   r  )r   r  action_namerz  s       r   #test_more_than_one_argument_actionszCTestInvalidArgumentConstructors.test_more_than_one_argument_actionsN  s    3FV,*0H*<h&%%d!F'}4IJ & L%%fAf'}4IJ & L +E))$e05f * F))&05f * F + -, 4,,s   A-BB	c                     dD ]1  }| j                  |      5  | j                  dd|       d d d        3 y # 1 sw Y   >xY w)N)r  r  r  r   r  r   r!  r  s     r   test_required_const_actionsz;TestInvalidArgumentConstructors.test_required_const_actions_  s>    5FV,$$TV$D -, 6,,s	   8A	c                     | j                  dd       | j                  ddd       | j                  ddt        j                         y )Nr  parsersr  r  )r  r  )r  r   )r  r.   r/   r   s    r   "test_parsers_action_missing_paramszBTestInvalidArgumentConstructors.test_parsers_action_missing_paramse  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_positionalk  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  rD   r   r   Successr/  p  r  r   r0  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  rD   )r   option_stringsr+  r  rr  r  r0  s         r   r   zQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__init__u  s2     6>'"g-"))O . ( "r   c                      y rR   rD   r{   s      r   r  zQTestInvalidArgumentConstructors.test_user_defined_action.<locals>.Action.__call__  s    r   N)F)r!   r"   r#   r   r  )r0  s   r   r  r2  s  s     #(	,r   r  r  )r  rr  r  r  )r   r   r.   r/   r   r   )r   r  r5   r0  s      @r   test_user_defined_actionz8TestInvalidArgumentConstructors.test_user_defined_actionn  sy    	i 		V 	  ((*'6#6#6!' 	 	I'6#6#6!' 	 	Ir   )r!   r"   r#   r$   r  r  r  r  r  r  r  r  r  r"  r%  r'  r*  r,  r6  rD   r   r   r  r    s^    7,0 0
 .2 0
74%:7)
BEF"E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  r2  rG  r   r  r   )r.   r/   r   r   r+  r   r5   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  rx  r  r  BARrH  )rz  r  rr  r   r  r!  r  r+  )r.   r/   r   r  r   rz  r  rr  r   r  r!  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=  rD   r   r   r8  r8    s    +-r   r8  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   rK  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*  r4   s     r   test_conflict_errorz(TestConflictHandling.test_conflict_error  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 )Nr  resolve)r  rA  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_SPAMr  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   r  r5   s      r   test_resolve_errorz'TestConflictHandling.test_resolve_error  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   r5   sps      r   test_subparser_conflictz,TestConflictHandling.test_subparser_conflict  s    ((*""$
j7)4(00--	5(00--	2(00--:, 	 	H(00--7) 	 	Er   N)r!   r"   r#   rB  rD  rI  rN  rD   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rR   )r   r   r>   r   r   r#  r  r   )r   r5   r   r  s       r   assertPrintHelpExitz3TestOptionalsHelpVersionActions.assertPrintHelpExit  sY    23rhnn./ 4++-r||/B/BC 43s    A33A<c                 F    | j                  t        |j                  |       y rR   )r   r   r>   r  s      r   r  z9TestOptionalsHelpVersionActions.assertArgumentParserError  s    -v/@/@$Gr   c                     t               }|j                  dddd       | j                  |d       | j                  |d       | j                  t        t
        |d       y )	Nrb  r  r  r  r  r8   rS  format_versionr   r   rR  r   r  r   r4   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PPPr~  rb  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  sl    +7D+iX23rtf% 4bll&9&9: 43s   A99Bc                     t        d      }|j                  dddd       | j                  |d       | j                  |d	       | j                  t        t
        |d
       y )NFr=  rb  r  r  r  r  r8   rS  rU  )r   r   r  r   r  r   r4   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)Nr  r~  r  r  z%(prog)s 3.7r  zXXX 3.7
rZ  r  s      r   test_version_actionz3TestOptionalsHelpVersionActions.test_version_action  sj    +7DNK23rtf% 4bll&9&9: 43s   A88Bc                     t        d      }| j                  |d       | j                  |d       | j                  |d       | j                  |d       y )NFr=  r8   rS  rb  r  )r   r  r4   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   r!  r  r  r  rb  r  rU  )r   r   rR  r  r   r  r   r4   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 r8   rS  rU  rV  )r   r5   valid_prefixesvalid_suffixesprefixsuffixri  s          r   !test_help_version_extra_argumentszATestOptionalsHelpVersionActions.test_help_version_extra_arguments  s    +-K	5ID6C  ?'>=*II$F((.7 )$$VVd];$$VVh->?ngv?OP %r   N)r!   r"   r#   r$   rR  r  rW  r[  r]  r_  ra  rc  ri  rD   r   r   rP  rP    s8    +D
HM;M;<MQr   rP  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 rR   )r   r  r   )r   objresult_stringr9   s       r   assertStringEqualzTestStrings.assertStringEqual4  s$    $KDT#Y6  r   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  rx  r  r}  FHELPMETAVAR	r4  r+  r   rz  rr  r  r  r!  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.   r  ro  )r   optionro  s      r   test_optionalzTestStrings.test_optional8  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  r  )r  g      ?r  TzH HH HzMV MV MVrt  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.   r  r  ro  )r   argumentro  s      r   test_argumentzTestStrings.test_argumentI  sQ    ??#	 @BGH 	 	x0r   c                 Z    t        j                  dd      }d}| j                  ||       y )Nr  r  rF  zNamespace(foo=42, bar='spam')r.   r*  ro  r   r-  ro  s      r   test_namespacezTestStrings.test_namespaceZ  s)    BF30r6*r   c                 Z    t        j                  di ddi}d}| j                  ||       y )N"quotezNamespace(**{'"': 'quote'})rD   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   rx  r  r  z Namespace(a=1, **{'"': 'quote'})rD   r{  r|  s      r   2test_namespace_kwargs_and_starkwargs_notidentifierz>TestStrings.test_namespace_kwargs_and_starkwargs_notidentifierd  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)rD   r{  r|  s      r   $test_namespace_starkwargs_identifierz0TestStrings.test_namespace_starkwargs_identifieri  s.    27D/2(r6*r   c                 z    t        j                  d      }dt         j                  z  }| j                  ||       y )Nr  r~  zvArgumentParser(prog='PROG', usage=None, description=None, formatter_class=%r, conflict_handler='error', add_help=True))r.   r/   HelpFormatterro  )r   r5   ro  s      r   test_parserzTestStrings.test_parsern  s<    ((f5'556 	 	vv.r   N)r!   r"   r#   r$   ro  rv  ry  r}  r  r  r  r  rD   r   r   rk  rk  1  s-    =7/"1"+
+
+
+
/r   rk  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  rU  )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 )Nrx  r  rU  )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 )Nrx  r  rU  )r.   r*  r  r   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  r  rD   r   r   r  r  z  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   rk   )rV   r^   splitextrm   r  )r   r^   r   r  s       r   _test_module_encodingz"TestEncoding._test_module_encoding  sF    ''""4(a$g.!FFH /..s   AAc                 B    | j                  t        j                         y rR   )r  r.   __file__r   s    r   test_argparse_module_encodingz*TestEncoding.test_argparse_module_encoding  s    ""8#4#45r   c                 .    | j                  t               y rR   )r  r  r   s    r   "test_test_argparse_module_encodingz/TestEncoding.test_test_argparse_module_encoding  s    ""8,r   N)r!   r"   r#   r  r  r  rD   r   r   r  r    s    6-r   r  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_error  s-    &&tS1US)r   N)r!   r"   r#   r  rD   r   r   r  r    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.   ArgumentTypeErrorrn  s    r   r  z<TestArgumentTypeError.test_argument_type_error.<locals>.spam  s    ,,W55r   r  Fr  r   r  r  z-usage: PROG x
PROG: error: argument x: spam!
)r   r   r   r   r>   r   r  r   )r   r  r5   r  s       r   test_argument_type_errorz.TestArgumentTypeError.test_argument_type_error  su    	6 ,%HCd+23rug& 4J,,	. 43s   A;;BN)r!   r"   r#   r  rD   r   r   r  r    s    
.r   r  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)Nr  r   r  req_posr  -req_optTr  need_oner  )r   rz  req_optmyXargumentz
-req_opt=1)
r   r   r   r  r   r   r>   r  rA   r+  r   r5   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3rb! 4",,i(i(j)23r}o. 4",,i(i(j)23r}l;< 4",,i(i(j)# 43 43 43s$   *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)Nr  r   r  r  r  z	--req_optTr  z	--opt_optr  )r   rz  rr  r  opt_optz--req_opt=1)r   r   r   r  r  r   r   r>   r  rA   r+  r  s       r   %test_optional_optional_not_in_messagez=TestMessageContentError.test_optional_optional_not_in_message  s*   +rBIC0KcDAKd#$( 	 	*23rb! 4",,i(i(i(23r}o. 4",,i(i(i( 43 43s   +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)	Nr  r   r  r  optional_positionalr  rQ  r  )	r   r   r   r   r>   r   r  rA   r+  r  s       r   'test_optional_positional_not_in_messagez?TestMessageContentError.test_optional_positional_not_in_message  s    +rBI&1fM23rb! 4",,i(34	 43s   BB%N)r!   r"   r#   r  r  r  rD   r   r   r  r    s    *2)&5r   r  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)Nr  foo_convertedr   )string_to_convertr   s    r   r  zLTestTypeFunctionCallOnlyOnce.test_type_function_call_only_once.<locals>.spam  s    .8"r   r   rG  r  z--foo spam!r  r  )r.   r/   r   r>   r   r   r~   r   r  r5   ry   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#   r  rD   r   r   r  r    s    8r   r  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  rD   )r  s    r   r  zYTestTypeFunctionCalledOnDefault.test_type_function_call_with_string_default.<locals>.spam)  s    "r   r   0r  r  r  r  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  rD   )str_to_converts    r   r  zYTestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_default.<locals>.extend3  s    !C''r   --testr  r  z**)rL  r  )r   r  r5   ry   s       r   )test_no_double_type_conversion_of_defaultzITestTypeFunctionCalledOnDefault.test_no_double_type_conversion_of_default2  sR    	( ((*H63?  $ 	-r   c                     t        j                         }|j                  ddt        g d       |j	                  g       }| j                  |j                  g        y )Nr  rL  r  )r+  r   rr  r  )r.   r/   r   r   r>   r   rL  r  s      r   test_issue_15906z0TestTypeFunctionCalledOnDefault.test_issue_15906>  sT     ((*H6$&x 	 	9  $B'r   N)r!   r"   r#   r  r  r  r  rD   r   r   r  r    s    	*8
.(r   r  c                   6    e 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 )NrD   r.   r/   r>   r4   s     r   test_arguments_tuplez'TestParseKnownArgs.test_arguments_tupleN      ((*"r   c                 N    t        j                         }|j                  g        y rR   r  r4   s     r   test_arguments_listz&TestParseKnownArgs.test_arguments_listR  r  r   c                 p    t        j                         }|j                  d       |j                  d       y )Nr   r   r.   r/   r   r>   r4   s     r   test_arguments_tuple_positionalz2TestParseKnownArgs.test_arguments_tuple_positionalV  s,    ((*C &!r   c                 r    t        j                         }|j                  d       |j                  dg       y )Nr   r  r4   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  r2  rh  )r.   r/   r   r  r   r   r~   )r   r5   ry   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 )Nrb  r  rx  )rz  r  r   r  r  r  r7  )rE  ri  r   rb  r  r  r}  TrE  )vr  r7  )ri  r   r  )r.   r/   r   r  r  r   r~   )r   r5   r   ry   r  s        r   
test_mixedzTestParseKnownArgs.test_mixedg  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  rs  )rz  r  r   r  r  s      r   test_zero_or_more_optionalz-TestParseKnownArgs.test_zero_or_more_optionalr  sI    ((*CsJ?  $b4(r   N)
r!   r"   r#   r  r  r  r  r  r  r  rD   r   r   r  r  L  s%    "
!
5	6)r   r  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestDoubleDashc                 ~   t        j                  d      }|j                  dd       |j                  dd       |j                  dg      }| j	                  t        d	g 
      |       | j                  t         j                  d|j                  dd	g       |j                  dg      }| j	                  t        d	g 
      |       | j                  t         j                  d|j                  dd	g       |j                  g d      }| j	                  t        dddg
      |       |j                  g d      }| j	                  t        dddg
      |       |j                  g d      }| j	                  t        d g d
      |       |j                  g d      }| j	                  t        d g d
      |       y )NFr&  r  r   rG  r  ry  --foo=--r  rF  z(argument -f/--foo: expected one argument-f--)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  s      r   test_single_argument_optionz*TestDoubleDash.test_single_argument_optionz  s   ((u=D'*E-  *."-t4x556	0   &*"-t4x556d|	-   !?@#s4d;  !9:#s4d;  !?@*BCTJ  !JK*MNPTUr   c                    t        j                  d      }|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
      |       |j                  g d      }| j	                  t        ddgddg
      |       |j                  g d      }| j	                  t        d g d
      |       |j                  g d      \  }}| j	                  t        dgddg
      |       | j	                  |d	dg       y )NFr&  r  r   r  ry  rG  r  r  rF  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   r5   ry   r   s       r   test_multiple_argument_optionz,TestDoubleDash.test_multiple_argument_option  s   ((u=D'5E-  *.B/6  '41+T2  &*B/6  $.+T2  !DEc
c
;TB  !>?c
c
;TB  !DE*GH$O,,-PQ
dC:6=c{+r   c                 l   t        j                  d      }|j                  d       |j                  dd       |j                  g d      }| j	                  t        dd	d
g      |       |j                  g d      }| j	                  t        dd	d
g      |       |j                  g d      }| j	                  t        dd	d
g      |       |j                  g d      }| j	                  t        dg d      |       |j                  g d      }| j	                  t        dg d      |       y )NFr&  r+   rG  r  ry  r  r   r  r  r   r  r  rF  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   test_multiple_double_dashesz*TestDoubleDash.test_multiple_double_dashes  s	   ((u=E"E-  !67#s4d;  !67#s4d;  !67#s4d;  !<=)9:DA  !BC*?@$Gr   c                    t        j                  d      }|j                  d       |j                  dd       |j                  g d      }| j	                  t        dd	d
g      |       |j                  g d      }| j	                  t        dd	d
g      |       |j                  g d      }| j	                  t        dg d      |       |j                  g d      }| j	                  t        dg d      |       t        j                  d      }|j                  d       |j                  dd       |j                  g d      }| j	                  t        dg d      |       y )NFr&  r+   rG  r  ry  r  r   r  r  rF  r  r  r  r  r   )r   r   r  r  r  r  )r  r  r  r  r  r  s      r   test_remainderzTestDoubleDash.test_remainder  s7   ((u=E"E/  !67#s4d;  !67#s4d;  !67)9:DA  !<=)9:DA((u=G$E/  !EF)?@$Gr   c                 h   t        j                  d      }|j                  d       |j                         }|j	                  d      }|j                  d       |j                  dd       |j                  g d	      }| j                  t        d
dddg      |       |j                  g d      }| j                  t        d
d g d      |       |j                  g d      }| j                  t        d
d g d      |       |j                  g d      }| j                  t        d
d g d      |       |j                  g d      }| j                  t        d
dddg      |       |j                  g d      }| j                  t        d
dddg      |       |j                  g d      }| j                  t        d
d g d      |       |j                  g d      }| j                  t        d
d g d      |       | j                  t         j                  d|j
                  g d       y )NFr&  r+   r  r  rG  r  ry  )r   r  r   r  r  r  r   r  r   r  r+   r  rG  )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  r  r  r   r  r  invalid choice: '--')r  r   r  r  r   r  
r.   r/   r   r  r  r>   r   r~   r)  r*  r   r5   r  r  ry   s        r   test_subparserzTestDoubleDash.test_subparser  s   ((u=E"**,
''.T"U#.  !BCsc
;TB  !HIt1FGN  !HIt1FGN  !HIt1FGN  !HIsc
;TB  !HIsc
;TB  !CDt1ABDI  !IJt1ABDIx55"A	Cr   c                    t        j                  d      }|j                  dd       |j                         }|j	                  d      }|j                  d       |j                  dd       |j                  g d	      }| j                  t        d
dgdddg      |       | j                  t         j                  d|j
                  g d       y )NFr&  r   r  ry  r  r  rG  )	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   -test_subparser_after_multiple_argument_optionz<TestDoubleDash.test_subparser_after_multiple_argument_option  s    ((u=G3/**,
''.T"U#.  !VWc
cSzBDIx55"J	Lr   N)	r!   r"   r#   r  r  r  r   r  r  rD   r   r   r  r  y  s%    V0,.H H(C8Lr   r  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dg      |       | j                  ddg|       |j                  |      \  }}| j                  t        dd
dg d      |       | j                  g |       dj	                         }|j                  |      \  }}| j                  t        dd
dg d      |       | j                  dg|       dj	                         }|j                  |      \  }}| j                  t        dd
dg d      |       | j                  dg|       dj	                         }|j                  |      \  }}| j                  t        dd
dg d      |       | j                  dg|       | j                  |j                         | j                  |j                  d       y )Nr  r~  r   r+   r*  r2  rG  Tr  cmdrestr  )rz  r   zcmd --foo x 1 --bar y 2 3r_  r   rq  )rG  r  r+   r  rx  r  r  z!cmd --foo x --error 1 2 --bar y 3z--errorz!cmd --foo x 1 --error 2 --bar y 3z!cmd --foo x 1 2 --error --bar y 3)r.   r/   r   r  r   parse_intermixed_argsr   r~   r  parse_known_intermixed_argsr  rU  r  )r   r5   rG  r   ry   r  s         r   
test_basiczTestIntermixedArgs.test_basic  s3   ((f5G%0!!'!EE"F#C8*002++D1CiH$O..t4fCqcBDI#sV,99$?fCiH$OV$ 388:99$?fCiH$O)f-288:99$?fCiH$O)f-288:99$?fCiH$O)f- 	&,,'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)
Nr  r~  r	  r   r_  r  ry  r  z\.\.\.)	r   r   r   r   r   r  rA   r   r  )r   r5   r   r  s       r   r   z!TestIntermixedArgs.test_remainder#  s    +8D!C Cu-!!# y)R((. *R\\*I6 *)s   'B''B0c                 v   t        j                  d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	                  dj                               }| j                  t        ddgdd       |       | j                  t         j                  d|j                  dj                                | j                  |j                  d       y )Nr  Fr  r'  Tr  r   r  r  r  r  r  r  r7  r  r9  r  r  z	--foo 1 2rC  r  )r7  r+   r  z	1 --foo 2z-one of the arguments --foo --spam is requiredrB  )r.   r/   rC  r   r  r   r   r~   r)  r*  r  r   r5   r   ry   s       r   test_required_exclusivez*TestIntermixedArgs.test_required_exclusive0  s   ((fEJ33T3B7<eD8&1HC8L++K,=,=,?@C:4dCTJ++K,=,=,?@C:4dCTJx55?,,ekkm	= 	.r   c                    t        j                  dd      }|j                  d      }|j                  ddd	       |j                  d
d       |j                  dddd       |j	                  dg      }| j                  t        dd d      |       |j	                  ddg      }| j                  t        dd ddg      |       | j                  t         j                  d|j                  g        | j                  t         j                  d|j                  g d       | j                  t         j                  d|j                  g d       | j                  |j                  d       y )Nr  Fr  Tr  r   r  r  r  r  r  r  r7  r  r9  r  r  r  r   r  z4one of the arguments --foo --spam badger is requiredz0argument badger: not allowed with argument --foo)r   r   r  )r   r   r  )
r.   r/   rC  r   r  r   r~   r)  r*  r  r  s       r   'test_required_exclusive_with_positionalz:TestIntermixedArgs.test_required_exclusive_with_positional@  sL   ((fEJ33T3B7<eD8&183(K++WI64<dC++S#J7D#sDdKx55F,,b	2 	x55B,,.A	C 	x55B,,.A	C 	.r   N)r!   r"   r#   r  r   r  r  rD   r   r   r
  r
    s    $-L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)
Nr  r   r  r  r  r  Tr  r  )
r   r   r   r  r   r   r>   r  rA   r  r  s       r   r  zGTestIntermixedMessageContentError.test_missing_argument_name_in_messageZ  s    +rBIC0JS4@23rb! 4",,i(i(23r((, 4",,i(i( 43 43s   D:DDD#N)r!   r"   r#   r  rD   r   r   r  r  W  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   rz  r  )r.   r/   r   )r   rz  r  r5   s       r   do_test_no_exceptionz+TestAddArgumentMetavar.do_test_no_exceptions  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   rK  r   r   r  ry   EXPECTED_MESSAGE)r   rz  r  r5   r  s        r   do_test_exceptionz(TestAddArgumentMetavar.do_test_exceptionw  sh    ((*z*bugF +**1-t/D/DE +*s   A;;Bc                 *    | j                  d d       y )NrC  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rC  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  rC  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  rC  r  r$  r   s    r   $test_nargs_zeroormore_metavar_stringz;TestAddArgumentMetavar.test_nargs_zeroormore_metavar_string  r4  r   c                 :    | j                  dt                      y )Nr  r  r'  r   s    r   %test_nargs_zeroormore_metavar_length0z<TestAddArgumentMetavar.test_nargs_zeroormore_metavar_length0  r7  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  rC  r  r$  r   s    r   #test_nargs_oneormore_metavar_stringz:TestAddArgumentMetavar.test_nargs_oneormore_metavar_string  r4  r   c                 :    | j                  dt                      y )Nr  r  r'  r   s    r   $test_nargs_oneormore_metavar_length0z;TestAddArgumentMetavar.test_nargs_oneormore_metavar_length0  r7  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  rH  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 )Nr  rC  r  r$  r   s    r   #test_nargs_remainder_metavar_stringz:TestAddArgumentMetavar.test_nargs_remainder_metavar_string  s    !!s!;r   c                 :    | j                  dt                      y )Nr  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 )Nr  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 )Nr  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 )Nr  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...rC  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 )Nrx  rC  r  r$  r   s    r   test_nargs_1_metavar_stringz2TestAddArgumentMetavar.test_nargs_1_metavar_string      !!3!7r   c                 :    | j                  dt                      y )Nrx  r  r'  r   s    r   test_nargs_1_metavar_length0z3TestAddArgumentMetavar.test_nargs_1_metavar_length0      Q8r   c                 *    | j                  dd       y )Nrx  r  r  r$  r   s    r   test_nargs_1_metavar_length1z3TestAddArgumentMetavar.test_nargs_1_metavar_length1  s    !!6!:r   c                 *    | j                  dd       y )Nrx  r-  r  r.  r   s    r   test_nargs_1_metavar_length2z3TestAddArgumentMetavar.test_nargs_1_metavar_length2      Q
;r   c                 *    | j                  dd       y )Nrx  r  r  r.  r   s    r   test_nargs_1_metavar_length3z3TestAddArgumentMetavar.test_nargs_1_metavar_length3      Q@r   c                 *    | j                  dd       y )Nr  rC  r  r$  r   s    r   test_nargs_2_metavar_stringz2TestAddArgumentMetavar.test_nargs_2_metavar_string  rl  r   c                 :    | j                  dt                      y )Nr  r  r'  r   s    r   test_nargs_2_metavar_length0z3TestAddArgumentMetavar.test_nargs_2_metavar_length0  ro  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  rw  r   c                 *    | j                  dd       y )Nr}  rC  r  r$  r   s    r   test_nargs_3_metavar_stringz2TestAddArgumentMetavar.test_nargs_3_metavar_string  rl  r   c                 :    | j                  dt                      y )Nr}  r  r'  r   s    r   test_nargs_3_metavar_length0z3TestAddArgumentMetavar.test_nargs_3_metavar_length0
  ro  r   c                 *    | j                  dd       y )Nr}  r  r  r.  r   s    r   test_nargs_3_metavar_length1z3TestAddArgumentMetavar.test_nargs_3_metavar_length1  r~  r   c                 *    | j                  dd       y )Nr}  r-  r  r.  r   s    r   test_nargs_3_metavar_length2z3TestAddArgumentMetavar.test_nargs_3_metavar_length2  rt  r   c                 *    | j                  dd       y )Nr}  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/  r1  r3  r6  r9  r<  r>  rA  rC  rE  rG  rJ  rL  rN  rP  rR  rT  rV  rX  rZ  r\  r^  ra  rc  re  rg  ri  rk  rn  rq  rs  rv  ry  r{  r}  r  r  r  r  r  r  r  rD   r   r   r  r  o  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   ry  r   )	r.   r/   r   rK  r   r   r  ry   EXPECTED_RANGE_MESSAGEr   rz  r5   r  s       r   do_test_range_exceptionz(TestInvalidNargs.do_test_range_exception  sf    ((*z*bu5 +**1-t/J/JK +*   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   rK  r   r   r  ry   EXPECTED_INVALID_MESSAGEr  s       r   do_test_invalid_exceptionz*TestInvalidNargs.do_test_invalid_exception$  sf    ((*z*bu5 +**1-t/L/LM +*r  c                 L    | j                  d       | j                  d       y )Nr   ry  abcd)r  r   s    r   test_nargs_alphabeticz&TestInvalidNargs.test_nargs_alphabetic,  s$    &&S&1&&V&4r   c                 (    | j                  d       y )Nr   ry  )r  r   s    r   test_nargs_zeroz TestInvalidNargs.test_nargs_zero0  s    $$1$-r   N)	r!   r"   r#   r  r  r  r  r  r  rD   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 rR   )r.   __all__r  r   r  s     r   rL  zTestImportStar.test9  s%    $$DOOGHd34 %r   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   rg   rZ  r   s       r   'test_all_exports_everything_but_modulesz6TestImportStar.test_all_exports_everything_but_modules=  s|      $H~335
5eOOC(DJ,>##E* 5 	 
 	x/?/?(@A
s   7BN)r!   r"   r#   rL  r  rD   r   r   r  r  7  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--proxyr  )r   rN   r   r5   r   )r   r  r   s     r   rN   zTestWrappingMetavar.setUpI  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>
            )r5   r#  r   r  r  )r   	help_texts     r   test_help_with_metavarz*TestWrappingMetavar.test_help_with_metavarS  s4    KK++-	HOO 5 % 	r   )r!   r"   r#   rN   r  r%   r&   s   @r   r  r  G  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y)TestExitOnErrorc                     t        j                  dd      | _        | j                  j                  ddt               y )NFr  )r'  r  z
--integersN)r  r   )r.   r/   r5   r   r  r   s    r   rN   zTestExitOnError.setUpa  s3    --EDGI  s Er   c                     | j                   j                  dj                               }| j                  |t	        j
                  d             y )Nz--integers 4r  )integers)r5   r>   r   r   r.   r*  r,  s     r   !test_exit_on_error_with_good_argsz1TestExitOnError.test_exit_on_error_with_good_argsf  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*  r5   r>   r   r   s    r    test_exit_on_error_with_bad_argsz0TestExitOnError.test_exit_on_error_with_bad_argsj  s=    x556KK"">#7#7#9: 766s   *AAc                     | j                  t        j                  d| j                  j                  dj                                y Nz!unrecognized arguments: --foo barr  )r)  r.   r*  r5   r>   r   r   s    r   test_unrecognized_argsz&TestExitOnError.test_unrecognized_argsn  s4    x55B#{{55{7H7H7J	Lr   c                     | j                  t        j                  d| j                  j                  dj                                y r  )r)  r.   r*  r5   r  r   r   s    r   !test_unrecognized_intermixed_argsz1TestExitOnError.test_unrecognized_intermixed_argss  s4    x55B#{{@@+BSBSBU	Wr   c                     | j                   j                  d       | j                   j                  d       | j                  t        j                  d| j                   j
                  g        y )NrG  rH  /the following arguments are required: bar, baz$r5   r   r)  r.   r*  r>   r   s    r   test_required_argsz"TestExitOnError.test_required_argsx  sN      '  'x55P#{{55r	;r   c                     | j                   j                  d       | j                   j                  dd       | j                  t        j                  d| j                   j
                  g        y )NrG  rH  BaZr  z/the following arguments are required: bar, BaZ$r  r   s    r   test_required_args_with_metavarz/TestExitOnError.test_required_args_with_metavar  sS      '   6x55P#{{55r	;r   c                     | j                   j                  d       | j                   j                  dd       | j                  t        j                  d| j                   j
                  g        y )NrG  rH  r}  ry  r  r  r   s    r   test_required_args_nz$TestExitOnError.test_required_args_n  sS      '  a 0x55P#{{55r	;r   c                     | j                   j                  d       | j                   j                  ddd       | j                  t        j                  d| j                   j
                  g        y )NrG  rH  r}  )rE  r  r  r  z3the following arguments are required: bar, B, A, Z$r  r   s    r   !test_required_args_n_with_metavarz1TestExitOnError.test_required_args_n_with_metavar  sU      '  a Ix55T#{{55r	;r   c                     | j                   j                  d       | j                   j                  dd       | j                  t        j                  d| j                   j
                  g        y )NrG  rH  r  ry  *the following arguments are required: bar$r  r   s    r   test_required_args_optionalz+TestExitOnError.test_required_args_optional  S      '  c 2x55K#{{55r	;r   c                     | j                   j                  d       | j                   j                  dd       | j                  t        j                  d| j                   j
                  g        y )NrG  rH  r  ry  r  r  r   s    r   test_required_args_zero_or_morez/TestExitOnError.test_required_args_zero_or_more  r  r   c                     | j                   j                  d       | j                   j                  dd       | j                  t        j                  d| j                   j
                  g        y )NrG  rH  r  ry  r  r  r   s    r   test_required_args_one_or_morez.TestExitOnError.test_required_args_one_or_more  sS      '  c 2x55P#{{55r	;r   c                     | j                   j                  d       | j                   j                  ddd       | j                  t        j                  d| j                   j
                  g        y )NrG  rH  r  )BaZ1BaZ2r  z9the following arguments are required: bar, BaZ1\[, BaZ2]$r  r   s    r   +test_required_args_one_or_more_with_metavarz;TestExitOnError.test_required_args_one_or_more_with_metavar  sV      '  c;K Lx55[#{{55r	;r   c                     | j                   j                  d       | j                   j                  dd       | j                  t        j                  d| j                   j
                  g        y )NrG  rH  r  ry  r  r  r   s    r   test_required_args_remainderz,TestExitOnError.test_required_args_remainder  sS      '  e 4x55K#{{55r	;r   c                     | j                   j                  d      }|j                  d       |j                  d       | j                  t        j
                  d| j                   j                  g        y )NTr  r2  rh  z,one of the arguments --bar --baz is requiredr5   rC  r   r)  r.   r*  r>   r   r   s     r   %test_required_mutually_exclusive_argsz5TestExitOnError.test_required_mutually_exclusive_args  s]    88$8G7#7#x55M#{{55r	;r   c                 b   | j                   j                         }|j                  d       |j                  ddd       | j                  t        j
                  d| j                   j                  g d       | j                  t        j
                  d| j                   j                  g d	       y )
Nr2  rH  r  r  r  z.argument BaZ: not allowed with argument --bar$r2  r   r  z.argument --bar: not allowed with argument BaZ$r   r2  r  r  r  s     r   >test_conflicting_mutually_exclusive_args_optional_with_metavarzNTestExitOnError.test_conflicting_mutually_exclusive_args_optional_with_metavar  s    88:7#5U;x55O#{{557J	L 	x55O#{{557J	Lr   c                 b   | j                   j                         }|j                  d       |j                  ddd       | j                  t        j
                  d| j                   j                  g d       | j                  t        j
                  d| j                   j                  g d	       y )
Nr2  rH  r  )BAZ1r  z/argument BAZ1: not allowed with argument --bar$r  z/argument --bar: not allowed with argument BAZ1$r  r  r  s     r   Ctest_conflicting_mutually_exclusive_args_zero_or_more_with_metavar1zSTestExitOnError.test_conflicting_mutually_exclusive_args_zero_or_more_with_metavar1  s    88:7#5Y?x55P#{{557J	L 	x55P#{{557J	Lr   c                 b   | j                   j                         }|j                  d       |j                  ddd       | j                  t        j
                  d| j                   j                  g d       | j                  t        j
                  d| j                   j                  g d	       y )
Nr2  rH  r  )r  BAZ2r  z8argument BAZ1\[, BAZ2]: not allowed with argument --bar$r  z8argument --bar: not allowed with argument BAZ1\[, BAZ2]$r  r  r  s     r   Ctest_conflicting_mutually_exclusive_args_zero_or_more_with_metavar2zSTestExitOnError.test_conflicting_mutually_exclusive_args_zero_or_more_with_metavar2  s    88:7#55EFx55Z#{{557J	L 	x55Z#{{557J	Lr   c                 f   | j                   j                  d       | j                   j                  dd       | j                   j                  d       | j                  t        j                  d| j                   j
                  dg       | j                  t        j                  d| j                   j
                  d	g       | j                  t        j                  d
| j                   j
                  g d       | j                  t        j                  d| j                   j
                  g d       y )Nr  r  r  r  --fooglez7ambiguous option: --foob could match --foobaz, --foobler  z:ambiguous option: --foob=1 could match --foobaz, --fooble$--foob=1z8ambiguous option: --foob could match --foobaz, --fooble$)r  rC  r  r  )r  r  r  r  r   s    r   test_ambiguous_optionz%TestExitOnError.test_ambiguous_option  s      ,  L A  ,x55IKK""XJ	0 	x55LKK""ZL	2 	x55JKK""$D	F 	x55LKK""$A	Cr   c                     | j                   j                  d       | j                  t        j                  d| j                   j
                  dg       y )Nrq   z)No such file or directory: 'no-such-file'z@no-such-filer  r   s    r   test_os_errorzTestExitOnError.test_os_error  s@      (x55J#{{557H	Jr   N)r!   r"   r#   rN   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rD   r   r   r  r  _  sn    F
=;L
W
;;;;;;;;;;	L	L	LC"Jr   r  c                       e Zd Zd Zy)TestTranslationsc                 .    | j                  t               y rR   )assertMsgidsEqualr.   r   s    r   test_translationsz"TestTranslations.test_translations  s    x(r   N)r!   r"   r#   r  rD   r   r   r  r    s    )r   r  c                  @    i t         _        t               t        _        y rR   )r  r
  r  r%  rD   r   r   tearDownModuler    s    EJEJr   __main__rx  z--snapshot-update(   r0   r<   r  r   r  rV   rb   r`   r   r  rS   unittestr.   r  enumr   test.supportr   test.support.i18n_helperr   r   r   TextIOWrapperr	   rF   r(   skip_unless_working_chmodr   rP   rw   r~   r   r   r   r/   r   r   r   r   r   r   r  r  r  r&  r(  r.  r0  r>  rA  rJ  rZ  r\  ra  rg  rp  ru  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-  r1  r3  r6  r8  r:  r<  r>  r@  rE  rH  rJ  rN  rZ  r]  r`  rb  rd  rf  ri  rk  rm  ro  rq  rs  rv  rx  r{  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r  r  r3  	eq_stderrr#  r9  
eq_bstderrr  r  r  r   r%  skip_if_dac_overrider+  r5  r8  r;  r>  rI  rO  rU  rd  rk  rt  r  r  r  r,  r:  rv  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(  r3  r5  rW  rf  ri  rk  rq  rv  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r8  r?  rP  rk  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r  r  r  r  r!   lenr   r3   mainrD   r   r   <module>r     s      	  	   
       " W :""" :$FH%% F:x    $$D6 D %D.& ) )%) %# L>!8!8 >q9D q9f 		&'7Cn n 4. ^  ~ .
> 
n . $ &N & ( , .^  
 
	> 	 . .  .> &. "> "
N 
~ N N > > >@
 
	 		> 	 &^  ~  &N "~ "n "n &N &
 
@~ N N 	^ 		N 	N > . > >    ( "~   $  ~ n ^ N 	n 	^ N . , . ,> 
^ 
	N 	>  
. 
   ~ "> &~ &.    ^ 6. 2 (. **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$~ [ [B!+H !+NJ J`@&x @&D1?f 1?h '8  F( (V7H B!'8 !H*( *Z''8 'T%7H %P' 'R/('8 /(d GX  F w  F (  L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\ 8.l .b-\ -`0| 0dL (L 2 :' 'V< :% %XIh IJ-( -<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*) *)Z|LX |LFX/ X/v) )0eDX eDP.x .@BX B ( 0VJh VJz)+ ) z
388}qSXXa[,??$X.HMMO r   