]> git.ipfire.org Git - thirdparty/git.git/blame - t/t9902-completion.sh
tests: add initial bash completion tests
[thirdparty/git.git] / t / t9902-completion.sh
CommitLineData
5c293a6b
FC
1#!/bin/sh
2#
3# Copyright (c) 2012 Felipe Contreras
4#
5
6if test -n "$BASH" && test -z "$POSIXLY_CORRECT"; then
7 # we are in full-on bash mode
8 true
9elif type bash >/dev/null 2>&1; then
10 # execute in full-on bash mode
11 unset POSIXLY_CORRECT
12 exec bash "$0" "$@"
13else
14 echo '1..0 #SKIP skipping bash completion tests; bash not available'
15 exit 0
16fi
17
18test_description='test bash completion'
19
20. ./test-lib.sh
21
22complete ()
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
54print_comp ()
55{
56 local IFS=$'\n'
57 echo "${COMPREPLY[*]}" > out
58}
59
60run_completion ()
61{
62 local -a COMPREPLY _words
63 local _cword
64 _words=( $1 )
65 (( _cword = ${#_words[@]} - 1 ))
66 _git && print_comp
67}
68
69test_completion ()
70{
71 test $# -gt 1 && echo "$2" > expected
72 run_completion "$@" &&
73 test_cmp expected out
74}
75
76test_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
89test_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
105test_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
120test_done