#!/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
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
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
'

cat > expect << EOF
boolean: 1
integer: 13
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
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
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
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: 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
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
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
