tests: add initial bash completion tests
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
36e6c803a1
commit
5c293a6be4
120
t/t9902-completion.sh
Executable file
120
t/t9902-completion.sh
Executable file
@ -0,0 +1,120 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2012 Felipe Contreras
|
||||||
|
#
|
||||||
|
|
||||||
|
if test -n "$BASH" && test -z "$POSIXLY_CORRECT"; then
|
||||||
|
# we are in full-on bash mode
|
||||||
|
true
|
||||||
|
elif type bash >/dev/null 2>&1; then
|
||||||
|
# execute in full-on bash mode
|
||||||
|
unset POSIXLY_CORRECT
|
||||||
|
exec bash "$0" "$@"
|
||||||
|
else
|
||||||
|
echo '1..0 #SKIP skipping bash completion tests; bash not available'
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
test_description='test bash completion'
|
||||||
|
|
||||||
|
. ./test-lib.sh
|
||||||
|
|
||||||
|
complete ()
|
||||||
|
{
|
||||||
|
# do nothing
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
. "$GIT_BUILD_DIR/contrib/completion/git-completion.bash"
|
||||||
|
|
||||||
|
# We don't need this function to actually join words or do anything special.
|
||||||
|
# Also, it's cleaner to avoid touching bash's internal completion variables.
|
||||||
|
# So let's override it with a minimal version for testing purposes.
|
||||||
|
_get_comp_words_by_ref ()
|
||||||
|
{
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
case "$1" in
|
||||||
|
cur)
|
||||||
|
cur=${_words[_cword]}
|
||||||
|
;;
|
||||||
|
prev)
|
||||||
|
prev=${_words[_cword-1]}
|
||||||
|
;;
|
||||||
|
words)
|
||||||
|
words=("${_words[@]}")
|
||||||
|
;;
|
||||||
|
cword)
|
||||||
|
cword=$_cword
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
print_comp ()
|
||||||
|
{
|
||||||
|
local IFS=$'\n'
|
||||||
|
echo "${COMPREPLY[*]}" > out
|
||||||
|
}
|
||||||
|
|
||||||
|
run_completion ()
|
||||||
|
{
|
||||||
|
local -a COMPREPLY _words
|
||||||
|
local _cword
|
||||||
|
_words=( $1 )
|
||||||
|
(( _cword = ${#_words[@]} - 1 ))
|
||||||
|
_git && print_comp
|
||||||
|
}
|
||||||
|
|
||||||
|
test_completion ()
|
||||||
|
{
|
||||||
|
test $# -gt 1 && echo "$2" > expected
|
||||||
|
run_completion "$@" &&
|
||||||
|
test_cmp expected out
|
||||||
|
}
|
||||||
|
|
||||||
|
test_expect_success 'basic' '
|
||||||
|
run_completion "git \"\"" &&
|
||||||
|
# built-in
|
||||||
|
grep -q "^add \$" out &&
|
||||||
|
# script
|
||||||
|
grep -q "^filter-branch \$" out &&
|
||||||
|
# plumbing
|
||||||
|
! grep -q "^ls-files \$" out &&
|
||||||
|
|
||||||
|
run_completion "git f" &&
|
||||||
|
! grep -q -v "^f" out
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'double dash "git" itself' '
|
||||||
|
sed -e "s/Z$//" >expected <<-\EOF &&
|
||||||
|
--paginate Z
|
||||||
|
--no-pager Z
|
||||||
|
--git-dir=
|
||||||
|
--bare Z
|
||||||
|
--version Z
|
||||||
|
--exec-path Z
|
||||||
|
--html-path Z
|
||||||
|
--work-tree=
|
||||||
|
--namespace=
|
||||||
|
--help Z
|
||||||
|
EOF
|
||||||
|
test_completion "git --"
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'double dash "git checkout"' '
|
||||||
|
sed -e "s/Z$//" >expected <<-\EOF &&
|
||||||
|
--quiet Z
|
||||||
|
--ours Z
|
||||||
|
--theirs Z
|
||||||
|
--track Z
|
||||||
|
--no-track Z
|
||||||
|
--merge Z
|
||||||
|
--conflict=
|
||||||
|
--orphan Z
|
||||||
|
--patch Z
|
||||||
|
EOF
|
||||||
|
test_completion "git checkout --"
|
||||||
|
'
|
||||||
|
|
||||||
|
test_done
|
Loading…
Reference in New Issue
Block a user