diff options
author | Junio C Hamano <gitster@pobox.com> | 2011-11-10 09:05:31 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-11-10 09:05:31 -0800 |
commit | 77f143bf3e218857ec8e5244d7e862e8e0c1a041 (patch) | |
tree | 9f720e61941241b53a4f258d0dc62e5a9a360aa8 /t/t0040-parse-options.sh | |
parent | mktree: fix a memory leak in write_tree() (diff) | |
parent | build-in git-mktree (diff) | |
download | tgif-77f143bf3e218857ec8e5244d7e862e8e0c1a041.tar.xz |
Merge 'build-in git-mktree'
* commit '633e3556ccbc': (5835 commits)
build-in git-mktree
allow -t abbreviation for --track in git branch
gitweb: Remove function prototypes (cleanup)
Documentation: cloning to empty directory is allowed
Clarify kind of conflict in merge-one-file helper
git config: clarify --add and --get-color
archive-tar.c: squelch a type mismatch warning
Start 1.6.4 development
Start 1.6.3.1 maintenance series.
GIT 1.6.3
t4029: use sh instead of bash
t4200: convert sed expression which operates on non-text file to perl
t4200: remove two unnecessary lines
t/annotate-tests.sh: avoid passing a non-newline terminated file to sed
t4118: avoid sed invocation on file without terminating newline
t4118: add missing '&&'
t8005: use egrep when extended regular expressions are required
git-clean doc: the command only affects paths under $(cwd)
improve error message in config.c
t4018-diff-funcname: add cpp xfuncname pattern to syntax test
...
Diffstat (limited to 't/t0040-parse-options.sh')
-rwxr-xr-x | t/t0040-parse-options.sh | 251 |
1 files changed, 251 insertions, 0 deletions
diff --git a/t/t0040-parse-options.sh b/t/t0040-parse-options.sh new file mode 100755 index 0000000000..e38241c80a --- /dev/null +++ b/t/t0040-parse-options.sh @@ -0,0 +1,251 @@ +#!/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 |