
    daf                     :   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlZd dlmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ  G d d	e      Z G d
 de      Z G d dej8                        Z G d de      Z G d de      Z G d de      Z  G d de      Z!dddddZ"d Z# G d de      Z$ G d de      Z% G d  d!e      Z& G d" d#e      Z' G d$ d%e      Z( G d& d'e      Z) G d( d)e      Z* G d* d+e      Z+ G d, d-e      Z, G d. d/e      Z- G d0 d1e      Z. G d2 d3e      Z/ G d4 d5e      Z0 G d6 d7e      Z1 G d8 d9e      Z2 G d: d;e      Z3 G d< d=e      Z4 G d> d?e      Z5 G d@ dAe      Z6 G dB dCe      Z7 G dD dEe      Z8 G dF dGe      Z9 G dH dIe9      Z: G dJ dKe9      Z; G dL dMe      Z<dNZ=dOZ>dPZ?dQZ@dRZA G dS dTe      ZB G dU dVe      ZC G dW dXe      ZD G dY dZej8                        ZEeFd[k(  r ej                          yy)\    N)StringIO)support)	os_helper)make_optionOptionTitledHelpFormatterOptionParserOptionGroupSUPPRESS_USAGEOptionErrorOptionConflictErrorBadOptionErrorOptionValueErrorValues)_match_abbrev)
_parse_numc                        e Zd Z	 	 	 ddZd Zy)InterceptedErrorNc                 .    || _         || _        || _        y N)error_messageexit_statusexit_message)selfr   r   r   s       -/root/Python-3.12.4/Lib/test/test_optparse.py__init__zInterceptedError.__init__   s     +&(    c                 >    | j                   xs | j                  xs dS )Nzintercepted error)r   r   r   s    r   __str__zInterceptedError.__str__%   s    !!MT%6%6M:MMr   )NNN)__name__
__module____qualname__r   r     r   r   r   r      s    #!")Nr   r   c                       e Zd ZddZd Zy)InterceptingOptionParserNc                     t        ||      )N)r   r   r   )r   statusmsgs      r   exitzInterceptingOptionParser.exit)   s    6DDr   c                     t        |      )N)r   r(   )r   r*   s     r   errorzInterceptingOptionParser.error,   s    S11r   r   N)r!   r"   r#   r+   r-   r$   r   r   r&   r&   (   s    E2r   r&   c                   6    e Zd Zd Zd Zd Z	 	 ddZd Zd Zy)	BaseTestc                     | j                   j                  |      \  }}t        |      }| j                  ||dt	               z         | j                  ||dt	               z         ||fS )a  Assert the options are what we expected when parsing arguments.

        Otherwise, fail with a nicely formatted message.

        Keyword arguments:
        args -- A list of arguments to parse with OptionParser.
        expected_opts -- The options expected.
        expected_positional_args -- The positional arguments expected.

        Returns the options and positional args for further testing.
        zJ
Options are %(optdict)s.
Should be %(expected_opts)s.
Args were %(args)s.zj
Positional arguments are %(positional_args)s.
Should be %(expected_positional_args)s.
Args were %(args)s.)parser
parse_argsvarsassertEquallocals)r   argsexpected_optsexpected_positional_argsoptionspositional_argsoptdicts          r   assertParseOKzBaseTest.assertParseOK1   s|     &*[[%;%;D%A"/w--  "	# 	*B  #	$ ))r   c           
      j   |d}|i }	  ||i | | j                  dt               z         y# |$ r~}t        |      }t        |t        j
                        r3| j                  |j                  |      d|j                  d|d       n| j                  ||d|d|d       |cY d}~S d}~ww xY w)	a-  
        Assert that the expected exception is raised when calling a
        function, and that the right error message is included with
        that exception.

        Arguments:
          func -- the function to call
          args -- positional arguments to `func`
          kwargs -- keyword arguments to `func`
          expected_exception -- exception that should be raised
          expected_message -- expected exception message (or pattern
            if a compiled regex object)

        Returns the exception raised for further testing.
        Nr$   znexpected exception %(expected_exception)s not raised
called %(func)r
with args %(args)r
and kwargs %(kwargs)r
z%expected exception message pattern:
/z/
actual exception message:
'''z'''
zexpected exception message:
'''z!'''
actual exception message:
''')
failr6   str
isinstancerePattern
assertTruesearchpatternr5   )r   funcr7   kwargsexpected_exceptionexpected_messageerractual_messages           r   assertRaiseszBaseTest.assertRaisesO   s    * <D>F	$!&!. II  i	 - " 	 XN*BJJ7 0 7 7 G 12   !1 ")* J)	s   / B2A3B-'B2-B2c                     	 | j                   j                  |       | j                  d       y# t        $ r&}| j	                  |j
                  |       Y d}~yd}~ww xY w)z
        Assert the parser fails with the expected message.  Caller
        must ensure that self.parser is an InterceptingOptionParser.
        zexpected parse failureN)r2   r3   assertFalser   r5   r   )r   cmdline_argsexpected_outputrK   s       r   assertParseFailzBaseTest.assertParseFail   sW    
	7KK""<0 56   	AS..@@	As   / 	AAANc                    t         j                  }	 	 t               t         _        | j                  j	                  |       t         j                  j                         }|t         _        	 | j                  d       y# t         j                  j                         }|t         _        w xY w# t        $ r}| j                  t        t              dt        |      z         ||k7  r| j                  d|z   dz   |z   dz          | j                  |j                  |       | j                  |j                  |       Y d}~yd}~ww xY w)z7Assert the parser prints the expected output on stdout.zexpected parser.exit()z0expected output to be an ordinary string, not %rzexpected: 
'''
z'''
but got 
'''
z'''N)sysstdoutr   r2   r3   getvaluerO   r   rD   rA   r@   typer?   r5   r   r   )r   rP   rQ   expected_statusexpected_errorsave_stdoutoutputrK   s           r   assertOutputzBaseTest.assertOutput   s    jj	7)%Z
&&|4,,.(
 56 ,,.(
 
	?OO63'Bv, 
 (		-?0139:<AB CS__o>S--~>>
	?s*   .A= )B+ =+B((B+ +	E4BD??Ec                 6    | j                  ||dt        |       y)z4Assert that TypeError is raised when executing func.N)rM   	TypeError)r   rG   rJ   r7   s       r   assertTypeErrorzBaseTest.assertTypeError   s    $dI7GHr   c                 h    |j                         }||k7  r| j                  d|z   dz   |z   dz         y )Nzhelp text failure; expected:
"z	"; got:
"z"
)format_helpfailureException)r   r2   expected_helpactual_helps       r   
assertHelpzBaseTest.assertHelp   sS    ((*-'''1 ,-#$% % (r   r.   )	r!   r"   r#   r=   rM   rR   r\   r_   re   r$   r   r   r0   r0   0   s*    *<6v
7 &'$(	7:I%r   r0   c                       e Zd Zd Zg i 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y)TestOptionChecksc                 .    t        t              | _        y Nusager	   r   r2   r   s    r   setUpzTestOptionChecks.setUp       "8r   c                 >    | j                  t        ||t        |       y r   )rM   r   r   )r   rJ   r7   rH   s       r   assertOptionErrorz"TestOptionChecks.assertOptionError   s    +tV%'7	9r   c                 0    | j                  t        d       y )Nz+at least one option string must be supplied)r_   r   r   s    r   test_opt_string_emptyz&TestOptionChecks.test_opt_string_empty   s    [J	Lr   c                 *    | j                  ddg       y )Nz?invalid option string 'b': must be at least two characters longbrp   r   s    r   test_opt_string_too_shortz*TestOptionChecks.test_opt_string_too_short   s    ME	r   c                 *    | j                  ddg       y )NzOinvalid short option string '--': must be of the form -x, (x any non-dash char)--ru   r   s    r   test_opt_string_short_invalidz.TestOptionChecks.test_opt_string_short_invalid   s    4F	r   c                 *    | j                  ddg       y )NzJinvalid long option string '---': must start with --, followed by non-dashz---ru   r   s    r   test_opt_string_long_invalidz-TestOptionChecks.test_opt_string_long_invalid   s    7G	r   c                 2    | j                  ddgd d d       y )Nz.option -b: invalid keyword arguments: bar, foo-bfoobarru   r   s    r   test_attr_invalidz"TestOptionChecks.test_attr_invalid   s    <FD.	0r   c                 0    | j                  ddgddi       y )Nz option -b: invalid action: 'foo'r}   actionr   ru   r   s    r   test_action_invalidz$TestOptionChecks.test_action_invalid   s    .FXu%	'r   c                 d    | j                  ddgddi       | j                  ddgdt        i       y )Nz%option -b: invalid option type: 'foo'r}   rW   r   z'option -b: invalid option type: 'tuple')rp   tupler   s    r   test_type_invalidz"TestOptionChecks.test_type_invalid   s<    3FVUO	% 	5FVUO	%r   c                 2    | j                  ddgddd       y )Nz4option -b: must not supply a type for action 'count'r}   countint)r   rW   ru   r   s    r   test_no_type_for_actionz(TestOptionChecks.test_no_type_for_action   s    BFw6	8r   c                 2    | j                  dddgddi       y )Nz@option -b/--bad: must supply a list of choices for type 'choice'r}   --badrW   choiceru   r   s    r   test_no_choices_listz%TestOptionChecks.test_no_choices_list   s#    (7Ofh/	1r   c                 d    t        d      j                  }| j                  d|z  ddgddd       y )N zBoption -b/--bad: choices must be a list of strings ('%s' supplied)r}   r   r   zbad choicesrW   choices)rW   r!   rp   )r   typenames     r   test_bad_choices_listz&TestOptionChecks.test_bad_choices_list   s;    8$$&(017O7		9r   c                 2    | j                  ddgddd       y )Nz1option -b: must not supply choices for type 'int'r}   r   badr   ru   r   s    r   test_no_choices_for_typez)TestOptionChecks.test_no_choices_for_type  s    ?FUe4	6r   c                 2    | j                  ddgddd       y )Nz:option -b: 'const' must not be supplied for action 'store'r}   store   )r   constru   r   s    r   test_no_const_for_actionz)TestOptionChecks.test_no_const_for_action      HFw3	5r   c                 2    | j                  ddgddd       y )Nz:option -b: 'nargs' must not be supplied for action 'count'r}   r      )r   nargsru   r   s    r   test_no_nargs_for_actionz)TestOptionChecks.test_no_nargs_for_action  r   r   c                 2    | j                  ddgddd       y )Nz'option -b: callback not callable: 'foo'r}   callbackr   r   r   ru   r   s    r   test_callback_not_callablez+TestOptionChecks.test_callback_not_callable  s"    5Fz!&(	)r   c                      y r   r$   r   s    r   dummyzTestOptionChecks.dummy      r   c                 H    | j                  ddgd| j                  dd       y )NzAoption -b: callback_args, if supplied, must be a tuple: not 'foo'r}   r   r   )r   r   callback_argsrp   r   r   s    r   test_callback_args_no_tuplez,TestOptionChecks.test_callback_args_no_tuple  s+    )Fz!%&+-	.r   c                 H    | j                  ddgd| j                  dd       y )NzBoption -b: callback_kwargs, if supplied, must be a dict: not 'foo'r}   r   r   )r   r   callback_kwargsr   r   s    r   test_callback_kwargs_no_dictz-TestOptionChecks.test_callback_kwargs_no_dict'  s+    (Fz!%(-/	0r   c                 2    | j                  ddgddd       y )Nz<option -b: callback supplied ('foo') for non-callback optionr}   r   r   r   ru   r   s    r   test_no_callback_for_actionz,TestOptionChecks.test_no_callback_for_action/  s"    JFw!&(	)r   c                 2    | j                  ddgddd       y )Nz9option -b: callback_args supplied for non-callback optionr}   r   r   )r   r   ru   r   s    r    test_no_callback_args_for_actionz1TestOptionChecks.test_no_callback_args_for_action5  s"    GFw&+-	.r   c                 2    | j                  ddgddd       y )Nz;option -b: callback_kwargs supplied for non-callback optionr}   r   r   )r   r   ru   r   s    r   "test_no_callback_kwargs_for_actionz3TestOptionChecks.test_no_callback_kwargs_for_action;  s"    IFw(-/	0r   c                 z    | j                  ddg       | j                  dddg       | j                  dddg       y )NzMinvalid long option string '-debug': must start with --, followed by non-dashz-debugzXoption -d: invalid long option string '-debug': must start with --, followed by non-dash-dz--debugru   r   s    r   test_no_single_dashz$TestOptionChecks.test_no_single_dashA  sT    7J	
 	(8	
 	7y!	#r   N)r!   r"   r#   rm   rp   rr   rv   ry   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r$   r   r   rg   rg      s}    9 8:" 9L
0
'
%8
196
5
5
).0).0#r   rg   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 ej                  dd      d        Zy)TestOptionParserc                     t               | _        | j                  j                  dddddd       | j                  j                  dd	d
dd       y )N-v	--verbose-n--noisy
store_trueverboser   dest-q--quiet--silentstore_false)r	   r2   
add_optionr   s    r   rm   zTestOptionParser.setUpR  sR    "nt[$	!-I 	 	?tY
!.Y 	 	@r   c                 R    | j                  | j                  j                  dd        y )Nznot an Option instance: Noner_   r2   r   r   s    r   test_add_option_no_Optionz*TestOptionParser.test_add_option_no_OptionY  s"    T[[33;T	Cr   c                 T    | j                  | j                  j                  dd d        y Nzinvalid argumentsr   r   s    r   !test_add_option_invalid_argumentsz2TestOptionParser.test_add_option_invalid_arguments]  s#    T[[330$	>r   c                 N   | j                   j                  d      }| j                  |t               | j	                  |j
                  ddg       | j	                  |j                  ddg       | j	                  |j                  d       | j	                  |j                  d       y )Nr   r   r   r   r   r   )	r2   
