1#!/bin/sh
2
3test_description='test git rev-parse --parseopt'
4. ./test-lib.sh
5
6test_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
31|short-hint=a with a one symbol hint
32|
33|Extras
34|extra1 line above used to cause a segfault but no longer does
35EOF
36'
37
38test_expect_success 'test --parseopt help output' '
39 sed -e "s/^|//" >expect <<\END_EXPECT &&
40|cat <<\EOF
41|usage: some-command [options] <args>...
42|
43| some-command does foo and bar!
44|
45| -h, --help show the help
46| --foo some nifty option --foo
47| --bar ... some cool option --bar with an argument
48| -b, --baz a short and long option
49|
50|An option group Header
51| -C[...] option C with an optional argument
52| -d, --data[=...] short and long option with an optional argument
53|
54|Argument hints
55| -B <arg> short option required argument
56| --bar2 <arg> long option required argument
57| -e, --fuz <with-space>
58| short and long option required argument
59| -s[<some>] short option optional argument
60| --long[=<data>] long option optional argument
61| -g, --fluf[=<path>] short and long option optional argument
62| --longest <very-long-argument-hint>
63| a very long argument hint
64| --pair <key=value> with an equals sign in the hint
65| --short-hint <a> with a one symbol hint
66|
67|Extras
68| --extra1 line above used to cause a segfault but no longer does
69|
70|EOF
71END_EXPECT
72 test_expect_code 129 git rev-parse --parseopt -- -h > output < optionspec &&
73 test_i18ncmp expect output
74'
75
76test_expect_success 'setup expect.1' "
77 cat > expect <<EOF
78set -- --foo --bar 'ham' -b -- 'arg'
79EOF
80"
81
82test_expect_success 'test --parseopt' '
83 git rev-parse --parseopt -- --foo --bar=ham --baz arg < optionspec > output &&
84 test_cmp expect output
85'
86
87test_expect_success 'test --parseopt with mixed options and arguments' '
88 git rev-parse --parseopt -- --foo arg --bar=ham --baz < optionspec > output &&
89 test_cmp expect output
90'
91
92test_expect_success 'setup expect.2' "
93 cat > expect <<EOF
94set -- --foo -- 'arg' '--bar=ham'
95EOF
96"
97
98test_expect_success 'test --parseopt with --' '
99 git rev-parse --parseopt -- --foo -- arg --bar=ham < optionspec > output &&
100 test_cmp expect output
101'
102
103test_expect_success 'test --parseopt --stop-at-non-option' '
104 git rev-parse --parseopt --stop-at-non-option -- --foo arg --bar=ham < optionspec > output &&
105 test_cmp expect output
106'
107
108test_expect_success 'setup expect.3' "
109 cat > expect <<EOF
110set -- --foo -- '--' 'arg' '--bar=ham'
111EOF
112"
113
114test_expect_success 'test --parseopt --keep-dashdash' '
115 git rev-parse --parseopt --keep-dashdash -- --foo -- arg --bar=ham < optionspec > output &&
116 test_cmp expect output
117'
118
119test_expect_success 'setup expect.4' "
120 cat >expect <<EOF
121set -- --foo -- '--' 'arg' '--spam=ham'
122EOF
123"
124
125test_expect_success 'test --parseopt --keep-dashdash --stop-at-non-option with --' '
126 git rev-parse --parseopt --keep-dashdash --stop-at-non-option -- --foo -- arg --spam=ham <optionspec >output &&
127 test_cmp expect output
128'
129
130test_expect_success 'setup expect.5' "
131 cat > expect <<EOF
132set -- --foo -- 'arg' '--spam=ham'
133EOF
134"
135
136test_expect_success 'test --parseopt --keep-dashdash --stop-at-non-option without --' '
137 git rev-parse --parseopt --keep-dashdash --stop-at-non-option -- --foo arg --spam=ham <optionspec >output &&
138 test_cmp expect output
139'
140
141test_expect_success 'setup expect.6' "
142 cat > expect <<EOF
143set -- --foo --bar='z' --baz -C'Z' --data='A' -- 'arg'
144EOF
145"
146
147test_expect_success 'test --parseopt --stuck-long' '
148 git rev-parse --parseopt --stuck-long -- --foo --bar=z -b arg -CZ -dA <optionspec >output &&
149 test_cmp expect output
150'
151
152test_expect_success 'setup expect.7' "
153 cat > expect <<EOF
154set -- --data='' -C --baz -- 'arg'
155EOF
156"
157
158test_expect_success 'test --parseopt --stuck-long and empty optional argument' '
159 git rev-parse --parseopt --stuck-long -- --data= arg -C -b <optionspec >output &&
160 test_cmp expect output
161'
162
163test_expect_success 'setup expect.8' "
164 cat > expect <<EOF
165set -- --data --baz -- 'arg'
166EOF
167"
168
169test_expect_success 'test --parseopt --stuck-long and long option with unset optional argument' '
170 git rev-parse --parseopt --stuck-long -- --data arg -b <optionspec >output &&
171 test_cmp expect output
172'
173
174test_expect_success 'test --parseopt --stuck-long and short option with unset optional argument' '
175 git rev-parse --parseopt --stuck-long -- -d arg -b <optionspec >output &&
176 test_cmp expect output
177'
178
179test_done