comparison tests/common.t @ 803:2cd233b137ec

common.subr: Implement postprocess_getopts_for_long() to process long options in combination with the Shell's internal getopts()
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 04 Nov 2024 11:08:15 +0100
parents
children 6cf3e1021862
comparison
equal deleted inserted replaced
802:31ff8e5efdd6 803:2cd233b137ec
1 Basic tests of common.subr
2
3 Shell is /bin/sh.
4
5
6 Setup
7 =====
8
9 $ set -u
10 $ . "${TESTDIR}/testsetup.sh"
11 $ _p_datadir="${TESTDIR}/../share/local-bsdtools"
12 $ . "${_p_datadir}/common.subr"
13
14
15 Getopts
16 =======
17
18 Normal successfull calls
19
20 $ error=''
21 > opt_a=no
22 > opt_b=no
23 > unset opt_b_val
24 > OPTIND=1
25 > while getopts "ab:-:" opt --long-a --long-b=value-of-b arg ; do
26 > postprocess_getopts_for_long "ab:-:" opt "long-a" "long-b=" "" --long-b=value-of-b arg
27 > case "$opt" in
28 > a|long-a) opt_a=yes
29 > [ -z "${OPTARG+SET}" ] || echo "ERROR: OPTARG"
30 > ;;
31 > b|long-b) opt_b=yes
32 > [ -n "${OPTARG+SET}" ] || echo "ERROR: OPTARG"
33 > opt_b_val="${OPTARG}"
34 > ;;
35 > \?)
36 > error=foo
37 > ;;
38 > *)
39 > error=bar
40 > ;;
41 > esac
42 > done
43
44 $ checkyesno opt_a
45 $ checkyesno opt_b
46 $ [ "${opt_b_val}" = "value-of-b" ]
47 $ [ -z "${error}" ]
48
49 Not null-terminated long options speccifications
50
51 $ OPTIND=1
52 > getopts "ab:-:" opt --long-a --long-b arg
53 > postprocess_getopts_for_long "ab:-:" opt "long-a" "long-b"
54 /bin/sh: ERROR: Missing null terminator for long option specifications
55 [1]
56 $ [ "${opt}" = '?' ]
57 $ [ -z "${OPTARG+SET}" ]
58
59 Not null-terminated long options specs (alternate error handling)
60
61 $ OPTIND=1
62 > getopts ":ab:-:" opt --long-a --long-b arg
63 > postprocess_getopts_for_long ":ab:-:" opt "long-a" "long-b"
64 [1]
65 $ [ "${opt}" = ':' ]
66 $ [ -n "${OPTARG+SET}" ]
67 $ [ -z "${OPTARG}" ]
68
69 Illegal long option
70
71 $ error=''
72 > opt_a=no
73 > opt_b=no
74 > unset opt_b_val
75 > OPTIND=1
76 > while getopts "ab:-:" opt --long-unknown ; do
77 > postprocess_getopts_for_long "ab:-:" opt "long-a" "long-b=" "" --long-unknown
78 > case "$opt" in
79 > a|long-a) opt_a=yes
80 > [ -z "${OPTARG+SET}" ] || echo "ERROR: OPTARG"
81 > ;;
82 > b|long-b) opt_b=yes
83 > [ -n "${OPTARG+SET}" ] || echo "ERROR: OPTARG"
84 > opt_b_val="${OPTARG}"
85 > ;;
86 > \?)
87 > error=foo
88 > ;;
89 > *)
90 > error=bar
91 > ;;
92 > esac
93 > done
94 /bin/sh: ERROR: Illegal option --long-unknown
95 $ [ "${error}" = "foo" ]
96
97 Illegal long option (alternate error handling)
98
99 $ error=''
100 > opt_a=no
101 > opt_b=no
102 > unset opt_b_val
103 > OPTIND=1
104 > while getopts ":ab:-:" opt --long-unknown ; do
105 > postprocess_getopts_for_long ":ab:-:" opt "long-a" "long-b=" "" --long-unknown
106 > case "$opt" in
107 > a|long-a) opt_a=yes
108 > [ -z "${OPTARG+SET}" ] || echo "ERROR: OPTARG"
109 > ;;
110 > b|long-b) opt_b=yes
111 > [ -n "${OPTARG+SET}" ] || echo "ERROR: OPTARG"
112 > opt_b_val="${OPTARG}"
113 > ;;
114 > \?)
115 > error="${OPTARG}"
116 > ;;
117 > *)
118 > error=bar
119 > ;;
120 > esac
121 > done
122 $ [ "${error}" = "long-unknown" ]
123
124 Missing required option argument
125
126 $ error=''
127 > opt_a=no
128 > opt_b=no
129 > unset opt_b_val
130 > OPTIND=1
131 > while getopts "ab:-:" opt --long-a --long-b arg ; do
132 > postprocess_getopts_for_long "ab:-:" opt "long-a" "long-b=" "" --long-b arg
133 > case "$opt" in
134 > a|long-a) opt_a=yes
135 > [ -z "${OPTARG+SET}" ] || echo "ERROR: OPTARG"
136 > ;;
137 > b|long-b) opt_b=yes
138 > [ -n "${OPTARG+SET}" ] || echo "ERROR: OPTARG"
139 > opt_b_val="${OPTARG}"
140 > ;;
141 > ?)
142 > error=foo
143 > ;;
144 > *)
145 > error=bar
146 > ;;
147 > esac
148 > done
149 /bin/sh: ERROR: option argument required for option --long-b
150 $ [ "${error}" = "foo" ]
151
152 Missing required option argument (alternate error handling)
153
154 $ error=''
155 > opt_a=no
156 > opt_b=no
157 > unset opt_b_val
158 > OPTIND=1
159 > while getopts ":ab:-:" opt --long-a --long-b arg ; do
160 > postprocess_getopts_for_long ":ab:-:" opt "long-a" "long-b=" "" --long-b arg
161 > case "$opt" in
162 > a|long-a) opt_a=yes
163 > [ -z "${OPTARG+SET}" ] || echo "ERROR: OPTARG"
164 > ;;
165 > b|long-b) opt_b=yes
166 > [ -n "${OPTARG+SET}" ] || echo "ERROR: OPTARG"
167 > opt_b_val="${OPTARG}"
168 > ;;
169 > :)
170 > error="${OPTARG}"
171 > ;;
172 > *)
173 > error=bar
174 > ;;
175 > esac
176 > done
177 $ [ "${error}" = "long-b" ]
178
179 Option argument value not allowed
180
181 $ error=''
182 > opt_a=no
183 > opt_b=no
184 > unset opt_b_val
185 > OPTIND=1
186 > while getopts "ab:-:" opt --long-a=a-value arg ; do
187 > postprocess_getopts_for_long "ab:-:" opt "long-a" "long-b=" "" --long-a=a-value arg
188 > case "$opt" in
189 > a|long-a) opt_a=yes
190 > [ -z "${OPTARG+SET}" ] || echo "ERROR: OPTARG"
191 > ;;
192 > b|long-b) opt_b=yes
193 > [ -n "${OPTARG+SET}" ] || echo "ERROR: OPTARG"
194 > opt_b_val="${OPTARG}"
195 > ;;
196 > ?)
197 > error=foo
198 > ;;
199 > *)
200 > error=bar
201 > ;;
202 > esac
203 > done
204 /bin/sh: ERROR: no option argument allowed for option --long-a
205 $ [ "${error}" = "foo" ]
206
207 Missing required option argument (alternate error handling)
208
209 $ error=''
210 > opt_a=no
211 > opt_b=no
212 > unset opt_b_val
213 > OPTIND=1
214 > while getopts ":ab:-:" opt --long-a=a-value arg ; do
215 > postprocess_getopts_for_long ":ab:-:" opt "long-a" "long-b=" "" --long-a=a-value arg
216 > case "$opt" in
217 > a|long-a) opt_a=yes
218 > [ -z "${OPTARG+SET}" ] || echo "ERROR: OPTARG"
219 > ;;
220 > b|long-b) opt_b=yes
221 > [ -n "${OPTARG+SET}" ] || echo "ERROR: OPTARG"
222 > opt_b_val="${OPTARG}"
223 > ;;
224 > :)
225 > error="${OPTARG}"
226 > ;;
227 > *)
228 > error=bar
229 > ;;
230 > esac
231 > done
232 $ [ "${error}" = "long-a" ]
233
234 Invalid character in long option
235
236 $ error=''
237 > opt_a=no
238 > OPTIND=1
239 > while getopts "ab:-:" opt --long=a ; do
240 > postprocess_getopts_for_long "ab:-:" opt "long=a" "" --long=a arg
241 > case "$opt" in
242 > a|long=a) opt_a=yes
243 > [ -z "${OPTARG+SET}" ] || echo "ERROR: OPTARG"
244 > ;;
245 > \?)
246 > error=foo
247 > ;;
248 > *)
249 > error=bar
250 > ;;
251 > esac
252 > done
253 /bin/sh: ERROR: Long option specification contains a forbidden `=' character: long=a
254 $ [ "${error}" = "foo" ]
255
256 Invalid character in long option (alternate error handling)
257
258 $ error=''
259 > opt_a=no
260 > OPTIND=1
261 > while getopts ":a-:" opt --long=a ; do
262 > postprocess_getopts_for_long ":a-:" opt "long=a" "" --long=a arg
263 > case "$opt" in
264 > a|long=a) opt_a=yes
265 > [ -z "${OPTARG+SET}" ] || echo "ERROR: OPTARG"
266 > ;;
267 > \?)
268 > error="${OPTARG}"
269 > ;;
270 > *)
271 > error=bar
272 > ;;
273 > esac
274 > done
275 $ [ "${error}" = "long=a" ]
276
277 Invalid character in long option
278
279 $ error=''
280 > opt_b=no
281 > OPTIND=1
282 > while getopts "b:-:" opt --long=a ; do
283 > postprocess_getopts_for_long "b:-:" opt "long=b=" "" --long=b=value arg
284 > case "$opt" in
285 > b|long=b) opt_b=yes
286 > ;;
287 > \?)
288 > error=foo
289 > ;;
290 > *)
291 > error=bar
292 > ;;
293 > esac
294 > done
295 /bin/sh: ERROR: Long option specification contains a forbidden `=' character: long=b=
296 $ [ "${error}" = "foo" ]
297
298 Invalid character in long option (alternate error handling)
299
300 $ error=''
301 > opt_b=no
302 > OPTIND=1
303 > while getopts ":b:-:" opt --long=a ; do
304 > postprocess_getopts_for_long ":b:-:" opt "long=b=" "" --long=b=value arg
305 > case "$opt" in
306 > b|long=b) opt_b=yes
307 > ;;
308 > \?)
309 > error="${OPTARG}"
310 > ;;
311 > *)
312 > error=bar
313 > ;;
314 > esac
315 > done
316 $ [ "${error}" = "long=b=" ]