
                            d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Zd dl
mZ d dlmZmZmZ d dlZd dlmZmZmZ ej*                  j-                  ej*                  j/                  e            Zej*                  j/                  e      Zej*                  j7                  d e       d dl mZmZ d dlZd dlZd dlm Z m!Z!m"Z"m#Z#m$Z$m%Z% d dl&m'Z'm(Z(m)Z) d dl*m+Z+ d	ejX                  _-        d
Z.dZ/ ej`                  g d      jc                         Z2 e3e2ji                  d      d          Z5 G d de      Z6d Z7d5dZ8d6dZ9d Z: G d d      Z; G d dejx                        Z= G d dejx                        Z> G d dejx                        Z? G d dejx                        Z@ G d d      ZA G d  d!eA      ZB G d" d#eBejx                        ZC G d$ d%eBejx                        ZD G d& d'eB      ZE ej                  e5d(k  d)       G d* d+eCeE             ZG G d, d-eDeE      ZH G d. d/eDeE      ZI G d0 d1      ZJ G d2 d3ejx                        ZKeLd4k(  r ej                          yy)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                        e Zd Z fdZ xZS )ArgcompleteREPLWrapperc                 8   d|v rt        d      t        |   |fi |}| j                  j                  j                  d      d   dk(  rNd|vrt        d      |j                  dd      \  }}t        j                  dd	|      }|j                  d
      }|S |S )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'   z"ArgcompleteREPLWrapper.run_command0   s    7?BCCg!'4V4::##C(,53 OPP#&99T1#5 Hj$&FF+?Z$P! &;%A%A&%I"))J    )__name__
__module____qualname__r'   __classcell__r5   s   @r6   r   r   /   s     r7   r   c                    dt         j                  d<   dt         j                  d<   t        j                  | |dd      }t        d d |z   t        dd  z   }t
        d d |z   t
        dd  z   }d	| d
| d}t        |d|d      S )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          r6   _repl_shrO   B   s    BJJuBJJvMM'4egFE
!
3
3nQR6H
HC
%bq
),@
@C^_`_aCb
bCC5u,?@M!%N`aar7   c                     t         j                  j                  t         j                  j                  t        j
                        d      }t        | d|gd      }|S )Nz	bashrc.shz--rcfilez\[\]rK   )rF   pathjoindirnamerH   __file__rO   )r)   bashrcshs      r6   	bash_replrX   L   sA    WW\\"''//'*:*:;[IF	'J/h	OBIr7   c                 H    t        | g dd      }|j                  d       |S )N)z--no-rcsz--no-globalrcsz-Vz%(!..)rQ   zsetopt BASH_AUTO_LIST)rO   r'   )r)   rW   s     r6   zsh_replrZ   R   s$    	'?V^	_BNN*+Ir7   c                      t         j                  j                  t         j                  j                  t              d      t         j
                  d<   y )NinputrcINPUTRC)rF   rR   rS   rT   rU   rG    r7   r6   setUpModuler_   Y   s,    GGLL)BINBJJyr7   c                   $    e Zd ZdZddZd Zd Zy)TempDira  
    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                 \    t        |||      | _        t        j                         | _        y )N)suffixprefixdir)r   tmp_dirrF   getcwdold_dir)r.   rc   rd   re   s       r6   __init__zTempDir.__init__i   s    fVEyy{r7   c                 X    t        j                  | j                         | j                  S N)rF   chdirrf   r.   s    r6   	__enter__zTempDir.__enter__m   s    
||r7   c                     t        j                  | j                         t        j                  | j
                         y rk   )rF   rl   rh   shutilrmtreerf   )r.   errs     r6   __exit__zTempDir.__exit__q   s"    
dll#r7   )r#   tmpdirN)r8   r9   r:   __doc__ri   rn   rs   r^   r7   r6   ra   ra   ]   s    	#$r7   ra   c                       e Zd Zd Zd ZdedfdZd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d  Z!d! Z"d" Z#d# Z$d$ Z%d% Z&d& Z'd' Z(y)(TestArgcompletec                 J   t         j                  | _        t         j                  j                         t         _        dt         j                  d<   dt         j                  d<   t        t         j                  d<   t
        t         j                  d<   dt         j                  d<   y )	N1_ARGCOMPLETEyes
_ARC_DEBUGIFS_ARGCOMPLETE_COMP_WORDBREAKSr   _ARGCOMPLETE_SHELL)rF   rG   _os_environcopyr}   COMP_WORDBREAKSrm   s    r6   setUpzTestArgcomplete.setUpw   sh    ::ZZ__&
%(

>"#(

< 

55D

12+1

'(r7   c                 .    | j                   t        _        y rk   r   rF   rG   rm   s    r6   tearDownzTestArgcomplete.tearDown       %%
r7   Nr   c                 J   |t        t        |            }t        d      5 }|t        j                  d<   |t        j                  d<   |t        j                  d<   | j                  t              5 } ||f|t        j                  d| d d d        j                  j                  dk7  r"t        d|j                  j                  z        |j                  d       |j                         j                  t              cd d d        S # 1 sw Y   xY w# 1 sw Y   y xY w)	Nzw+)mode	COMP_LINE
COMP_POINTr   )output_streamexit_methodr   zUnexpected exit code %d)strlenr   rF   rG   assertRaises
SystemExitsysexit	exceptioncoder%   seekreadr*   r}   )	r.   parserr)   point	completershellr/   tcms	            r6   run_completerz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2DA6DD	DD"c                 "   t               }|j                  d       |j                  d       | j                  |d      }| j                  t	        |      t	        g d             | j                  |d      }| j                  t	        |      t	        g d             | j                  |dd      }| j                  t	        |      t	        dg             | j                  |dd      }| j                  t	        |      t	        g d             y )	N--foo--barprog -h--helpr   r   zprog -Falways_complete_optionsr#   )r   add_argumentr   assertEqualset)r.   pcompletionss      r6   test_basic_completionz%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Sr7   c           	          d }dg dfddgfdddgfd	ddgfd
dgfdddgfdddgfddgff}|D ]>  \  }}| j                  t        | j                   |       |            t        |             @ y )Nc                  D    t               } | j                  dddg       | S )N--ship	submarine	speedboatchoicesr   r   r   s    r6   make_parserz1TestArgcomplete.test_choices.<locals>.make_parser   s'    #%F;2LMMr7   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        r6   test_choicesz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 ,r7   c           	          d }dg dfdddgfddgfd	d
dgfdddgff}|D ]>  \  }}| j                  t        | j                   |       |            t        |             @ y )Nc                  N    t               } | j                  dt        g d       | S )Nx)               *   )typer   )r   r   intr   s    r6   r   z9TestArgcomplete.test_non_str_choices.<locals>.make_parser   s%    #%F#7MNMr7   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        r6   test_non_str_choicesz$TestArgcomplete.test_non_str_choices   s    	 HId|$wT{#x()
 ,KCS!3!3KM3!GH#f+V ,r7   c           
      F   d }dg dfddgff}|D ]>  \  }}| j                  t        | j                   |       |            t        |             @ dg dfddgff}|D ]@  \  }}| j                  t        | j                   |       |d	            t        |             B y )
Nc                  j    t               } | j                  d       | j                  dt               | S )Nr   r   help)r   r   r
   r   s    r6   r   z7TestArgcomplete.test_suppress_args.<locals>.make_parser   s0    #%F(h7Mr7   r   r   r   r   prog --br#   r   r   r   r   --bar Tprint_suppressedr   r   s        r6   test_suppress_argsz"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 ,r7   c           
      F   d }dg dfddgff}|D ]>  \  }}| j                  t        | j                   |       |            t        |             @ dg dfddgff}|D ]@  \  }}| j                  t        | j                   |       |d	            t        |             B y )
Nc                  |    t               } | j                  d       | j                  d      }t               |_        | S )Nr   r   )r   r   r   r   )r   args     r6   r   z<TestArgcomplete.test_suppress_completer.<locals>.make_parser   s7    #%F(%%g.C-/CMMr7   r   r   r   r#   r   r   Tr   r   r   s        r6   test_suppress_completerz'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 ,r7   c           	          d }dg dfddgfdg dfdd	gfd
ddgff}|D ]>  \  }}| j                  t        | j                   |       |            t        |             @ y )Nc                  n    t               } | j                  dddg       | j                  dddg       | S Nvarbuscarr   valueorangeappler   r   s    r6   r   z;TestArgcomplete.test_action_activation.<locals>.make_parser   >    #%Fu~>(G1DEMr7   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        r6   test_action_activationz&TestArgcomplete.test_action_activation   s|    	 45!=>xj)x 01
 ,KCS!3!3KM3!GH#f+V ,r7   c                     d }dg dfddgfdg dfdg dfd	d
gfdg dfddgfdg dfdddgfdddgff
}|D ]>  \  }}| j                  t        | j                   |       |            t        |             @ y )Nc                      t               } | j                  ddg d       | j                  dd      }|j                  d      }|j                  d	d
dg       |j                  dd       | S )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      r6   r   zJTestArgcomplete.test_action_activation_with_subparser.<locals>.make_parser   ss    #%FaI..]L.YJ(33G<O(((G((A(>Mr7   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        r6   %test_action_activation_with_subparserz5TestArgcomplete.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 ,r7   c           
      l    ddg _          fdfd}dddgfdddgfdg dfd	g d
fdddgfdddgfdg dff}|D ]>  \  }} j                  t         j                   |       |            t        |             @ ddd _         |D ]>  \  }} j                  t         j                   |       |            t        |             @ dddgfdddgfdg dfd	g dfdddgfdddgfdg dff}|D ]@  \  }} j                  t         j                   |       |d            t        |             B y )Nhttp://url1http://url2c                     j                   S rk   )r   )rd   parsed_argsr/   r.   s      r6   c_urlz.TestArgcomplete.test_completers.<locals>.c_url  s    ###r7   c                  t    t               } | j                  d      _        | j                  ddg d       | S )N--url--email   a@b.ca@b.dab@c.dzbcd@e.fzbce@f.gr   )r   r   r   )r   r  s    r6   r   z4TestArgcomplete.test_completers.<locals>.make_parser  s9    #%F5:F(2	<noMr7   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:)r  r  r  r  r  )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   `     @r6   test_completersz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 0r7   c           	          d d fd}dg dfdg dfdd	gff}|D ]>  \  }}| j                  t        | j                   |       |            t        |             @ y )
Nc                     |j                   gS rk   )arg1rd   r  r/   s      r6   c_depends_on_positional_arg1zOTestArgcomplete.test_subparser_completers.<locals>.c_depends_on_positional_arg1B      $$%%r7   c                     |j                   gS rk   )arg5r!  s      r6   c_depends_on_optional_arg5zMTestArgcomplete.test_subparser_completers.<locals>.c_depends_on_optional_arg5E  r#  r7   c                  &   t               } | j                         }|j                  d      }|j                  d       |j                  d      _        |j                  d      _        |j                  d      _        |j                  d       | S )Nr   r   arg2arg3--arg4--arg5)r   r  r  r   r   )r   r  	subparserr&  r"  s      r6   r   z>TestArgcomplete.test_subparser_completers.<locals>.make_parserH  s    #%F..0J"--l;I""6*7SI""6*47QI""6*49SI""8,6""8,Mr7   zprog subcommand val1 )val1r*  r+  r   r   z&prog subcommand val1 val2 --arg5 val5 )val5r*  r+  r   r   z.prog subcommand val1 val2 --arg5 val6 --arg4 vzval6 r   )r.   r   r   r   r   r&  r"  s        @@r6   test_subparser_completersz)TestArgcomplete.test_subparser_completersA  sp    	&	&		 %&RS57cd=yI
 ,KCS!3!3KM3!GH#f+V ,r7   c                    t        dd      5  t               }t        j                  t        j                  j                  dd             | j                   |d      dg       t        j                  t        j                  j                  dd             t        d	d
      5 }|j                  d       d d d        | j                  t         |d            t        g d             d d d        y # 1 sw Y   >xY w# 1 sw Y   y xY w)Ntest_dir_fcr   rd   re      abcdefжklmr   	   abcdefж/abcahaabcxyzwtest)r5  abcaha/r7  )
