diff tests/builtin_getopts/testsetup.sh @ 707:cc06815e5504

Add some tests about the behaviour of FreeBSD's /bin/sh builtin getopts(). It also has the "silent" option -- but it is undocumented.
author Franz Glasner <fzglas.hg@dom66.de>
date Wed, 02 Oct 2024 19:50:37 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/builtin_getopts/testsetup.sh	Wed Oct 02 19:50:37 2024 +0200
@@ -0,0 +1,98 @@
+#!/bin/sh
+#
+# Test the behaviour of the shell's builtin `getopts`
+#
+
+#:
+#: Reset all the global variables thar are used by `getopts`
+#:
+#: Output (Globals):
+#:   OPTIND (int):
+#:   OPTARG:
+#:
+reset_getopts() {
+    OPTIND=1
+    OPTARG=
+    # XXX FIXME: Is this used in FreeBSD's /bin/sh
+    # OPTERR=
+
+    # The test variable
+    opt=''
+    
+    return 0
+}
+
+
+test_standard_1() {
+    while getopts 'ab:' opt; do
+        case "$opt" in
+            a)
+                echo "OPTION: a with arg: \`${OPTARG+SET}'"
+                ;;
+            b)
+                echo "OPTION: b with arg: \`${OPTARG}'"
+                ;;
+            \?)
+		# All errors are reported here
+                if [ -n "${OPTARG+SET}" ] ; then
+                    echo "ERROR: unknown option: ${OPTARG}" >&2
+                else
+		    echo "ERROR: unknown option" >&2
+		fi
+                ;;
+	    :)
+		# Never landing here
+                if [ -n "${OPTARG+SET}" ] ; then
+                    echo "ERROR: unknown option (colon): ${OPTARG}" >&2
+                else
+		    echo "ERROR: unknown option (colon)" >&2
+		fi
+                ;;
+            *)
+                echo "ERROR: option handling" >&2
+                ;;
+        esac
+    done
+    echo "OPTIND: ${OPTIND}"
+}
+
+
+#:
+#: Silent mode with a colon ``:`` as the first character in optstring.
+#:
+#: This is undocumented in current FreeBSD's :command:`/bin/sh`.
+#: But it works as in :command:`/usr/local/bin/ksh93`.
+#:
+test_noreport_1() {
+    # Note: The first char in optstring is a colon!
+    while getopts ':ab:' opt; do
+        case "$opt" in
+            a)
+                echo "OPTION: a with arg: \`${OPTARG+SET}'"
+                ;;
+            b)
+                echo "OPTION: b with arg: \`${OPTARG}'"
+                ;;
+            \?)
+		# An invalid option is reported here
+                if [ -n "${OPTARG+SET}" ] ; then
+                    echo "ERROR: unknown option: ${OPTARG}" >&2
+                else
+		    echo "ERROR: unknown option" >&2
+		fi
+                ;;
+	    :)
+		# A missing required parameter is reported here
+                if [ -n "${OPTARG+SET}" ] ; then
+                    echo "ERROR: unknown option (colon): ${OPTARG}" >&2
+                else
+		    echo "ERROR: unknown option (colon)" >&2
+		fi
+                ;;
+            *)
+                echo "ERROR: option handling" >&2
+                ;;
+        esac
+    done
+    echo "OPTIND: ${OPTIND}"    
+}