cat-file tests: test bad usage
Stress test the usage emitted when options are combined in ways that
isn't supported. Let's test various option combinations, some of these
we buggily allow right now.
E.g. this reveals a bug in 321459439e
(cat-file: support
--textconv/--filters in batch mode, 2016-09-09) that we'll fix in a
subsequent commit. We're supposed to be emitting a relevant message
when --batch-all-objects is combined with --textconv or --filters, but
we don't.
The cases of needing to assign to opt=2 in the "opt" loop are because
on those we do the right thing already, in subsequent commits the
"test_expect_failure" cases will be fixed, and the for-loops unified.
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
abe6bb3905
commit
ddf8420b59
@ -4,6 +4,100 @@ test_description='git cat-file'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
test_cmdmode_usage () {
|
||||
test_expect_code 129 "$@" 2>err &&
|
||||
grep "^error:.*is incompatible with" err
|
||||
}
|
||||
|
||||
for switches in \
|
||||
'-e -p' \
|
||||
'-p -t' \
|
||||
'-t -s' \
|
||||
'-s --textconv' \
|
||||
'--textconv --filters'
|
||||
do
|
||||
test_expect_success "usage: cmdmode $switches" '
|
||||
test_cmdmode_usage git cat-file $switches
|
||||
'
|
||||
done
|
||||
|
||||
test_incompatible_usage () {
|
||||
test_expect_code 129 "$@" 2>err &&
|
||||
grep -E "^error:.**needs" err
|
||||
}
|
||||
|
||||
for opt in --batch --batch-check
|
||||
do
|
||||
test_expect_success "usage: incompatible options: --path with $opt" '
|
||||
test_incompatible_usage git cat-file --path=foo $opt
|
||||
'
|
||||
done
|
||||
|
||||
short_modes="-e -p -t -s"
|
||||
cw_modes="--textconv --filters"
|
||||
|
||||
for opt in $cw_modes
|
||||
do
|
||||
test_expect_success "usage: $opt requires another option" '
|
||||
test_expect_code 129 git cat-file $opt
|
||||
'
|
||||
|
||||
test_expect_failure "usage: incompatible options: --batch-all-objects with $opt" '
|
||||
test_incompatible_usage git cat-file --batch-all-objects $opt
|
||||
'
|
||||
done
|
||||
|
||||
for opt in $short_modes
|
||||
do
|
||||
test_expect_success "usage: $opt requires another option" '
|
||||
test_expect_code 129 git cat-file $opt
|
||||
'
|
||||
|
||||
for opt2 in --batch \
|
||||
--batch-check \
|
||||
--follow-symlinks
|
||||
do
|
||||
test_expect_failure "usage: incompatible options: $opt and $opt2" '
|
||||
test_incompatible_usage git cat-file $opt $opt2
|
||||
'
|
||||
done
|
||||
|
||||
opt2="--path=foo HEAD:some-path.txt"
|
||||
test_expect_success "usage: incompatible options: $opt and $opt2" '
|
||||
test_incompatible_usage git cat-file $opt $opt2
|
||||
'
|
||||
done
|
||||
|
||||
for opt in $short_modes $cw_modes
|
||||
do
|
||||
args="one two three"
|
||||
test_expect_success "usage: too many arguments: $opt $args" '
|
||||
test_expect_code 129 git cat-file $opt $args
|
||||
'
|
||||
|
||||
for opt2 in --buffer --follow-symlinks
|
||||
do
|
||||
test_expect_success "usage: incompatible arguments: $opt with batch option $opt2" '
|
||||
test_expect_code 129 git cat-file $opt $opt2
|
||||
'
|
||||
done
|
||||
done
|
||||
|
||||
for opt in --buffer \
|
||||
--follow-symlinks \
|
||||
--batch-all-objects
|
||||
do
|
||||
status=success
|
||||
if test $opt = "--buffer"
|
||||
then
|
||||
status=failure
|
||||
fi
|
||||
test_expect_$status "usage: bad option combination: $opt without batch mode" '
|
||||
test_expect_code 129 git cat-file $opt &&
|
||||
test_expect_code 129 git cat-file $opt commit HEAD
|
||||
'
|
||||
done
|
||||
|
||||
echo_without_newline () {
|
||||
printf '%s' "$*"
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user