Mercurial > hgrepos > FreeBSD > ports > sysutils > local-bsdtools
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=" ] |
