
                            S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	rS SK
Jr  S SKJrJrJr  S SKrS SKJrJrJr  \R*                  R-                  \R*                  R/                  \5      5      r\R*                  R/                  \5      r\R*                  R7                  S \5        S SK JrJr  S SKrS SKrS SKJ r J!r!J"r"J#r#J$r$J%r%  S SK&J'r'J(r(J)r)  S SK*J+r+  S	\RX                  l-        S
r.Sr/\R`                  " / SQ5      Rc                  5       r2\3" \2Ri                  S5      S    5      r5 " S S\5      r6S r7S5S jr8S6S jr9S r: " S S5      r; " S S\Rx                  5      r= " S S\Rx                  5      r> " S S\Rx                  5      r? " S S\Rx                  5      r@ " S S5      rA " S  S!\A5      rB " S" S#\B\Rx                  5      rC " S$ S%\B\Rx                  5      rD " S& S'\B5      rE\R                  " \5S(:  S)5       " S* S+\C\E5      5       rG " S, S-\D\E5      rH " S. S/\D\E5      rI " S0 S15      rJ " S2 S3\Rx                  5      rK\LS4:X  a  \R                  " 5         gg)7    N)StringIO)NamedTemporaryFileTemporaryFilemkdtemp)PEXPECT_CONTINUATION_PROMPTPEXPECT_PROMPTREPLWrapper)SUPPRESSArgumentParser)CompletionFinderExclusiveCompletionFinder_check_moduleautocomplete	shellcodewarn)DirectoriesCompleterFilesCompleterSuppressCompleter
split_linei  z 	
"'><=;|&(:)bash-czecho $BASH_VERSION.c                   (   ^  \ rS rSrU 4S jrSrU =r$ )ArgcompleteREPLWrapper/   c                 D  > SU;   a  [        S5      e[        TU ]  " U40 UD6nU R                  R                  R                  S5      S   S:X  aP  SU;  a  [        S5      eUR                  SS5      u  pE[        R                  " SS	U5      nUR                  S
5      nU$ U$ )N
z$newlines not supported in REPL input/zshz-Expected to see a newline in command response   z\x1b\[0m.+\x1b\[J  )		Exceptionsuperrun_commandchildcommandsplitresubrstrip)	selfr*   kwargsresecho_cmd
actual_resres_without_ansi_seqsres_without_null_chars	__class__s	           4platform/gsutil/third_party/argcomplete/test/test.pyr(   "ArgcompleteREPLWrapper.run_command0   s    7?BCCg!'4V4::##C(,53 OPP#&99T1#5 H$&FF+?Z$P! &;%A%A&%I"))J     )__name__
__module____qualname____firstlineno__r(   __static_attributes____classcell__r6   s   @r7   r   r   /   s     r9   r   c                     S[         R                  S'   S[         R                  S'   [        R                  " XSSS9n[        S S U-   [        SS  -   n[
        S S U-   [
        SS  -   nS	U S
U S3n[        USUSS9$ )N$PS1r$   TERMFutf-8)echoencoding   zPS1='z' PS2='z' PROMPT_COMMAND=''z\$zexport PAGER=cat)extra_init_cmd)osenvironpexpectspawnr   r   r   )r*   argsnon_printable_insertr)   ps1ps2prompt_changes          r7   _repl_shrT   B   s    BJJuBJJvMM'egFE
!
3
3nQR6H
HC
%bq
),@
@C^_`_aCb
bCC5u,?@M!%N`aar9   c                     [         R                  R                  [         R                  R                  [        R
                  5      S5      n[        U SU/SS9nU$ )Nz	bashrc.shz--rcfilez\[\]rP   )rK   pathjoindirnamerM   __file__rT   )r*   bashrcshs      r7   	bash_replr]   L   sA    WW\\"''//'*:*:;[IF	'J/h	OBIr9   c                 B    [        U / SQSS9nUR                  S5        U$ )N)z--no-rcsz--no-globalrcsz-Vz%(!..)rV   zsetopt BASH_AUTO_LIST)rT   r(   )r*   r\   s     r7   zsh_replr_   R   s$    	'?V^	_BNN*+Ir9   c                      [         R                  R                  [         R                  R                  [        5      S5      [         R
                  S'   g )NinputrcINPUTRC)rK   rW   rX   rY   rZ   rL   r:   r9   r7   setUpModulerc   Y   s,    GGLL)BINBJJyr9   c                   .    \ rS rSrSrSS jrS rS rSrg)	TempDir]   z
Temporary directory for testing FilesCompletion

Usage:

    with TempDir(prefix="temp_fc") as t:
        print("tempdir", t)
        # you are not chdir-ed to the temporary directory
        # everything created here will be deleted
Nc                 V    [        XUS9U l        [        R                  " 5       U l        g )N)suffixprefixdir)r   tmp_dirrK   getcwdold_dir)r/   rh   ri   rj   s       r7   __init__TempDir.__init__i   s    fEyy{r9   c                 Z    [         R                  " U R                  5        U R                  $ N)rK   chdirrk   r/   s    r7   	__enter__TempDir.__enter__m   s    
||r9   c                     [         R                  " U R                  5        [        R                  " U R
                  5        g rq   )rK   rr   rm   shutilrmtreerk   )r/   errs     r7   __exit__TempDir.__exit__q   s"    
dll#r9   )rm   rk   )r$   tmpdirN)	r;   r<   r=   r>   __doc__rn   rt   rz   r?   r:   r9   r7   re   re   ]   s    	#$r9   re   c                       \ rS rSrS rS rS\S4S jrS rS r	S	 r
S
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S  r!S! r"S" r#S# r$S$ r%S% r&S& r'S' r(S( r)S)r*g)*TestArgcompletev   c                 J   [         R                  U l        [         R                  R                  5       [         l        S[         R                  S'   S[         R                  S'   [        [         R                  S'   [
        [         R                  S'   S[         R                  S'   g )	N1_ARGCOMPLETEyes
_ARC_DEBUGIFS_ARGCOMPLETE_COMP_WORDBREAKSr   _ARGCOMPLETE_SHELL)rK   rL   _os_environcopyr   COMP_WORDBREAKSrs   s    r7   setUpTestArgcomplete.setUpw   sh    ::ZZ__&
%(

>"#(

< 

55D

12+1

'(r9   c                 .    U R                   [        l        g rq   r   rK   rL   rs   s    r7   tearDownTestArgcomplete.tearDown       %%
r9   Nr   c                 \   Uc  [        [        U5      5      n[        SS9 nU[        R                  S'   U[        R                  S'   U[        R                  S'   U R                  [        5       nU" U4U[        R                  S.UD6  S S S 5        WR                  R                  S:w  a"  [        SUR                  R                  -  5      eUR                  S5        UR                  5       R                  [        5      sS S S 5        $ ! , (       d  f       N= f! , (       d  f       g = f)	Nzw+)mode	COMP_LINE
COMP_POINTr   )output_streamexit_methodr   zUnexpected exit code %d)strlenr   rK   rL   assertRaises
SystemExitsysexit	exceptioncoder&   seekreadr+   r   )	r/   parserr*   point	completershellr0   tcms	            r7   run_completerTestArgcomplete.run_completer   s    =G%E%&-BJJ{#',BJJ|$/4BJJ+,"":."&RsxxR6R /||  A% 9BLL<M<M MNNFF1I668>>#& &% /.	 &%s%   AD0DA7D
D	D
D+c                    [        5       nUR                  S5        UR                  S5        U R                  US5      nU R                  [	        U5      [	        / SQ5      5        U R                  US5      nU R                  [	        U5      [	        / SQ5      5        U R                  USSS9nU R                  [	        U5      [	        S/5      5        U R                  USSS9nU R                  [	        U5      [	        / SQ5      5        g )	N--foo--barprog -h--helpr   r   zprog -Falways_complete_optionsr$   )r   add_argumentr   assertEqualset)r/   pcompletionss      r7   test_basic_completion%TestArgcomplete.test_basic_completion   s    	w	w((G4[)3/Q+RS((H5[)3/Q+RS((GU(S[)3t95((He(T[)3/Q+RSr9   c           	          S nS/ SQ4SS/4SSS/4S	SS/4S
S/4SSS/4SSS/4SS/44nU H>  u  p4U R                  [        U R                  U" 5       U5      5      [        U5      5        M@     g )Nc                  >    [        5       n U R                  SSS/S9  U $ )N--ship	submarine	speedboatchoicesr   r   r   s    r7   make_parser1TestArgcomplete.test_choices.<locals>.make_parser   s'    #%F;2LMMr9   r   )r   r   r   z
prog --shiz--ship zprog --ship r   r   zprog --ship szprog --ship suz
submarine zprog --ship=zprog --ship=szprog --ship=sur   r   r   r/   r   expected_outputscmdoutputs        r7   test_choicesTestArgcomplete.test_choices   s    	 01I;'k;78{K89~.k;78{K89~.	
 ,KCS!3!3KM3!GH#f+V ,r9   c           	          S nS/ SQ4SSS/4SS/4S	S
S/4SSS/44nU H>  u  p4U R                  [        U R                  U" 5       U5      5      [        U5      5        M@     g )Nc                  H    [        5       n U R                  S[        / SQS9  U $ )Nx)               *   )typer   )r   r   intr   s    r7   r   9TestArgcomplete.test_non_str_choices.<locals>.make_parser   s%    #%F#7MNMr9   r   )4815162342r   r   zprog 1r   r   zprog 2z23 zprog 4r   r   zprog 4 r   r   r   r   s        r7   test_non_str_choices$TestArgcomplete.test_non_str_choices   s    	 HId|$wT{#x()
 ,KCS!3!3KM3!GH#f+V ,r9   c                 D   S nS/ SQ4SS/44nU H>  u  p4U R                  [        U R                  U" 5       U5      5      [        U5      5        M@     S/ SQ4SS/44nU H=  u  p4U R                  [        U R                  U" 5       USS	95      [        U5      5        M?     g )
Nc                  d    [        5       n U R                  S5        U R                  S[        S9  U $ )Nr   r   help)r   r   r
   r   s    r7   r   7TestArgcomplete.test_suppress_args.<locals>.make_parser   s0    #%F(h7Mr9   r   r   r   r   prog --br$   r   r   r   r   --bar Tprint_suppressedr   r   s        r7   test_suppress_args"TestArgcomplete.test_suppress_args   s    	 %&?@:PRtBTU+KCS!3!3KM3!GH#f+V , %&HIJYaXbKcd+KCS!3!3KM3Y]!3!^_adekalm ,r9   c                 D   S nS/ SQ4SS/44nU H>  u  p4U R                  [        U R                  U" 5       U5      5      [        U5      5        M@     S/ SQ4SS/44nU H=  u  p4U R                  [        U R                  U" 5       USS	95      [        U5      5        M?     g )
Nc                  |    [        5       n U R                  S5        U R                  S5      n[        5       Ul        U $ )Nr   r   )r   r   r   r   )r   args     r7   r   <TestArgcomplete.test_suppress_completer.<locals>.make_parser   s7    #%F(%%g.C-/CMMr9   r   r   r   r$   r   r   Tr   r   r   s        r7   test_suppress_completer'TestArgcomplete.test_suppress_completer   s    	 %&?@:PRtBTU+KCS!3!3KM3!GH#f+V , %&HIJYaXbKcd+KCS!3!3KM3Y]!3!^_adekalm ,r9   c           	          S nS/ SQ4SS/4S/ SQ4SS	/4S
SS/44nU H>  u  p4U R                  [        U R                  U" 5       U5      5      [        U5      5        M@     g )Nc                  b    [        5       n U R                  SSS/S9  U R                  SSS/S9  U $ Nvarbuscarr   valueorangeappler   r   s    r7   r   ;TestArgcomplete.test_action_activation.<locals>.make_parser   >    #%Fu~>(G1DEMr9   r   r   r   r   r   prog bubus 	prog bus r   r   r   r   prog bus applapple prog bus apple r   r   r   r   s        r7   test_action_activation&TestArgcomplete.test_action_activation   sz    	 45!=>xj)x 01
 ,KCS!3!3KM3!GH#f+V ,r9   c                     S nS/ SQ4SS/4S/ SQ4S/ SQ4S	S
/4S/ SQ4SS/4S/ SQ4SSS/4SSS/44
nU H>  u  p4U R                  [        U R                  U" 5       U5      5      [        U5      5        M@     g )Nc                      [        5       n U R                  SS/ SQS9  U R                  SSS9nUR                  S5      nUR                  S	S
S/S9  UR                  SSS9  U $ )Nname   )abcnargsr   subcommands
subcommand)titlemetavarbuildr   r   r   r   	--profiler#   r  )r   r   add_subparsers
add_parser)r   
subparserssubparser_builds      r7   r   JTestArgcomplete.test_action_activation_with_subparser.<locals>.make_parser   ss    #%FaI..]L.YJ(33G<O(((G((A(>Mr9   r   r  r  r  r   r   zprog bzb zprog b z	prog c b )r  r   r   zprog c b buzbuild zprog c b build )r   r   r  r   r   zprog c b build cazcar zprog c b build car )r  r   r   zprog build car r   r   zprog a build car r   r   s        r7   %test_action_activation_with_subparser5TestArgcomplete.test_action_activation_with_subparser   s    	 56v7834XJ' KL 6(+"$ABx 01 4"23
 ,KCS!3!3KM3!GH#f+V ,r9   c                 p  ^ ^ SS/T l         U 4S jmU4S jnSSS/4SSS/4S/ SQ4S	/ S
Q4SSS/4SSS/4S/ SQ44nU H>  u  p4T R                  [        T R                  U" 5       U5      5      [        U5      5        M@     SSS.T l         U H>  u  p4T R                  [        T R                  U" 5       U5      5      [        U5      5        M@     SSS/4SSS/4S/ SQ4S	/ SQ4SSS/4SSS/4S/ SQ44nU H=  u  p4T R                  [        T R                  U" 5       USS95      [        U5      5        M?     g )Nhttp://url1http://url2c                    > TR                   $ rq   )r   )ri   parsed_argsr0   r/   s      r7   c_url.TestArgcomplete.test_completers.<locals>.c_url  s    ###r9   c                  n   > [        5       n TU R                  S5      l        U R                  SS/ SQS9  U $ )N--url--email   a@b.ca@b.dab@c.dzbcd@e.fzbce@f.gr  )r   r   r   )r   r&  s    r7   r   4TestArgcomplete.test_completers.<locals>.make_parser  s9    #%F5:F(2	<noMr9   zprog --url zprog --url "z!prog --url "http://url1" --email r,  z"prog --url "http://url1" --email a)r-  r.  r/  z$prog --url "http://url1" --email "a@r-  r.  z4prog --url "http://url1" --email "a@b.c" "a@b.d" "a@z:prog --url "http://url1" --email "a@b.c" "a@b.d" "ab@c.d" )r)  r*  r   r   foobar)r"  r#  zhttp\://url1:foozhttp\://url2:bar)a@b.c:a@b.d:ab@c.d:zbcd@e.f:zbce@f.g:)r3  r4  r5  r3  r4  )z--url:z--email:z"-h:show this help message and exitz&--help:show this help message and exitr"   r   )r   r   r   r   )r/   r   r   r   r   zsh_expected_outputsr&  s   `     @r7   test_completersTestArgcomplete.test_completers  s   )=9	$	 ]M:;m];<02de13OP3gw5GHCgwEWXIKop
 ,KCS!3!3KM3!GH#f+V , ,1G+KCS!3!3KM3!GH#f+V , 02EFG13FGH02ij13RS3h5IJChPXEYZLv 
 0KCS!3!3KM3e!3!TUWZ[aWbc 0r9   c           	         ^^ S mS mUU4S jnS/ SQ4S/ SQ4SS	/44nU H>  u  p4U R                  [        U R                  U" 5       U5      5      [        U5      5        M@     g )
Nc                     UR                   /$ rq   )arg1ri   r%  r0   s      r7   c_depends_on_positional_arg1OTestArgcomplete.test_subparser_completers.<locals>.c_depends_on_positional_arg1B      $$%%r9   c                     UR                   /$ rq   )arg5r=  s      r7   c_depends_on_optional_arg5MTestArgcomplete.test_subparser_completers.<locals>.c_depends_on_optional_arg5E  r@  r9   c                  &  > [        5       n U R                  5       nUR                  S5      nUR                  S5        TUR                  S5      l        TUR                  S5      l        TUR                  S5      l        UR                  S5        U $ )Nr  r<  arg2arg3--arg4--arg5)r   r  r  r   r   )r   r  	subparserrC  r>  s      r7   r   >TestArgcomplete.test_subparser_completers.<locals>.make_parserH  s    #%F..0J"--l;I""6*7SI""6*47QI""6*49SI""8,6""8,Mr9   zprog subcommand val1 )val1rH  rI  r   r   z&prog subcommand val1 val2 --arg5 val5 )val5rH  rI  r   r   z.prog subcommand val1 val2 --arg5 val6 --arg4 vzval6 r   )r/   r   r   r   r   rC  r>  s        @@r7   test_subparser_completers)TestArgcomplete.test_subparser_completersA  sn    	&	&		 %&RS57cd=yI
 ,KCS!3!3KM3!GH#f+V ,r9   c                 (   [        SSS9   [        5       n[        R                  " [        R                  R                  SS5      5        U R                  U" S5      S/5        [        R                  " [        R                  R                  SS5      5        [        S	S