ra   r   rF   makedirsrR   rS   r   openwriter   )r.   fcfps      r6   test_file_completionz$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C?$C364C?3C<	8C??Dc           
         d }t        dd      5  t        j                  t        j                  j	                  dd             t        j                  t        j                  j	                  dd             t        dd	      5 }t        d
d	      5 }|j                  d       |j                  d       d d d        d d d        dg dfddgff}|D ]>  \  }}| j                  t        | j                   |       |            t        |             @ 	 d d d        y # 1 sw Y   ixY w# 1 sw Y   mxY w# 1 sw Y   y xY w)Nc                      t               } | j                  dt        j                  d             | j                  dt        j                  d             | S )Nz--rrr   z--wr8  )r   r   argparseFileTyper   s    r6   r   zMTestArgcomplete.test_filescompleter_filetype_integration.<locals>.make_parserh  sK    #%FH,=,=c,BCH,=,=c,BCMr7   test_dir_fc2r   r2  r3  r4  r6  r7  r8  u   abcdefж/klm/testr9  zprog subcommand --r )r7  r5  r:  u"   prog subcommand --w abcdefж/klm/tu   abcdefж/klm/test )
ra   rF   r;  rR   rS   r<  r=  r   r   r   )r.   r   fhfh2r   r   r   s          r6   (test_filescompleter_filetype_integrationz8TestArgcomplete.test_filescompleter_filetype_integrationg  s    	 N4KKZ78KKXu56h$D1Dc,Jc 		&! -K$
 ()KL58L7MN 
  0V  T%7%7s%K!LcRXkZ  0 54 -K,J$$ 54s=   A3D4D(#D4D(<AD4D%!D((D1	-D44D=c                    t               fd}t        dd      5  t        j                  t        j                  j                  dd             t        j                  t        j                  j                  dd             t        j                  t        j                  j                  dd             t        j                  t        j                  j                  d	d             t        d
d      5 }t        dd      5 }|j                  d       |j                  d       d d d        d d d        | j                   |d      t        ddg             | j                   |d      t        ddg             | j                   |d      t        dg             | j                   |d      t        ddg             | j                   |d      t        dg             | j                   |d      t        dg             | j                   |d      t        g              | j                   |d      t        g              d d d        y # 1 sw Y   ,xY w# 1 sw Y   1xY w# 1 sw Y   y xY w)Nc                 &    t         |             S rk   )r   )rd   r   s    r6   r   z4TestArgcomplete.test_directory_completion.<locals>.c  s    y())r7   test_dirr   r2  abcbazabbfazdefabc1r8  def1zA testzAnother testr   zabb/zabc/abzabc/baz/zabc/faz/dzdef/zdef/baz/ezdef/k)
r   ra   rF   r;  rR   rS   r<  r=  r   r   )r.   r   fp1fp2r   s       @r6   test_directory_completionz)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& 	s=   CI+7I#I'I/DI+III(	#I++I4c           
         d }t        dd      5  t        j                  d       ddgfddgfd	g d
