Main Page | Modules | Data Structures | File List | Data Fields

test.c

00001 /* 
00002  * Copyright (c) 2005-2008 by KoanLogic s.r.l. - All rights reserved.  
00003  */
00004 
00005 static const char rcsid[] =
00006     "$Id: test.c,v 1.7 2008/03/18 10:43:28 tho Exp $";
00007 
00008 #include <u/libu.h>
00009 
00010 enum { MAX_MODS = 1024 };
00011 
00012 test_runner_t _mods[MAX_MODS] = { NULL };
00013 test_runner_t *_top = _mods;
00014 
00015 char *_mods_nm[MAX_MODS] = { NULL };
00016 char **_top_nm = _mods_nm;
00017 
00018 int _test_cnt = 0;
00019 int _test_fail = 0;
00020 int _test_ok = 0;
00021 int _verbose = 0;
00022 
00023 static char **arg;
00024 static int narg;
00025 
00026 static void usage(const char *prog)
00027 {
00028     static const char *us = 
00029         "usage: %s OPTIONS [ MODULE ... ]\n"
00030         "\n"
00031         "    -h          display this help   \n"
00032         "    -v          be verbose          \n"
00033         "\n"
00034         "    Available modules:\n";
00035     char **p;
00036 
00037     fprintf(stderr, us, prog);
00038 
00039     for(p = _mods_nm; p != _top_nm; ++p)
00040         fprintf(stderr, "        %s\n", *p);
00041     fprintf(stderr, "\n");
00042 
00043     exit(1);
00044 }
00045 
00046 static int parse_opt(int argc, char **argv)
00047 {
00048     int ret;
00049 
00050     while((ret = getopt(argc, argv, "vh")) != -1)
00051     {
00052         switch(ret)
00053         {
00054         case 'v': 
00055             _verbose = 1;
00056             break;
00057         default:
00058         case 'h': 
00059             usage(argv[0]);
00060         }
00061     }
00062 
00063     narg = argc - optind;
00064     arg = argv + optind;
00065 
00066     return 0;
00067 }
00068 
00069 static int run_test_module(const char *module)
00070 {
00071     char **m;
00072     int i;
00073 
00074     for(i = 0, m = _mods_nm; m < _top_nm; ++m, ++i)
00075     {
00076         if(!strcasecmp(*m, module))
00077         {
00078             _mods[i]();  /* run module tests */
00079             return 0;
00080         }
00081     }
00082 
00083     con_return_ifm (1, ~0, "unknown module %s", module);
00084 }
00085 
00086 int u_test_run(int argc, char **argv)
00087 {
00088     test_runner_t *p;
00089     int i;
00090 
00091     dbg_err_if(parse_opt(argc, argv));
00092 
00093     if(narg)
00094     {
00095         /* run only user provided modules */
00096         for(i = 0; i < narg; ++i)
00097             dbg_err_if(run_test_module(arg[i]));
00098     } else {
00099         /* run all modules */
00100         for(i = 0, p = _mods; p < _top; ++p, ++i)
00101             (*p)();
00102     }
00103 
00104     printf("%d test run, %d failed\n", _test_cnt, _test_fail);
00105 
00106     return 0;
00107 err:
00108     return ~0;
00109 }
00110 
00111 

←Products
© 2005-2008 - KoanLogic S.r.l. - All rights reserved