t0040,t1502: Demonstrate parse_options bugs
When the option spec contains no switches or only hidden switches, parse_options will emit an extra blank line at the end of help output so that the help text will end in two blank lines instead of one. When parse_options produces internal help output after an error has occurred it will emit blank lines within the usage string to stdout instead of stderr. Update t/helper/test-parse-options.c to have a description body in the usage string to exercise this second bug and mark tests as failing in t0040. Add tests to t1502 to demonstrate both of these problems. Signed-off-by: Brandon Casey <drafnel@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
697bc88581
commit
c97ee171a6
@ -38,6 +38,25 @@ test_expect_success 'setup optionspec' '
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'setup optionspec-no-switches' '
|
||||
sed -e "s/^|//" >optionspec_no_switches <<\EOF
|
||||
|some-command [options] <args>...
|
||||
|
|
||||
|some-command does foo and bar!
|
||||
|--
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'setup optionspec-only-hidden-switches' '
|
||||
sed -e "s/^|//" >optionspec_only_hidden_switches <<\EOF
|
||||
|some-command [options] <args>...
|
||||
|
|
||||
|some-command does foo and bar!
|
||||
|--
|
||||
|hidden1* A hidden switch
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test --parseopt help output' '
|
||||
sed -e "s/^|//" >expect <<\END_EXPECT &&
|
||||
|cat <<\EOF
|
||||
@ -79,6 +98,87 @@ END_EXPECT
|
||||
test_i18ncmp expect output
|
||||
'
|
||||
|
||||
test_expect_failure 'test --parseopt help output no switches' '
|
||||
sed -e "s/^|//" >expect <<\END_EXPECT &&
|
||||
|cat <<\EOF
|
||||
|usage: some-command [options] <args>...
|
||||
|
|
||||
| some-command does foo and bar!
|
||||
|
|
||||
|EOF
|
||||
END_EXPECT
|
||||
test_expect_code 129 git rev-parse --parseopt -- -h > output < optionspec_no_switches &&
|
||||
test_i18ncmp expect output
|
||||
'
|
||||
|
||||
test_expect_failure 'test --parseopt help output hidden switches' '
|
||||
sed -e "s/^|//" >expect <<\END_EXPECT &&
|
||||
|cat <<\EOF
|
||||
|usage: some-command [options] <args>...
|
||||
|
|
||||
| some-command does foo and bar!
|
||||
|
|
||||
|EOF
|
||||
END_EXPECT
|
||||
test_expect_code 129 git rev-parse --parseopt -- -h > output < optionspec_only_hidden_switches &&
|
||||
test_i18ncmp expect output
|
||||
'
|
||||
|
||||
test_expect_success 'test --parseopt help-all output hidden switches' '
|
||||
sed -e "s/^|//" >expect <<\END_EXPECT &&
|
||||
|cat <<\EOF
|
||||
|usage: some-command [options] <args>...
|
||||
|
|
||||
| some-command does foo and bar!
|
||||
|
|
||||
| --hidden1 A hidden switch
|
||||
|
|
||||
|EOF
|
||||
END_EXPECT
|
||||
test_expect_code 129 git rev-parse --parseopt -- --help-all > output < optionspec_only_hidden_switches &&
|
||||
test_i18ncmp expect output
|
||||
'
|
||||
|
||||
test_expect_failure 'test --parseopt invalid switch help output' '
|
||||
sed -e "s/^|//" >expect <<\END_EXPECT &&
|
||||
|error: unknown option `does-not-exist'\''
|
||||
|usage: some-command [options] <args>...
|
||||
|
|
||||
| some-command does foo and bar!
|
||||
|
|
||||
| -h, --help show the help
|
||||
| --foo some nifty option --foo
|
||||
| --bar ... some cool option --bar with an argument
|
||||
| -b, --baz a short and long option
|
||||
|
|
||||
|An option group Header
|
||||
| -C[...] option C with an optional argument
|
||||
| -d, --data[=...] short and long option with an optional argument
|
||||
|
|
||||
|Argument hints
|
||||
| -B <arg> short option required argument
|
||||
| --bar2 <arg> long option required argument
|
||||
| -e, --fuz <with-space>
|
||||
| short and long option required argument
|
||||
| -s[<some>] short option optional argument
|
||||
| --long[=<data>] long option optional argument
|
||||
| -g, --fluf[=<path>] short and long option optional argument
|
||||
| --longest <very-long-argument-hint>
|
||||
| a very long argument hint
|
||||
| --pair <key=value> with an equals sign in the hint
|
||||
| --aswitch help te=t contains? fl*g characters!`
|
||||
| --bswitch <hint> hint has trailing tab character
|
||||
| --cswitch switch has trailing tab character
|
||||
| --short-hint <a> with a one symbol hint
|
||||
|
|
||||
|Extras
|
||||
| --extra1 line above used to cause a segfault but no longer does
|
||||
|
|
||||
END_EXPECT
|
||||
test_expect_code 129 git rev-parse --parseopt -- --does-not-exist 1>/dev/null 2>output < optionspec &&
|
||||
test_i18ncmp expect output
|
||||
'
|
||||
|
||||
test_expect_success 'setup expect.1' "
|
||||
cat > expect <<EOF
|
||||
set -- --foo --bar 'ham' -b --aswitch -- 'arg'
|
||||
|
Reference in New Issue
Block a user