ff}|D ]>  \  }}| j                  t	        | j                   |       |            t	        |             @ 	 d d d        y # 1 sw Y   y xY w)Nc                  f    t        d      } | j                  d       | j                  dd       | S )NFadd_help--one--many+r  r   r   s    r6   r   z;TestArgcomplete.test_default_completer.<locals>.make_parser  s2    #U3F(4Mr7   test_dir_dcr   r2  r9  zprog --one test/zprog --many zprog --many test/ )rc  r_  r`  )ra   rF   mkdirr   r   r   r   s        r6   test_default_completerz&TestArgcomplete.test_default_completer  s    	 Ms3HHV 	*'+%'CD   0V  T%7%7s%K!LcRXkZ  0 433s   A(BBc                     d }dg dfddgfdg dfdg dfd	d
dgfdddgfdg dff}|D ]  \  }}| j                  t        | j                   |       |            t        |             | j                  t        | j                   |       |dg            t        |      t        dg      z
         | j                  t        | j                   |       |ddg            t        |      t        ddg      z
          y )Nc                      t               } | j                  dt               | j                         }|j	                  d      }|j                  dg d       |j	                  d      }|j                  ddd	g       | S )
N--agerD  eggsr   )	on a boatzwith a goatzin the rain
on a trainr   spamhamiberico)r   r   r   r  r  )r   r,   ri  rl  s       r6   r   z4TestArgcomplete.test_subparsers.<locals>.make_parser  sx    #%Fc2'')C>>&)Df.gh>>&)Dfui.@AMr7   r   )r   ri  r   rl  rh  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 ark  rj  zprog eggs on\ aro  rp  z
prog spam )rn  rm  r   r   r   )excluder   r   r   s        r6   test_subparsersz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 ,r7   c           	          d }dg dfdg dfdddgfd	d
gff}|D ]>  \  }}| j                  t        | j                   |       |            t        |             @ y )Nc                  D    t               } | j                  dg d       | S )N   --книга)u    Трудно быть богомu(   Парень из преисподнейu=   Понедельник начинается в субботуr   r   r   s    r6   r   z3TestArgcomplete.test_non_ascii.<locals>.make_parser  s,    #%F    Mr7   r   )ru  r   r   u   prog --книга )u"   Трудно\ быть\ богом*   Парень\ из\ преисподней@   Понедельник\ начинается\ в\ субботуu   prog --книга Пrv  rw  u   prog --книга Пуr#   r   r   s        r6   test_non_asciizTestArgcomplete.test_non_ascii  s    
	 67$ l $&S  VY  &Z  [%t,
 ,KCS!3!3KM3!GH#f+V ,r7   c           
          d }dddgfddgfdddgfddgfd	ddgff}|D ]A  \  }}| j                  t        | j                   |       |d
             t        |             C y )Nc                  n    t               } | j                  dddg       | j                  dddg       | S r   r   r   s    r6   r   z:TestArgcomplete.test_custom_validator.<locals>.make_parser  r   r7   r   r   r   r   r#   r   r   r   c                      yNFr^   r   ys     r6   <lambda>z7TestArgcomplete.test_custom_validator.<locals>.<lambda>  s    _dr7   	validatorr   r   s        r6   test_custom_validatorz%TestArgcomplete.test_custom_validator  s    	 tX&'4*+rd#x 01
 ,KCS!3!3KM3Rd!3!efhklrhst ,r7   c           
      $   d }d d d f}dddg|d   fdg d	|d
   fdddg|d
   fdg d|d
   fddg|d   fddg|d   fdddg|d   ff}|D ]A  \  }}}| j                  t        | j                   |       ||            t        |             C y )Nc                  n    t               } | j                  dddg       | j                  dddg       | S r   r   r   s    r6   r   z>TestArgcomplete.test_different_validators.<locals>.make_parser  r   r7   c                      yr|  r^   r}  s     r6   r  z;TestArgcomplete.test_different_validators.<locals>.<lambda>  s    r7   c                      y)NTr^   r}  s     r6   r  z;TestArgcomplete.test_different_validators.<locals>.<lambda>   s    r7   c                 $    | j                  |      S rk   )
startswithr}  s     r6   r  z;TestArgcomplete.test_different_validators.<locals>.<lambda>  s    ar7   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          r6   test_different_validatorsz)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!3KM3R[!3!\]_bci_jk '7r7   c                 &   d }t               }|j                  dg d       |j                  dddg       t        |      }| j                   ||d      g d	       | j                   ||d
      ddg       | j                   ||d      g        y )Nc                 z    g }t        d      D ]*  }| j                  ||      }| |S |j                  |       , |S )Ni'  )rangerl_completeappend)r   textr   i