get_optionassertIsInstancer   r5   _short_opts
_long_optsr   r   )r   opt1s     r   test_get_optionz TestOptionParser.test_get_optiona  s    {{%%d+dF+))D$<8;	*BCl3I.r   c                 .   | j                   j                  d      }| j                   j                  d      }| j                   j                  d      }| j                   j                  d      }| j                  ||cxu xr |cxu xr	 |u        y c        y )Nr   r   r   r   )r2   r   rD   )r   r   opt2opt3opt4s        r   test_get_option_equalsz'TestOptionParser.test_get_option_equalsi  ss    {{%%d+{{%%k2{{%%d+{{%%i0444545r   c                     | j                  | j                  j                  d             | j                  | j                  j                  d             y )Nr   r   )rD   r2   
has_optionr   s    r   test_has_optionz TestOptionParser.test_has_optionp  s8    ..t45..{;<r   c                 \   | j                  | j                  j                  d      d u        | j                  | j                  j                  d      d u        | j                  | j                  j                  d      d u        | j                  | j                  j                  d      d u        | j                  | j                  j	                  d             | j                  | j                  j	                  d             | j                  | j                  j	                  d             | j                  | j                  j	                  d             | j                  | j                  j	                  d             | j                  | j                  j	                  d             y )Nr   r   r   r   r   r   )rD   r2   r   rO   r   r   s    r   assertTrueremovedz"TestOptionParser.assertTrueremovedt  s,   ..t4<=..{;tCD..t4<=..y9TAB//56//<=//56//	:;..t45..z:;r   c                 Z    | j                   j                  d       | j                          y )Nr   r2   remove_optionr   r   s    r   test_remove_short_optz&TestOptionParser.test_remove_short_opt  s     !!$' r   c                 Z    | j                   j                  d       | j                          y )Nr   r   r   s    r   test_remove_long_optz%TestOptionParser.test_remove_long_opt  s     !!+. r   c                 ^    | j                  | j                  j                  dd t        d       y )Nr   zno such option 'foo')rM   r2   r   
ValueErrorr   s    r   test_remove_nonexistentz(TestOptionParser.test_remove_nonexistent  s&    $++33Xt$&<	>r   zRelies on sys.getrefcountT)cpythonc                     dg}t        j                  |      }t               }|j                  dd       ||_        |j                          ~| j                  |t        j                  |             y )N*   -az	--aaarggh)rT   getrefcountr	   r   	big_thingdestroyr5   )r   r   refcountr2   s       r   test_refleakzTestOptionParser.test_refleak  s^     D	??9-$,$3??9#=>r   N)r!   r"   r#   rm   r   r   r   r   r   r   r   r   r   r   impl_detailr   r$   r   r   r   r   Q  s[    @C>/6=<!!> W4dC? D?r   r   c                       e Zd Zd Zd Zy)TestOptionValuesc                      y r   r$   r   s    r   rm   zTestOptionValues.setUp  r   r   c                    t               }| j                  t        |      i        | j                  |i        | j                  |ddi       | j                  |d       ddd}t        |      }| j                  t        |      |       | j                  ||       | j                  |ddi       | j                  |i        | j                  |d       | j                  |g        y )Nr   r   r   r   )r   baz)defaults)r   r5   r4   assertNotEqual)r   valuesdicts      r   test_basicszTestOptionValues.test_basics  s    fr*$FUEN3FB'R(&ft,&FUEN3FB'FB'FB'r   N)r!   r"   r#   rm   r   r$   r   r   r   r     s    (r   r   c                       e Zd Zd Zd Zd Zy)TestTypeAliasesc                 "    t               | _        y r   )r	   r2   r   s    r   rm   zTestTypeAliases.setUp  s    "nr   c                     | j                   j                  dd       | j                  | j                   j                  d      j                  d       y )N-sr@   rW   string)r2   r   r5   r   rW   r   s    r   test_str_aliases_stringz'TestTypeAliases.test_str_aliases_string  s>    t%0//5::HEr   c                 \   | j                   j                  dt               | j                  | j                   j	                  d      j
                  d       | j                   j                  dt               | j                  | j                   j	                  d      j
                  d       y )Nr  r  r  -xr   )r2   r   r@   r5   r   rW   r   r   s    r   test_type_objectz TestTypeAliases.test_type_object  sz    t#.//5::HEt#.//5::EBr   N)r!   r"   r#   rm   r  r	  r$   r   r   r   r     s    %FCr   r   r   <   i  iQ )smhdc                     	 |d   j                         rt        |      S t        |d d       t        |d      z  S # t        t        f$ r t        d|d|      w xY w)Nzoption z: invalid duration: )isdigitr   _time_unitsr   
