Skip to content

Commit 5c293a6

Browse files
felipecgitster
authored andcommitted
tests: add initial bash completion tests
Signed-off-by: Felipe Contreras <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 36e6c80 commit 5c293a6

File tree

1 file changed

+120
-0
lines changed

1 file changed

+120
-0
lines changed

t/t9902-completion.sh

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
#!/bin/sh
2+
#
3+
# Copyright (c) 2012 Felipe Contreras
4+
#
5+
6+
if test -n "$BASH" && test -z "$POSIXLY_CORRECT"; then
7+
# we are in full-on bash mode
8+
true
9+
elif type bash >/dev/null 2>&1; then
10+
# execute in full-on bash mode
11+
unset POSIXLY_CORRECT
12+
exec bash "$0" "$@"
13+
else
14+
echo '1..0 #SKIP skipping bash completion tests; bash not available'
15+
exit 0
16+
fi
17+
18+
test_description='test bash completion'
19+
20+
. ./test-lib.sh
21+
22+
complete ()
23+
{
24+
# do nothing
25+
return 0
26+
}
27+
28+
. "$GIT_BUILD_DIR/contrib/completion/git-completion.bash"
29+
30+
# We don't need this function to actually join words or do anything special.
31+
# Also, it's cleaner to avoid touching bash's internal completion variables.
32+
# So let's override it with a minimal version for testing purposes.
33+
_get_comp_words_by_ref ()
34+
{
35+
while [ $# -gt 0 ]; do
36+
case "$1" in
37+
cur)
38+
cur=${_words[_cword]}
39+
;;
40+
prev)
41+
prev=${_words[_cword-1]}
42+
;;
43+
words)
44+
words=("${_words[@]}")
45+
;;
46+
cword)
47+
cword=$_cword
48+
;;
49+
esac
50+
shift
51+
done
52+
}
53+
54+
print_comp ()
55+
{
56+
local IFS=$'\n'
57+
echo "${COMPREPLY[*]}" > out
58+
}
59+
60+
run_completion ()
61+
{
62+
local -a COMPREPLY _words
63+
local _cword
64+
_words=( $1 )
65+
(( _cword = ${#_words[@]} - 1 ))
66+
_git && print_comp
67+
}
68+
69+
test_completion ()
70+
{
71+
test $# -gt 1 && echo "$2" > expected
72+
run_completion "$@" &&
73+
test_cmp expected out
74+
}
75+
76+
test_expect_success 'basic' '
77+
run_completion "git \"\"" &&
78+
# built-in
79+
grep -q "^add \$" out &&
80+
# script
81+
grep -q "^filter-branch \$" out &&
82+
# plumbing
83+
! grep -q "^ls-files \$" out &&
84+
85+
run_completion "git f" &&
86+
! grep -q -v "^f" out
87+
'
88+
89+
test_expect_success 'double dash "git" itself' '
90+
sed -e "s/Z$//" >expected <<-\EOF &&
91+
--paginate Z
92+
--no-pager Z
93+
--git-dir=
94+
--bare Z
95+
--version Z
96+
--exec-path Z
97+
--html-path Z
98+
--work-tree=
99+
--namespace=
100+
--help Z
101+
EOF
102+
test_completion "git --"
103+
'
104+
105+
test_expect_success 'double dash "git checkout"' '
106+
sed -e "s/Z$//" >expected <<-\EOF &&
107+
--quiet Z
108+
--ours Z
109+
--theirs Z
110+
--track Z
111+
--no-track Z
112+
--merge Z
113+
--conflict=
114+
--orphan Z
115+
--patch Z
116+
EOF
117+
test_completion "git checkout --"
118+
'
119+
120+
test_done

0 commit comments

Comments
 (0)