Hi, On Thu, Apr 12, 2012 at 12:57:03AM +0300, Felipe Contreras wrote: > Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> > --- > > Since v1: > > * Check if we are running bash in posix mode > * Don't check for all git porcelain commands > > t/t9902-completion.sh | 115 +++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 115 insertions(+) > create mode 100755 t/t9902-completion.sh > > diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh > new file mode 100755 > index 0000000..cbda6b5 > --- /dev/null > +++ b/t/t9902-completion.sh > @@ -0,0 +1,115 @@ > +#!/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" > + > +_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 > +} Git's completion script already implements this function. Why override it here? > +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 The && is missing here at the end of the line. > + run_completion "git f" && > + ! grep -q -v "^f" out grep is not a git command, so I'm not sure, but shouldn't these use 'test_must_fail grep' instead of '! grep'? Anyway, thanks for pushing this forward. I have a bunch of tests for my __git_ps1() optimizations, but, being a bash function, I could never figure out how to integrate it with the test framework. Best, Gábor -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html