From 0d1013082a9f7d867e9782a24c672d165359805e Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Wed, 7 Aug 2002 12:47:11 +0000 Subject: getopt tests --- test/unistd/.cvsignore | 2 + test/unistd/Makefile | 16 +++++++- test/unistd/getopt.c | 69 +++++++++++++++++++++++++++++++++++ test/unistd/getopt_long.c | 93 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 179 insertions(+), 1 deletion(-) create mode 100644 test/unistd/getopt.c create mode 100644 test/unistd/getopt_long.c diff --git a/test/unistd/.cvsignore b/test/unistd/.cvsignore index dad5c62bd..7575c2281 100644 --- a/test/unistd/.cvsignore +++ b/test/unistd/.cvsignore @@ -2,3 +2,5 @@ fork fork_glibc vfork vfork_glibc +getopt +getopt_long diff --git a/test/unistd/Makefile b/test/unistd/Makefile index 251f4c78e..360392612 100644 --- a/test/unistd/Makefile +++ b/test/unistd/Makefile @@ -21,7 +21,7 @@ include $(TESTDIR)/Rules.mak -TARGETS=fork fork_glibc vfork vfork_glibc getcwd +TARGETS=fork fork_glibc vfork vfork_glibc getcwd getopt getopt_long all: $(TARGETS) getcwd: getcwd.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC) @@ -79,6 +79,20 @@ vfork_glibc: vfork.c ../testsuite.h Makefile -./$@ -@ echo " " +getopt: getopt.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC) + $(CC) $(CFLAGS) -c $< -o $@.o + $(CC) $(LDFLAGS) $@.o -o $@ $(EXTRA_LIBS) + $(STRIPTOOL) -x -R .note -R .comment $@ + ./$@ -abcXXX -9 + -@ echo " " + +getopt_long: getopt_long.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC) + $(CC) $(CFLAGS) -c $< -o $@.o + $(CC) $(LDFLAGS) $@.o -o $@ $(EXTRA_LIBS) + $(STRIPTOOL) -x -R .note -R .comment $@ + ./$@ --add XXX --delete YYY --verbose + -@ echo " " + clean: rm -f *.[oa] *~ core $(TARGETS) diff --git a/test/unistd/getopt.c b/test/unistd/getopt.c new file mode 100644 index 000000000..401765cc8 --- /dev/null +++ b/test/unistd/getopt.c @@ -0,0 +1,69 @@ +/* Getopt tests */ + +#include +#include +#include +#include + + +int main (int argc, char **argv) +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + + c = getopt (argc, argv, "abc:d:0123456789"); + if (c == EOF) + break; + + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value `%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + exit (0); +} + diff --git a/test/unistd/getopt_long.c b/test/unistd/getopt_long.c new file mode 100644 index 000000000..4064e224d --- /dev/null +++ b/test/unistd/getopt_long.c @@ -0,0 +1,93 @@ +/* Getopt tests */ + +#include +#include +#include +#include + + +int main (int argc, char **argv) +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + int option_index = 0; + static struct option long_options[] = + { + {"add", 1, 0, 0}, + {"append", 0, 0, 0}, + {"delete", 1, 0, 0}, + {"verbose", 0, 0, 0}, + {"create", 0, 0, 0}, + {"file", 1, 0, 0}, + {0, 0, 0, 0} + }; + + c = getopt_long (argc, argv, "abc:d:0123456789", + long_options, &option_index); + if (c == EOF) + break; + + switch (c) + { + case 0: + printf ("option %s", long_options[option_index].name); + if (optarg) + printf (" with arg %s", optarg); + printf ("\n"); + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value `%s'\n", optarg); + break; + + case 'd': + printf ("option d with value `%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + -- cgit v1.2.3