completions        r6   get_readline_completionszKTestArgcomplete.test_readline_entry_point.<locals>.get_readline_completions  sN    K4[&224;
% "":.	 !
 r7   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       r6   test_readline_entry_pointz)TestArgcomplete.test_readline_entry_point  s    	  !G-`aI
K/HI$V,	$Y35x	
 	1)SAKQYCZ[1)SA2Fr7   c                    t               }|j                  dg dd       |j                  dddgd       |j                         }|j                  d	      }|j                  d
dd       |j                  ddd       |j                         }|j                  dd       |j                  dd       t	        |      }|j                  dd       |j                         }| j                  d|j                  dd             | j                  d|j                  dd             | j                  d|j                  dd             y )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          r6   test_display_completionsz(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6r7   c                 p   t               }|j                         j                  dddgd       t        |      }|j	                  dd       |j                         }| j                  dddddd	|       t        |      }|j	                  dd       |j                         }| j                  ddi|       t        |      }|j	                  dd       |j                         }| j                  ddi|       t        |      }|j	                  dd       |j                         }| j                  ddi|       y )
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       r6   %test_display_completions_with_aliasesz5TestArgcomplete.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1r7   c                     d }dg dfdg dfddgfdg d	fd
g d	fddgfdg dfdg dfdg dff	}|D ]>  \  }}| j                  t        | j                   |       |            t        |             @ y )Nc                      t               } | j                  dddg       | j                  dddgd	       | j                  d
ddg       | j                  ddg       | S )Nh1r   rV  r   r   r   r   ra  r   r   r   r   r   endr   r   s    r6   r   z;TestArgcomplete.test_nargs_one_or_more.<locals>.make_parsera  sl    #%FsCj9u~SI(G1DEw7Mr7   r   )r   rV  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        r6   test_nargs_one_or_morez&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 ,r7   c           	          d }dg dfdg dfdg dfdg dff}|D ]>  \  }}| j                  t        | j                   |       |            t        |             @ y )Nc                  n    t               } | j                  ddgdd       | j                  ddg       | S )Nr  *)r   r   defaultr  r   r   r   s    r6   r   z<TestArgcomplete.test_nargs_zero_or_more.<locals>.make_parserz  s=    #%Fwc5Qw7Mr7   r   r  r  r   r   	prog foo prog foo bar zprog foo foo bar r   r   s        r6   test_nargs_zero_or_morez'TestArgcomplete.test_nargs_zero_or_morey  sm    	 4589<= "@A	
 ,KCS!3!3KM3!GH#f+V ,r7   c           	          d }dg dfdg dfdddgfdg dff}|D ]>  \  }}| j                  t        | j                   |       |            t        |             @ y )	Nc                  l    t               } | j                  ddgd       | j                  ddg       | S )Nr  ?r  r  r   r   r   s    r6   r   z8TestArgcomplete.test_nargs_optional.<locals>.make_parser  s;    #%FwcBw7Mr7   r   r  r  r  r   r   z	prog bar r   r   s        r6   test_nargs_optionalz#TestArgcomplete.test_nargs_optional  sq    	 4589tX./89	
 ,KCS!3!3KM3!GH#f+V ,r7   c                 2   d }g d}d|fdddgfdddgfd|fd	d
dg|z   fd|fdddg|z   fdddg|z   fdddgfdddg|z   fdddgfdddgfddgfdddgff}|D ]>  \  }}| j                  t        | j                   |       |            t        |             @ y )Nc                     t               } | j                  dddgd       | j                  dddgd	       | j                  d
ddgd       | j                  dddgd       | j                  dddgt        j                         | S )Nr   foo1foo2r   r  r   bar1bar2r  --bazbaz1baz2r  --quxqux1qux2ra  --foobarpos--optr   r   rE  	REMAINDERr   s    r6   r   z8TestArgcomplete.test_optional_nargs.<locals>.make_parser  s    #%F&&1AK&&1AM&&1AM&&1AM
UG4DHL^L^_Mr7   )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         r6   test_optional_nargsz#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 ,r7   c           	          d }g d}dddg|z   fdddg|z   fdddgfdddgfd	ddgff}|D ]>  \  }}| j                  t        | j                   |       |            t        |             @ y )
Nc                      t               } | j                  dddg       | j                  dddgt        j                         | S )	Nr   r  r  r   	remainderr  r  r  r  r   s    r6   r   z>TestArgcomplete.test_positional_remainder.<locals>.make_parser  sG    #%F&&1ABeW5EXM_M_`Mr7   r   r   r  r  r  z	prog pos prog -- zprog -- --opt r   r  s         r6   test_positional_remainderz)TestArgcomplete.test_positional_remainder  s    	 , ug&01%!1G!;<5'*+%)*w/0
 ,KCS!3!3KM3!GH#f+V ,r7   c                     t        d      }|j                  ddg       | j                  | j                  |d      dg       y )NFr]  r   r   r   zprog --foo ----foo )r   r   r   r   )r.   r   s     r6   test_skipped_completerz&TestArgcomplete.test_skipped_completer  s@    /GgY7++FODxjQr7   c           	      t   d }dj                         }dj                         }d||||z   dgdfddgdgdgdgdfd	d
dgd
dgd
dgd
dgdfddgdgdgdgdff}|D ]Z  \  }}|j                         D ]B  \  }}| j                   |       ||      }	| j                  t	        |	      t	        |             D \ y )Nc                      t               } | j                  d       | j                  dd       | j                  dd       | j                  d       | j                  dd       | j                  d	       | S )
Nr   z-br   r  z--xyzz-tz-zz--zzzz-xr   r   s    r6   r   zGTestArgcomplete.test_optional_long_short_filtering.<locals>.make_parser  si    #%F(g.1%g.%Mr7   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
             r6   "test_optional_long_short_filteringz2TestArgcomplete.test_optional_long_short_filtering  s   	 AFFH	7==?
y:YQ[E[egdhijXJ(H:_g^hij$g.%w/"G,#W-	 UGugeWV[U\]^
 -LC3:==?/'++KM3Xo+p  Vc&k: 4C -r7   c           	          d }dg dfdg dfdddgfddd	gff}|D ]>  \  }}| j                  t        | j                   |       |            t        |             @ y )
Nc                      t        d      } | j                  dd       | j                         }|j                  dd       |j                  dd       | S )NFr]  r   
store_trueactionr   --no-barr   r   add_mutually_exclusive_groupr   groups     r6   r   z3TestArgcomplete.test_exclusive.<locals>.make_parser  sX    #U3F=779Ew|<z,?Mr7   r   r   r   r  r  r  r   r   prog --foo --no-bar r  r   r   s        r6   test_exclusivezTestArgcomplete.test_exclusive  su    	 45:;Wg./#gz%:;	
 ,KCS!3!3KM3!GH#f+V ,r7   c           	          d }dg dfdddgfddd	gfd
