]> git.ipfire.org Git - thirdparty/git.git/blame - t/t9902-completion.sh
tests: add tests for the __gitcomp() completion helper function
[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
74a8c849
SG
76newline=$'\n'
77
78test_expect_success '__gitcomp - trailing space - options' '
79 sed -e "s/Z$//" >expected <<-\EOF &&
80 --reuse-message=Z
81 --reedit-message=Z
82 --reset-author Z
83 EOF
84 (
85 local -a COMPREPLY &&
86 cur="--re" &&
87 __gitcomp "--dry-run --reuse-message= --reedit-message=
88 --reset-author" &&
89 IFS="$newline" &&
90 echo "${COMPREPLY[*]}" > out
91 ) &&
92 test_cmp expected out
93'
94
95test_expect_success '__gitcomp - trailing space - config keys' '
96 sed -e "s/Z$//" >expected <<-\EOF &&
97 branch.Z
98 branch.autosetupmerge Z
99 branch.autosetuprebase Z
100 browser.Z
101 EOF
102 (
103 local -a COMPREPLY &&
104 cur="br" &&
105 __gitcomp "branch. branch.autosetupmerge
106 branch.autosetuprebase browser." &&
107 IFS="$newline" &&
108 echo "${COMPREPLY[*]}" > out
109 ) &&
110 test_cmp expected out
111'
112
113test_expect_success '__gitcomp - option parameter' '
114 sed -e "s/Z$//" >expected <<-\EOF &&
115 recursive Z
116 resolve Z
117 EOF
118 (
119 local -a COMPREPLY &&
120 cur="--strategy=re" &&
121 __gitcomp "octopus ours recursive resolve subtree
122 " "" "re" &&
123 IFS="$newline" &&
124 echo "${COMPREPLY[*]}" > out
125 ) &&
126 test_cmp expected out
127'
128
129test_expect_success '__gitcomp - prefix' '
130 sed -e "s/Z$//" >expected <<-\EOF &&
131 branch.maint.merge Z
132 branch.maint.mergeoptions Z
133 EOF
134 (
135 local -a COMPREPLY &&
136 cur="branch.me" &&
137 __gitcomp "remote merge mergeoptions rebase
138 " "branch.maint." "me" &&
139 IFS="$newline" &&
140 echo "${COMPREPLY[*]}" > out
141 ) &&
142 test_cmp expected out
143'
144
145test_expect_success '__gitcomp - suffix' '
146 sed -e "s/Z$//" >expected <<-\EOF &&
147 branch.master.Z
148 branch.maint.Z
149 EOF
150 (
151 local -a COMPREPLY &&
152 cur="branch.me" &&
153 __gitcomp "master maint next pu
154 " "branch." "ma" "." &&
155 IFS="$newline" &&
156 echo "${COMPREPLY[*]}" > out
157 ) &&
158 test_cmp expected out
159'
160
5c293a6b
FC
161test_expect_success 'basic' '
162 run_completion "git \"\"" &&
163 # built-in
164 grep -q "^add \$" out &&
165 # script
166 grep -q "^filter-branch \$" out &&
167 # plumbing
168 ! grep -q "^ls-files \$" out &&
169
170 run_completion "git f" &&
171 ! grep -q -v "^f" out
172'
173
174test_expect_success 'double dash "git" itself' '
175 sed -e "s/Z$//" >expected <<-\EOF &&
176 --paginate Z
177 --no-pager Z
178 --git-dir=
179 --bare Z
180 --version Z
181 --exec-path Z
182 --html-path Z
183 --work-tree=
184 --namespace=
185 --help Z
186 EOF
187 test_completion "git --"
188'
189
190test_expect_success 'double dash "git checkout"' '
191 sed -e "s/Z$//" >expected <<-\EOF &&
192 --quiet Z
193 --ours Z
194 --theirs Z
195 --track Z
196 --no-track Z
197 --merge Z
198 --conflict=
199 --orphan Z
200 --patch Z
201 EOF
202 test_completion "git checkout --"
203'
204
205test_done