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