IndexErrorr   optionoptvalues      r   _check_durationr    sh    >9u:uSbz?[r%;;;
# >14e<> 	>>s   ; ; !Ac                   l    e Zd Zej                  dz   Z ej
                  ej                        Zeed<   y)DurationOption)durationr  N)r!   r"   r#   r   TYPEScopyTYPE_CHECKERr  r$   r   r   r  r    s0    LL=(E499V001L.Lr   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestDefaultValuesc                    t               | _        | j                  j                  ddd       | j                  j                  ddd       | j                  j                  d	d
d       | j                  j                  dd
       | j                  j                  dd       | j                  j                  d       | j                  j                  dd        ddd dd d d| _        y )Nr   r   Tdefaultr   r   r   )r   r   r   %   rW   r#  z-mr  r  r   -tz-u)r   nr  r  tu)r	   r2   r   expectedr   s    r   rm   zTestDefaultValues.setUp  s    "nt[$?tYY?t%<t%0tU3t$tT2%)!#$##&r   c                 l    | j                  | j                  j                         | j                         y r   )r5   r2   get_default_valuesr*  r   s    r   test_basic_defaultsz%TestDefaultValues.test_basic_defaults  s#    7794==Ir   c                     | j                   j                  dd       | j                  j                  ddd       | j	                  | j                   j                         | j                         y )Nr   i)r'  r  )r2   set_defaultsr*  updater5   r,  r   s    r   test_mixed_defaults_postz*TestDefaultValues.test_mixed_defaults_post  sQ      2 .2D127794==Ir   c                 d   | j                   j                  dd       | j                   j                  dd       | j                   j                  d       | j                  j	                  ddd       | j                  | j                   j                         | j                         | j                   j                  d       | j                   j                  dd        | j                  j	                  dd i       | j                  | j                   j                         | j                         y )	Nbarfblah)xyr  frobr"  z-yr6  )r2   r/  r   r*  r0  r5   r,  r   r   s    r   test_mixed_defaults_prez)TestDefaultValues.test_mixed_defaults_pre  s      6V 4tV4t$6787794==I!!$'tT2c4[)7794==Ir   c                 `   t         | j                  _        | j                  j                  ddd       | j                  j                  ddd       | j                  j	                  d       | j
                  j                  dd	d
d       | j                  | j                  j                         | j
                         | j                  j                  d       | j
                  j                  dddd       | j                  | j                  j                         | j
                         y )Nr   r  i,  r%  z-e6m42)r'  ih  r   )r  er'  F)
r  r2   option_classr   r/  r*  r0  r5   r,  set_process_default_valuesr   s    r   test_process_defaultz&TestDefaultValues.test_process_default  s    #1 t*cBt*dC  4 (3Sr:;7794==I..u53T=>7794==Ir   N)r!   r"   r#   rm   r-  r1  r8  r?  r$   r   r   r   r     s    & JJ
J
Jr   r   c                   (    e Zd ZdZd Zd Zd Zd Zy)TestProgNamez]
    Test that %prog expands to the right thing in usage, version,
    and help strings.
    c                 D    | j                  |j                         |       y r   )r5   	get_usager   r2   expected_usages      r   assertUsagezTestProgName.assertUsage  s    ))+^<r   c                 D    | j                  |j                         |       y r   )r5   get_version)r   r2   expected_versions      r   assertVersionzTestProgName.assertVersion  s    ++-/?@r   c                 |   t         j                  d d  }	 t        j                  j	                  ddd      t         j                  d<   t        dd      }d}| j                  ||       | j                  |d	       | j                  ||d
z   dz          |t         j                  d d  y # |t         j                  d d  w xY w)Nr   r   zbaz.pyr   z	%prog ...z	%prog 1.2)versionzUsage: baz.py ...
z
baz.py 1.2
zlOptions:
  --version   show program's version number and exit
  -h, --help  show this help message and exit
)	rT   argvospathjoinr	   rF  rJ  re   )r   	save_argvr2   rE  s       r   test_default_prognamez"TestProgName.test_default_progname  s    HHQK		$'',,ueX>CHHQK!+{CF2NV^4v|4OOF*T1NNO $CHHQK)CHHQKs   A=B& &B;c                     t        ddd      }|j                  d       |j                  d       d}| j                  ||       | j                  |d       | j	                  ||d	z          y )
Nthingy	%prog 0.1z%prog arg arg)progrL  rk   -h	--versionzUsage: thingy arg arg
z
thingy 0.1rM  )r	   r   rF  rJ  re   rD  s      r   test_custom_prognamez!TestProgName.test_custom_progname'  sj    8&1$35 	T"[)206<0 56r   N)r!   r"   r#   __doc__rF  rJ  rS  rZ  r$   r   r   rA  rA  	  s    
=A$"	7r   rA  c                   H    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)TestExpandDefaultsc                     t        d      | _        d| _        d| _        | j                  dz   | _        | j                  dz   | _        y )Ntest)rW  zXUsage: test [options]

Options:
  -h, --help            show this help message and exit
z"read from FILE [default: %default]z:  -f FILE, --file=FILE  read from FILE [default: foo.txt]
z7  -f FILE, --file=FILE  read from FILE [default: none]
)r	   r2   help_prefix	file_helpexpected_help_fileexpected_help_noner   s    r   rm   zTestExpandDefaults.setUp4  sO    "/ >"&"2"2I#J"&"2"2F#Gr   c                     | j                   j                  ddd| j                         | j                  | j                   | j                         y )N-f--filefoo.txtr#  help)r2   r   ra  re   rb  r   s    r   test_option_defaultz&TestExpandDefaults.test_option_defaultB  sA    tX'0$(NN 	 	4 	T%<%<=r   c                     | j                   j                  dd| j                         | j                   j                  dd       | j	                  | j                   | j
                         y )Nre  rf  ri  filerg  )r2   r   ra  set_defaultre   rb  r   s    r   test_parser_default_1z(TestExpandDefaults.test_parser_default_1H  sP    tX$(NN 	 	4	2T%<%<=r   c                     | j                   j                  dd| j                         | j                   j                  d       | j	                  | j                   | j
                         y )Nre  rf  rl  rg  rm  )r2   r   ra  r/  re   rb  r   s    r   test_parser_default_2z(TestExpandDefaults.test_parser_default_2N  sQ    tX$(NN 	 	4  i 0T%<%<=r   c                     | j                   j                  dd| j                         | j                  | j                   | j                         y )Nre  rf  rl  r2   r   ra  re   rc  r   s    r   test_no_defaultz"TestExpandDefaults.test_no_defaultT  s<    tX$(NN 	 	4T%<%<=r   c                     | j                   j                  ddd | j                         | j                  | j                   | j                         y )Nre  rf  rh  rt  r   s    r   test_default_none_1z&TestExpandDefaults.test_default_none_1Y  sA    tX'+$(NN 	 	4 	T%<%<=r   c                     | j                   j                  dd| j                         | j                   j                  d        | j	                  | j                   | j
                         y )Nre  rf  rl  rq  )r2   r   ra  r/  re   rc  r   s    r   test_default_none_2z&TestExpandDefaults.test_default_none_2_  sQ    tX$(NN 	 	4  d +T%<%<=r   c                     | j                   j                  ddd       | j                   j                  d       | j                  dz   }| j	                  | j                   |       y )N-pz--probz1blow up with probability PROB [default: %default]rl  gQ?)probzF  -p PROB, --prob=PROB  blow up with probability PROB [default: 0.43]
)r2   r   r/  r`  re   r   rc   s     r   test_float_defaultz%TestExpandDefaults.test_float_defaulte  s_    (D 	 	F 	  d +((UV]3r   c                     | j                   j                  dddd       d| j                   j                  _        | j	                  | j                   | j
                         y )Nre  rf  rg  z#read from FILE [default: *DEFAULT*]rh  z	*DEFAULT*)r2   r   	formatterdefault_tagre   rb  r   s    r   test_alt_expandz"TestExpandDefaults.test_alt_expandn  sP    tX'0$I 	 	K -8)T%<%<=r   c                     | j                   j                  dddd       d | j                   j                  _        | j                  dz   }| j                  | j                   |       y )Nre  rf  rg  zread from %default filerh  z0  -f FILE, --file=FILE  read from %default file
)r2   r   r  r  r`  re   r}  s     r   test_no_expandz!TestExpandDefaults.test_no_expandu  s]    tX'0$= 	 	? -1)((?@]3r   N)r!   r"   r#   rm   rj  ro  rr  ru  rw  ry  r~  r  r  r$   r   r   r]  r]  3  s5    G>>>>
>>4>4r   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y)TestStandardc                     t        dd      t        dddd      t        d	d
      g}t        t        |      | _        y )Nr   r  r  r}   --boor   boorW   r   --fooappendr   rk   option_listr   r&   r   r2   r   r:   s     r   rm   zTestStandard.setUp  s?    t(3tW5uEwx8: /^;BDr   c                 *    | j                  dgd       y )Nr   z-a option requires 1 argumentrR   r   s    r   test_required_valuez TestStandard.test_required_value  s    dV%DEr   c                 ,    | j                  ddgd       y )Nr}   5xz&option -b: invalid integer value: '5x'r  r   s    r   test_invalid_integerz!TestStandard.test_invalid_integer  s    dD\E	Gr   c                 *    | j                  dgd       y )Nz--boo13zno such option: --boo13r  r   s    r   test_no_such_optionz TestStandard.test_no_such_option  s    i[*CDr   c                 *    | j                  dgd       y )Nz--boo=x5z)option --boo: invalid integer value: 'x5'r  r   s    r   test_long_invalid_integerz&TestStandard.test_long_invalid_integer  s    j\H	Jr   c                 2    | j                  g d d d dg        y )Nar  r   r=   r   s    r   
