From e326768467620173d3fe7204b3960db49faf7fa8 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 7 Apr 2010 22:59:40 -0700 Subject: Add tests for recent getopt changes. --- posix/bug-getopt4.c | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 posix/bug-getopt4.c (limited to 'posix/bug-getopt4.c') diff --git a/posix/bug-getopt4.c b/posix/bug-getopt4.c new file mode 100644 index 0000000..1daffd1 --- /dev/null +++ b/posix/bug-getopt4.c @@ -0,0 +1,86 @@ +/* BZ 11041 */ +#include +#include +#include + +static const struct option opts[] = + { + { "alpha", optional_argument, NULL, 'a' }, + { NULL, 0, NULL, 0 } + }; + +static int +one_test (const char *fmt, int argc, char *argv[], int n, int expected[n]) +{ + optind = 1; + + int res = 0; + for (int i = 0; i < n; ++i) + { + rewind (stderr); + if (ftruncate (fileno (stderr), 0) != 0) + { + puts ("cannot truncate file"); + return 1; + } + + int c = getopt_long (argc, argv, fmt, opts, NULL); + if (c != expected[i]) + { + printf ("format '%s' test %d failed: expected '%c', got '%c'\n", + fmt, i, expected[i], c); + res = 1; + } + else if (optarg != NULL) + { + printf ("format '%s' test %d failed: optarg is \"%s\", not NULL\n", + fmt, i, optarg); + res = 1; + } + if (ftell (stderr) != 0) + { + printf ("format '%s' test %d failed: printed to stderr\n", + fmt, i); + res = 1; + } + } + + return res; +} + + +static int +do_test (void) +{ + char *fname = tmpnam (NULL); + if (fname == NULL) + { + puts ("cannot generate name for temporary file"); + return 1; + } + + if (freopen (fname, "w+", stderr) == NULL) + { + puts ("cannot redirect stderr"); + return 1; + } + + remove (fname); + + int ret = one_test ("W;", 2, + (char *[2]) { (char *) "bug-getopt4", (char *) "--a" }, + 1, (int [1]) { 'a' }); + + ret |= one_test ("W;", 3, + (char *[3]) { (char *) "bug-getopt4", (char *) "-W", + (char *) "a" }, + 1, (int [1]) { 'a' }); + + if (ret == 0) + puts ("all OK"); + + return ret; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" -- cgit v1.1