Browse Source
By Felipe Contreras (4) and others * fc/completion-tests: completion: fix completion after 'git --option <TAB>' completion: avoid trailing space for --exec-path completion: add missing general options completion: simplify by using $prev completion: simplify __gitcomp_1 tests: add tests for the __gitcomp() completion helper function tests: add initial bash completion testsmaint
![gitster@pobox.com](/assets/img/avatar_default.png)
2 changed files with 256 additions and 9 deletions
@ -0,0 +1,243 @@ |
|||||||
|
#!/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 |
||||||
|
} |
||||||
|
|
||||||
|
newline=$'\n' |
||||||
|
|
||||||
|
test_expect_success '__gitcomp - trailing space - options' ' |
||||||
|
sed -e "s/Z$//" >expected <<-\EOF && |
||||||
|
--reuse-message=Z |
||||||
|
--reedit-message=Z |
||||||
|
--reset-author Z |
||||||
|
EOF |
||||||
|
( |
||||||
|
local -a COMPREPLY && |
||||||
|
cur="--re" && |
||||||
|
__gitcomp "--dry-run --reuse-message= --reedit-message= |
||||||
|
--reset-author" && |
||||||
|
IFS="$newline" && |
||||||
|
echo "${COMPREPLY[*]}" > out |
||||||
|
) && |
||||||
|
test_cmp expected out |
||||||
|
' |
||||||
|
|
||||||
|
test_expect_success '__gitcomp - trailing space - config keys' ' |
||||||
|
sed -e "s/Z$//" >expected <<-\EOF && |
||||||
|
branch.Z |
||||||
|
branch.autosetupmerge Z |
||||||
|
branch.autosetuprebase Z |
||||||
|
browser.Z |
||||||
|
EOF |
||||||
|
( |
||||||
|
local -a COMPREPLY && |
||||||
|
cur="br" && |
||||||
|
__gitcomp "branch. branch.autosetupmerge |
||||||
|
branch.autosetuprebase browser." && |
||||||
|
IFS="$newline" && |
||||||
|
echo "${COMPREPLY[*]}" > out |
||||||
|
) && |
||||||
|
test_cmp expected out |
||||||
|
' |
||||||
|
|
||||||
|
test_expect_success '__gitcomp - option parameter' ' |
||||||
|
sed -e "s/Z$//" >expected <<-\EOF && |
||||||
|
recursive Z |
||||||
|
resolve Z |
||||||
|
EOF |
||||||
|
( |
||||||
|
local -a COMPREPLY && |
||||||
|
cur="--strategy=re" && |
||||||
|
__gitcomp "octopus ours recursive resolve subtree |
||||||
|
" "" "re" && |
||||||
|
IFS="$newline" && |
||||||
|
echo "${COMPREPLY[*]}" > out |
||||||
|
) && |
||||||
|
test_cmp expected out |
||||||
|
' |
||||||
|
|
||||||
|
test_expect_success '__gitcomp - prefix' ' |
||||||
|
sed -e "s/Z$//" >expected <<-\EOF && |
||||||
|
branch.maint.merge Z |
||||||
|
branch.maint.mergeoptions Z |
||||||
|
EOF |
||||||
|
( |
||||||
|
local -a COMPREPLY && |
||||||
|
cur="branch.me" && |
||||||
|
__gitcomp "remote merge mergeoptions rebase |
||||||
|
" "branch.maint." "me" && |
||||||
|
IFS="$newline" && |
||||||
|
echo "${COMPREPLY[*]}" > out |
||||||
|
) && |
||||||
|
test_cmp expected out |
||||||
|
' |
||||||
|
|
||||||
|
test_expect_success '__gitcomp - suffix' ' |
||||||
|
sed -e "s/Z$//" >expected <<-\EOF && |
||||||
|
branch.master.Z |
||||||
|
branch.maint.Z |
||||||
|
EOF |
||||||
|
( |
||||||
|
local -a COMPREPLY && |
||||||
|
cur="branch.me" && |
||||||
|
__gitcomp "master maint next pu |
||||||
|
" "branch." "ma" "." && |
||||||
|
IFS="$newline" && |
||||||
|
echo "${COMPREPLY[*]}" > out |
||||||
|
) && |
||||||
|
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 |
||||||
|
--exec-path= |
||||||
|
--html-path Z |
||||||
|
--info-path Z |
||||||
|
--work-tree= |
||||||
|
--namespace= |
||||||
|
--no-replace-objects Z |
||||||
|
--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_expect_success 'general options' ' |
||||||
|
test_completion "git --ver" "--version " && |
||||||
|
test_completion "git --hel" "--help " && |
||||||
|
sed -e "s/Z$//" >expected <<-\EOF && |
||||||
|
--exec-path Z |
||||||
|
--exec-path= |
||||||
|
EOF |
||||||
|
test_completion "git --exe" && |
||||||
|
test_completion "git --htm" "--html-path " && |
||||||
|
test_completion "git --pag" "--paginate " && |
||||||
|
test_completion "git --no-p" "--no-pager " && |
||||||
|
test_completion "git --git" "--git-dir=" && |
||||||
|
test_completion "git --wor" "--work-tree=" && |
||||||
|
test_completion "git --nam" "--namespace=" && |
||||||
|
test_completion "git --bar" "--bare " && |
||||||
|
test_completion "git --inf" "--info-path " && |
||||||
|
test_completion "git --no-r" "--no-replace-objects " |
||||||
|
' |
||||||
|
|
||||||
|
test_expect_success 'general options plus command' ' |
||||||
|
test_completion "git --version check" "checkout " && |
||||||
|
test_completion "git --paginate check" "checkout " && |
||||||
|
test_completion "git --git-dir=foo check" "checkout " && |
||||||
|
test_completion "git --bare check" "checkout " && |
||||||
|
test_completion "git --help des" "describe " && |
||||||
|
test_completion "git --exec-path=foo check" "checkout " && |
||||||
|
test_completion "git --html-path check" "checkout " && |
||||||
|
test_completion "git --no-pager check" "checkout " && |
||||||
|
test_completion "git --work-tree=foo check" "checkout " && |
||||||
|
test_completion "git --namespace=foo check" "checkout " && |
||||||
|
test_completion "git --paginate check" "checkout " && |
||||||
|
test_completion "git --info-path check" "checkout " && |
||||||
|
test_completion "git --no-replace-objects check" "checkout " |
||||||
|
' |
||||||
|
|
||||||
|
test_done |
Loading…
Reference in new issue