test_emptyzTestStandard.test_empty  s    2T$tDbIr   c                 :    | j                  g ddd ddgdg        y )N)r   r   z
--foo=blahz--foo=r   r4  r  r  r   s    r   "test_shortopt_empty_longopt_appendz/TestStandard.test_shortopt_empty_longopt_append  s$    =!#D&"F	r   c                 :    | j                  g dd d g ddg        y )N)r  r   r  r   z--foo=x)r   r   r5  r  r  r   s    r   test_long_option_appendz$TestStandard.test_long_option_append  s&    C!%#'#35 		r   c                 4    | j                  dgdd d dg        y )Nz-abcbcr  r  r   s    r   test_option_argument_joinedz(TestStandard.test_option_argument_joined  s!    F8!%d4@	r   c                 6    | j                  ddgdd d dg        y )Nr   34r  r  r   s    r   test_option_argument_splitz'TestStandard.test_option_argument_split  s#    D$<!%d4@	r   c                 4    | j                  dgd dd dg        y )Nz-b34"   r  r  r   s    r   #test_option_argument_joined_integerz0TestStandard.test_option_argument_joined_integer  s!    F8!%b>	r   c                 6    | j                  ddgd dd dg        y )Nr}   -5r  r  r   s    r   +test_option_argument_split_negative_integerz8TestStandard.test_option_argument_split_negative_integer  s#    D$<!%b>	r   c                 4    | j                  dgd dd dg        y )Nz--boo=13   r  r  r   s    r    test_long_option_argument_joinedz-TestStandard.test_long_option_argument_joined  s!    J<!%b>	r   c                 6    | j                  ddgd dd dg        y )Nr  111o   r  r  r   s    r   test_long_option_argument_splitz,TestStandard.test_long_option_argument_split  s$    GU+!%c$?	r   c                 8    | j                  ddgdd dgdg        y )N	--foo=bar-axyzxyzr   r  r  r   s    r   test_long_option_short_optionz*TestStandard.test_long_option_short_option  s&    K1!&tUGD	r   c                 8    | j                  ddgdd dgdg        y )N--f=barr  r  r   r  r  r   s    r   test_abbrev_long_optionz$TestStandard.test_abbrev_long_option  s&    Iw/!&tUGD	r   c                     | j                   j                  g       \  }}| j                   j                         }| j                  t	        |      t	        |             y r   )r2   r3   r,  r5   r4   )r   r:   r7   r   s       r   test_defaultszTestStandard.test_defaults  sD    ++004$;;113hg7r   c                 h    | j                   j                  dddd       | j                  dgd       y )N--fozr   r  r   r   rW   r   r  z%ambiguous option: --f (--foo, --foz?)r2   r   rR   r   s    r   test_ambiguous_optionz"TestStandard.test_ambiguous_option  s8    ww$,5 	 	:i[D	Fr   c                 8    | j                  g ddd dgdg        y )N)r   r  r  r   r  r   r  r  r   s    r    test_short_and_long_option_splitz-TestStandard.test_short_and_long_option_split  s"    8!&tUGD	r   c                 :    | j                  g dd dddgdg        y )N)r  r}   123r  r   {   r   r   r  r  r   s    r   *test_short_option_split_long_option_appendz7TestStandard.test_short_option_split_long_option_append  s$    E!%c5%.I	r   c                 8    | j                  g ddd d ddg       y )N)r   r   r   r   r  r   r  r   s    r   *test_short_option_split_one_positional_argz7TestStandard.test_short_option_split_one_positional_arg  s"    /!&tDA!7	$r   c                 n    | j                  g ddd d dddg       | j                  g ddd dgdg        y )N)r   rx   r   r   rx   r  r   r   )r   rx   r  r   r  r   s    r   $test_short_option_consumes_separatorz1TestStandard.test_short_option_consumes_separator  sF    5!%d4@!5>	+ 	7!%dE7C	r   c                 <    | j                  g ddd d dddg      f y )N)-abrx   r  r   rt   r  r  r   r  r   s    r   &test_short_option_joined_and_separatorz3TestStandard.test_short_option_joined_and_separator  s*    8!$T$?#U+	- 	.r   c                 :    | j                  g ddd dgddg       y )N)r  -r  r   rt   r   r  r  r  r   s    r   "test_hyphen_becomes_positional_argz/TestStandard.test_hyphen_becomes_positional_arg  s$    7!$T5'B5	"r   c                 :    | j                  g dd dddgdg        y )N)-b3r}   5r  r  r      r   r   r  r  r   s    r   test_no_append_versus_appendz)TestStandard.test_no_append_versus_append  s$    J!%aG	r   c                 6    | j                  ddgdd d dg        y )Nr   r  r  r  r   s    r   &test_option_consumes_optionlike_stringz3TestStandard.test_option_consumes_optionlike_string  s#    D%=!&tDA	r   c                 d    | j                   j                  dd       | j                  dgd       y )Nr&  r   r  z-testzno such option: -er  r   s    r   #test_combined_single_invalid_optionz0TestStandard.test_combined_single_invalid_option  s.    tL9gY1	3r   N)r!   r"   r#   rm   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    DFGEJJ








8
F

$
.
"