5       nUR                  S5        S S S 5        U R                  [        U" S5      5      [        / SQ5      5        S S S 5        g ! , (       d  f       NC= f! , (       d  f       g = f)Ntest_dir_fcr   ri   rj      abcdefжklmr  	   abcdefж/abcahaabcxyzwtest)rU  abcaha/rW  )
re   r   rK   makedirsrW   rX   r   openwriter   )r/   fcfps      r7   test_file_completion$TestArgcomplete.test_file_completion\  s    Ms3!BKKZ78RW{m4KKXu56h$  %SC\3/Q+RS 43
 %$ 43s$   BD#C254D2
D 	<D
Dc           
         S n[        SSS9   [        R                  " [        R                  R	                  SS5      5        [        R                  " [        R                  R	                  SS5      5        [        SS	5       n[        S
S	5       nUR                  S5        UR                  S5        S S S 5        S S S 5        S/ SQ4SS/44nU H>  u  pVU R                  [        U R                  U" 5       U5      5      [        U5      5        M@     S S S 5        g ! , (       d  f       Nn= f! , (       d  f       Nw= f! , (       d  f       g = f)Nc                      [        5       n U R                  S[        R                  " S5      S9  U R                  S[        R                  " S5      S9  U $ )Nz--rrr   z--wrX  )r   r   argparseFileTyper   s    r7   r   MTestArgcomplete.test_filescompleter_filetype_integration.<locals>.make_parserh  sK    #%FH,=,=c,BCH,=,=c,BCMr9   test_dir_fc2r   rR  rS  rT  rV  rW  rX  u   abcdefж/klm/testrY  zprog subcommand --r )rW  rU  rZ  u"   prog subcommand --w abcdefж/klm/tu   abcdefж/klm/test )
re   rK   r[  rW   rX   r\  r]  r   r   r   )r/   r   fhfh2r   r   r   s          r7   (test_filescompleter_filetype_integration8TestArgcomplete.test_filescompleter_filetype_integrationg  s    	 N4KKZ78KKXu56h$D1Dc,Jc 		&! -K$
 ()KL58L7MN 
  0  T%7%7s%K!LcRXkZ  0 54 -K,J$$ 54s=   A5D=D,#D3D,;AD=
D)%D,,
D:	6D==
Ec                   ^ [        5       mU4S jn[        SSS9   [        R                  " [        R                  R                  SS5      5        [        R                  " [        R                  R                  SS5      5        [        R                  " [        R                  R                  SS5      5        [        R                  " [        R                  R                  S	S5      5        [        S
S5       n[        SS5       nUR                  S5        UR                  S5        S S S 5        S S S 5        U R                  U" S5      [        SS/5      5        U R                  U" S5      [        SS/5      5        U R                  U" S5      [        S/5      5        U R                  U" S5      [        SS/5      5        U R                  U" S5      [        S/5      5        U R                  U" S5      [        S/5      5        U R                  U" S5      [        / 5      5        U R                  U" S5      [        / 5      5        S S S 5        g ! , (       d  f       GN1= f! , (       d  f       GN;= f! , (       d  f       g = f)Nc                 &   > [        T" U 5      5      $ rq   )r   )ri   r   s    r7   r  4TestArgcomplete.test_directory_completion.<locals>.c  s    y())r9   test_dirr   rR  abcbazabbfazdefabc1rX  def1zA testzAnother testr  zabb/zabc/abzabc/baz/zabc/faz/dzdef/zdef/baz/ezdef/k)
r   re   rK   r[  rW   rX   r\  r]  r   r   )r/   r  fp1fp2r   s       @r7   test_directory_completion)TestArgcomplete.test_directory_completion}  s   (*		* JC0KKUE23KKUE23KKUE23KKUE23fc"c&#&#IIh'IIn- ' #
 QsVS&&)9%:;QtWc66*:&;<QuXsF8}5QvYZ,D(EFQsVS&]3QvYZL(9:QsVSW-QwZR1% 1& 	 '& #" 10& 	s=   CI79I%#I)I%1DI7
I"I%%
I4	/I77
Jc           
      $   S n[        SSS9   [        R                  " S5        SS/4SS/4S	/ S
Q44nU H>  u  p4U R                  [	        U R                  U" 5       U5      5      [	        U5      5        M@     S S S 5        g ! , (       d  f       g = f)Nc                  Z    [        SS9n U R                  S5        U R                  SSS9  U $ )NFadd_help--one--many+r  r   r   s    r7   r   ;TestArgcomplete.test_default_completer.<locals>.make_parser  s2    #U3F(4Mr9   test_dir_dcr   rR  rY  zprog --one test/zprog --many zprog --many test/ )r  r  r  )re   rK   mkdirr   r   r   r   s        r7   test_default_completer&TestArgcomplete.test_default_completer  s    	 Ms3HHV 	*'+%'CD   0  T%7%7s%K!LcRXkZ  0 433s   A*B
Bc                    S nS/ SQ4SS/4S/ SQ4S/ SQ4S	S
S/4SSS/4S/ SQ44nU H  u  p4U R                  [        U R                  U" 5       U5      5      [        U5      5        U R                  [        U R                  U" 5       US/S95      [        U5      [        S/5      -
  5        U R                  [        U R                  U" 5       USS/S95      [        U5      [        SS/5      -
  5        M     g )Nc                      [        5       n U R                  S[        S9  U R                  5       nUR	                  S5      nUR                  S/ SQS9  UR	                  S5      nUR                  SSS	/S9  U $ )
N--agere  eggsr   )	on a boatzwith a goatzin the rain
on a trainr   spamhamiberico)r   r   r   r  r  )r   r-   r  r  s       r7   r   4TestArgcomplete.test_subparsers.<locals>.make_parser  sx    #%Fc2'')C>>&)Df.gh>>&)Dfui.@AMr9   r   )r   r  r   r  r  zprog --age 1 eggszeggs zprog --age 2 eggs )on\ a\ trainzwith\ a\ goaton\ a\ boatzin\ the\ rainr   r   z
prog eggs zprog eggs "on ar  r  zprog eggs on\ ar  r  z
prog spam )r  r  r   r   r   )excluder   r   r   s        r7   test_subparsersTestArgcomplete.test_subparsers  s   	 ?@ 7),$e pq{ ;</>!BC=>
 ,KCS!3!3KM3!GH#f+VS!3!3KM3QUPV!3!WXZ]^dZehkmqlrhsZstD&&{}cD(CS&TUFc4"233 ,r9   c           	          S nS/ SQ4S/ SQ4SSS/4S	S
/44nU H>  u  p4U R                  [        U R                  U" 5       U5      5      [        U5      5        M@     g )Nc                  >    [        5       n U R                  S/ SQS9  U $ )N   --книга)u    Трудно быть богомu(   Парень из преисподнейu=   Понедельник начинается в субботуr   r   r   s    r7   r   3TestArgcomplete.test_non_ascii.<locals>.make_parser  s,    #%F    Mr9   r   )r  r   r   u   prog --книга )u"   Трудно\ быть\ богом*   Парень\ из\ преисподней@   Понедельник\ начинается\ в\ субботуu   prog --книга Пr  r  u   prog --книга Пуr$   r   r   s        r7   test_non_asciiTestArgcomplete.test_non_ascii  s    
	 67$ l $&S  VY  &Z  [%t,
 ,KCS!3!3KM3!GH#f+V ,r9   c                     S nSSS/4SS/4SSS/4SS/4S	SS/44nU H>  u  p4U R                  [        U R                  U" 5       US
 S95      [        U5      5        M@     g )Nc                  b    [        5       n U R                  SSS/S9  U R                  SSS/S9  U $ r   r   r   s    r7   r   :TestArgcomplete.test_custom_validator.<locals>.make_parser  r   r9   r   r   r   r   r$   r  r  r  c                     gNFr:   r   ys     r7   <lambda>7TestArgcomplete.test_custom_validator.<locals>.<lambda>  s    _dr9   	validatorr   r   s        r7   test_custom_validator%TestArgcomplete.test_custom_validator  s    	 tX&'4*+rd#x 01
 ,KCS!3!3KM3Rd!3!efhklrhst ,r9   c                    S nS S S 4nSSS/US   4S/ S	QUS
   4SSS/US
   4S/ SQUS
   4SS/US   4SS/US   4SSS/US   44nU H=  u  pEnU R                  [        U R                  U" 5       XFS95      [        U5      5        M?     g )Nc                  b    [        5       n U R                  SSS/S9  U R                  SSS/S9  U $ r   r   r   s    r7   r   >TestArgcomplete.test_different_validators.<locals>.make_parser  r   r9   c                     gr  r:   r  s     r7   r  ;TestArgcomplete.test_different_validators.<locals>.<lambda>  s    r9   c                     g)NTr:   r  s     r7   r  r     s    r9   c                 $    U R                  U5      $ rq   )
startswithr  s     r7   r  r    s    ar9   r   r   r   r   r   r#   r   r   r   r  r  r  r  r  zprog bus capplr$   zprog bus pple r  r   )r/   r   
validatorsr   r   r   r  s          r7   test_different_validators)TestArgcomplete.test_different_validators  s    	 (

 tX&
164jmD
16=z!}Mxj*Q-8tZ]3h/A?
 '7"CS!3!3KM3!3!\]_bci_jk '7r9   c                    S n[        5       nUR                  S/ SQS9  UR                  SSS/S9  [        U5      nU R                  U" US5      / S	Q5        U R                  U" US
5      SS/5        U R                  U" US5      / 5        g )Nc                 ~    / n[        S5       H+  nU R                  X5      nUc    U$ UR                  U5        M-     U$ )Ni'  )rangerl_completeappend)r   textr   i
completions        r7   get_readline_completionsKTestArgcomplete.test_readline_entry_point.<locals>.get_readline_completions  sL    K4[&224;
% "":.	 !
 r9   rover	sojournerspiritopportunity	curiosityr   antennalow gain	high gainr$   )r   r   r  r  r  r  sr  r  r   )r   r   r   r   )r/   r  r   r   s       r7   test_readline_entry_point)TestArgcomplete.test_readline_entry_point  s    	  !G-`aI
K/HI$V,	$Y35x	
 	1)SAKQYCZ[1)SA2Fr9   c                 p   [        5       nUR                  S/ SQSS9  UR                  SSS/SS9  UR                  5       nUR                  S	5      nUR                  S
SSS9  UR                  SSSS9  UR                  5       nUR                  SSS9  UR                  SSS9  [	        U5      nUR                  SS5        UR                  5       nU R                  SUR                  SS5      5        U R                  SUR                  SS5      5        U R                  SUR                  SS5      5        g )Nr  r  zhelp for rover )r   r   r  r  r  zhelp for antennalist-oz--ohtttr   r   z--chccccatzlist catdogzlist dogr$   r   r  r  )	r   r   r  r  r   r  get_display_completionsr   get)r/   r   r-   r   sub2r   disps          r7   test_display_completions(TestArgcomplete.test_display_completions%  s,   !PWh 	 	
 	I
K/HOab##%NN6"	tV%0	tV%0!J/J/$V,	b!$002*DHHXr,BC*DHH[",EFTXXj"56r9   c                 j   [        5       nUR                  5       R                  SSS/SS9  [        U5      nUR	                  SS5        UR                  5       nU R                  SSSSSS	.U5        [        U5      nUR	                  SS5        UR                  5       nU R                  SS0U5        [        U5      nUR	                  SS5        UR                  5       nU R                  SS0U5        [        U5      nUR	                  SS5        UR                  5       nU R                  SS0U5        g )
Nr  r  r  zabc help)aliasesr   r$   r   zshow this help message and exitr  )r   r  r  r   r  r  r   )r/   r   r   r  s       r7   %test_display_completions_with_aliases5TestArgcomplete.test_display_completions_with_aliases;  s:   !**3c
*T %V,	b!$0027; 		
 %V,	c1%002#z*D1 %V,	c1%002#z*D1 %V,	c1%002#z*D1r9   c                     S nS/ SQ4S/ SQ4SS/4S/ S	Q4S
/ S	Q4SS/4S/ SQ4S/ SQ4S/ SQ44	nU H>  u  p4U R                  [        U R                  U" 5       U5      5      [        U5      5        M@     g )Nc                      [        5       n U R                  SSS/S9  U R                  SSS/SS	9  U R                  S
SS/S9  U R                  SS/S9  U $ )Nh1r  rz  r   r   r   r   r  r   r  r   r   r   endr   r   s    r7   r   ;TestArgcomplete.test_nargs_one_or_more.<locals>.make_parsera  sl    #%FsCj9u~SI(G1DEw7Mr9   r   )r  rz  r   r   zprog c r   z	prog c bur  zprog c bus )r   r   r   r   r   r   zprog c bus car zprog c bus applr  zprog c bus apple )r   r   r   r   r  r   r   zprog c bus car apple zprog c bus car apple end r   r   s        r7   test_nargs_one_or_more&TestArgcomplete.test_nargs_one_or_more`  s    	 01676(#MN QR
+ "Z[$&^_(*bc
 ,KCS!3!3KM3!GH#f+V ,r9   c           	          S nS/ SQ4S/ SQ4S/ SQ4S/ SQ44nU H>  u  p4U R                  [        U R                  U" 5       U5      5      [        U5      5        M@     g )Nc                  b    [        5       n U R                  SS/SSS9  U R                  SS/S9  U $ )Nr1  *)r   r  defaultr2  r   r   r   s    r7   r   <TestArgcomplete.test_nargs_zero_or_more.<locals>.make_parserz  s=    #%Fwc5Qw7Mr9   r   r1  r2  r   r   	prog foo prog foo bar zprog foo foo bar r   r   s        r7   test_nargs_zero_or_more'TestArgcomplete.test_nargs_zero_or_morey  sk    	 4589<= "@A	
 ,KCS!3!3KM3!GH#f+V ,r9   c           	          S nS/ SQ4S/ SQ4SSS/4S/ SQ44nU H>  u  p4U R                  [        U R                  U" 5       U5      5      [        U5      5        M@     g )	Nc                  `    [        5       n U R                  SS/SS9  U R                  SS/S9  U $ )Nr1  ?r  r2  r   r   r   s    r7   r   8TestArgcomplete.test_nargs_optional.<locals>.make_parser  s;    #%FwcBw7Mr9   r   r  r  r  r   r   z	prog bar r   r   s        r7   test_nargs_optional#TestArgcomplete.test_nargs_optional  so    	 4589tX./89	
 ,KCS!3!3KM3!GH#f+V ,r9   c                 4   S n/ SQnSU4SSS/4SSS/4SU4S	S
S/U-   4SU4SSS/U-   4SSS/U-   4SSS/4SSS/U-   4SSS/4SSS/4SS/4SSS/44nU H>  u  pEU R                  [        U R                  U" 5       U5      5      [        U5      5        M@     g )Nc                      [        5       n U R                  SSS/SS9  U R                  SSS/S	S9  U R                  S
SS/SS9  U R                  SSS/SS9  U R                  SSS/[        R                  S9  U $ )Nr   foo1foo2r  r  r   bar1bar2r  --bazbaz1baz2r  --quxqux1qux2r  --foobarpos--optr   r   rf  	REMAINDERr   s    r7   r   8TestArgcomplete.test_optional_nargs.<locals>.make_parser  s    #%F&&1AK&&1AM&&1AM&&1AM
UG4DHL^L^_Mr9   )r   r   r  r  r  r   r   r   prog --foo r  r  prog --foo foo1 zprog --foo foo1 foo2 prog --bar r  r   zprog --bar bar1 prog --baz r  r  prog --baz baz1 zprog --qux r  r  zprog --qux qux1 zprog --foobar r  r	  zprog --foobar pos zprog --foobar --z--opt zprog --foobar --opt r   r/   r   optionsr   r   r   s         r7   test_optional_nargs#TestArgcomplete.test_optional_nargs  s   	 S gVV,-&&!12$g.VV,w67)VV,w67&&!1G!;<VV,-&&!1G!;<w/0!E7#34(,#eW%56
" ,KCS!3!3KM3!GH#f+V ,r9   c           	          S n/ SQnSSS/U-   4SSS/U-   4SSS/4SSS/4S	SS/44nU H>  u  pEU R                  [        U R                  U" 5       U5      5      [        U5      5        M@     g )
Nc                      [        5       n U R                  SSS/S9  U R                  SSS/[        R                  S9  U $ )	Nr   r  r  r   	remainderr  r	  r  r
  r   s    r7   r   >TestArgcomplete.test_positional_remainder.<locals>.make_parser  sG    #%F&&1ABeW5EXM_M_`Mr9   r   r   r  r	  r  z	prog pos prog -- zprog -- --opt r   r  s         r7   test_positional_remainder)TestArgcomplete.test_positional_remainder  s    	 , ug&01%!1G!;<5'*+%)*w/0
 ,KCS!3!3KM3!GH#f+V ,r9   c                 ~    [        SS9nUR                  SS/S9  U R                  U R                  US5      S/5        g )NFr  r   r   r   zprog --foo ----foo )r   r   r   r   )r/   r   s     r7   test_skipped_completer&TestArgcomplete.test_skipped_completer  s@    /GgY7++FODxjQr9   c           	      l   S nSR                  5       nSR                  5       nSX#X#-   S/S.4SS/S/S/S/S.4S	S
S/S
S/S
S/S
S/S.4SS/S/S/S/S.44nU HW  u  pVUR                  5        H>  u  pxU R                  U" 5       XWS9n	U R                  [	        U	5      [	        U5      5        M@     MY     g )Nc                      [        5       n U R                  S5        U R                  SS5        U R                  SS5        U R                  S5        U R                  SS5        U R                  S	5        U $ )
Nr   z-br   r  z--xyzz-tz-zz--zzzz-xr   r   s    r7   r   GTestArgcomplete.test_optional_long_short_filtering.<locals>.make_parser  si    #%F(g.1%g.%Mr9   z*--foo --bar --baz --xyz --zzz --help -x -tz -b -t -x -z -h --foo --baz --xyzr   r$   )longshortTFz
prog --foor  r   r   r  z
prog -z -xz-x r   )r+   itemsr   r   r   )
r/   r   	long_opts
short_optsr   r   outputsr   r   results
             r7   "test_optional_long_short_filtering2TestArgcomplete.test_optional_long_short_filtering  s    	 AFFH	7==?
yYE[egdhijXJ(H:_g^hij$g.%w/"G,#W-	 UGugeWV[U\]^
 -LC3:==?/'++KM3+p  Vc&k: 4C -r9   c           	          S nS/ SQ4S/ SQ4SSS/4SSS	/44nU H>  u  p4U R                  [        U R                  U" 5       U5      5      [        U5      5        M@     g )
Nc                      [        SS9n U R                  SSS9  U R                  5       nUR                  SSS9  UR                  SSS9  U $ )NFr  r   
store_trueactionr   --no-barr   r   add_mutually_exclusive_groupr   groups     r7   r   3TestArgcomplete.test_exclusive.<locals>.make_parser  sX    #U3F=779Ew|<z,?Mr9   r   r   r   r2  r  r  r   r   prog --foo --no-bar r2  r   r   s        r7   test_exclusiveTestArgcomplete.test_exclusive  ss    	 45:;Wg./#gz%:;	
 ,KCS!3!3KM3!GH#f+V ,r9   c           	          S nS/ SQ4SSS/4SSS	/4S
/ SQ4SS/44nU H>  u  p4U R                  [        U R                  U" 5       U5      5      [        U5      5        M@     g )Nc                      [        SS9n U R                  SSS/S9  U R                  5       nUR                  SSS	9  UR                  S
SS	9  U $ )NFr  r  name1name2r   --getr/  r0  --setr3  r5  s     r7   r   CTestArgcomplete.test_mixed_optional_positional.<locals>.make_parser	  s]    #U3F'0BC779Ew|<w|<Mr9   r   )r@  rA  r>  r?  prog --r@  rA  r  r>  r?  zprog --get )r@  r>  r?  zprog --get name1 z--get r   r   s        r7   test_mixed_optional_positional.TestArgcomplete.test_mixed_optional_positional  s}    	 :;'*+'7+,78 8*-
 ,KCS!3!3KM3!GH#f+V ,r9   c                     S nU R                  U R                  U" 5       S5      S/5        U R                  U R                  U" 5       SSS9S/5        g )Nc                  :    [        SS9n U R                  SS/S9  U $ )NFr  r1  r2  r   r   r   s    r7   r   6TestArgcomplete.test_append_space.<locals>.make_parser  s&    #U3Fw7Mr9   r   zbar F)append_spacer2  )r   r   r/   r   s     r7   test_append_space!TestArgcomplete.test_append_space  sS    	
 	++KM7CfXN++KM7QV+WZ_Y`ar9   c                 r   [        SS9nUR                  SSS[        S9  UR                  SSSS	S
/S9  UR                  SSS/S9  UR                  SSS9  [        USS9nS/ SQ4SSS/4S/ SQ4S/ SQ4S/ SQ44nU H7  u  pEU R	                  [        U R                  XUS95      [        U5      5        M9     g )NFr  r   typesappend_const)destr1  constr   r  r  r   )rP  r1  r   r  r  r  r   r2  r/  r0  Tr   r   )r   r   r  r2  r  r  r8  r9  )r   r   r  zprog --foo --bar bar1 )r   )r   r   r   r   r   r   r   )r/   r   r   r   r   r   s         r7   test_exclusive_class$TestArgcomplete.test_exclusive_class%  s    /G'.PSTG'(VU[L\]Gff-=>J|<-fdS	 =>VV,-!?@#%@A%'NO
 ,KCS!3!3F9!3!UVX[\bXcd ,r9   c           
         S nU R                  [        U R                  U" 5       S5      5      S15        U R                  [        U R                  U" 5       S5      5      S15        U R                  [        U R                  U" 5       S5      5      S15        U R                  [        U R                  U" 5       S5      5      S	15        U R                  [        U R                  U" 5       S
5      5      S15        U R                  [        U R                  U" 5       SSS95      S15        U R                  [        U R                  U" 5       SSS95      S15        U R                  [        U R                  U" 5       SSS95      S15        U R                  [        U R                  U" 5       SSS95      S15        U R                  [        U R                  U" 5       S
SS95      S15        g )Nc                  ~    [        SS9n U R                  SS/S9  U R                  SS/S9  U R                  SS	/S9  U $ )
NFr  z-1z	bar<$>bazr   z-2z\* z-3"'r   r   s    r7   r   >TestArgcomplete.test_escape_special_chars.<locals>.make_parser:  sP    #U3F{m<vh7ug6Mr9   zprog -1 zbar\<\$\>baz zprog -2 z\\\*\  zprog -3 z\"\' z	prog -3 "z\"'z	prog -3 'z"'\''tcshr6  z
bar<$>baz z\*  z"' rV  r   rJ  s     r7   test_escape_special_chars)TestArgcomplete.test_escape_special_chars9  s   	 	T//zJKN^M_`T//zJKj\ZT//zJKhZXT//{KLvhWT//{KLykZT//zQW/XY\h[ijT//zQW/XY\c[deT//zQW/XY\b[cdT//{RX/YZ]b\cdT//{RX/YZ]b\cdr9   c           	         [        5        n[        S/SSS S9nUR                  UR                  5       5        UR	                  5         [
        R                  " SSUR                  /5        S S S 5        [        5        n[        SS/SSSS	/S9nUR                  UR                  5       5        UR	                  5         [
        R                  " SSUR                  /5        S S S 5        [        5        n[        S/SSS S
S9nUR                  UR                  5       5        UR	                  5         [
        R                  " SSUR                  /5        S S S 5        [        S/SSSS	/S9n[        S/SSSS	/S9n[        S/SS9n[        S/SS
S9ng ! , (       d  f       GN-= f! , (       d  f       N= f! , (       d  f       Ng= f)NprogTr   )use_defaultsr   complete_argumentsz-nprog2Fr  nospacez~/.bash_completion.d/prog.py)r]  r   r^  argcomplete_scriptrX  wooshfishr6  )r   ra  )r   r   r]  encodeflush
subprocess
check_callr  )r/   rj  scs      r7   test_shellcode_utility&TestArgcomplete.test_shellcode_utilityN  s   !RF8$fY]^BHHRYY[!HHJ!!64"9:	 "
  !RFG,5dhjsctuBHHRYY[!HHJ!!64"9:	 "
  !R!#'#AB HHRYY[!HHJ!!64"9: " xe6W[]fVghxe7X\^gWhixv.xvB`a1 "!
 "!
 "!s&   A F=A#F#2A!F4
F #
F14
Gc                    S[         R                  S'   S[         R                  S'   [        5       nUR                  SS[        -   S-   S9  UR                  S	S
SS9  UR                  5       nUR                  SSS9  UR                  SSS9  U R                  USSS9nU R                  [        U5      S15        U R                  USSS9nU R                  [        U5      SS15        U R                  USSS9nU R                  [        U5      SS15        S[         R                  S'   U R                  [        U R                  USSS9  g )N	_ARGCOMPLETE_DFSr   _ARGCOMPLETE_SUPPRESS_SPACEr   r1  r   r   r   z--bar2zbar helpr  zsubcommand helpzsubcommand 2zsubcommand 2 helpzprog --frc  r6  z--foo	foo helpr   z--bar	bar helpz--bar2	bar helpzprog subzsubcommand	subcommand helpzsubcommand 2	subcommand 2 helpinvalid)rK   rL   r   r   r   r  r  r   r   r   r   r&   )r/   r   r  r   s       r7   test_option_help TestArgcomplete.test_option_helpi  sM   )-

%&47

01	wUS[6%9:	wz:%%'
l1BCn3FG((Jf(E[),=+>?((Jf(E[),=?Q+RS((Jf(E[),IKl+mn)2

%&)T%7%7JfUr9   )r   r   )+r;   r<   r=   r>   r   r   r   r   r   r   r   r   r   r  r  r8  rN  r`  rl  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+  r:  rD  rK  rR  rY  ri  rp  r?   r:   r9   r7   r   r   v   s    2& 48<W] 'T"W(W"n"n$W$W4)dVW6	T[,6[&@W4u$l4G(7,#2JW2W$W"W@W(R
;@W&W(be(e*b6Vr9   r   c                   H    \ rS rSrS rS rSS jrS rS rS r	S	 r
S
 rSrg)TestArgcompleteREPLi  c                     g rq   r:   rs   s    r7   r   TestArgcompleteREPL.setUp      r9   c                     g rq   r:   rs   s    r7   r   TestArgcompleteREPL.tearDown  rv  r9   Nc                 H    [        U5      u  pgpn
UR                  XXj5      nU$ rq   )r   _get_completions)r/   r   r   r*   r   r0   cword_prequotecword_prefixcword_suffix
comp_wordsfirst_colon_posr   s               r7   r   !TestArgcompleteREPL.run_completer  s,    R\]dReOl00>kr9   c                 (   [        5       nUR                  S5        UR                  S5        [        USS9nU R                  XS5      n[	        U5      [	        / SQ5      :X  d   eU R                  XS5      n[	        U5      [	        / SQ5      :X  d   eg )	Nr   r   Tr   r   r   rC  )r   r   r   )r   r   r   r   r   )r/   r   r  r   s       r7   test_repl_multiple_complete/TestArgcompleteREPL.test_repl_multiple_complete  s    	w	wQ=((w7;3'I#JJJJ((y9;3'C#DDDDr9   c                 >   [        5       nUR                  SSS9  UR                  SS/S9  [        USS9nU R                  XS5      n[	        U5      [	        / SQ5      :X  d   eUR                  / S	Q5      nUR                  S
:X  d   eUR                  S:X  d   eU R                  [        5         UR                  SS
/5        S S S 5        U R                  [        5         UR                  S/5        S S S 5        g ! , (       d  f       N?= f! , (       d  f       g = f)Nr   T)requiredr2  r   r   r   )r   r   r   r2  )r   r  r2  r  )
r   r   r   r   r   
parse_argsr1  r2  r   r   )r/   r   r  r   rO   s        r7   test_repl_parse_after_complete2TestArgcompleteREPL.test_repl_parse_after_complete  s    	w.	uug.Q=((w7;3'G#HHHH||45xx6!!!xx5    z*LL'6*+ +z*LL%! +* +***s   0C=!D=
D
Dc                    [        5       nUR                  5       R                  S5      nUR                  SS/S9  [	        USS9nU R                  XS5      n[        U5      [        / SQ5      :X  d   eUR                  SS/5      nUR                  S:X  d   eU R                  [        5         UR                  S/5        S S S 5        g ! , (       d  f       g = f)Nr1  r2  r   Tr   r  )r   r   r2  )r   r  r  r   r   r   r   r  r2  r   r   )r/   r   spr  r   rO   s         r7   (test_repl_subparser_parse_after_complete<TestArgcompleteREPL.test_repl_subparser_parse_after_complete  s    **51
w/Q=(({;;3'>#????||UEN+xx5    z*LL%! +**s   -C		
Cc           
      8   [        5       nUR                  S5        UR                  S5        UR                  5       nUR                  S5        UR                  S5        UR                  S5      nS nUR                  S5        UR                  5       nUR                  S5      nUR	                  US	9  [        US
S9nS/ SQ4SS/4SSS/4S/ SQ4SS/4SSS/44nU H9  u  pU R                  [        U R                  XU	5      5      [        U
5      5        M;     g )Nr   r   r  r   showc                      g rq   r:   r:   r9   r7   rr  5TestArgcompleteREPL.test_repl_subcommand.<locals>.abc  s    r9   --testdepth)funcTr   r   )r   r   r   r   r  r  r   zprog lizlist zprog sz
prog show )r  r  r   r   zprog show dzdepth zprog show depth r   r   )	r   r   r  r  set_defaultsr   r   r   r   )r/   r   r  r  rr  ssder  r   r   r   s              r7   test_repl_subcommand(TestArgcompleteREPL.test_repl_subcommand  s   	w	w	V	U||F#	 	(#  "]]7#
S!Q= OP	"'>?XJ'$!12
 ,KCS!3!3A#!>?VM ,r9   c           	         [        5       nUR                  S/ SQS9  UR                  SSS/S9  [        USS9nU R                  [	        U R                  XS	5      5      [	        / S
Q5      5        U R                  [	        U R                  XS5      5      [	        / SQ5      5        U R                  [	        U R                  XS	5      5      [	        / S
Q5      5        g )Nr1  )aabbccr   r2  rz  r{  Tr   r   )r   r   r  r  r  zprog aa )r   r   rz  r{  )r   r   r   r   r   r   )r/   r   r  s      r7   &test_repl_reuse_parser_with_positional:TestArgcompleteREPL.test_repl_reuse_parser_with_positional  s    	u&89	usCj1Q=T//g>?EgAhiT//jABCHbDcdT//g>?EgAhir9   r:   rq   )r;   r<   r=   r>   r   r   r   r  r  r  r  r  r?   r:   r9   r7   rs  rs    s.    E"(""N@jr9   rs  c                   n    \ rS rSrS rS rS rS rS rS r	S r
\R                  S	 5       rS
 rS rSrg)TestSplitLinei  c                     [         R                  U l        [         R                  R                  5       [         l        [        [         R                  S'   g )Nr   )rK   rL   r   r   r   rs   s    r7   r   TestSplitLine.setUp  s/    ::ZZ__&
5D

12r9   c                 .    U R                   [        l        g rq   r   rs   s    r7   r   TestSplitLine.tearDown  r   r9   c                     [        U5      S   $ )Nr#   r   r/   lines     r7   ri   TestSplitLine.prefix      $""r9   c                     [        U5      S   $ )Nr   r   r  s     r7   	wordbreakTestSplitLine.wordbreak  r  r9   c                 F    U R                  U R                  S5      S5        g )Nza b cr  r   ri   rs   s    r7   test_simpleTestSplitLine.test_simple  s    W-s3r9   c                     U R                  U R                  S5      S5        U R                  U R                  S5      S5        g )Nza\$ba$bza\`ba`br  rs   s    r7   test_escaped_special"TestSplitLine.test_escaped_special  s4    W-u5W-u5r9   c                     U R                  U R                  S5      S5        U R                  U R                  S5      S5        g )Nr  r  r  rs   s    r7   test_unescaped_special$TestSplitLine.test_unescaped_special  s4    U+U3U+U3r9   c                     U R                  U R                  S5      S5        U R                  U R                  S5      S5        g )Nz"a\$br  z"a\`br  r  rs   s    r7   %test_escaped_special_in_double_quotes3TestSplitLine.test_escaped_special_in_double_quotes
  s4    X.6X.6r9   c                 F    U R                  U R                  S5      S5        g )Nza,r  rs   s    r7   test_punctuationTestSplitLine.test_punctuation  s    T*D1r9   c                    U R                  U R                  S5      S 5        U R                  U R                  S5      S5        U R                  U R                  S5      S5        U R                  U R                  S5      S5        U R                  U R                  S5      S 5        U R                  U R                  S	5      S 5        U R                  U R                  S
5      S 5        U R                  U R                  S5      S 5        U R                  U R                  S5      S 5        U R                  U R                  S5      S 5        U R                  U R                  S5      S 5        g )Nr  za :br   za b:cr#   za b:c=dr+  za b:c=d z	a b:c=d ez":bz"b:cz"b:c=dz"b:c=d"z"b:c=d" )r   r  rs   s    r7   test_last_wordbreak_pos%TestSplitLine.test_last_wordbreak_pos  s   ,d3/30!4	2A6
3T:4d;.5/6148	2D9
3T:r9   )r   N)r;   r<   r=   r>   r   r   ri   r  r  r  r  unittestexpectedFailurer  r  r  r?   r:   r9   r7   r  r    sJ    E
&##464 7 72;r9   r  c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)TestCheckModulei   c                     [        SSS9U l        U R                  R                  5         [        R                  R                  S[        R                  " 5       5        g )Ntest_dir_moduler   rR  r   )re   rj   rt   r   rW   insertrK   rl   rs   s    r7   r   TestCheckModule.setUp!  s;    "3= 	299;'r9   c                 v    [         R                  R                  S5        U R                  R	                  5         g )Nr   )r   rW   poprj   rz   rs   s    r7   r   TestCheckModule.tearDown)  s!    Qr9   c                     U R                  S5        [        R                  " S5      nU R                  U[        R
                  R                  S5      5        U R                  S[        R                  5        g )N	module.pymodule)
_mkfiler   findr   rK   rW   abspathassertNotInr   modulesr/   rW   s     r7   test_moduleTestCheckModule.test_module-  sO    [!!!(+rww{;<3;;/r9   c                 ~   [         R                  " S5        U R                  S5        U R                  S5        [        R                  " S5      nU R                  U[         R                  R                  S5      5        U R                  S[        R                  5        U R                  S[        R                  5        g )Npackagepackage/__init__.pyzpackage/module.pyzpackage.modulerK   r  r  r   r  r   rW   r  r  r   r  r  s     r7   test_packageTestCheckModule.test_package3  s    
*+()!!"23rww/BCDCKK0)3;;7r9   c                    [         R                  " S5        U R                  S5        [         R                  " S5        U R                  S5        U R                  S5        [        R                  " S5      nU R                  U[         R                  R                  S5      5        U R                  S[        R                  5        U R                  S[        R                  5        U R                  S[        R                  5        g )Nr  r  zpackage/subpackagezpackage/subpackage/__init__.pyzpackage/subpackage/module.pyzpackage.subpackage.modulezpackage.subpackager  r  s     r7   test_subpackageTestCheckModule.test_subpackage<  s    
*+
%&5634!!"=>rww/MNOCKK0-s{{;4ckkBr9   c                 >   [         R                  " S5        U R                  S5        U R                  S5        [        R                  " S5      nU R                  U[         R                  R                  S5      5        U R                  S[        R                  5        g )Nr  r  zpackage/__main__.pyr  r  s     r7   test_package_main!TestCheckModule.test_package_mainH  sj    
*+*+!!),rww/DEFCKK0r9   c                     U R                  S5        U R                  [        S5         [        R                  " S5        S S S 5        U R                  S[        R                  5        g ! , (       d  f       N/= f)Nr  zmodule is not a packagez
module.badr  )r  assertRaisesRegexr&   r   r  r  r   r  rs   s    r7   test_not_package TestCheckModule.test_not_packageP  sQ    [!##I/HI|, J3;;/ JIs   A((
A6c                 8    [        US5      R                  5         g )NrX  )r\  closer  s     r7   r  TestCheckModule._mkfileV  s    T3r9   )rj   N)r;   r<   r=   r>   r   r   r  r  r  r  r  r  r?   r:   r9   r7   r  r     s+    (08
C10 r9   r  c                      ^  \ rS rSrSrSr/ r/ r\U 4S j5       r	S r
S rS rS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSr U =r!$ )TestShellBaseiZ  a  
Contains tests which should work in any shell using argcomplete.

Tests use the test program in this directory named ``prog``.
All commands are expected to input one of the valid choices
which is then printed and collected by the shell wrapper.

Any tabs in the input line simulate the user pressing tab.
For example, ``self.sh.run_command('prog basic "b   r       ')`` will
simulate having the user:

1. Type ``prog basic "b``
2. Push tab, which returns ``['bar', 'baz']``, filling in ``a``
3. Type ``r``
4. Push tab, which returns ``['bar']``, filling in ``" ``
5. Push enter, submitting ``prog basic "bar" ``

The end result should be ``bar`` being printed to the screen.
Nc                 >  > U R                    H3  n[        X5      n[        R                  U4S j5       n[	        XU5        M5     U R
                   H9  n[        X5      n[        R                  " S5      U4S j5       n[	        XU5        M;     [        TU ]   " U0 UD6  g )Nc                     U" U 5        g rq   r:   r/   rY  s     r7   wrapped)TestShellBase.setUpClass.<locals>.wrappedx  s	    T
r9   skipc                     g rq   r:   r  s     r7   r  r    s    r9   )	expected_failuresgetattrr  r  setattrskippedr  r'   
setUpClass)clsrO   r0   r  rY  r  r6   s         r7   r  TestShellBase.setUpClasss  s    ))D3%D%%#'  & Cw' * KKD3%D]]6"#'  # Cw'   	D+F+r9   c                     [         erq   )NotImplementedErrorrs   s    r7   r   TestShellBase.setUp  s    !!r9   c                     U R                  [        R                  [        45         U R                  R                  S5        S S S 5        g ! , (       d  f       g = f)Nr   )r   rM   EOFOSErrorr\   r(   rs   s    r7   r   TestShellBase.tearDown  s7    W56GG' 766s   A
Ac                 Z    U R                  U R                  R                  S5      S5        g )Nprog basic f	foo
r   r\   r(   rs   s    r7   test_simple_completion$TestShellBase.test_simple_completion  s"    ,,-=>	Jr9   c                 Z    U R                  U R                  R                  S5      S5        g )Nzprog basic b	rzbar
r  rs   s    r7   test_partial_completion%TestShellBase.test_partial_completion  "    ,,->?Kr9   c                 Z    U R                  U R                  R                  S5      S5        g )Nzprog basic 'f	r  r  rs   s    r7   test_single_quoted_completion+TestShellBase.test_single_quoted_completion  r  r9   c                 Z    U R                  U R                  R                  S5      S5        g )Nzprog basic "f	r  r  rs   s    r7   test_double_quoted_completion+TestShellBase.test_double_quoted_completion  r  r9   c                 Z    U R                  U R                  R                  S5      S5        g )Nzprog space f		foo bar
r  rs   s    r7   test_unquoted_space!TestShellBase.test_unquoted_space  s"    ,,-=>Nr9   c                 Z    U R                  U R                  R                  S5      S5        g )Nzprog space "f	r  r  rs   s    r7   test_quoted_spaceTestShellBase.test_quoted_space  s"    ,,->?Or9   c                 \   U R                  U R                  R                  S5      S5        U R                  U R                  R                  S5      S5        U R                  U R                  R                  S5      S5        U R                  U R                  R                  S5      S5        g )	Nzprog basic f	--r  zprog cont f	--zfoo=--
zprog cont bar	--zbar/--
zprog cont baz	--zbaz:--
r  rs   s    r7   test_continuationTestShellBase.test_continuation  s    ,,-?@)L,,->?N,,-@A<P,,-@A<Pr9   c                 Z    U R                  U R                  R                  S5      S5        g )Nzprog basic "f	--r  r  rs   s    r7   test_quoted_exactTestShellBase.test_quoted_exact  s"    ,,-@A9Mr9   c                    U R                  U R                  R                  S5      S5        U R                  U R                  R                  S5      S5        U R                  U R                  R                  S5      S5        g )Nzprog spec d	fd$e$f
zprog spec x	x!x
zprog spec y	zy\y
r  rs   s    r7   test_special_characters%TestShellBase.test_special_characters  s`    ,,-=>L,,_=yI,,_=zJr9   c                 Z    U R                  U R                  R                  S5      S5        g )Nzprog spec 'd	f'r   r  rs   s    r7   %test_special_characters_single_quoted3TestShellBase.test_special_characters_single_quoted  "    ,,-?@+Nr9   c                 Z    U R                  U R                  R                  S5      S5        g )Nzprog spec "d	f"r   r  rs   s    r7   %test_special_characters_double_quoted3TestShellBase.test_special_characters_double_quoted  r'  r9   c                    U R                  U R                  R                  S5      S5        U R                  U R                  R                  S5      S5        U R                  U R                  R                  S5      S5        g )Nzprog spec d$e$	fr   zprog spec d$e	fzprog spec 'd$e	f	r  rs   s    r7   test_parse_special_characters+TestShellBase.test_parse_special_characters  sb    ,,-@A;O,,-?@+N,,-BC[Qr9   c                 Z    U R                  U R                  R                  S5      S5        g )Nzprog spec "d$e	f	r   r  rs   s    r7   $test_parse_special_characters_dollar2TestShellBase.test_parse_special_characters_dollar  s"    ,,-BC[Qr9   c                 Z    U R                  U R                  R                  S5      S5        g )Nzprog spec "x	r!  r  rs   s    r7   !test_exclamation_in_double_quotes/TestShellBase.test_exclamation_in_double_quotes  s$     	,,-=>	Jr9   c                     U R                  U R                  R                  S5      S5        U R                  U R                  R                  S5      S5        g )Nzprog quote 1	1'1
zprog quote 2	z2"2
r  rs   s    r7   test_quotesTestShellBase.test_quotes  sB    ,,-=>	J,,-=>	Jr9   c                 Z    U R                  U R                  R                  S5      S5        g )Nzprog quote "1	r5  r  rs   s    r7   #test_single_quotes_in_double_quotes1TestShellBase.test_single_quotes_in_double_quotes  r  r9   c                 Z    U R                  U R                  R                  S5      S5        g )Nzprog quote '1	r5  r  rs   s    r7   #test_single_quotes_in_single_quotes1TestShellBase.test_single_quotes_in_single_quotes  s$     	,,->?Kr9   c                 ^   U R                  U R                  R                  S5      S5        U R                  U R                  R                  S5      S5        U R                  U R                  R                  S5      S5        U R                  U R                  R                  S5      S5        U R                  U R                  R                  S5      S5        U R                  U R                  R                  S5      S5        U R                  U R                  R                  S5      S5        g )	Nzprog break a	cza:b:c
zprog break a:b:	czprog break a:b	czprog break 'a	c'zprog break 'a:b	c	zprog break "a	c"zprog break "a:b	c	r  rs   s    r7   test_wordbreak_chars"TestShellBase.test_wordbreak_chars  s    ,,->?M,,-ABKP,,-@A;O,,-@A;O,,-CDkR,,-@A;O,,-CDkRr9   c                 Z    U R                  U R                  R                  S5      S5        g )Nzprog env o	zok
r  rs   s    r7   test_completion_environment)TestShellBase.test_completion_environment  s!    ,,^<hGr9   c                    U R                  U R                  R                  S5      S5        U R                  U R                  R                  S5      S5        U R                  U R                  R                  S5      S5        U R                  U R                  R                  S5      S5        U R                  U R                  R                  S	5      S
5        g )Nzexport POINT=1r$   zprog point hi	z13
zprog point hi 	z14
u   prog point 你好嘚瑟	z15
u   prog point 你好嘚瑟 	z16
r  rs   s    r7   test_comp_pointTestShellBase.test_comp_point  s    ,,-=>C,,->?J,,-?@(K,,-HI8T,,-IJHUr9   r:   )"r;   r<   r=   r>   r}   r\   r  r  classmethodr  r   r   r  r	  r  r  r  r  r  r  r"  r%  r)  r,  r/  r2  r6  r9  r<  r?  rB  rE  r?   r@   rA   s   @r7   r  r  Z  s    ( 
BG, ,&"(KLLLOPQNK
OOR
RK
KLL
SHV Vr9   r  c                   &    \ rS rSrSrSrSrS rSrg)TestBashZshBasei  Nz0eval "$(register-python-argcomplete dummy prog)"c                    U R                  5       nUR                  S5      nU R                  US5        SR                  [        R
                  R                  [        S5      [        S/5      nUR                  SR                  U5      5        UR                  SR                  [        5      5        U R                  b-  UR                  U R                  5      nU R                  US5        U R                  b-  UR                  U R                  5      nU R                  US5        UR                  S	5      nU R                  US5        Xl        g )
Nz
echo readyzready
:scriptsz$PATHzexport PATH={0}zexport PYTHONPATH={0}r$   zOeval "$(register-python-argcomplete dummy --external-argcomplete-script dummy)")repl_providerr(   r   rX   rK   rW   BASE_DIRTEST_DIRformatinit_cmdinstall_cmdr\   )r/   r\   r   rW   s       r7   r   TestBashZshBase.setUp  s   !--xxh	:HgNO
(//56
.55h?@==$^^DMM2FVR('^^D$4$45FVR(  qr$r9   )r\   )	r;   r<   r=   r>   maxDiffrQ  rR  r   r?   r:   r9   r7   rI  rI    s    GH EKr9   rI  c                   h    \ rS rSrSS/r\S:  a  \R                  S5        S rS rS r	S	 r
S
 rSrg)TestBashi  r/  r2  r   r  c                     [        5       $ rq   )r]   rs   s    r7   rM  TestBash.repl_provider
  s
    {r9   c                 ^    U R                   R                  S5      nU R                  US5        g)z8Test exactly one space is appended after an exact match.zprog basic f	"echo "zprog basic foo 
N)r\   r(   r   )r/   r*  s     r7   test_one_space_after_exact#TestBash.test_one_space_after_exact  s*     $$%>?!67r9   c                 N   U R                  U R                  R                  S5      S5        U R                  R                  S5        U R                  R                  S5      nU R                  SU5        U R                  SU5        U R	                  UR                  S5      5        g )Nzprog debug f	r  export _ARC_DEBUG=1zPYTHON_ARGCOMPLETE_STDOUT
zPYTHON_ARGCOMPLETE_STDERR
)r   r\   r(   assertIn
assertTrueendswithr/   r   s     r7   test_debug_outputTestBash.test_debug_output  s}    ,,-=>	J12$$%565v>5v>	23r9   c                     U R                   R                  S5        U R                  U R                   R                  S5      S5        U R                   R                  S5        U R                   R                  S5      nU R                  SU5        g )Nz"export ARGCOMPLETE_USE_TEMPFILES=1r  r  r]  zUsing output file )r\   r(   r   r^  ra  s     r7   test_temp_fileTestBash.test_temp_file  sl    @A,,-=>	J12$$%56*F3r9   c                 Z    U R                   R                  S5        U R                  5         g )Nzset -o nounset)r\   r(   r  rs   s    r7   test_nounsetTestBash.test_nounset#  s!    ,-##%r9   r:   N)r;   r<   r=   r>   r  BASH_MAJOR_VERSIONr  rM  rZ  rb  re  rh  r?   r:   r9   r7   rV  rV    sB    .+ A  !45844&r9   rV  c                   &    \ rS rSrSr/ SQrS rSrg)TestZshi(  zautoload compinit; compinit -u)r,  r/  rE  rB  c                     [        5       $ rq   )r_   rs   s    r7   rM  TestZsh.repl_provider2  s
    zr9   r:   N)r;   r<   r=   r>   rQ  r  rM  r?   r:   r9   r7   rl  rl  (  s    /HGr9   rl  c                   ^    \ rS rSrSrS rS rS rS rS r	S r
SS	 jrS
 rS rS rS rSrg)TestBashZshGlobalBasei6  z5eval "$(activate-global-python-argcomplete --dest=-)"c                    [        SSS9   U R                  R                  S[        R                  " 5       -   5        U R                  R                  S5        U R                  R                  S5        [        S5       nUR                  5       nS S S 5        U R                  WS5        S S S 5        g ! , (       d  f       N)= f! , (       d  f       g = f)	Ntest_dir_pyr   rR  cd zecho failure > ./foo.txtzecho success > ./foo.	zfoo.txtzsuccess
)re   r\   r(   rK   rl   r\  r   r   )r/   fmsgs      r7   test_redirection_completion1TestBashZshGlobalBase.test_redirection_completion9  s    Ms3GG		 34GG :;GG 9:iAffh !S+. 43 !	 43s$   A3C>B2C2
C 	<C
Cc                     U R                   R                  S[        -   5        U R                  U R                   R                  S5      S5        g )Nrs  python3 ./prog basic f	r  r\   r(   rO  r   rs   s    r7   test_python_completion,TestBashZshGlobalBase.test_python_completionB  9    EH,-,,-GH)Tr9   c                     U R                   R                  S[        -   5        U R                  U R                   R                  S5      S5        g )Nrs  zpython3 ./pro	basic f	r  rz  rs   s    r7   test_python_filename_completion5TestBashZshGlobalBase.test_python_filename_completionF  r}  r9   c                 ~    U R                   R                  S[        -   5        U R                   R                  S5        g )Nrs  zpython3 ./stuck no	-input)r\   r(   rO  rs   s    r7   test_python_stuck'TestBashZshGlobalBase.test_python_stuckJ  s,    EH,-89r9   c                    [         R                  R                  [        S5      n[	        SSS9   [
        R                  " US5        U R                  R                  S[         R                  " 5       -   5        U R                  R                  S5        U R                  SU R                  R                  S5      5        U R                  U R                  R                  S	5      S
5        SSS5        g! , (       d  f       g= f)z5Test completing a script that cannot be run directly.r\  rr  r   rR  rs  zchmod -x ./progz<<126>>z./prog; echo "<<$?>>"ry  r  N)rK   rW   rX   rO  re   rw   r   r\   r(   rl   r^  r   r/   r\  s     r7   test_python_not_executable0TestBashZshGlobalBase.test_python_not_executableN  s    ww||Hf-Ms3KKc"GG		 34GG 12MM)TWW%8%89P%QRTWW001KLiX 433s   B:C22
D c                    [         R                  R                  [        S5      n[	        SSS9   [         R
                  " S5        [        SS5      R                  5         [        R                  " US5        U R                  R                  S	[         R                  " 5       -   5        U R                  U R                  R                  S
5      S5        SSS5        g! , (       d  f       g= f)z,Test completing a module run with python -m.r\  rr  r   rR  r  r  rX  zpackage/prog.pyrs  z python3 -m package.prog basic f	r  N)rK   rW   rX   rO  re   r  r\  r  rw   r   r\   r(   rl   r   r  s     r7   test_python_module(TestBashZshGlobalBase.test_python_moduleZ  s    ww||Hf-Ms3HHY&,224KK/0GG		 34TWW001TUW`a 433s   B$C
C*c                    [        SSS9   U R                  R                  S[        R                  " 5       -   5        U R                  R                  S5        U R                  R                  S5        [        R
                  R                  [        S5      nSR                  U5      nU(       d  US	-  nU R                  R                  U5      nU R                  U R                  R                  S
5      SU5        SnU(       a  SnUS-  nU R                  U R                  R                  U5      S5        S S S 5        g ! , (       d  f       g = f)Nrr  r   rR  rs  zexport PATH=$PATH:./binzexport PYTHONPATH=.:$PYTHONPATHr  zpip install {} --target .z --no-binary :all:zecho $?z0
ztest-moduleztest-packagez a	zarg
)
re   r\   r(   rK   rl   rW   rX   rO  rP  r   )r/   r  wheelr  r*   install_outputs         r7   _test_console_script*TestBashZshGlobalBase._test_console_scriptd  s    Ms3GG		 34GG 9:GG AB77<<.AL188FG//!WW009NTWW00;WnU#G(vGTWW0099E 433s   D+D??
Ec                 $    U R                  5         g)z.Test completing a console_script for a module.Nr  rs   s    r7   test_console_script_module0TestBashZshGlobalBase.test_console_script_moduleu  s    !!#r9   c                 "    U R                  SS9  g)z/Test completing a console_script for a package.T)r  Nr  rs   s    r7   test_console_script_package1TestBashZshGlobalBase.test_console_script_packagey  s    !!$!/r9   c                 "    U R                  SS9  g)z;Test completing a console_script for a module from a wheel.T)r  Nr  rs   s    r7    test_console_script_module_wheel6TestBashZshGlobalBase.test_console_script_module_wheel}  s    !!!-r9   c                 $    U R                  SSS9  g)z<Test completing a console_script for a package from a wheel.T)r  r  Nr  rs   s    r7   !test_console_script_package_wheel7TestBashZshGlobalBase.test_console_script_package_wheel  s    !!$d!;r9   r:   N)FF)r;   r<   r=   r>   rR  rv  r{  r  r  r  r  r  r  r  r  r  r?   r:   r9   r7   rp  rp  6  sC    IK/UU:
YbF"$0.<r9   rp  r   zcomplete -D not supportedc                       \ rS rSrSrg)TestBashGlobali  r:   Nr;   r<   r=   r>   r?   r:   r9   r7   r  r    s    r9   r  c                       \ rS rSrSrg)TestZshGlobalExpliciti  r:   Nr  r:   r9   r7   r  r    s    r9   r  c                       \ rS rSr\R
                  R                  \R
                  R                  \R
                  R                  \	R                  5      5      S5      rS\ S3rSrSrg)TestZshGlobalImpliciti  zbash_completion.dzfpath=( z0 "${fpath[@]}" ); autoload compinit; compinit -uNr:   )r;   r<   r=   r>   rK   rW   rX   r  rY   argcompleterZ   	zsh_fpathrQ  rR  r?   r:   r9   r7   r  r    sM     RWW__RWW__[=Q=Q-RSUhiI)$VWHKr9   r  c                        \ rS rSrS rS rSrg)Shelli  c                 8    [         R                  " USS9U l        g )NrF   )rH   )rM   rN   r)   )r/   r   s     r7   rn   Shell.__init__  s    ]]57;
r9   c                 b    U R                   R                  SR                  U5      5        U R                   R                  SSS9  U R                   R                  SSS9  U R                   R                  U R                   R                  S5        $ ! U R                   R                  S5        f = f)Nz#echo -n \#\#\#; {0}; echo -n \#\#\#z###rI   )timeout)r)   sendlinerP  expect_exactbefore)r/   r*   s     r7   r(   Shell.run_command  s    	(JJ F M Mg VWJJ##E1#5JJ##E1#5::$$ JJ'DJJ's   A3B B.)r)   N)r;   r<   r=   r>   rn   r(   r?   r:   r9   r7   r  r    s    <(r9   r  c                       \ rS rSrS rSrg)Warni  c                     [         R                  S 5       n[        5       nU" U5         [        S5        S S S 5        U R	                  SUR                  5       5        g ! , (       d  f       N/= f)Nc              3      #    [         R                  R                  nU [         R                  l         S v   U[         R                  l        g ! U[         R                  l        f = f7frq   )r  iodebug_stream)streamr  s     r7   redirect_debug_stream-Warn.test_warn.<locals>.redirect_debug_stream  s@     &>>66L*0KNN';.:+l+s   0A'A A'A$$A'zMy hands are tiedz
My hands are tied
)
contextlibcontextmanagerr   r   r   getvalue)r/   r  test_streams      r7   	test_warnWarn.test_warn  s^    		"	"	; 
#	; j";/$% 0 	0+2F2F2HI 0/s   A
A,r:   N)r;   r<   r=   r>   r  r?   r:   r9   r7   r  r    s    Jr9   r  __main__)r   )r"   )Nrf  r  rK   os.pathr,   rw   rf  r   r  unittest.utilr  r   tempfiler   r   r   rM   pexpect.replwrapr   r   r	   rW   r  rY   rZ   rO  rN  r  r
   r   r  argcomplete.ior   r   r   r   r   r   argcomplete.completersr   r   r   argcomplete.lexersr   util_MAX_LENGTHr   r   check_outputdecodeBASH_VERSIONr   r+   rj  r   rT   r]   r_   rc   re   TestCaser   rs  r  r  r  rI  rV  rl  rp  skipIfr  r  r  r  r  r;   mainr:   r9   r7   <module>r     s<     	  	   
    ? ?  U U77??277??84577??8$ 8  -    [ Z ) ! $&&'KLSSU++C034 [ &bO$ $2IVh'' IVXkj(++ kj\-;H%% -;`7 h'' 7 tHV HVVm 8$& 1 1 $&Nox00 M<O M<` 
#a')DE	X4 	 F		G%: 	G%: ( (J8 J$ zMMO r9   