1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-01-19 11:31:26 +01:00
zsh/Test/Y03arguments.ztst

248 lines
5.5 KiB
Text

# Tests for _arguments.
%prep
if [[ $OSTYPE = cygwin ]]; then
ZTST_unimplemented="the zsh/zpty module does not work on Cygwin"
elif ( zmodload zsh/zpty 2>/dev/null ); then
. $ZTST_srcdir/comptest
mkdir comp.tmp
cd comp.tmp
comptestinit -z $ZTST_testdir/../Src/zsh &&
{
comptesteval 'compdef _tst tst'
tst_arguments () { comptesteval "_tst () { _arguments ${${(@qq)*}} }" }
}
else
ZTST_unimplemented="the zsh/zpty module is not available"
fi
%test
tst_arguments ':desc1:(arg1)'
comptest $'tst \t\C-wa\t\C-war\t\C-warg\t\C-warg1\t\C-wr\t\C-wx\t \ty \t'
0:one non-option argument
>line: {tst arg1 }{}
>line: {tst arg1 }{}
>line: {tst arg1 }{}
>line: {tst arg1 }{}
>line: {tst arg1 }{}
>line: {tst r}{}
>line: {tst x}{}
>line: {tst x }{}
>MESSAGE:{no more arguments}
>line: {tst x y }{}
>MESSAGE:{no more arguments}
tst_arguments ':desc1:(a b)'
comptest $'tst \t'
0:a and b
>line: {tst }{}
>DESCRIPTION:{desc1}
>NO:{a}
>NO:{b}
tst_arguments ':desc1:(arg1)' ':desc2:(arg2)' ':desc3:(arg3)'
comptest $'tst \t\t\t\C-w\C-w\C-w\C-d'
0:three arguments
>line: {tst arg1 }{}
>line: {tst arg1 arg2 }{}
>line: {tst arg1 arg2 arg3 }{}
>DESCRIPTION:{desc1}
>NO:{arg1}
tst_arguments '1:desc1:(arg1)'
comptest $'tst \t\t'
0:first argument
>line: {tst arg1 }{}
>line: {tst arg1 }{}
>MESSAGE:{no more arguments}
tst_arguments '-\+[opt]'
comptest $'tst -\C-d'
0:-+
>DESCRIPTION:{option}
>NO:{-+ -- opt}
tst_arguments -+o
comptest $'tst -\t\t\t\C-w\C-w+\t\t\t'
0:option beginning with + and -.
>line: {tst -o }{}
>line: {tst -o +o }{}
>line: {tst -o +o }{}
>MESSAGE:{no arguments}
>line: {tst +o }{}
>line: {tst +o -o }{}
>line: {tst +o -o }{}
>MESSAGE:{no arguments}
tst_arguments '-o:1:(a):2:(b)'
comptest $'tst \t\t\t'
0:two option arguments
>line: {tst -o }{}
>line: {tst -o a }{}
>line: {tst -o a b }{}
tst_arguments '-x:arg:'
comptest $'tst -x\t'
0:sticky option argument
>line: {tst -x }{}
tst_arguments '-x[desc]'
comptest $'tst -x\t'
0:end of option sequence
>line: {tst -x }{}
tst_arguments '-x' ':arg:'
comptest $'tst -\t'
0:argument beginning with minus
>line: {tst -}{}
>DESCRIPTION:{arg}
>DESCRIPTION:{option}
>NO:{-x}
tst_arguments '-o::optarg:(oa)' ':arg1:(a1)'
comptest $'tst -o\t\t'
0:optional option argument
>line: {tst -o }{}
>line: {tst -o }{}
>DESCRIPTION:{optarg}
>NO:{oa}
>DESCRIPTION:{arg1}
>NO:{a1}
tst_arguments '-o:*a:a:(a)' ':A:(A)' ':B:(B)'
comptest $'tst A -o a \t'
0:variable length option arguments
>line: {tst A -o a B }{}
tst_arguments -s '-a' '-b' ':descr:{compadd - $+opt_args[-a]}'
comptest $'tst -ab \t'
0:opt_args
>line: {tst -ab 1 }{}
tst_arguments '-a:one: :two' ':descr:{compadd -Q - $opt_args[-a]}'
comptest $'tst -a 1:x \\2 \t'
0:opt_args with multiple arguments and quoting of colons and backslashes
>line: {tst -a 1:x \2 1\:x:\\2 }{}
tst_arguments '-a' '*::rest:{compadd - -b}'
comptest $'tst arg -\t'
0:rest arguments
>line: {tst arg -b }{}
tst_arguments '-e:*last:::b:{compadd "${(j:,:)words}"}' ':arg1:(arg1)'
comptest $'tst -\t\tla\t\C-hst\t\t\eb\eb\C-b\t\t'
0:words array in rest arguments
>line: {tst -e }{}
>line: {tst -e }{}
>line: {tst -e la }{}
>line: {tst -e last }{}
>line: {tst -e last arg1 }{}
>line: {tst -e ,last }{ last arg1}
>line: {tst -e ,last ,last,,last }{ last arg1}
tst_arguments -s '-d+:msg1:' '*::msg2:{compadd $CURRENT}'
comptest $'tst add \t\t\t'
0:opt_args
>line: {tst add 2 }{}
>line: {tst add 2 3 }{}
>line: {tst add 2 3 4 }{}
tst_arguments -s '-a' '-b' '-c' ':words:compadd - abyyy abzzz'
comptest $'tst ab\t'
0:options and words (zsh-workers:12257)
>line: {tst ab}{}
>DESCRIPTION:{words}
>NO:{abyyy}
>NO:{abzzz}
tst_arguments -x :word
comptest $'tst -- -\t'
0:option after --
>line: {tst -- -x }{}
tst_arguments -S -x ':word:()'
comptest $'tst -- -\t'
0:disallowed option after --
>line: {tst -- -}{}
tst_arguments -S -x ':word:()'
comptest $'tst - --\eB\C-b\t'
0:allowed option before --
>line: {tst -x }{ --}
tst_arguments -x :word
comptest $'tst word -\t'
0:option after a word
>line: {tst word -x }{}
tst_arguments -A '-*' -x :word
comptest $'tst word -\t'
0:option after word that doesn't match -A pattern
>line: {tst word -}{}
>MESSAGE:{no more arguments}
tst_arguments -A '-*' -x ':word:(-word)'
comptest $'tst word\eB\C-b-\t'
0:option before a word that doesn't match -A pattern
>line: {tst -}{ word}
>DESCRIPTION:{word}
>NO:{-word}
>DESCRIPTION:{option}
>NO:{-x}
tst_arguments -A '-*' -h -V -a '*: :(-x more)'
comptest $'tst -a -x m\t'
0:continue completion after rest argument that looks like an option
>line: {tst -a -x more }{}
tst_arguments -A '-*' - help -h -V - other -a '*: :(-x more)'
comptest $'tst -a -x m\t'
0:continue completion after rest argument that looks like an option (with sets)
>line: {tst -a -x more }{}
tst_arguments '(-v)-a' '(set1--m -a)-b' - '(set1)' -m -n - set2 -v -w
comptest $'tst -a -\t' $'\C-w\C-w-'{b,m,v}$' -\t'
0:exclusion lists
>line: {tst -a -}{}
>DESCRIPTION:{option}
>NO:{-b}
>NO:{-m}
>NO:{-n}
>NO:{-w}
>line: {tst -b -}{}
>DESCRIPTION:{option}
>NO:{-n}
>NO:{-v}
>NO:{-w}
>line: {tst -m -}{}
>DESCRIPTION:{option}
>NO:{-a}
>NO:{-b}
>NO:{-v}
>NO:{-w}
>line: {tst -v -}{}
>DESCRIPTION:{option}
>NO:{-a}
>NO:{-b}
>NO:{-m}
>NO:{-n}
>NO:{-w}
tst_arguments '(-)-h' -a -b -c
comptest $'tst -h -\t'
0:exclude all other options
>line: {tst -h -}{}
>MESSAGE:{no arguments}
# this would ideally not offer -b as it is already on the command-line
tst_arguments -a '(-a)-b'
comptest $'tst - -b\C-b\C-b\C-b\t'
0:exclusion only applies to later words
>line: {tst -}{ -b}
>DESCRIPTION:{option}
>NO:{-a}
>NO:{-b}
%clean
zmodload -ui zsh/zpty