3r   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestBoolc                 d    t        ddddd      t        ddd	d
      g}t        |      | _        y )Nr   r   r   r   r   r   r   r#  r   r   r   r   r  )r   r	   r2   r  s     r   rm   zTestBool.setUp  sB    t*&2$-')	+
 t(&3$-/0 #9r   c                 .    | j                  g ddig        y )Nr   r   r  r   s    r   test_bool_defaultzTestBool.test_bool_default  s    2%r?	r   c                 p    | j                  dgddig       \  }}| j                  |j                  du        y )Nr   r   r   Fr=   rD   r   r   r:   r7   s      r   test_bool_falsezTestBool.test_bool_false  s;    ,,dV.7^-/1$ 	501r   c                 p    | j                  dgddig       \  }}| j                  |j                  du        y )Nr   r   r   Tr  r  s      r   test_bool_truezTestBool.test_bool_true#  s;    ,,dV.7^-/1$ 	4/0r   c                 2    | j                  g dddig        y )N)z-qvqr   r   r   r   r  r   s    r   test_bool_flicker_on_and_offz%TestBool.test_bool_flicker_on_and_off)  s    /%q>	r   N)r!   r"   r#   rm   r  r  r  r  r$   r   r   r  r    s    
:
21r   r  c                   $    e Zd Zd Zd Zd Zd Zy)
TestChoicec                 r    t        t              | _        | j                  j                  ddddg d       y )Nrj   -cr   r   )onetwothree)r   rW   r   r   r&   r   r2   r   r   s    r   rm   zTestChoice.setUp/  s2    .^DtG($,6M 	 	Or   c                 4    | j                  g dddidg       y )N)r  r  r  r   r  r  r  r   s    r   test_valid_choicezTestChoice.test_valid_choice4  s     /$e,!7	$r   c                 ,    | j                  g dd       y )N)r  fourabczEoption -c: invalid choice: 'four' (choose from 'one', 'two', 'three')r  r   s    r   test_invalid_choicezTestChoice.test_invalid_choice9  s    2C	Dr   c                     | j                   j                  ddg d       | j                   j                  d      }| j                  |j                  d       | j                  |j
                  d       y )Nr   z	--default)r  fivesix)r   r   r   )r2   r   r   r5   rW   r   r   r  s     r   test_add_choice_optionz!TestChoice.test_add_choice_option>  s]    t['> 	 	@kk$$T*8,W-r   N)r!   r"   r#   rm   r  r  r  r$   r   r   r  r  .  s    O
$
D
.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y)	TestCountc                    t        t              | _        t        ddd      | _        | j                  j                  | j                         | j                  j                  ddd       | j                  j                  d	d
ddd       y )Nrj   r   r   r   r   r   r   r  r   r   store_constr   r   r   r   )r&   r   r2   r   v_optr   r   s    r   rm   zTestCount.setUpF  sp    .^D gIF
tzz*{YGtY&3)1 	 	Nr   c                 .    | j                  g dd ig        y )Nr   r  r   s    r   r  zTestCount.test_emptyN  s    2	40"5r   c                 0    | j                  dgddig        y )Nr   r   r   r  r   s    r   test_count_onezTestCount.test_count_oneQ  s    D6Iq>26r   c                 0    | j                  dgddig        y )N-vvvr      r  r   s    r   test_count_threezTestCount.test_count_threeT  s    F8i^R8r   c                 2    | j                  g dddig        y )N)r   r   r   r   r  r  r   s    r   test_count_three_apartz TestCount.test_count_three_apartW  s    -	1~rBr   c                 2    | j                  ddgddig        y )Nr  --verbose=2r   r   r  r   s    r   test_count_override_amountz$TestCount.test_count_override_amountZ  s    FM2YNBGr   c                 2    | j                  g dddig        y )N)r  r  r   r   r   r  r   s    r   test_count_override_quietz#TestCount.test_count_override_quiet]  s    89a."Mr   c                 2    | j                  g dddig        y )Nr  r  r   r   r   r   r  r   s    r   test_count_overridingzTestCount.test_count_overriding`  s    >%q>2	/r   c                 4    | j                  g dddidg       y )Nr   3r   r   r   r  r  r   s    r   test_count_interspersed_argsz&TestCount.test_count_interspersed_argsd  s    1%q>5	"r   c                 j    | j                   j                          | j                  g dddiddg       y )Nr  r   r   r  r   )r2   disable_interspersed_argsr=   r   s    r   test_count_no_interspersed_argsz)TestCount.test_count_no_interspersed_argsi  s1    --/1%q>;	(r   c                 ,    | j                  ddgd       y )Nz-q3r   zno such option: -3r  r   s    r   test_count_no_such_optionz#TestCount.test_count_no_such_optiono  s    eT],@Ar   c                 ,    | j                  ddgd       y )Nz	--quiet=3r   z$--quiet option does not take a valuer  r   s    r   test_count_option_no_valuez$TestCount.test_count_option_no_valuer  s    k40C	Er   c                 f    | j                   j                  dd       | j                  g ddig        y )Nr   r   r2   rn  r=   r   s    r   test_count_with_defaultz!TestCount.test_count_with_defaultv  s,    	1-2	!}b1r   c                 j    | j                   j                  dd       | j                  g dddig        y )Nr   r   r  r   r&  r   s    r   test_count_overriding_defaultz'TestCount.test_count_overriding_defaultz  s0    	1->%q>2	/r   N)r!   r"   r#   rm   r  r  r  r  r  r  r  r  r   r"  r$  r'  r)  r$   r   r   r  r  E  sN    N679CHN/"
(BE2/r   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestMultipleArgsc                 p    t        t              | _        | j                  j                  dddddd       y )	Nrj   r{  --pointr   r  floatpointr   r   rW   r   r  r   s    r   rm   zTestMultipleArgs.setUp  s3    .^DtY&-QW7 	 	Tr   c                 6    | j                  g dddiddg       y )N)r   r{  12.5z-4.3r  r/  )g      ?      @g333333r   r  r  r   s    r   test_nargs_with_positional_argsz0TestMultipleArgs.test_nargs_with_positional_args  s#    C#%56!5>	+r   c                 4    | j                  g dddidg       y )N)r-  -1r3  z-0r  r/  )g      r4  g       r  r  r   s    r   test_nargs_long_optz$TestMultipleArgs.test_nargs_long_opt  s!    @#%67!7	$r   c                 ,    | j                  g dd       y )N)r{  1.02x3.5z-option -p: invalid floating-point value: '2x'r  r   s    r   test_nargs_invalid_float_valuez/TestMultipleArgs.test_nargs_invalid_float_value  s    7B	Cr   c                 ,    | j                  g dd       y )N)r-  r:  r<  z#--point option requires 3 argumentsr  r   s    r   test_nargs_required_valuesz+TestMultipleArgs.test_nargs_required_values  s    6B	Dr   N)r!   r"   r#   rm   r5  r8  r=  r?  r$   r   r   r+  r+    s    T
+
$
C
Dr   r+  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestMultipleArgsAppendc                     t        t              | _        | j                  j                  dddddd       | j                  j                  d	d
dddd       | j                  j                  ddddd       y )Nrj   r{  r-  r   r  r.  r/  r0  re  r  r  r   r   r   -z--zeroappend_constr   r   r  r  r   s    r   rm   zTestMultipleArgsAppend.setUp  sx    .^DtYwa$+' 	 	;tWXQ$) 	 	7tXn$) 	 	9r   c                 :    | j                  g dd ddgddg       y )N)re  4-3r4  r  r2  666)   )r   i  r/  r   r4  r  r   s    r   test_nargs_appendz(TestMultipleArgsAppend.test_nargs_append  s%    I%)7H2EF"8	%r   c                 *    | j                  dgd       y )Nz-f4,3z-f option requires 2 argumentsr  r   s    r   !test_nargs_append_required_valuesz8TestMultipleArgsAppend.test_nargs_append_required_values  s    gY=	?r   c                 6    | j                  ddgd dgdg        y )Nz--foo=3rH  r  rK  rM  r  r   s    r   test_nargs_append_simplez/TestMultipleArgsAppend.test_nargs_append_simple  s$    Is+%)&:	r   c                 8    | j                  g dd g ddg        y )N)rD  r  r  rH  rC  )rF  rR  rF  rM  r  r   s    r   test_nargs_append_constz.TestMultipleArgsAppend.test_nargs_append_const  s    >%)1IJ	r   N)r!   r"   r#   rm   rN  rP  rS  rU  r$   r   r   rA  rA    s    9%
?
r   rA  c                       e Zd Zd Zd Zy)TestVersionc                 T   t        t        d      | _        t        j                  d d  }	 t
        j                  j                  t
        j                  dd      t        j                  d<   | j                  dgd       |t        j                  d d  y # |t        j                  d d  w xY w)NrV  )rk   rL  r   r   r   rY  zbar 0.1
)
r&   r   r2   rT   rN  rO  rP  rQ  curdirr\   )r   rR  s     r   test_versionzTestVersion.test_version  su    .^7BDHHQK		$'',,ryy%?CHHQK{m[9#CHHQK)CHHQKs   AB B'c                 T    t        t              | _        | j                  dgd       y )Nrj   rY  zno such option: --version)r&   r   r2   rR   r   s    r   test_no_versionzTestVersion.test_no_version  s#    .^Dk]8	:r   N)r!   r"   r#   rZ  r\  r$   r   r   rW  rW    s    $:r   rW  c                   "    e Zd ZdZd Zd Zd Zy)TestConflictingDefaultsz4Conflicting default values: the last one should win.c                 B    t        t        dddd      g      | _        y )Nr   r   r   r   r  r  )r	   r   r2   r   s    r   rm   zTestConflictingDefaults.setUp  s#    "\	1M0O Pr   c                 l    | j                   j                  dddd       | j                  g ddig        y )Nr   r   r   r   r  r2   r   r=   r   s    r   test_conflict_defaultz-TestConflictingDefaults.test_conflict_default  s8    tM	'( 	 	*2	1~r2r   c                 l    | j                   j                  dddd        | j                  g dd ig        y )Nr   r   r   r  ra  r   s    r   test_conflict_default_nonez2TestConflictingDefaults.test_conflict_default_none  s9    tM	'+ 	 	-2	40"5r   N)r!   r"   r#   r[  rm   rb  rd  r$   r   r   r^  r^    s    >P3
6r   r^  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestOptionGroupc                 .    t        t              | _        y ri   rl   r   s    r   rm   zTestOptionGroup.setUp  rn   r   c                     t        | j                  d      }| j                  j                  |       |j                  ddd       | j	                  dgddig        y )NSpamz--spamr   zspam spam spam spamr   ri  spamr   )r
   r2   add_option_groupr   r=   r   groups     r   !test_option_group_create_instancez1TestOptionGroup.test_option_group_create_instance  sV    DKK0$$U+,3 	 	5H:{B7r   c                 R    | j                  | j                  j                  dd        y )Nz!not an OptionGroup instance: Noner_   r2   rl  r   s    r   test_add_group_no_groupz'TestOptionGroup.test_add_group_no_group  s"    T[[99@$	Hr   c                 T    | j                  | j                  j                  dd d        y r   rq  r   s    r    test_add_group_invalid_argumentsz0TestOptionGroup.test_add_group_invalid_arguments  s#    T[[990$	>r   c                     t        | j                  d      }t               |_        | j                  | j                  j                  |fd t
        d       y )Nri  z"invalid OptionGroup (wrong parser))r
   r2   r	   rM   rl  r   rm  s     r   test_add_group_wrong_parserz+TestOptionGroup.test_add_group_wrong_parser  sB    DKK0#~$++66$$&J	Lr   c                     | j                   j                  dd      }|j                  d       |j                  dd       | j	                  | j                   j                  d      |       y )NzGroup 2zSome more options)descriptionBaconz--baconr   r  )r2   rl  	set_titler   rD   get_option_grouprm  s     r   test_group_manipulatez%TestOptionGroup.test_group_manipulate  s]    ,,Y9L - N /44Y?Gr   N)	r!   r"   r#   rm   ro  rr  rt  rv  r|  r$   r   r   rf  rf    s#    98H>LHr   rf  c                   @    e Zd Zd Zd Z G d de      Zd Zd Zd Z	y)	TestExtendAddTypesc                     t        t        | j                        | _        | j                  j	                  dd dd       | j                  j	                  dddd       y )	N)rk   r=  r   r  r  r  re  rf  rm  )r&   r   MyOptionr2   r   r   s    r   rm   zTestExtendAddTypes.setUp  sN    .^<@MMKtTsCtXFHr   c                 H   t         j                  j                  t        j                        r$t        j
                  t        j                         y t         j                  j                  t        j                        r$t        j                  t        j                         y y r   )rO  rP  isdirr   TESTFNrmdirisfileunlinkr   s    r   tearDownzTestExtendAddTypes.tearDown   sW    77==))*HHY%%&WW^^I,,-IIi&&' .r   c                   r    e Zd Zd Zej
                  dz   Z ej                  ej                        Zeed<   y)TestExtendAddTypes.MyOptionc                     t         j                  j                  |      st        d|z        t         j                  j	                  |      st        d|z        |S )N%s: file does not exist%s: not a regular file)rO  rP  existsr   r  r  s      r   
check_filez&TestExtendAddTypes.MyOption.check_file  sI    77>>%(&'@5'HIIWW^^E*&'?%'GHHLr   rq  rm  N)r!   r"   r#   r  r   r  r  r  r$   r   r   r  r    s7    	 y( tyy!4!45)Vr   r  c                     t        j                  t         j                         | j                  dt         j                  dgt         j                  ddg        y )Nrf  -afoor   )rm  r  )r   create_empty_filer  r=   r   s    r   test_filetype_okz#TestExtendAddTypes.test_filetype_ok  sD    ##I$4$45Hi&6&6@$-$4$45A	r   c                 l    | j                  dt        j                  dgdt        j                  z         y )Nrf  r  r  )rR   r   r  r   s    r   test_filetype_noexistz(TestExtendAddTypes.test_filetype_noexist  s0    h	(8(8'B6&--.	/r   c                     t        j                  t        j                         | j	                  dt        j                  dgdt        j                  z         y )Nrf  r  r  )rO  mkdirr   r  rR   r   s    r   test_filetype_notfilez(TestExtendAddTypes.test_filetype_notfile  sB    
!!"h	(8(8'B5&--.	/r   N)
r!   r"   r#   rm   r  r   r  r  r  r  r$   r   r   r~  r~    s(    I(
*F 
*/
/r   r~  c                   4    e Zd Zd Z G d de      Zd Zd Zy)TestExtendAddActionsc                 T    | j                  ddddd      g}t        |      | _        y )Nr   --appleextendr  appler  r  )r  r	   r2   r  s     r   rm   zTestExtendAddActions.setUp%  s1    ==y&.W ! > ?"w7r   c                   l    e Zd Zej                  dz   Zej
                  dz   Zej                  dz   Zd Zy)TestExtendAddActions.MyOption)r  c           	          |dk(  r3|j                  d      }|j                  |g       j                  |       y t        j                  | ||||||       y )Nr  ,)splitensure_valuer  r   take_action)r   r   r   r  r  r   r2   lvalues           r   r  z)TestExtendAddActions.MyOption.take_action/  sP    !S)##D"-44V<""4sFE#)+r   N)r!   r"   r#   r   ACTIONSSTORE_ACTIONSTYPED_ACTIONSr  r$   r   r   r  r  *  s5    ..;.,,{:,,{:	+r   r  c                 6    | j                  ddgdg dig        y )Nz	-afoo,barz--apple=blahr  )r   r   r4  r  r   s    r   test_extend_add_actionz+TestExtendAddActions.test_extend_add_action7  s#    K8#%;<	r   c                 6    | j                  g ddg dig        y )N)r   r   z-abarz--apple=x,yr  )r   r   r5  r6  r  r   s    r   test_extend_add_action_normalz2TestExtendAddActions.test_extend_add_action_normal<  s    @#%=>	r   N)r!   r"   r#   rm   r   r  r  r  r$   r   r   r  r  $  s    8
+F +
r   r  c                   $    e Zd Zd Zd Zd Zd Zy)TestCallbackc           	          t        dd d| j                        t        ddd| j                  dd      g}t        |	      | _        y )
Nr  r   r   re  rf  r  filename)r   r   rW   r   r  )r   process_optr	   r2   r  s     r   rm   zTestCallback.setUpD  sQ    t#&0(,(8(8: t'&0(,(8(8$,$.0		1 #w7r   c                    |dk(  r| j                  |j                  dg       | j                  |j                  g        | j                  || j                  u        | j                  |d u        | j                  t        |j                        dd i       d|j                  _        y |dk(  r| j                  |j                  dg       | j                  |j                  dg       | j                  || j                  u        | j                  |d       | j                  t        |j                        d dd       t        |j                  |j                  |       y | j                  d|z         y )	Nr  r  r   rf  re  r   r  r5  z!Unknown option %r in process_opt.)r5   r   r   rD   r2   r4   r   r5  setattrr   r?   r   r  r  r  parser_s        r   r  zTestCallback.process_optQ  s&   $;V//$8V..3OOGt{{23OOETM*T'..1J3EF!GNNH_V//$8V..
;OOGt{{23UE*T'..123NOGNNFKK7II9C?@r   c                 4    | j                  ddgdddg        y )Nr  z
--file=foor   r   r  r  r   s    r   test_callbackzTestCallback.test_callbacke  s"    D,/(-B7	r   c                     t        t              }|j                  d       |j                  dddd dd	       d
}| j	                  ||       y )Nrj   rX  r&  z--testr   c                       y r   r$   r$   r   r   <lambda>z1TestCallback.test_callback_help.<locals>.<lambda>q  s    r   r  r   )r   r   rW   ri  z%Options:
  -t TEST, --test=TEST  foo
)r	   r   r   r   re   )r   r2   rc   s      r   test_callback_helpzTestCallback.test_callback_helpj  sR     N3T"$#/h$ 	 	&9.r   N)r!   r"   r#   rm   r  r  r  r$   r   r   r  r  C  s    8A(
/r   r  c                       e Zd Zd Zd Zd Zy)TestCallbackExtraArgsc           
      n    t        ddd| j                  dt        fddg       g}t        |      | _        y )	Nr{  r-  r   r  r  points)r   r   r   rW   r   r#  r  )r   process_tupler   r	   r2   r  s     r   rm   zTestCallbackExtraArgs.setUpz  s<    tYz(,(:(:./XH$,b: ; #w7r   c                 Z   | j                  |d       | j                  |t        u        |dk(  r| j                  |d       n|dk(  r| j                  |d       t        t	        ||j                  d                  }t        |j                  |j                        j                  |       y )Nr  r{  z1,2,3r-  4,5,6r  )
r5   rD   r   r   mapr  getattrr   r   r  )r   r  r  r  r  lenrW   s          r   r  z#TestCallbackExtraArgs.process_tuple  s    a $$;UG,IUG,c$C 012,33E:r   c                 6    | j                  g ddddgig        y )N)z-p1,2,3r-  r  r  r   r   r  )rK  r     r  r   s    r   test_callback_extra_argsz.TestCallbackExtraArgs.test_callback_extra_args  s#    :$w&89	r   N)r!   r"   r#   rm   r  r  r$   r   r   r  r  y  s    8
;r   r  c                   $    e Zd Zd Zd Zd Zd Zy)TestCallbackMeddleArgsc           	          t        ddd      D cg c]$  }t        t        |      d| j                  d      & }}t	        |      | _        y c c}w )Nr  ir   thingsr   r   r   r  )ranger   r@   	process_nr	   r2   )r   r5  r:   s      r   rm   zTestCallbackMeddleArgs.setUp  sT     ""b"-/ s1vj(,XG / / #w7/s   )Ac                 F   t        |dd        }|j                  }t        |      |k  r| j                  d||fz         |j                  j                  |j                  g       }|j                  t        |d|              |j                  j                  |       |d|= y )Nr   z$Expected %d arguments for %s option.r   )
r   rargsr  r?   r   r  r   r  r   largs)r   r  r  r  r  r   r  r   s           r   r  z TestCallbackMeddleArgs.process_n  s    CGu:II<s|KL~~**6;;;E%%.)*U#!E'Nr   c                 :    | j                  g ddddgiddg       y )N)r7  r   rI  r   r   quxr  r   )r   r   r  r   r  r  r   s    r   test_callback_meddle_argsz0TestCallbackMeddleArgs.test_callback_meddle_args  s(    C$x1F&GHq6	#r   c                 6    | j                  g dddgidg       y )N)z-2r   rx   r  )r   rx   r   r  r   s    r   #test_callback_meddle_args_separatorz:TestCallbackMeddleArgs.test_callback_meddle_args_separator  s"    .$}o63	 r   N)r!   r"   r#   rm   r  r  r  r$   r   r   r  r    s    8	#
 r   r  c                       e Zd Zd Zd Zd Zy)TestCallbackManyArgsc           	          t        dddd| j                  d      t        dddd	| j                  d
      g}t        |      | _        y )Nr   r  r   r   r  )r   r   r   rW   r}   --bobr  r   r  )r   process_manyr	   r2   r  s     r   rm   zTestCallbackManyArgs.setUp  sP    tYz(,(9(9JtWZq(,(9(9GH #w7r   c                     |dk(  r| j                  |d       y |dk(  r| j                  |d       y |dk(  r| j                  |d       y |dk(  r| j                  |d       y y )	Nr   r~   r  )dingdongr}   r  r  )ifr   r   r5   r  s        r   r  z!TestCallbackManyArgs.process_many  se    $;UN3IU$45D[UI.G^UM2 r   c                 4    | j                  g dd d dg        y )N)r   r   r   r  r  r  r}   r2  2r  r  z-666r;  0)r  bobr  r   s    r   test_many_argsz#TestCallbackManyArgs.test_many_args  s"     ! &*$7		r   N)r!   r"   r#   rm   r  r  r$   r   r   r  r    s    83r   r  c                       e Zd Zd Zd Zd Zy)TestCallbackCheckAbbrevc                 r    t               | _        | j                  j                  dd| j                         y )N	--foo-barr   r   )r	   r2   r   check_abbrevr   s    r   rm   zTestCallbackCheckAbbrev.setUp  s/    "n{:(,(9(9 	 	;r   c                 (    | j                  |d       y )Nr  r  r   r  r  r  r2   s        r   r  z$TestCallbackCheckAbbrev.check_abbrev  s    k*r   c                 ,    | j                  dgi g        y )Nr  r  r   s    r   test_abbrev_callback_expansionz6TestCallbackCheckAbbrev.test_abbrev_callback_expansion  s    G9b"-r   N)r!   r"   r#   rm   r  r  r$   r   r   r  r    s    ;
+.r   r  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestCallbackVarArgsc           	          t        dddd      t        ddd	      t        d
dd| j                  d      g}t        t        |      | _        y )Nr   r   r   r  )rW   r   r   r}   r   rt   r   r  
--callbackr   cr  r  )r   variable_argsr&   r   r2   r  s     r   rm   zTestCallbackVarArgs.setUp  sR    t%qsCtLsCt\*(,(:(:FG /^;BDr   c                 .   | j                  |d u        g }|j                  }|rQ|d   }|d d dk(  rt        |      dkD  s|d d dk(  rt        |      dkD  r	|d   dk7  rn|j                  |       |d= |rQt	        |j
                  |j                  |       y )Nr   r   rx   r   r  )rD   r  r  r  r  r   r   )r   r  r  r  r2   r  args          r   r  z!TestCallbackVarArgs.variable_args  s    &(CRaDSX\RaCCHqLSVs]S!!H  	v{{E2r   c                 :    | j                  g ddd ddgdg        y )N)z-a3r  r  r   r   )r  r  r   r   r  rt   r  r  r   s    r   test_variable_argsz&TestCallbackVarArgs.test_variable_args  s$    D!(t5%.I	r   c                 <    | j                  g dd dg dddg       y )N)r  37rx   xxxr}   helloT)r  rx   r  r  r  r  r   s    r   %test_consume_separator_stop_at_optionz9TestCallbackVarArgs.test_consume_separator_stop_at_option  s(    C!%!%!46 $9		&r   c                 <    | j                  g dd d g dddg       y )N)r  r  r   r  r   )r   r  r   r  r  r  r   s    r   %test_positional_arg_and_variable_argsz9TestCallbackVarArgs.test_positional_arg_and_variable_args  s(    =!%!% 35 $9		&r   c                 8    | j                  g dd ddgdg        y )N)r  r   r}   Tr   r  r  r   s    r   test_stop_at_optionz'TestCallbackVarArgs.test_stop_at_option  s"    .!%Dw?	r   c                 ,    | j                  g dd       y )N)r  r  r  r   zno such option: -5r  r   s    r   test_stop_at_invalid_optionz/TestCallbackVarArgs.test_stop_at_invalid_option  s    46JKr   N)
r!   r"   r#   rm   r  r  r   r  r  r  r$   r   r   r  r    s'    D3
&&
Lr   r  c                       e Zd Zd Zd Zy)ConflictBasec                 R    t        ddddd      g}t        t        |      | _        y )Nr   r   r   r   zincrement verbosityr   r   ri  r  r  r  s     r   rm   zConflictBase.setUp
  s1    t[$-4IK L.^;BDr   c                 &    d|j                   _        y )Nr   )r   show_versionr  s        r   r  zConflictBase.show_version  s    %&"r   N)r!   r"   r#   rm   r  r$   r   r   r  r  	  s    D'r   r  c                   (    e Zd ZdZd Zd Zd Zd Zy)TestConflictz9Use the default conflict resolution for Optik 1.2: error.c                     | j                  |dd| j                  ddt        d      }| j                  |j                  d       | j                  |j
                  d       y )N)r   rY  r   show versionr   r   ri  z5option -v/--version: conflicting option string(s): -vz conflicting option string(s): -vz-v/--version)rM   r  r   r5   r*   	option_id)r   rG   rK   s      r   assertTrueconflict_errorz%TestConflict.assertTrueconflict_error  s`    %:595F5F1?(A  CE 	"DE7r   c                 N    | j                  | j                  j                         y r   )r  r2   r   r   s    r   test_conflict_errorz TestConflict.test_conflict_error   s    %%dkk&<&<=r   c                 f    t        | j                  d      }| j                  |j                         y )NzGroup 1)r
   r2   r  r   rm  s     r   test_conflict_error_groupz&TestConflict.test_conflict_error_group#  s&    DKK3%%e&6&67r   c                 ^    | j                  | j                  j                  dd t        d       y )Nr   z'invalid conflict_resolution value 'foo')rM   r2   set_conflict_handlerr   r   s    r   test_no_such_conflict_handlerz*TestConflict.test_no_such_conflict_handler'  s(    KK,,hA	Cr   N)r!   r"   r#   r[  r  r  r  r  r$   r   r   r  r    s    C	8>8Cr   r  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestConflictResolvec                     t         j                  |        | j                  j                  d       | j                  j	                  ddd| j
                  d       y )Nresolver   rY  r   r  r  )r  rm   r2   r  r   r  r   s    r   rm   zTestConflictResolve.setUp.  sK    4 ((3t[(,(9(9 	 	Pr   c                    | j                   j                  d      }| j                   j                  d      }| j                   j                  d      }| j                  ||u        | j                  ||u       | j                  |j                  dg       | j                  |j
                  dg       | j                  |j                  dg       | j                  |j
                  g        | j                  |j                  dg       y )Nr   r   rY  )r2   r   rD   r5   r   r   )r   r  verbose_optversion_opts       r   test_conflict_resolvez)TestConflictResolve.test_conflict_resolve4  s    &&t,kk,,[9kk,,[9,-[01))K=9004&9//+?00"5//+?r   c                 *    | j                  dgd       y )NrX  z}Options:
  --verbose      increment verbosity
  -h, --help     show this help message and exit
  -v, --version  show version
r\   r   s    r   test_conflict_resolve_helpz.TestConflictResolve.test_conflict_resolve_helpA  s    4& # 	r   c                 2    | j                  dgd ddg        y )Nr   r   r   r  r  r   s    r   test_conflict_resolve_short_optz3TestConflictResolve.test_conflict_resolve_short_optI  s    D6'+Q?	r   c                 0    | j                  dgddig        y )Nr   r   r   r  r   s    r   test_conflict_resolve_long_optz2TestConflictResolve.test_conflict_resolve_long_optN  s    K=%q>	r   c                 4    | j                  ddgdddg        y )Nr   rY  r   r'  r  r   s    r   test_conflict_resolve_long_optsz3TestConflictResolve.test_conflict_resolve_long_optsS  s"    K5'(!<	r   N)	r!   r"   r#   rm   r"  r%  r(  r*  r,  r$   r   r   r  r  -  s"    P@

r   r  c                   $    e Zd Zd Zd Zd Zd Zy)TestConflictOverridec                     t        t              | _        | j                  j                  d       | j                  j	                  ddddd       | j                  j	                  ddd	d
dd       y )Nrj   r  r   	--dry-runr   dry_runzdon't do anythingr
  r  r   zdry run mode)r   r   r   ri  )r&   r   r2   r  r   r   s    r   rm   zTestConflictOverride.setUpY  sj    .^D((3t[&2$7 	 	9 	{D&32I$2 	 	4r   c                     | j                   j                  d      }| j                  |j                  dg       | j                  |j                  dg       y )Nr0  r   )r2   r   r5   r   r   r  s     r   test_conflict_override_optsz0TestConflictOverride.test_conflict_override_optsc  sB    kk$$[14&1+7r   c                 *    | j                  dgd       y )NrX  zXOptions:
  -h, --help     show this help message and exit
  -n, --dry-run  dry run mode
r$  r   s    r   test_conflict_override_helpz0TestConflictOverride.test_conflict_override_helph  s    4& # 	r   c                 0    | j                  dgddig        y )Nr   r1  r   r  r   s    r   test_conflict_override_argsz0TestConflictOverride.test_conflict_override_argso  s    D6%r?	r   N)r!   r"   r#   rm   r3  r5  r7  r$   r   r   r.  r.  X  s    48
r   r.  aS  Usage: bar.py [options]

Options:
  -a APPLE           throw APPLEs at basket
  -b NUM, --boo=NUM  shout "boo!" NUM times (in order to frighten away all the
                     evil spirits that cause trouble and mayhem)
  --foo=FOO          store FOO in the foo list for later fooing
  -h, --help         show this help message and exit
aS  Usage: bar.py [options]

Options:
  -a APPLE           throw APPLEs at basket
  --boo=NUM, -b NUM  shout "boo!" NUM times (in order to frighten away all the
                     evil spirits that cause trouble and mayhem)
  --foo=FOO          store FOO in the foo list for later fooing
  --help, -h         show this help message and exit
aW  Usage
=====
  bar.py [options]

Options
=======
-a APPLE           throw APPLEs at basket
--boo=NUM, -b NUM  shout "boo!" NUM times (in order to frighten away all the
                   evil spirits that cause trouble and mayhem)
--foo=FOO          store FOO in the foo list for later fooing
--help, -h         show this help message and exit
a}  Usage: bar.py [options]

