Re: [PATCH v2] tests: add initial bash completion tests
From: SZEDER Gábor <hidden>
Date: 2016-06-15 22:53:34
Hi, On Thu, Apr 12, 2012 at 12:57:03AM +0300, Felipe Contreras wrote:
quoted hunk ↗ jump to hunk
Signed-off-by: Felipe Contreras <redacted> --- 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.shdiff --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 \$" outThe && 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