summaryrefslogtreecommitdiff
path: root/t/t0040-parse-options.sh
blob: c23f0ace85c83f54fd7562d72af6ef6c1ea2eca3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/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
    -i, --integer <n>     get a integer
    -j <n>                get a integer, too

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

magic arguments
    --quux                means --quux

EOF

test_expect_success 'test help' '
	! test-parse-options -h > output 2> output.err &&
	test ! -s output &&
	git diff expect.err output.err
'

cat > expect << EOF
boolean: 2
integer: 1729
string: 123
EOF

test_expect_success 'short options' '
	test-parse-options -s123 -b -i 1729 -b > output 2> output.err &&
	git diff expect output &&
	test ! -s output.err
'
cat > expect << EOF
boolean: 2
integer: 1729
string: 321
EOF

test_expect_success 'long options' '
	test-parse-options --boolean --integer 1729 --boolean --string2=321 \
		> output 2> output.err &&
	test ! -s output.err &&
	git diff expect output
'

cat > expect << EOF
boolean: 1
integer: 13
string: 123
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 &&
	git diff expect output
'

cat > expect << EOF
boolean: 0
integer: 2
string: (not set)
EOF

test_expect_success 'unambiguously abbreviated option' '
	test-parse-options --int 2 --boolean --no-bo > output 2> output.err &&
	test ! -s output.err &&
	git diff expect output
'

test_expect_success 'unambiguously abbreviated option with "="' '
	test-parse-options --int=2 > output 2> output.err &&
	test ! -s output.err &&
	git diff expect output
'

test_expect_success 'ambiguously abbreviated option' '
	test-parse-options --strin 123;
	test $? = 129
'

cat > expect << EOF
boolean: 0
integer: 0
string: 123
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 &&
	git diff expect output
'

cat > expect.err << EOF
error: did you mean \`--boolean\` (with two dashes ?)
EOF

test_expect_success 'detect possible typos' '
	! test-parse-options -boolean > output 2> output.err &&
	test ! -s output &&
	git diff expect.err output.err
'

cat > expect <<EOF
boolean: 0
integer: 0
string: (not set)
arg 00: --quux
EOF

test_expect_success 'keep some options as arguments' '
	test-parse-options --quux > output 2> output.err &&
        test ! -s output.err &&
        git diff expect output
'

test_done