Options:
  -a APPLE           throw APPLEs at basket
  -b NUM, --boo=NUM  shout "boo!" NUM times (in order to
                     frighten away all the evil spirits
                     that cause trouble and mayhem)
  --foo=FOO          store FOO in the foo list for later
                     fooing
  -h, --help         show this help message and exit
a~  Usage: bar.py [options]

Options:
  -a APPLE
    throw
    APPLEs at
    basket
  -b NUM, --boo=NUM
    shout
    "boo!" NUM
    times (in
    order to
    frighten
    away all
    the evil
    spirits
    that cause
    trouble and
    mayhem)
  --foo=FOO
    store FOO
    in the foo
    list for
    later
    fooing
  -h, --help
    show this
    help
    message and
    exit
c                   N    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y)TestHelpc                 0    | j                  d      | _        y )NP   )make_parserr2   r   s    r   rm   zTestHelp.setUp  s    &&r*r   c           	          t        ddddd      t        ddd	d
dd      t        ddddd      g}t        j                         5 }t        |      |d<   t	        |      cd d d        S # 1 sw Y   y xY w)Nr   r  r  APPLEzthrow APPLEs at basket)rW   r   metavarri  r}   r  r   r  NUMzeshout "boo!" NUM times (in order to frighten away all the evil spirits that cause trouble and mayhem)r  r  r   z*store FOO in the foo list for later fooing)r   rW   r   ri  COLUMNSr  )r   r   EnvironmentVarGuardr@   r&   )r   columnsr:   envs       r   r<  zTestHelp.make_parser  s    8# '.FHgE %NO
 xeIK
  **, 	A \C	N+@	A 	A 	As   A))A2c                 
   t         j                  d d  }	 t        j                  j	                  dd      t         j                  d<   | j                  dg|       |t         j                  d d  y # |t         j                  d d  w xY w)Nr   zbar.pyr   rX  )rT   rN  rO  rP  rQ  r\   )r   rQ   rR  s      r   assertHelpEqualszTestHelp.assertHelpEquals  s]    HHQK		$'',,uh7CHHQKtfo6#CHHQK)CHHQKs   AA- -Bc                 .    | j                  t               y r   )rF  _expected_help_basicr   s    r   	test_helpzTestHelp.test_help  s    23r   c                 d    | j                   j                  d       | j                  t               y )NzUsage: %prog [options])r2   	set_usagerF  rH  r   s    r   test_help_old_usagezTestHelp.test_help_old_usage  s$    6723r   c                 d    d| j                   j                  _        | j                  t               y )Nr   )r2   r  short_firstrF  _expected_help_long_opts_firstr   s    r   test_help_long_opts_firstz"TestHelp.test_help_long_opts_first  s#    ,-)<=r   c                     t        j                         5 }d|d<   t               | j                  _        | j                  t               d d d        y # 1 sw Y   y xY w)N80rA  )r   rB  r   r2   r  rF  _expected_help_title_formatter)r   rD  s     r   test_help_title_formatterz"TestHelp.test_help_title_formatter  sP    **, 	B!C	N$7$9DKK!!!"@A	B 	B 	Bs   4AAc                     | j                  d      | _        | j                  t               | j                  d      | _        | j                  t               y )Nr
  r   )r<  r2   rF  _expected_help_short_lines_expected_very_help_short_linesr   s    r   test_wrap_columnszTestHelp.test_wrap_columns  sF     &&r*89&&q)=>r   c                     t        t              | _        | j                  j                  ddd       d}| j	                  |       y )Nrj   r   r      olé!rj  uK   Options:
  -h, --help  show this help message and exit
  -a          olé!
)r&   r   r2   r   rF  r   expects     r   test_help_unicodezTestHelp.test_help_unicode  s>    .^DtL{K
 	f%r   c                 V    t        t        d      | _        d}| j                  |       y )NrZ  )rk   rx  u>   olé!

