]> git.ipfire.org Git - thirdparty/git.git/blob - t/t1502-rev-parse-parseopt.sh
Git 2.14.4
[thirdparty/git.git] / t / t1502-rev-parse-parseopt.sh
1 #!/bin/sh
2
3 test_description='test git rev-parse --parseopt'
4 . ./test-lib.sh
5
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
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
35 EOF
36 '
37
38 test_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
71 END_EXPECT
72 test_expect_code 129 git rev-parse --parseopt -- -h > output < optionspec &&
73 test_i18ncmp expect output
74 '
75
76 test_expect_success 'setup expect.1' "
77 cat > expect <<EOF
78 set -- --foo --bar 'ham' -b -- 'arg'
79 EOF
80 "
81
82 test_expect_success 'test --parseopt' '
83 git rev-parse --parseopt -- --foo --bar=ham --baz arg < optionspec > output &&
84 test_cmp expect output
85 '
86
87 test_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
92 test_expect_success 'setup expect.2' "
93 cat > expect <<EOF
94 set -- --foo -- 'arg' '--bar=ham'
95 EOF
96 "
97
98 test_expect_success 'test --parseopt with --' '
99 git rev-parse --parseopt -- --foo -- arg --bar=ham < optionspec > output &&
100 test_cmp expect output
101 '
102
103 test_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
108 test_expect_success 'setup expect.3' "
109 cat > expect <<EOF
110 set -- --foo -- '--' 'arg' '--bar=ham'
111 EOF
112 "
113
114 test_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
119 test_expect_success 'setup expect.4' "
120 cat >expect <<EOF
121 set -- --foo -- '--' 'arg' '--spam=ham'
122 EOF
123 "
124
125 test_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
130 test_expect_success 'setup expect.5' "
131 cat > expect <<EOF
132 set -- --foo -- 'arg' '--spam=ham'
133 EOF
134 "
135
136 test_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
141 test_expect_success 'setup expect.6' "
142 cat > expect <<EOF
143 set -- --foo --bar='z' --baz -C'Z' --data='A' -- 'arg'
144 EOF
145 "
146
147 test_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
152 test_expect_success 'setup expect.7' "
153 cat > expect <<EOF
154 set -- --data='' -C --baz -- 'arg'
155 EOF
156 "
157
158 test_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
163 test_expect_success 'setup expect.8' "
164 cat > expect <<EOF
165 set -- --data --baz -- 'arg'
166 EOF
167 "
168
169 test_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
174 test_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
179 test_done