blob: b5c07b5d8b8266f346ae26aadf1605ea8cd7c907 (
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
134
135
136
137
138
|
declare -i testcount=0 pass=0 fail=0
if [[ -z $1 || ! -f $1 ]]; then
printf "error: path to parseopts library not provided or does not exist\n"
exit 1
fi
. "$1"
if ! type -t parseopts >/dev/null; then
printf 'parseopts function not found\n'
exit 1
fi
OPT_SHORT="AcdefFghiLmop:rRsV"
OPT_LONG=('allsource' 'asroot' 'ignorearch' 'check' 'clean:' 'cleanall' 'nodeps'
'noextract' 'force' 'forcever:' 'geninteg' 'help' 'holdver'
'install' 'key:' 'log' 'nocolor' 'nobuild' 'nocheck' 'nosign' 'pkg:' 'rmdeps'
'repackage' 'skipinteg' 'sign' 'source' 'syncdeps' 'version' 'config:'
'noconfirm' 'noprogressbar')
parse() {
local result=$1 tokencount=$2; shift 2
(( ++testcount ))
parseopts "$OPT_SHORT" "${OPT_LONG[@]}" -- "$@" 2>/dev/null
test_result "$result" "$tokencount" "$*" "${OPTRET[@]}"
unset OPTRET
}
test_result() {
local result=$1 tokencount=$2 input=$3; shift 3
if [[ $result = "$*" ]] && (( tokencount == $# )); then
(( ++pass ))
else
printf '[TEST %3s]: FAIL\n' "$testcount"
printf ' input: %s\n' "$input"
printf ' output: %s (%s tokens)\n' "$*" "$#"
printf ' expected: %s (%s tokens)\n' "$result" "$tokencount"
echo
(( ++fail ))
fi
}
summarize() {
if (( !fail )); then
printf 'All %s tests successful\n' "$testcount"
exit 0
else
printf '%s of %s tests failed\n' "$fail" "$testcount"
exit 1
fi
}
trap 'summarize' EXIT
printf 'Beginning parseopts tests\n'
parse '--' 1
parse '-s -r --' 3 -s -r
parse '-s -r --' 3 -sr
parse '--' 1 -s -p
parse '-p PKGBUILD -L --' 4 -p PKGBUILD -L
parse '-p PKGBUILD --' 3 -pPKGBUILD
parse '--' 1 --sir
parse '--log --' 2 --log
parse '--' 1 -sr --pkg
parse '--pkg foo --' 3 --pkg foo
parse '--pkg foo bar -- baz' 4 --pkg "foo bar" baz
parse '--pkg foo=bar -- baz' 4 --pkg foo=bar baz
parse '--pkg bar -- foo baz' 5 foo --pkg=bar baz
parse '--pkg foo bar -- baz' 4 baz --pkg="foo bar"
parse '--' 1 --force=always -s
parse '--pkg foo=bar --' 3 --pkg=foo=bar
parse '-s -r -- foo bar baz' 6 -s -r -- foo bar baz
parse '-s -r -- foo baz' 5 -s foo baz -r
parse '-p foo bar -s --' 4 -p'foo bar' -s
parse '-i -- foo bar' 3 -i 'foo bar'
parse '--nocolor --' 2 --nocol
parse '--config foo --' 3 --conf foo
parse '--' 1 '--for'
parse '--force --' 2 --force
parse '--clean foo --' 3 --clean=foo
|