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

test.c

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

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