g dfddgff}|D ]>  \  }}| j                  t        | j                   |       |            t        |             @ y )Nc                      t        d      } | j                  dddg       | j                         }|j                  dd	       |j                  d
d	       | S )NFr]  r   name1name2r   --getr  r  --setr  r  s     r6   r   zCTestArgcomplete.test_mixed_optional_positional.<locals>.make_parser	  s]    #U3F'0BC779Ew|<w|<Mr7   r   )r  r  r  r  prog --r  r  r  r  r  zprog --get )r  r  r  zprog --get name1 z--get r   r   s        r6   test_mixed_optional_positionalz.TestArgcomplete.test_mixed_optional_positional  s    	 :;'*+'7+,78 8*-
 ,KCS!3!3KM3!GH#f+V ,r7   c                     d }| j                  | j                   |       d      dg       | j                  | j                   |       dd      dg       y )Nc                  F    t        d      } | j                  ddg       | S )NFr]  r  r  r   r   r   s    r6   r   z6TestArgcomplete.test_append_space.<locals>.make_parser  s&    #U3Fw7Mr7   r   zbar F)append_spacer  )r   r   r.   r   s     r6   test_append_spacez!TestArgcomplete.test_append_space  sS    	
 	++KM7CfXN++KM7QV+WZ_Y`ar7   c           
         t        d      }|j                  dddt               |j                  dddd	d
g       |j                  dddg       |j                  dd       t        |d      }dg dfdddgfdg dfdg dfdg dff}|D ];  \  }}| j	                  t        | j                  |||            t        |             = y )NFr]  r   typesappend_const)destr  constr   r  r  r  )r  r  r   r  r  r  r   r  r  r  Tr   r   )r   r   r  r  r  r  r  r  )r   r   r  zprog --foo --bar bar1 )r   )r   r   r   r   r   r   r   )r.   r   r   r   r   r   s         r6   test_exclusive_classz$TestArgcomplete.test_exclusive_class%  s    /G'.PSTG'(VU[L\]Gff-=>J|<-fdS	 =>VV,-!?@#%@A%'NO
 ,KCS!3!3FC9!3!UVX[\bXcd ,r7   c           	         d }| j                  t        | j                   |       d            dh       | j                  t        | j                   |       d            dh       | j                  t        | j                   |       d            dh       | j                  t        | j                   |       d            d	h       | j                  t        | j                   |       d
            dh       | j                  t        | j                   |       dd            dh       | j                  t        | j                   |       dd            dh       | j                  t        | j                   |       dd            dh       | j                  t        | j                   |       dd            dh       | j                  t        | j                   |       d
d            dh       y )Nc                      t        d      } | j                  ddg       | j                  ddg       | j                  dd	g       | S )
NFr]  z-1z	bar<$>bazr   z-2z\* z-3"'r   r   s    r6   r   z>TestArgcomplete.test_escape_special_chars.<locals>.make_parser:  sP    #U3F{m<vh7ug6Mr7   zprog -1 zbar\<\$\>baz zprog -2 z\\\*\  zprog -3 z\"\' z	prog -3 "z\"'z	prog -3 'z"'\''tcshr  z
bar<$>baz z\*  z"' r  r   r  s     r6   test_escape_special_charsz)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dr7   c                    t               5 }t        dgddd       }|j                  |j                                |j	                          t        j                  dd|j                  g       d d d        t               5 }t        ddgdddd	g      }|j                  |j                                |j	                          t        j                  dd|j                  g       d d d        t               5 }t        dgddd d
      }|j                  |j                                |j	                          t        j                  dd|j                  g       d d d        t        dgdddd	g      }t        dgdddd	g      }t        dgd      }t        dgdd
      }y # 1 sw Y   8xY w# 1 sw Y   xY w# 1 sw Y   dxY w)NprogTr   )use_defaultsr   complete_argumentsz-nprog2Fr  nospacez~/.bash_completion.d/prog.py)r  r   r  argcomplete_scriptr  wooshfishr  )r   r  )r   r   r=  encodeflush
subprocess
check_callr   )r.   rH  scs      r6   test_shellcode_utilityz&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%F06A#F<#F-0F9<Gc                    dt         j                  d<   dt         j                  d<   t               }|j                  ddt        z   dz          |j                  d	d
d       |j                         }|j                  dd       |j                  dd       | j                  |dd      }| j                  t        |      dh       | j                  |dd      }| j                  t        |      ddh       | j                  |dd      }| j                  t        |      ddh       dt         j                  d<   | j                  t        | j                  |dd       y )N	_ARGCOMPLETE_DFSry   _ARGCOMPLETE_SUPPRESS_SPACEr   r  r   r   r   z--bar2zbar helpr   zsubcommand helpzsubcommand 2zsubcommand 2 helpzprog --fr  r  z--foo	foo helpr   z--bar	bar helpz--bar2	bar helpzprog subzsubcommand	subcommand helpzsubcommand 2	subcommand 2 helpinvalid)rF   rG   r   r   r}   r  r  r   r   r   r   r%   )r.   r   r  r   s       r6   test_option_helpz 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Ur7   ))r8   r9   r:   r   r   r   r   r   r   r   r   r   r   r  r  r/  r@  rJ  rZ  re  rr  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r$  r^   r7   r6   rw   rw   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r7   rw   c                   >    e Zd Zd Zd Zd
dZd Zd Zd Zd Z	d	 Z
y)TestArgcompleteREPLc                      y rk   r^   rm   s    r6   r   zTestArgcompleteREPL.setUp      r7   c                      y rk   r^   rm   s    r6   r   zTestArgcompleteREPL.tearDown  r(  r7   Nc                 P    t        |      \  }}}}	}
|j                  |	|||
      }|S rk   )r   _get_completions)r.   r   r   r)   r   r/   cword_prequotecword_prefixcword_suffix
comp_wordsfirst_colon_posr   s               r6   r   z!TestArgcompleteREPL.run_completer  s5    R\]dReOlJ00\>[jkr7   c                 .   t               }|j                  d       |j                  d       t        |d      }| j                  ||d      }t	        |      t	        g d      k(  sJ | j                  ||d      }t	        |      t	        g d      k(  sJ y )	Nr   r   Tr   r   r   r  )r   r   r   )r   r   r   r   r   )r.   r   r   r   s       r6   test_repl_multiple_completez/TestArgcompleteREPL.test_repl_multiple_complete  s    	w	wQ=((Aw7;3'I#JJJJ((Ay9;3'C#DDDDr7   c                 8   t               }|j                  dd       |j                  ddg       t        |d      }| j                  ||d      }t	        |      t	        g d      k(  sJ |j                  g d	      }|j                  d
k(  sJ |j                  dk(  sJ | j                  t              5  |j                  dd
g       d d d        | j                  t              5  |j                  dg       d d d        y # 1 sw Y   :xY w# 1 sw Y   y xY w)Nr   T)requiredr  r   r   r   )r   r   r   r  )r   rl  r  rl  )
r   r   r   r   r   
parse_argsr  r  r   r   )r.   r   r   r   rJ   s        r6   test_repl_parse_after_completez2TestArgcompleteREPL.test_repl_parse_after_complete  s    	w.	uug.Q=((Aw7;3'G#HHHH||45xx6!!!xx5    z*LL'6*+ +z*LL%! +* +***s   7D(DDDc                    t               }|j                         j                  d      }|j                  ddg       t	        |d      }| j                  ||d      }t        |      t        g d      k(  sJ |j                  ddg      }|j                  dk(  sJ | j                  t              5  |j                  dg       d d d        y # 1 sw Y   y xY w)Nr  r  r   Tr   r  )r   r   r  )r   r  r  r   r   r   r   r5  r  r   r   )r.   r   spr   r   rJ   s         r6   (test_repl_subparser_parse_after_completez<TestArgcompleteREPL.test_repl_subparser_parse_after_complete  s    **51
w/Q=((A{;;3'>#????||UEN+xx5    z*LL%! +**s   2CCc           
      D   t               }|j                  d       |j                  d       |j                         }|j                  d       |j                  d       |j                  d      }d }|j                  d       |j                         }|j                  d      }|j	                  |	       t        |d
      }dg dfddgfdddgfdg dfddgfdddgff}|D ]:  \  }	}
| j                  t        | j                  |||	            t        |
             < y )Nr   r   r  r   showc                       y rk   r^   r^   r7   r6   rN  z5TestArgcompleteREPL.test_repl_subcommand.<locals>.abc  s    r7   --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;  rN  ssder   r   r   r   s              r6   test_repl_subcommandz(TestArgcompleteREPL.test_repl_subcommand  s"   	w	w	V	U||F#	 	(#  "]]7#
S!Q= OP	"'>?XJ'$!12
 ,KCS!3!3Aq#!>?VM ,r7   c           	         t               }|j                  dg d       |j                  dddg       t        |d      }| j                  t	        | j                  ||d	            t	        g d
             | j                  t	        | j                  ||d            t	        g d             | j                  t	        | j                  ||d	            t	        g d
             y )Nr  )aabbccr   r  rV  rW  Tr   r   )r   r   rE  rF  rG  zprog aa )r   r   rV  rW  )r   r   r   r   r   r   )r.   r   r   s      r6   &test_repl_reuse_parser_with_positionalz:TestArgcompleteREPL.test_repl_reuse_parser_with_positional  s    	u&89	usCj1Q=T//1g>?EgAhiT//1jABCHbDcdT//1g>?EgAhir7   rk   )r8   r9   r:   r   r   r   r2  r6  r9  rC  rH  r^   r7   r6   r&  r&    s.    E"(""N@jr7   r&  c                   f    e Zd Zd Zd Zd Zd Zd Zd Zd Z	e
j                  d        Zd	 Zd
 Zy)TestSplitLinec                     t         j                  | _        t         j                  j                         t         _        t        t         j                  d<   y )Nr~   )rF   rG   r   r   r   rm   s    r6   r   zTestSplitLine.setUp  s/    ::ZZ__&
5D

12r7   c                 .    | j                   t        _        y rk   r   rm   s    r6   r   zTestSplitLine.tearDown  r   r7   c                     t        |      d   S )Nr"   r   r.   lines     r6   rd   zTestSplitLine.prefix      $""r7   c                     t        |      d   S )Nr   r   rN  s     r6   	wordbreakzTestSplitLine.wordbreak  rP  r7   c                 F    | j                  | j                  d      d       y )Nza b cr   r   rd   rm   s    r6   test_simplezTestSplitLine.test_simple  s    W-s3r7   c                     | j                  | j                  d      d       | j                  | j                  d      d       y )Nza\$ba$bza\`ba`brT  rm   s    r6   test_escaped_specialz"TestSplitLine.test_escaped_special  s4    W-u5W-u5r7   c                     | j                  | j                  d      d       | j                  | j                  d      d       y )NrW  rX  rT  rm   s    r6   test_unescaped_specialz$TestSplitLine.test_unescaped_special  s4    U+U3U+U3r7   c                     | j                  | j                  d      d       | j                  | j                  d      d       y )Nz"a\$brW  z"a\`brX  rT  rm   s    r6   %test_escaped_special_in_double_quotesz3TestSplitLine.test_escaped_special_in_double_quotes
  s4    X.6X.6r7   c                 F    | j                  | j                  d      d       y )Nza,rT  rm   s    r6   test_punctuationzTestSplitLine.test_punctuation  s    T*D1r7   c                    | j                  | j                  d      d        | j                  | j                  d      d       | j                  | j                  d      d       | j                  | j                  d      d       | j                  | j                  d      d        | j                  | j                  d	      d        | j                  | j                  d
      d        | j                  | j                  d      d        | j                  | j                  d      d        | j                  | j                  d      d        | j                  | j                  d      d        y )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   rR  rm   s    r6   test_last_wordbreak_posz%TestSplitLine.test_last_wordbreak_pos  s   ,d3/30!4	2A6
