Files
git/t/t0040-parse-options.sh
Johannes Sixt a36adafee4 Revert accidentally merged commits
This reverts the following commits:

abd1fa1 test-suite: Log everything to a file in non-verbose mode
50f37d1 Implement test-stat the prints the modification time.
fc7fe85 gitk: Swap positions of 'next' and 'prev' buttons in the 'Find' section.
f80f1db Need diff -u -b in t7401 because some lines end in CRLF.
85763c8 Implement thread-specific die() routines; use one in start_async().
4eb0463 Make report() from usage.c public as vreport().
ddce705 Skip tests that fail due to incomplete implementations, missing tools...
a094080 Do not issue the warning about the fallback of the PREFIX.

These were brought in by the merge commit dc8b641 that merged my private
work-in-progress branch. Only these two commits remain:

1e52e22 Windows: Work around intermittent failures in mingw_rename
ccd3859 Windows: Better support PAGER settings with spaces in the path

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
2009-04-13 21:53:54 +02:00

252 lines
4.9 KiB
Bash
Executable File

#!/bin/sh
#
# Copyright (c) 2007 Johannes Schindelin
#
test_description='our own option parser'
. ./test-lib.sh
cat > expect.err << EOF
usage: test-parse-options <options>
-b, --boolean get a boolean
-4, --or4 bitwise-or boolean with ...0100
-i, --integer <n> get a integer
-j <n> get a integer, too
--set23 set integer to 23
-t <time> get timestamp of <time>
-L, --length <str> get length of <str>
String options
-s, --string <string>
get a string
--string2 <str> get another string
--st <st> get another string (pervert ordering)
-o <str> get another string
--default-string set string to default
Magic arguments
--quux means --quux
Standard options
--abbrev[=<n>] use <n> digits to display SHA-1s
-v, --verbose be verbose
-n, --dry-run dry run
-q, --quiet be quiet
EOF
test_expect_success 'test help' '
test_must_fail test-parse-options -h > output 2> output.err &&
test ! -s output &&
test_cmp expect.err output.err
'
cat > expect << EOF
boolean: 2
integer: 1729
timestamp: 0
string: 123
abbrev: 7
verbose: 2
quiet: no
dry run: yes
EOF
test_expect_success 'short options' '
test-parse-options -s123 -b -i 1729 -b -vv -n > output 2> output.err &&
test_cmp expect output &&
test ! -s output.err
'
cat > expect << EOF
boolean: 2
integer: 1729
timestamp: 0
string: 321
abbrev: 10
verbose: 2
quiet: no
dry run: no
EOF
test_expect_success 'long options' '
test-parse-options --boolean --integer 1729 --boolean --string2=321 \
--verbose --verbose --no-dry-run --abbrev=10 \
> output 2> output.err &&
test ! -s output.err &&
test_cmp expect output
'
test_expect_success 'missing required value' '
test-parse-options -s;
test $? = 129 &&
test-parse-options --string;
test $? = 129
'
cat > expect << EOF
boolean: 1
integer: 13
timestamp: 0
string: 123
abbrev: 7
verbose: 0
quiet: no
dry run: no
arg 00: a1
arg 01: b1
arg 02: --boolean
EOF
test_expect_success 'intermingled arguments' '
test-parse-options a1 --string 123 b1 --boolean -j 13 -- --boolean \
> output 2> output.err &&
test ! -s output.err &&
test_cmp expect output
'
cat > expect << EOF
boolean: 0
integer: 2
timestamp: 0
string: (not set)
abbrev: 7
verbose: 0
quiet: no
dry run: no
EOF
test_expect_success 'unambiguously abbreviated option' '
test-parse-options --int 2 --boolean --no-bo > output 2> output.err &&
test ! -s output.err &&
test_cmp expect output
'
test_expect_success 'unambiguously abbreviated option with "="' '
test-parse-options --int=2 > output 2> output.err &&
test ! -s output.err &&
test_cmp expect output
'
test_expect_success 'ambiguously abbreviated option' '
test-parse-options --strin 123;
test $? = 129
'
cat > expect << EOF
boolean: 0
integer: 0
timestamp: 0
string: 123
abbrev: 7
verbose: 0
quiet: no
dry run: no
EOF
test_expect_success 'non ambiguous option (after two options it abbreviates)' '
test-parse-options --st 123 > output 2> output.err &&
test ! -s output.err &&
test_cmp expect output
'
cat > typo.err << EOF
error: did you mean \`--boolean\` (with two dashes ?)
EOF
test_expect_success 'detect possible typos' '
test_must_fail test-parse-options -boolean > output 2> output.err &&
test ! -s output &&
test_cmp typo.err output.err
'
cat > expect <<EOF
boolean: 0
integer: 0
timestamp: 0
string: (not set)
abbrev: 7
verbose: 0
quiet: no
dry run: no
arg 00: --quux
EOF
test_expect_success 'keep some options as arguments' '
test-parse-options --quux > output 2> output.err &&
test ! -s output.err &&
test_cmp expect output
'
cat > expect <<EOF
boolean: 0
integer: 0
timestamp: 1
string: default
abbrev: 7
verbose: 0
quiet: yes
dry run: no
arg 00: foo
EOF
test_expect_success 'OPT_DATE() and OPT_SET_PTR() work' '
test-parse-options -t "1970-01-01 00:00:01 +0000" --default-string \
foo -q > output 2> output.err &&
test ! -s output.err &&
test_cmp expect output
'
cat > expect <<EOF
Callback: "four", 0
boolean: 5
integer: 4
timestamp: 0
string: (not set)
abbrev: 7
verbose: 0
quiet: no
dry run: no
EOF
test_expect_success 'OPT_CALLBACK() and OPT_BIT() work' '
test-parse-options --length=four -b -4 > output 2> output.err &&
test ! -s output.err &&
test_cmp expect output
'
cat > expect <<EOF
Callback: "not set", 1
EOF
test_expect_success 'OPT_CALLBACK() and callback errors work' '
test_must_fail test-parse-options --no-length > output 2> output.err &&
test_cmp expect output &&
test_cmp expect.err output.err
'
cat > expect <<EOF
boolean: 1
integer: 23
timestamp: 0
string: (not set)
abbrev: 7
verbose: 0
quiet: no
dry run: no
EOF
test_expect_success 'OPT_BIT() and OPT_SET_INT() work' '
test-parse-options --set23 -bbbbb --no-or4 > output 2> output.err &&
test ! -s output.err &&
test_cmp expect output
'
# --or4
# --no-or4
test_done