Options:
  -h, --help  show this help message and exit
)r&   r   r2   rF  r[  s     r   test_help_unicode_descriptionz&TestHelp.test_help_unicode_description  s+    .^;FH 	f%r   c                 6   | j                   j                  d       t        | j                   dd      }|j                  ddd       | j                   j	                  |       d}| j                  |       d	| j                   _        | j                  |d
z          y )Nz`This is the program description for %prog.  %prog has an option group as well as single options.zDangerous OptionszZCaution: use of these options is at your own risk.  It is believed that some of them bite.z-gr   zGroup option.rj  aT  Usage: bar.py [options]

This is the program description for bar.py.  bar.py has an option group as
well as single options.

Options:
  -a APPLE           throw APPLEs at basket
  -b NUM, --boo=NUM  shout "boo!" NUM times (in order to frighten away all the
                     evil spirits that cause trouble and mayhem)
  --foo=FOO          store FOO in the foo list for later fooing
  -h, --help         show this help message and exit

  Dangerous Options:
    Caution: use of these options is at your own risk.  It is believed
    that some of them bite.

    -g               Group option.
z Please report bugs to /dev/null.z"
Please report bugs to /dev/null.
)r2   set_descriptionr
   r   rl  rF  epilog)r   rn  r\  s      r   test_help_description_groupsz%TestHelp.test_help_description_groups  s    ##9	: KK,56 	lI$$U+( 	f%?f'MMNr   N)r!   r"   r#   rm   r<  rF  rI  rL  rP  rT  rX  r]  r_  rc  r$   r   r   r9  r9    s<    +A*$44>B?&	&#Or   r9  c                       e Zd Zd Zd Zy)TestMatchAbbrevc           
      F    | j                  t        dd d d d d      d       y )N--f)r  r  --fierg  )r5   r   r   s    r   test_match_abbrevz!TestMatchAbbrev.test_match_abbrev@  s/    u151515/3(56
 	 r   c                 R    d}d d d d}| j                  t        ||fd t        d       y )Nrg  )r  r  rh  z,ambiguous option: --f (--fie, --foo, --foz?))rM   r   r   )r   r  wordmaps      r   test_match_abbrev_errorz'TestMatchAbbrev.test_match_abbrev_errorH  s3     4$?Aw<J	Lr   N)r!   r"   r#   ri  rl  r$   r   r   re  re  ?  s     Lr   re  c                   $    e Zd Zd Zd Zd Zd Zy)TestParseNumberc                     t               | _        | j                  j                  dt               | j                  j                  dt               y )Nr   r  -l)r&   r2   r   r   r   s    r   rm   zTestParseNumber.setUpQ  s:    .0t#.t#.r   c           	          | j                  t        dt        fi t        t	        j
                  d             | j                  t        dt        fi t        t	        j
                  d             y )Nr   z!invalid literal for int().*: '?'?0xOoopsz*invalid literal for int().*: s?'?0xOoops'?)rM   r   r   r   rB   compiler   s    r   test_parse_num_failz#TestParseNumber.test_parse_num_failV  sX    S	2JJ;<	> 	C("JJDE	Gr   c                    | j                  t        dt              d       | j                  t        dt              d       | j                  t        dt              d       | j                  t        dt              d       | j                  t        d	t              d
       | j                  t        dt              d       y )Nr  r   0x10   0XA
   010   0b11r  0b)r5   r   r   r   s    r   test_parse_num_okz!TestParseNumber.test_parse_num_ok`  s    C-q1FC0"5E3/4E3/3FC0!4D#.2r   c                     | j                  g ddddg        | j                  g ddddg        | j                  dgd	       | j                  d