3T:4d;.5/6148	2D9
3T:r7   N)r8   r9   r:   r   r   rd   rR  rU  rY  r[  unittestexpectedFailurer]  r_  ra  r^   r7   r6   rJ  rJ    sJ    E
&##464 7 72;r7   rJ  c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestCheckModulec                     t        dd      | _        | j                  j                          t        j                  j                  dt        j                                y )Ntest_dir_moduler   r2  r   )ra   re   rn   r   rR   insertrF   rg   rm   s    r6   r   zTestCheckModule.setUp!  s;    "3= 	299;'r7   c                 v    t         j                  j                  d       | j                  j	                          y )Nr   )r   rR   popre   rs   rm   s    r6   r   zTestCheckModule.tearDown)  s!    Qr7   c                     | j                  d       t        j                  d      }| j                  |t        j
                  j                  d             | j                  dt        j                         y )N	module.pymodule)
_mkfiler   findr   rF   rR   abspathassertNotInr   modulesr.   rR   s     r6   test_modulezTestCheckModule.test_module-  sO    [!!!(+rww{;<3;;/r7   c                 z   t        j                  d       | j                  d       | j                  d       t        j                  d      }| j                  |t         j                  j                  d             | j                  dt        j                         | j                  dt        j                         y )Npackagepackage/__init__.pyzpackage/module.pyzpackage.modulerF   rd  rn  r   ro  r   rR   rp  rq  r   rr  rs  s     r6   test_packagezTestCheckModule.test_package3  s    
*+()!!"23rww/BCDCKK0)3;;7r7   c                    t        j                  d       | j                  d       t        j                  d       | j                  d       | j                  d       t        j                  d      }| j                  |t         j                  j                  d             | j                  dt        j                         | j                  dt        j                         | j                  dt        j                         y )Nrv  rw  zpackage/subpackagezpackage/subpackage/__init__.pyzpackage/subpackage/module.pyzpackage.subpackage.modulezpackage.subpackagerx  rs  s     r6   test_subpackagezTestCheckModule.test_subpackage<  s    
*+
%&5634!!"=>rww/MNOCKK0-s{{;4ckkBr7   c                 :   t        j                  d       | j                  d       | j                  d       t        j                  d      }| j                  |t         j                  j                  d             | j                  dt        j                         y )Nrv  rw  zpackage/__main__.pyrx  rs  s     r6   test_package_mainz!TestCheckModule.test_package_mainH  sj    
*+*+!!),rww/DEFCKK0r7   c                     | j                  d       | j                  t        d      5  t        j                  d       d d d        | j                  dt        j                         y # 1 sw Y   *xY w)Nrl  zmodule is not a packagez
module.badrm  )rn  assertRaisesRegexr%   r   ro  rq  r   rr  rm   s    r6   test_not_packagez TestCheckModule.test_not_packageP  sQ    [!##I/HI|, J3;;/ JIs   A''A0c                 8    t        |d      j                          y )Nr8  )r<  closers  s     r6   rn  zTestCheckModule._mkfileV  s    T3r7   N)r8   r9   r:   r   r   rt  ry  r{  r}  r  rn  r^   r7   r6   re  re     s+    (08
C10 r7   re  c                        e Zd ZdZdZg Zg Ze fd       Zd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )TestShellBasea  
    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                 6   | j                   D ]3  }t        | |      }t        j                  |fd       }t	        | ||       5 | j
                  D ]8  }t        | |      }t        j                  d      |fd       }t	        | ||       : t        |    |i | y )Nc                      ||        y rk   r^   r.   r9  s     r6   wrappedz)TestShellBase.setUpClass.<locals>.wrappedx  s	    T
