X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-getopt.c;h=152efeabcc7b82b319e9222b817ef4229c1de4ab;hb=1276a2c5f24c0c932426aca9c899fa524d2443f2;hp=cc87f3272630fa761a9d107815227704ce875823;hpb=c0c5acfbe255f5542bc1c81c7aec223d95e504a6;p=gnulib.git diff --git a/tests/test-getopt.c b/tests/test-getopt.c index cc87f3272..152efeabc 100644 --- a/tests/test-getopt.c +++ b/tests/test-getopt.c @@ -1,5 +1,5 @@ /* Test of command line argument processing. - Copyright (C) 2009 Free Software Foundation, Inc. + Copyright (C) 2009-2014 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,56 +18,82 @@ #include -#if GNULIB_GETOPT_GNU +/* None of the files accessed by this test are large, so disable the + ftell link warning if we are not using the gnulib ftell module. */ +#define _GL_NO_LARGE_FILES + +#if GNULIB_TEST_GETOPT_GNU # include + +# ifndef __getopt_argv_const +# define __getopt_argv_const const +# endif +# include "signature.h" +SIGNATURE_CHECK (getopt_long, int, (int, char *__getopt_argv_const *, + char const *, struct option const *, + int *)); +SIGNATURE_CHECK (getopt_long_only, int, (int, char *__getopt_argv_const *, + char const *, struct option const *, + int *)); + #endif + #include +#include "signature.h" +SIGNATURE_CHECK (getopt, int, (int, char * const[], char const *)); + #include #include #include -#define ASSERT(expr) \ - do \ - { \ - if (!(expr)) \ - { \ - fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ - fflush (stderr); \ - abort (); \ - } \ - } \ - while (0) - -/* The glibc/gnulib implementation of getopt supports setting optind = 0, - but other implementations don't. */ -#if defined __GETOPT_PREFIX || (__GLIBC__ >= 2) -# define OPTIND_MIN 0 -#else -# define OPTIND_MIN 1 -#endif +/* This test intentionally remaps stderr. So, we arrange to have fd 10 + (outside the range of interesting fd's during the test) set up to + duplicate the original stderr. */ + +#define BACKUP_STDERR_FILENO 10 +#define ASSERT_STREAM myerr +#include "macros.h" + +static FILE *myerr; #include "test-getopt.h" -#if GNULIB_GETOPT_GNU +#if GNULIB_TEST_GETOPT_GNU # include "test-getopt_long.h" #endif int main (void) { + /* This test validates that stderr is used correctly, so move the + original into fd 10. */ + if (dup2 (STDERR_FILENO, BACKUP_STDERR_FILENO) != BACKUP_STDERR_FILENO + || (myerr = fdopen (BACKUP_STDERR_FILENO, "w")) == NULL) + return 2; + + ASSERT (freopen ("test-getopt.tmp", "w", stderr) == stderr); + + /* These default values are required by POSIX. */ + ASSERT (optind == 1); + ASSERT (opterr != 0); + setenv ("POSIXLY_CORRECT", "1", 1); test_getopt (); -#if GNULIB_GETOPT_GNU +#if GNULIB_TEST_GETOPT_GNU test_getopt_long_posix (); #endif unsetenv ("POSIXLY_CORRECT"); test_getopt (); -#if GNULIB_GETOPT_GNU +#if GNULIB_TEST_GETOPT_GNU test_getopt_long (); + test_getopt_long_only (); #endif + ASSERT (fclose (stderr) == 0); + ASSERT (remove ("test-getopt.tmp") == 0); + return 0; }