git-multimail: update to release 1.2.0
[git.git] / t / t1502-rev-parse-parseopt.sh
blob310f93fd30ea51f94eaa2b4dd2e8d0e398783cba
1 #!/bin/sh
3 test_description='test git rev-parse --parseopt'
4 . ./test-lib.sh
6 test_expect_success 'setup optionspec' '
7 sed -e "s/^|//" >optionspec <<\EOF
8 |some-command [options] <args>...
10 |some-command does foo and bar!
11 |--
12 |h,help show the help
14 |foo some nifty option --foo
15 |bar= some cool option --bar with an argument
16 |b,baz a short and long option
18 | An option group Header
19 |C? option C with an optional argument
20 |d,data? short and long option with an optional argument
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
33 |Extras
34 |extra1 line above used to cause a segfault but no longer does
35 EOF
38 test_expect_success 'test --parseopt help output' '
39 sed -e "s/^|//" >expect <<\END_EXPECT &&
40 |cat <<\EOF
41 |usage: some-command [options] <args>...
43 | some-command does foo and bar!
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
50 |An option group Header
51 | -C[...] option C with an optional argument
52 | -d, --data[=...] short and long option with an optional argument
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
67 |Extras
68 | --extra1 line above used to cause a segfault but no longer does
70 |EOF
71 END_EXPECT
72 test_expect_code 129 git rev-parse --parseopt -- -h > output < optionspec &&
73 test_i18ncmp expect output
76 test_expect_success 'setup expect.1' "
77 cat > expect <<EOF
78 set -- --foo --bar 'ham' -b -- 'arg'
79 EOF
82 test_expect_success 'test --parseopt' '
83 git rev-parse --parseopt -- --foo --bar=ham --baz arg < optionspec > output &&
84 test_cmp expect output
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
92 test_expect_success 'setup expect.2' "
93 cat > expect <<EOF
94 set -- --foo -- 'arg' '--bar=ham'
95 EOF
98 test_expect_success 'test --parseopt with --' '
99 git rev-parse --parseopt -- --foo -- arg --bar=ham < optionspec > output &&
100 test_cmp expect output
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
108 test_expect_success 'setup expect.3' "
109 cat > expect <<EOF
110 set -- --foo -- '--' 'arg' '--bar=ham'
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
119 test_expect_success 'setup expect.4' "
120 cat >expect <<EOF
121 set -- --foo -- '--' 'arg' '--spam=ham'
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
130 test_expect_success 'setup expect.5' "
131 cat > expect <<EOF
132 set -- --foo -- 'arg' '--spam=ham'
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
141 test_expect_success 'setup expect.6' "
142 cat > expect <<EOF
143 set -- --foo --bar='z' --baz -C'Z' --data='A' -- 'arg'
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
152 test_expect_success 'setup expect.7' "
153 cat > expect <<EOF
154 set -- --data='' -C --baz -- 'arg'
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
163 test_expect_success 'setup expect.8' "
164 cat > expect <<EOF
165 set -- --data --baz -- 'arg'
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
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
179 test_done