r7   skipc                      y rk   r^   r  s     r6   r  z)TestShellBase.setUpClass.<locals>.wrapped  s    r7   )	expected_failuresgetattrrb  rc  setattrskippedr  r&   
setUpClass)clsrJ   r/   r   r9  r  r5   s         r6   r  zTestShellBase.setUpClasss  s    ))D3%D%%#'  & Cw' * KKD3%D]]6"#'  # Cw'   	D+F+r7   c                     t         rk   )NotImplementedErrorrm   s    r6   r   zTestShellBase.setUp  s    !!r7   c                     | j                  t        j                  t        f      5  | j                  j                  d       d d d        y # 1 sw Y   y xY w)Nr   )r   rH   EOFOSErrorrW   r'   rm   s    r6   r   zTestShellBase.tearDown  s7    W56GG' 766s   AAc                 Z    | j                  | j                  j                  d      d       y )Nprog basic f	foo
r   rW   r'   rm   s    r6   test_simple_completionz$TestShellBase.test_simple_completion  s"    ,,-=>	Jr7   c                 Z    | j                  | j                  j                  d      d       y )Nzprog basic b	rzbar
r  rm   s    r6   test_partial_completionz%TestShellBase.test_partial_completion  "    ,,->?Kr7   c                 Z    | j                  | j                  j                  d      d       y )Nzprog basic 'f	r  r  rm   s    r6   test_single_quoted_completionz+TestShellBase.test_single_quoted_completion  r  r7   c                 Z    | j                  | j                  j                  d      d       y )Nzprog basic "f	r  r  rm   s    r6   test_double_quoted_completionz+TestShellBase.test_double_quoted_completion  r  r7   c                 Z    | j                  | j                  j                  d      d       y )Nzprog space f		foo bar
r  rm   s    r6   test_unquoted_spacez!TestShellBase.test_unquoted_space  s"    ,,-=>Nr7   c                 Z    | j                  | j                  j                  d      d       y )Nzprog space "f	r  r  rm   s    r6   test_quoted_spacezTestShellBase.test_quoted_space  s"    ,,->?Or7   c                 \   | j                  | j                  j                  d      d       | j                  | j                  j                  d      d       | j                  | j                  j                  d      d       | j                  | j                  j                  d      d       y )	Nzprog basic f	--r  zprog cont f	--zfoo=--
zprog cont bar	--zbar/--
zprog cont baz	--zbaz:--
r  rm   s    r6   test_continuationzTestShellBase.test_continuation  s    ,,-?@)L,,->?N,,-@A<P,,-@A<Pr7   c                 Z    | j                  | j                  j                  d      d       y )Nzprog basic "f	--r  r  rm   s    r6   test_quoted_exactzTestShellBase.test_quoted_exact  s"    ,,-@A9Mr7   c                    | j                  | j                  j                  d      d       | j                  | j                  j                  d      d       | j                  | j                  j                  d      d       y )Nzprog spec d	fd$e$f
zprog spec x	x!x
zprog spec y	zy\y
r  rm   s    r6   test_special_charactersz%TestShellBase.test_special_characters  s`    ,,-=>L,,_=yI,,_=zJr7   c                 Z    | j                  | j                  j                  d      d       y )Nzprog spec 'd	f'r  r  rm   s    r6   %test_special_characters_single_quotedz3TestShellBase.test_special_characters_single_quoted  "    ,,-?@+Nr7   c                 Z    | j                  | j                  j                  d      d       y )Nzprog spec "d	f"r  r  rm   s    r6   %test_special_characters_double_quotedz3TestShellBase.test_special_characters_double_quoted  r  r7   c                    | j                  | j                  j                  d      d       | j                  | j                  j                  d      d       | j                  | j                  j                  d      d       y )Nzprog spec d$e$	fr  zprog spec d$e	fzprog spec 'd$e	f	r  rm   s    r6   test_parse_special_charactersz+TestShellBase.test_parse_special_characters  sb    ,,-@A;O,,-?@+N,,-BC[Qr7   c                 Z    | j                  | j                  j                  d      d       y )Nzprog spec "d$e	f	r  r  rm   s    r6   $test_parse_special_characters_dollarz2TestShellBase.test_parse_special_characters_dollar  s"    ,,-BC[Qr7   c                 Z    | j                  | j                  j                  d      d       y )Nzprog spec "x	r  r  rm   s    r6   !test_exclamation_in_double_quotesz/TestShellBase.test_exclamation_in_double_quotes  s$     	,,-=>	Jr7   c                     | j                  | j                  j                  d      d       | j                  | j                  j                  d      d       y )Nzprog quote 1	1'1
zprog quote 2	z2"2
r  rm   s    r6   test_quoteszTestShellBase.test_quotes  sB    ,,-=>	J,,-=>	Jr7   c                 Z    | j                  | j                  j                  d      d       y )Nzprog quote "1	r  r  rm   s    r6   #test_single_quotes_in_double_quotesz1TestShellBase.test_single_quotes_in_double_quotes  r  r7   c                 Z    | j                  | j                  j                  d      d       y )Nzprog quote '1	r  r  rm   s    r6   #test_single_quotes_in_single_quotesz1TestShellBase.test_single_quotes_in_single_quotes  s$     	,,->?Kr7   c                 ^   | j                  | j                  j                  d      d       | j                  | j                  j                  d      d       | j                  | j                  j                  d      d       | j                  | j                  j                  d      d       | j                  | j                  j                  d      d       | j                  | j                  j                  d      d       | j                  | j                  j                  d      d       y )	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  rm   s    r6   test_wordbreak_charsz"TestShellBase.test_wordbreak_chars  s    ,,->?M,,-ABKP,,-@A;O,,-@A;O,,-CDkR,,-@A;O,,-CDkRr7   c                 Z    | j                  | j                  j                  d      d       y )Nzprog env o	zok
r  rm   s    r6   test_completion_environmentz)TestShellBase.test_completion_environment  s!    ,,^<hGr7   c                    | j                  | j                  j                  d      d       | j                  | j                  j                  d      d       | j                  | j                  j                  d      d       | j                  | j                  j                  d      d       | j                  | j                  j                  d	      d
       y )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  rm   s    r6   test_comp_pointzTestShellBase.test_comp_point  s    ,,-=>C,,->?J,,-?@(K,,-HI8T,,-IJHUr7   ) r8   r9   r:   ru   rW   r  r  classmethodr  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   @r6   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r7   r  c                       e Zd ZdZdZdZd Zy)TestBashZshBaseNz0eval "$(register-python-argcomplete dummy prog)"c                    | j                         }|j                  d      }| j                  |d       dj                  t        j
                  j                  t        d      t        dg      }|j                  dj                  |             |j                  dj                  t                     | j                  -|j                  | j                        }| j                  |d       | j                  -|j                  | j                        }| j                  |d       |j                  d	      }| j                  |d       || _        y )
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   rS   rF   rR   BASE_DIRTEST_DIRformatinit_cmdinstall_cmdrW   )r.   rW   r   rR   s       r6   r   zTestBashZshBase.setUp  s   !--xxh	:HgNO
(//56
.55h?@==$^^DMM2FVR('^^D$4$45FVR(  qr$r7   )r8   r9   r:   maxDiffr  r  r   r^   r7   r6   r  r    s    GH EKr7   r  c                   ^    e Zd ZddgZedk  rej                  d       d Zd Zd Zd Z	d	 Z
y
)TestBashr  r  r   r  c                     t               S rk   )rX   rm   s    r6   r  zTestBash.repl_provider
  s
    {r7   c                 ^    | j                   j                  d      }| j                  |d       y)z8Test exactly one space is appended after an exact match.zprog basic f	"echo "zprog basic foo 
N)rW   r'   r   )r.   r  s     r6   test_one_space_after_exactz#TestBash.test_one_space_after_exact  s*     $$%>?!67r7   c                 N   | j                  | j                  j                  d      d       | j                  j                  d       | j                  j                  d      }| j                  d|       | j                  d|       | j	                  |j                  d             y )Nzprog debug f	r  export _ARC_DEBUG=1zPYTHON_ARGCOMPLETE_STDOUT
zPYTHON_ARGCOMPLETE_STDERR
)r   rW   r'   assertIn
assertTrueendswithr.   r   s     r6   test_debug_outputzTestBash.test_debug_output  s}    ,,-=>	J12$$%565v>5v>	23r7   c                     | j                   j                  d       | j                  | j                   j                  d      d       | j                   j                  d       | j                   j                  d      }| j                  d|       y )Nz"export ARGCOMPLETE_USE_TEMPFILES=1r  r  r  zUsing output file )rW   r'   r   r  r  s     r6   test_temp_filezTestBash.test_temp_file  sl    @A,,-=>	J12$$%56*F3r7   c                 Z    | j                   j                  d       | j                          y )Nzset -o nounset)rW   r'   r  rm   s    r6   test_nounsetzTestBash.test_nounset#  s!    ,-##%r7   N)r8   r9   r:   r  BASH_MAJOR_VERSIONr  r  r  r  r  r  r^   r7   r6   r  r    sB    .+ A  !45844&r7   r  c                       e Zd ZdZg dZd Zy)TestZshzautoload compinit; compinit -u)r  r  r  r  c                     t               S rk   )rZ   rm   s    r6   r  zTestZsh.repl_provider2  s
    zr7   N)r8   r9   r:   r  r  r  r^   r7   r6   r  r  (  s    /HGr7   r  c                   T    e Zd ZdZd Zd Zd Zd Zd Zd Z	ddZ
d	 Zd
 Zd Zd Zy)TestBashZshGlobalBasez5eval "$(activate-global-python-argcomplete --dest=-)"c                    t        dd      5  | j                  j                  dt        j                         z          | j                  j                  d       | j                  j                  d       t        d      5 }|j                         }d d d        | j                  d       d d d        y # 1 sw Y   $xY w# 1 sw Y   y xY w)	Ntest_dir_pyr   r2  cd zecho failure > ./foo.txtzecho success > ./foo.	zfoo.txtzsuccess
)ra   rW   r'   rF   rg   r<  r   r   )r.   fmsgs      r6   test_redirection_completionz1TestBashZshGlobalBase.test_redirection_completion9  s    Ms3GG		 34GG :;GG 9:iAffh !S+. 43 !	 43s$   A2C  B4C 4B=	9C  C	c                     | j                   j                  dt        z          | j                  | j                   j                  d      d       y )Nr  python3 ./prog basic f	r  rW   r'   r  r   rm   s    r6   test_python_completionz,TestBashZshGlobalBase.test_python_completionB  9    EH,-,,-GH)Tr7   c                     | j                   j                  dt        z          | j                  | j                   j                  d      d       y )Nr  zpython3 ./pro	basic f	r  r  rm   s    r6   test_python_filename_completionz5TestBashZshGlobalBase.test_python_filename_completionF  r  r7   c                 ~    | j                   j                  dt        z          | j                   j                  d       y )Nr  zpython3 ./stuck no	-input)rW   r'   r  rm   s    r6   test_python_stuckz'TestBashZshGlobalBase.test_python_stuckJ  s,    EH,-89r7   c                    t         j                  j                  t        d      }t	        dd      5  t        j                  |d       | j                  j                  dt        j                         z          | j                  j                  d       | j                  d| j                  j                  d             | j                  | j                  j                  d	      d
       ddd       y# 1 sw Y   yxY w)z5Test completing a script that cannot be run directly.r  r  r   r2  r  zchmod -x ./progz<<126>>z./prog; echo "<<$?>>"r  r  N)rF   rR   rS   r  ra   rp   r   rW   r'   rg   r  r   r.   r  s     r6   test_python_not_executablez0TestBashZshGlobalBase.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   B8C33C<c                    t         j                  j                  t        d      }t	        dd      5  t        j
                  d       t        dd      j                          t        j                  |d       | j                  j                  d	t        j                         z          | j                  | j                  j                  d
      d       ddd       y# 1 sw Y   yxY w)z,Test completing a module run with python -m.r  r  r   r2  rv  rw  r8  zpackage/prog.pyr  z python3 -m package.prog basic f	r  N)rF   rR   rS   r  ra   rd  r<  r  rp   r   rW   r'   rg   r   r  s     r6   test_python_modulez(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                    t        dd      5  | j                  j                  dt        j                         z          | j                  j                  d       | j                  j                  d       t        j
                  j                  t        d      }dj                  |      }|s|d	z  }| j                  j                  |      }| j                  | j                  j                  d
      d|       d}|rd}|dz  }| j                  | j                  j                  |      d       d d d        y # 1 sw Y   y xY w)Nr  r   r2  r  zexport PATH=$PATH:./binzexport PYTHONPATH=.:$PYTHONPATHry  zpip install {} --target .z --no-binary :all:zecho $?z0
ztest-moduleztest-packagez a	zarg
)
ra   rW   r'   rF   rg   rR   rS   r  r  r   )r.   rv  wheelry  r)   install_outputs         r6   _test_console_scriptz*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 D77E c                 $    | j                          y)z.Test completing a console_script for a module.Nr  rm   s    r6   test_console_script_modulez0TestBashZshGlobalBase.test_console_script_moduleu  s    !!#r7   c                 (    | j                  d       y)z/Test completing a console_script for a package.T)rv  Nr  rm   s    r6   test_console_script_packagez1TestBashZshGlobalBase.test_console_script_packagey  s    !!$!/r7   c                 (    | j                  d       y)z;Test completing a console_script for a module from a wheel.T)r  Nr  rm   s    r6    test_console_script_module_wheelz6TestBashZshGlobalBase.test_console_script_module_wheel}  s    !!!-r7   c                 *    | j                  dd       y)z<Test completing a console_script for a package from a wheel.T)rv  r  Nr  rm   s    r6   !test_console_script_package_wheelz7TestBashZshGlobalBase.test_console_script_package_wheel  s    !!$d!;r7   N)FF)r8   r9   r:   r  r  r  r  r  r  r  r  r  r  r  r
  r^   r7   r6   r  r  6  sC    IK/UU:
YbF"$0.<r7   r  r   zcomplete -D not supportedc                       e Zd Zy)TestBashGlobalNr8   r9   r:   r^   r7   r6   r  r    s    r7   r  c                       e Zd Zy)TestZshGlobalExplicitNr  r^   r7   r6   r  r    s    r7   r  c                       e Zd Zej                  j                  ej                  j                  ej                  j                  ej                              d      Z
de
 dZdZy)TestZshGlobalImplicitzbash_completion.dzfpath=( z0 "${fpath[@]}" ); autoload compinit; compinit -uN)r8   r9   r:   rF   rR   rS   rp  rT   argcompleterU   	zsh_fpathr  r  r^   r7   r6   r  r    sM     RWW__RWW__[=Q=Q-RSUhiI)$VWHKr7   r  c                       e Zd Zd Zd Zy)Shellc                 <    t        j                  |d      | _        y )NrA   )rC   )rH   rI   r(   )r.   r   s     r6   ri   zShell.__init__  s    ]]57;
r7   c                 n   	 | j                   j                  dj                  |             | j                   j                  dd       | j                   j                  dd       | j                   j                  | j                   j                  d       S # | j                   j                  d       w xY w)Nz#echo -n \#\#\#; {0}; echo -n \#\#\#z###rD   )timeout)r(   sendliner  expect_exactbefore)r.   r)   s     r6   r'   zShell.run_command  s    	(JJ F M Mg VWJJ##E1#5JJ##E1#5::$$ JJ'DJJ's   A9B B4N)r8   r9   r:   ri   r'   r^   r7   r6   r  r    s    <(r7   r  c                       e Zd Zd Zy)Warnc                     t         j                  d        }t               } ||      5  t        d       d d d        | j	                  d|j                                y # 1 sw Y   *xY w)Nc              3      K   t         j                  j                  }| t         j                  _        	 d  |t         j                  _        y # |t         j                  _        w xY wwrk   )r  iodebug_stream)streamr"  s     r6   redirect_debug_streamz-Warn.test_warn.<locals>.redirect_debug_stream  sA     &>>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      r6   	test_warnzWarn.test_warn  s^    		"	"	; 
#	; j";/$% 0 	0+2F2F2HI 0/s   AA'N)r8   r9   r:   r)  r^   r7   r6   r  r    s    Jr7   r  __main__)r   )r!   )NrE  r%  rF   os.pathr+   rp   r  r   rb  unittest.utilr!  r   tempfiler   r   r   rH   pexpect.replwrapr   r   r	   rR   rp  rT   rU   r  r  rh  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*   r  r   rO   rX   rZ   r_   ra   TestCaserw   r&  rJ  re  r  r  r  r  r  skipIfr  r  r  r  r  r8   mainr^   r7   r6   <module>r:     sB     	  	   
    ? ?  U U77??277??84577??8$ 8  -    [ Z ) ! $&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HMMO r7   