]>
Commit | Line | Data |
---|---|---|
e1033436 JS |
1 | #!/bin/sh |
2 | ||
3 | test_description='test git rev-parse --parseopt' | |
4 | . ./test-lib.sh | |
5 | ||
2d893dff IB |
6 | test_expect_success 'setup optionspec' ' |
7 | sed -e "s/^|//" >optionspec <<\EOF | |
8 | |some-command [options] <args>... | |
9 | | | |
10 | |some-command does foo and bar! | |
11 | |-- | |
12 | |h,help show the help | |
13 | | | |
14 | |foo some nifty option --foo | |
15 | |bar= some cool option --bar with an argument | |
16 | |b,baz a short and long option | |
17 | | | |
18 | | An option group Header | |
19 | |C? option C with an optional argument | |
20 | |d,data? short and long option with an optional argument | |
21 | | | |
22 | | Argument hints | |
23 | |B=arg short option required argument | |
24 | |bar2=arg long option required argument | |
25 | |e,fuz=with-space short and long option required argument | |
26 | |s?some short option optional argument | |
27 | |long?data long option optional argument | |
28 | |g,fluf?path short and long option optional argument | |
29 | |longest=very-long-argument-hint a very long argument hint | |
30 | |pair=key=value with an equals sign in the hint | |
f221861e BC |
31 | |aswitch help te=t contains? fl*g characters!` |
32 | |bswitch=hint hint has trailing tab character | |
33 | |cswitch switch has trailing tab character | |
2d893dff IB |
34 | |short-hint=a with a one symbol hint |
35 | | | |
36 | |Extras | |
37 | |extra1 line above used to cause a segfault but no longer does | |
38 | EOF | |
39 | ' | |
40 | ||
c97ee171 BC |
41 | test_expect_success 'setup optionspec-no-switches' ' |
42 | sed -e "s/^|//" >optionspec_no_switches <<\EOF | |
43 | |some-command [options] <args>... | |
44 | | | |
45 | |some-command does foo and bar! | |
46 | |-- | |
47 | EOF | |
48 | ' | |
49 | ||
50 | test_expect_success 'setup optionspec-only-hidden-switches' ' | |
51 | sed -e "s/^|//" >optionspec_only_hidden_switches <<\EOF | |
52 | |some-command [options] <args>... | |
53 | | | |
54 | |some-command does foo and bar! | |
55 | |-- | |
56 | |hidden1* A hidden switch | |
57 | EOF | |
58 | ' | |
59 | ||
33e75122 | 60 | test_expect_success 'test --parseopt help output' ' |
2d893dff | 61 | sed -e "s/^|//" >expect <<\END_EXPECT && |
ce7f8745 JH |
62 | |cat <<\EOF |
63 | |usage: some-command [options] <args>... | |
64 | | | |
65 | | some-command does foo and bar! | |
66 | | | |
67 | | -h, --help show the help | |
68 | | --foo some nifty option --foo | |
69 | | --bar ... some cool option --bar with an argument | |
70 | | -b, --baz a short and long option | |
71 | | | |
72 | |An option group Header | |
73 | | -C[...] option C with an optional argument | |
74 | | -d, --data[=...] short and long option with an optional argument | |
75 | | | |
76 | |Argument hints | |
af465af8 | 77 | | -B <arg> short option required argument |
ce7f8745 JH |
78 | | --bar2 <arg> long option required argument |
79 | | -e, --fuz <with-space> | |
80 | | short and long option required argument | |
81 | | -s[<some>] short option optional argument | |
82 | | --long[=<data>] long option optional argument | |
83 | | -g, --fluf[=<path>] short and long option optional argument | |
84 | | --longest <very-long-argument-hint> | |
85 | | a very long argument hint | |
2d893dff | 86 | | --pair <key=value> with an equals sign in the hint |
f221861e BC |
87 | | --aswitch help te=t contains? fl*g characters!` |
88 | | --bswitch <hint> hint has trailing tab character | |
89 | | --cswitch switch has trailing tab character | |
2d893dff | 90 | | --short-hint <a> with a one symbol hint |
ce7f8745 JH |
91 | | |
92 | |Extras | |
93 | | --extra1 line above used to cause a segfault but no longer does | |
94 | | | |
95 | |EOF | |
47e9cd28 | 96 | END_EXPECT |
2b5ec018 | 97 | test_expect_code 129 git rev-parse --parseopt -- -h > output < optionspec && |
9a001381 | 98 | test_i18ncmp expect output |
e1033436 JS |
99 | ' |
100 | ||
a6304fa4 | 101 | test_expect_success 'test --parseopt help output no switches' ' |
c97ee171 BC |
102 | sed -e "s/^|//" >expect <<\END_EXPECT && |
103 | |cat <<\EOF | |
104 | |usage: some-command [options] <args>... | |
105 | | | |
106 | | some-command does foo and bar! | |
107 | | | |
108 | |EOF | |
109 | END_EXPECT | |
110 | test_expect_code 129 git rev-parse --parseopt -- -h > output < optionspec_no_switches && | |
111 | test_i18ncmp expect output | |
112 | ' | |
113 | ||
a6304fa4 | 114 | test_expect_success 'test --parseopt help output hidden switches' ' |
c97ee171 BC |
115 | sed -e "s/^|//" >expect <<\END_EXPECT && |
116 | |cat <<\EOF | |
117 | |usage: some-command [options] <args>... | |
118 | | | |
119 | | some-command does foo and bar! | |
120 | | | |
121 | |EOF | |
122 | END_EXPECT | |
123 | test_expect_code 129 git rev-parse --parseopt -- -h > output < optionspec_only_hidden_switches && | |
124 | test_i18ncmp expect output | |
125 | ' | |
126 | ||
127 | test_expect_success 'test --parseopt help-all output hidden switches' ' | |
128 | sed -e "s/^|//" >expect <<\END_EXPECT && | |
129 | |cat <<\EOF | |
130 | |usage: some-command [options] <args>... | |
131 | | | |
132 | | some-command does foo and bar! | |
133 | | | |
134 | | --hidden1 A hidden switch | |
135 | | | |
136 | |EOF | |
137 | END_EXPECT | |
138 | test_expect_code 129 git rev-parse --parseopt -- --help-all > output < optionspec_only_hidden_switches && | |
139 | test_i18ncmp expect output | |
140 | ' | |
141 | ||
1a9bf1e1 | 142 | test_expect_success 'test --parseopt invalid switch help output' ' |
c97ee171 BC |
143 | sed -e "s/^|//" >expect <<\END_EXPECT && |
144 | |error: unknown option `does-not-exist'\'' | |
145 | |usage: some-command [options] <args>... | |
146 | | | |
147 | | some-command does foo and bar! | |
148 | | | |
149 | | -h, --help show the help | |
150 | | --foo some nifty option --foo | |
151 | | --bar ... some cool option --bar with an argument | |
152 | | -b, --baz a short and long option | |
153 | | | |
154 | |An option group Header | |
155 | | -C[...] option C with an optional argument | |
156 | | -d, --data[=...] short and long option with an optional argument | |
157 | | | |
158 | |Argument hints | |
159 | | -B <arg> short option required argument | |
160 | | --bar2 <arg> long option required argument | |
161 | | -e, --fuz <with-space> | |
162 | | short and long option required argument | |
163 | | -s[<some>] short option optional argument | |
164 | | --long[=<data>] long option optional argument | |
165 | | -g, --fluf[=<path>] short and long option optional argument | |
166 | | --longest <very-long-argument-hint> | |
167 | | a very long argument hint | |
168 | | --pair <key=value> with an equals sign in the hint | |
169 | | --aswitch help te=t contains? fl*g characters!` | |
170 | | --bswitch <hint> hint has trailing tab character | |
171 | | --cswitch switch has trailing tab character | |
172 | | --short-hint <a> with a one symbol hint | |
173 | | | |
174 | |Extras | |
175 | | --extra1 line above used to cause a segfault but no longer does | |
176 | | | |
177 | END_EXPECT | |
178 | test_expect_code 129 git rev-parse --parseopt -- --does-not-exist 1>/dev/null 2>output < optionspec && | |
179 | test_i18ncmp expect output | |
180 | ' | |
181 | ||
2d893dff IB |
182 | test_expect_success 'setup expect.1' " |
183 | cat > expect <<EOF | |
f221861e | 184 | set -- --foo --bar 'ham' -b --aswitch -- 'arg' |
824af25a | 185 | EOF |
2d893dff | 186 | " |
824af25a | 187 | |
28a8d0f7 | 188 | test_expect_success 'test --parseopt' ' |
f221861e | 189 | git rev-parse --parseopt -- --foo --bar=ham --baz --aswitch arg < optionspec > output && |
824af25a UKK |
190 | test_cmp expect output |
191 | ' | |
192 | ||
28a8d0f7 | 193 | test_expect_success 'test --parseopt with mixed options and arguments' ' |
f221861e | 194 | git rev-parse --parseopt -- --foo arg --bar=ham --baz --aswitch < optionspec > output && |
824af25a UKK |
195 | test_cmp expect output |
196 | ' | |
197 | ||
2d893dff IB |
198 | test_expect_success 'setup expect.2' " |
199 | cat > expect <<EOF | |
824af25a UKK |
200 | set -- --foo -- 'arg' '--bar=ham' |
201 | EOF | |
2d893dff | 202 | " |
824af25a UKK |
203 | |
204 | test_expect_success 'test --parseopt with --' ' | |
205 | git rev-parse --parseopt -- --foo -- arg --bar=ham < optionspec > output && | |
206 | test_cmp expect output | |
207 | ' | |
208 | ||
6e0800ef UKK |
209 | test_expect_success 'test --parseopt --stop-at-non-option' ' |
210 | git rev-parse --parseopt --stop-at-non-option -- --foo arg --bar=ham < optionspec > output && | |
211 | test_cmp expect output | |
212 | ' | |
213 | ||
2d893dff IB |
214 | test_expect_success 'setup expect.3' " |
215 | cat > expect <<EOF | |
824af25a UKK |
216 | set -- --foo -- '--' 'arg' '--bar=ham' |
217 | EOF | |
2d893dff | 218 | " |
824af25a UKK |
219 | |
220 | test_expect_success 'test --parseopt --keep-dashdash' ' | |
221 | git rev-parse --parseopt --keep-dashdash -- --foo -- arg --bar=ham < optionspec > output && | |
222 | test_cmp expect output | |
223 | ' | |
224 | ||
2d893dff IB |
225 | test_expect_success 'setup expect.4' " |
226 | cat >expect <<EOF | |
29981380 UKK |
227 | set -- --foo -- '--' 'arg' '--spam=ham' |
228 | EOF | |
2d893dff | 229 | " |
29981380 UKK |
230 | |
231 | test_expect_success 'test --parseopt --keep-dashdash --stop-at-non-option with --' ' | |
232 | git rev-parse --parseopt --keep-dashdash --stop-at-non-option -- --foo -- arg --spam=ham <optionspec >output && | |
233 | test_cmp expect output | |
234 | ' | |
235 | ||
2d893dff IB |
236 | test_expect_success 'setup expect.5' " |
237 | cat > expect <<EOF | |
29981380 UKK |
238 | set -- --foo -- 'arg' '--spam=ham' |
239 | EOF | |
2d893dff | 240 | " |
29981380 UKK |
241 | |
242 | test_expect_success 'test --parseopt --keep-dashdash --stop-at-non-option without --' ' | |
243 | git rev-parse --parseopt --keep-dashdash --stop-at-non-option -- --foo arg --spam=ham <optionspec >output && | |
244 | test_cmp expect output | |
245 | ' | |
246 | ||
2d893dff IB |
247 | test_expect_success 'setup expect.6' " |
248 | cat > expect <<EOF | |
f8c87212 NV |
249 | set -- --foo --bar='z' --baz -C'Z' --data='A' -- 'arg' |
250 | EOF | |
2d893dff | 251 | " |
f8c87212 NV |
252 | |
253 | test_expect_success 'test --parseopt --stuck-long' ' | |
254 | git rev-parse --parseopt --stuck-long -- --foo --bar=z -b arg -CZ -dA <optionspec >output && | |
255 | test_cmp expect output | |
256 | ' | |
257 | ||
2d893dff IB |
258 | test_expect_success 'setup expect.7' " |
259 | cat > expect <<EOF | |
f8c87212 NV |
260 | set -- --data='' -C --baz -- 'arg' |
261 | EOF | |
2d893dff | 262 | " |
f8c87212 NV |
263 | |
264 | test_expect_success 'test --parseopt --stuck-long and empty optional argument' ' | |
265 | git rev-parse --parseopt --stuck-long -- --data= arg -C -b <optionspec >output && | |
266 | test_cmp expect output | |
267 | ' | |
268 | ||
2d893dff IB |
269 | test_expect_success 'setup expect.8' " |
270 | cat > expect <<EOF | |
f8c87212 NV |
271 | set -- --data --baz -- 'arg' |
272 | EOF | |
2d893dff | 273 | " |
f8c87212 NV |
274 | |
275 | test_expect_success 'test --parseopt --stuck-long and long option with unset optional argument' ' | |
276 | git rev-parse --parseopt --stuck-long -- --data arg -b <optionspec >output && | |
277 | test_cmp expect output | |
278 | ' | |
279 | ||
280 | test_expect_success 'test --parseopt --stuck-long and short option with unset optional argument' ' | |
281 | git rev-parse --parseopt --stuck-long -- -d arg -b <optionspec >output && | |
282 | test_cmp expect output | |
283 | ' | |
284 | ||
e1033436 | 285 | test_done |