t1502: test option negation

Add tests for checking the "git rev-parse --parseopt" flag "!" and
whether options can be negated with a "no-" prefix.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
René Scharfe 2023-08-05 16:39:52 +02:00 committed by Junio C Hamano
parent 8dcb49021e
commit d5dc68f730
3 changed files with 63 additions and 0 deletions

View File

@ -3,6 +3,22 @@
test_description='test git rev-parse --parseopt' test_description='test git rev-parse --parseopt'
. ./test-lib.sh . ./test-lib.sh


check_invalid_long_option () {
spec="$1"
opt="$2"
test_expect_success "test --parseopt invalid switch $opt help output for $spec" '
{
cat <<-\EOF &&
error: unknown option `'${opt#--}\''
EOF
sed -e 1d -e \$d <"$TEST_DIRECTORY/t1502/$spec.help"
} >expect &&
test_expect_code 129 git rev-parse --parseopt -- $opt \
2>output <"$TEST_DIRECTORY/t1502/$spec" &&
test_cmp expect output
'
}

test_expect_success 'setup optionspec' ' test_expect_success 'setup optionspec' '
sed -e "s/^|//" >optionspec <<\EOF sed -e "s/^|//" >optionspec <<\EOF
|some-command [options] <args>... |some-command [options] <args>...
@ -278,4 +294,32 @@ test_expect_success 'test --parseopt help output: multi-line blurb after empty l
test_cmp expect actual test_cmp expect actual
' '


test_expect_success 'test --parseopt help output for optionspec-neg' '
test_expect_code 129 git rev-parse --parseopt -- \
-h >output <"$TEST_DIRECTORY/t1502/optionspec-neg" &&
test_cmp "$TEST_DIRECTORY/t1502/optionspec-neg.help" output
'

test_expect_success 'test --parseopt valid options for optionspec-neg' '
cat >expect <<-\EOF &&
set -- --foo --no-foo --no-bar --positive-only --no-negative --
EOF
git rev-parse --parseopt -- <"$TEST_DIRECTORY/t1502/optionspec-neg" >output \
--foo --no-foo --no-bar --positive-only --no-negative &&
test_cmp expect output
'

test_expect_success 'test --parseopt positivated option for optionspec-neg' '
cat >expect <<-\EOF &&
set -- --no-no-bar --no-no-bar --
EOF
git rev-parse --parseopt -- <"$TEST_DIRECTORY/t1502/optionspec-neg" >output \
--no-no-bar --bar &&
test_cmp expect output
'

check_invalid_long_option optionspec-neg --no-positive-only
check_invalid_long_option optionspec-neg --negative
check_invalid_long_option optionspec-neg --no-no-negative

test_done test_done

8
t/t1502/optionspec-neg Normal file
View File

@ -0,0 +1,8 @@
some-command [options] <args>...

some-command does foo and bar!
--
foo can be negated
no-bar can be positivated
positive-only! cannot be negated
no-negative! cannot be positivated

View File

@ -0,0 +1,11 @@
cat <<\EOF
usage: some-command [options] <args>...

some-command does foo and bar!

--foo can be negated
--no-bar can be positivated
--positive-only cannot be negated
--no-negative cannot be positivated

EOF