summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/unistd/Makefile3
-rw-r--r--test/unistd/tstgetopt.c76
2 files changed, 78 insertions, 1 deletions
diff --git a/test/unistd/Makefile b/test/unistd/Makefile
index 4db50174d..3640d7c6a 100644
--- a/test/unistd/Makefile
+++ b/test/unistd/Makefile
@@ -1,9 +1,10 @@
# uClibc unistd tests
# Licensed under the GNU Library General Public License, see COPYING.LIB
-TESTS = clone errno fork getcwd getopt getopt_long preadwrite vfork
+TESTS = clone errno fork getcwd getopt getopt_long preadwrite tstgetopt vfork
include ../Test.mak
export OPTS_getopt = -abcXXX -9
export OPTS_getopt_long = --add XXX --delete YYY --verbose
+export OPTS_tstgetopt = -a -b -cfoobar --required foobar --optional=bazbug --none random --col --color --colour
diff --git a/test/unistd/tstgetopt.c b/test/unistd/tstgetopt.c
new file mode 100644
index 000000000..97ae2ef25
--- /dev/null
+++ b/test/unistd/tstgetopt.c
@@ -0,0 +1,76 @@
+#include <getopt.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+int
+main (int argc, char **argv)
+{
+ static const struct option options[] =
+ {
+ {"required", required_argument, NULL, 'r'},
+ {"optional", optional_argument, NULL, 'o'},
+ {"none", no_argument, NULL, 'n'},
+ {"color", no_argument, NULL, 'C'},
+ {"colour", no_argument, NULL, 'C'},
+ {NULL, 0, NULL, 0 }
+ };
+
+ int aflag = 0;
+ int bflag = 0;
+ char *cvalue = NULL;
+ int Cflag = 0;
+ int nflag = 0;
+ int index;
+ int c;
+ int result = 0;
+
+ while ((c = getopt_long (argc, argv, "abc:", options, NULL)) >= 0)
+ switch (c)
+ {
+ case 'a':
+ aflag = 1;
+ break;
+ case 'b':
+ bflag = 1;
+ break;
+ case 'c':
+ cvalue = optarg;
+ break;
+ case 'C':
+ ++Cflag;
+ break;
+ case '?':
+ fputs ("Unknown option.\n", stderr);
+ return 1;
+ default:
+ fprintf (stderr, "This should never happen!\n");
+ return 1;
+
+ case 'r':
+ printf ("--required %s\n", optarg);
+ result |= strcmp (optarg, "foobar") != 0;
+ break;
+ case 'o':
+ printf ("--optional %s\n", optarg);
+ result |= optarg == NULL || strcmp (optarg, "bazbug") != 0;
+ break;
+ case 'n':
+ puts ("--none");
+ nflag = 1;
+ break;
+ }
+
+ printf ("aflag = %d, bflag = %d, cvalue = %s, Cflags = %d, nflag = %d\n",
+ aflag, bflag, cvalue, Cflag, nflag);
+
+ result |= (aflag != 1 || bflag != 1 || cvalue == NULL
+ || strcmp (cvalue, "foobar") != 0 || Cflag != 3 || nflag != 1);
+
+ for (index = optind; index < argc; index++)
+ printf ("Non-option argument %s\n", argv[index]);
+
+ result |= optind + 1 != argc || strcmp (argv[optind], "random") != 0;
+
+ return result;
+}