diff options
Diffstat (limited to 'src/util/test_getopt.c')
-rw-r--r-- | src/util/test_getopt.c | 216 |
1 files changed, 216 insertions, 0 deletions
diff --git a/src/util/test_getopt.c b/src/util/test_getopt.c new file mode 100644 index 0000000..a517887 --- /dev/null +++ b/src/util/test_getopt.c @@ -0,0 +1,216 @@ +/* + This file is part of GNUnet. + (C) 2003, 2004, 2005, 2006, 2009 Christian Grothoff (and other contributing authors) + + GNUnet is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNUnet; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ +/** + * @file util/test_getopt.c + * @brief testcase for util/getopt.c + */ +#include "platform.h" +#include "gnunet_common.h" +#include "gnunet_configuration_lib.h" +#include "gnunet_getopt_lib.h" + +#define VERBOSE 0 + +static int +testMinimal () +{ + char *const emptyargv[] = { + "test", + NULL + }; + const struct GNUNET_GETOPT_CommandLineOption emptyoptionlist[] = { + GNUNET_GETOPT_OPTION_END + }; + + if (1 != GNUNET_GETOPT_run ("test", emptyoptionlist, 1, emptyargv)) + return 1; + + return 0; +} + +static int +testVerbose () +{ + char *const myargv[] = { + "test", + "-V", + "-V", + "more", + NULL + }; + unsigned int vflags = 0; + + const struct GNUNET_GETOPT_CommandLineOption verboseoptionlist[] = { + GNUNET_GETOPT_OPTION_VERBOSE (&vflags), + GNUNET_GETOPT_OPTION_END + }; + + if (3 != GNUNET_GETOPT_run ("test", verboseoptionlist, 4, myargv)) + { + GNUNET_break (0); + return 1; + } + if (vflags != 2) + { + GNUNET_break (0); + return 1; + } + return 0; +} + +static int +testVersion () +{ + char *const myargv[] = { + "test_getopt", + "-v", + NULL + }; + const struct GNUNET_GETOPT_CommandLineOption versionoptionlist[] = { + GNUNET_GETOPT_OPTION_VERSION (PACKAGE_VERSION), + GNUNET_GETOPT_OPTION_END + }; + + if (-1 != GNUNET_GETOPT_run ("test_getopt", versionoptionlist, 2, myargv)) + { + GNUNET_break (0); + return 1; + } + return 0; +} + +static int +testAbout () +{ + char *const myargv[] = { + "test_getopt", + "-h", + NULL + }; + const struct GNUNET_GETOPT_CommandLineOption aboutoptionlist[] = { + GNUNET_GETOPT_OPTION_HELP ("Testing"), + GNUNET_GETOPT_OPTION_END + }; + + if (-1 != GNUNET_GETOPT_run ("test_getopt", aboutoptionlist, 2, myargv)) + { + GNUNET_break (0); + return 1; + } + return 0; +} + +static int +testLogOpts () +{ + char *const myargv[] = { + "test_getopt", + "-l", "filename", + "-L", "WARNING", + NULL + }; + char *level = GNUNET_strdup ("stuff"); + char *fn = NULL; + + const struct GNUNET_GETOPT_CommandLineOption logoptionlist[] = { + GNUNET_GETOPT_OPTION_LOGFILE (&fn), + GNUNET_GETOPT_OPTION_LOGLEVEL (&level), + GNUNET_GETOPT_OPTION_END + }; + + if (5 != GNUNET_GETOPT_run ("test_getopt", logoptionlist, 5, myargv)) + { + GNUNET_break (0); + return 1; + } + GNUNET_assert (fn != NULL); + if ((0 != strcmp (level, "WARNING")) || (0 != strcmp (fn, "filename"))) + { + GNUNET_break (0); + GNUNET_free (level); + GNUNET_free (fn); + return 1; + } + GNUNET_free (level); + GNUNET_free (fn); + return 0; +} + +static int +testFlagNum () +{ + char *const myargv[] = { + "test_getopt", + "-f", + "-n", "42", + "-N", "42", + NULL + }; + int flag = 0; + unsigned int num = 0; + unsigned long long lnum = 0; + + const struct GNUNET_GETOPT_CommandLineOption logoptionlist[] = { + {'f', "--flag", NULL, "helptext", 0, &GNUNET_GETOPT_set_one, + (void *) &flag}, + {'n', "--num", "ARG", "helptext", 1, &GNUNET_GETOPT_set_uint, + (void *) &num}, + {'N', "--lnum", "ARG", "helptext", 1, &GNUNET_GETOPT_set_ulong, + (void *) &lnum}, + GNUNET_GETOPT_OPTION_END + }; + + if (6 != GNUNET_GETOPT_run ("test_getopt", logoptionlist, 6, myargv)) + { + GNUNET_break (0); + return 1; + } + if ((1 != flag) || (42 != num) || (42 != lnum)) + { + GNUNET_break (0); + return 1; + } + return 0; +} + +int +main (int argc, char *argv[]) +{ + int errCnt = 0; + + GNUNET_log_setup ("test_getopt", "WARNING", NULL); + /* suppress output from -h, -v options */ +#ifndef MINGW + GNUNET_break (0 == CLOSE (1)); +#endif + if (0 != testMinimal ()) + errCnt++; + if (0 != testVerbose ()) + errCnt++; + if (0 != testVersion ()) + errCnt++; + if (0 != testAbout ()) + errCnt++; + if (0 != testLogOpts ()) + errCnt++; + if (0 != testFlagNum ()) + errCnt++; + return errCnt; +} |