gd       | j                  ddgd       y )N)r   r;  rp  0x20r       )r'  l)r   0b0101z-l010r  r{  z-n008z'option -n: invalid integer value: '008'z-l0b0123z*option -l: invalid integer value: '0b0123'rp  0x12xz)option -l: invalid integer value: '0x12x')r=   rR   r   s    r   test_numeric_optionsz$TestParseNumber.test_numeric_optionsh  s|    5"$412	74"#!-r	3gYF	Hj\I	KdG_H	Jr   N)r!   r"   r#   rm   rt  r~  r  r$   r   r   rn  rn  P  s    /
G3
Jr   rn  c                       e Zd Zd Zy)MiscTestCasec                 D    h d}t        j                  | t        |       y )N>   
NO_DEFAULTcheck_builtinAmbiguousOptionError)not_exported)r   check__all__optparse)r   r  s     r   test__all__zMiscTestCase.test__all__v  s    NT8,Gr   N)r!   r"   r#   r  r$   r   r   r  r  u  s    Hr   r  __main__)HrT   rO  rB   r  unittestior   r_  r   test.supportr   r  r   r   r   r	   r
   r   r   r   r   r   r   r   r   	Exceptionr   r&   TestCaser0   rg   r   r   r   r  r  r  r   rA  r]  r  r  r  r  r+  rA  rW  r^  rf  r~  r  r  r  r  r  r  r  r  r  r  r.  rH  rO  rS  rV  rW  r9  re  rn  r  r!   mainr$   r   r   <module>r     s    	 	     " . . . . # 
Ny 
N2| 2M%x   M%jJ#x J#XL?x L?^(x (*Ch C  rh@>/V /
0J 0Jf'78 '7TI4 I4\H38 H3T!x !F. ..8/ 8/tDx D2X ::( :$6h 6 Hh HD(/ (/V8 >3/8 3/lH 2 X  :8 2
.h 
.0L( 0Lj'8 'C< C4), )V8 <	 	" "  # BtOx tOnLh L""Jh "JJH8$$ H zHMMO r   