Skip to content

Commit

Permalink
Change test_main to run a single test case out of the suite
Browse files Browse the repository at this point in the history
By passing the name of the test function on the command line
we execute exactly that one test, and then exit successfully
if the test did not fail.  This permits multiple functions in
the same .c file, so they could be called from a shell script
or debugged independently externally.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
  • Loading branch information
spearce committed Nov 4, 2008
1 parent b923f2f commit b81dd80
Showing 1 changed file with 29 additions and 4 deletions.
33 changes: 29 additions & 4 deletions tests/test_main.c
Expand Up @@ -29,11 +29,36 @@
#define BEGIN_TEST(name) extern void testfunc__##name(void);
#include TEST_TOC

struct test_def {
const char *name;
void (*fun)(void);
};
struct test_def all_tests[] = {
# undef BEGIN_TEST
# define BEGIN_TEST(name) {#name, testfunc__##name},
# include TEST_TOC
{NULL, NULL}
};

int main(int argc, char **argv)
{
#undef BEGIN_TEST
#define BEGIN_TEST(name) testfunc__##name();
#include TEST_TOC
struct test_def *t;

return 0;
if (argc == 1) {
for (t = all_tests; t->name; t++)
t->fun();
return 0;
} else if (argc == 2) {
for (t = all_tests; t->name; t++) {
if (!strcmp(t->name, argv[1])) {
t->fun();
return 0;
}
}
fprintf(stderr, "error: No test '%s' in %s\n", argv[1], argv[0]);
return 1;
} else {
fprintf(stderr, "usage: %s [test_name]\n", argv[0]);
return 1;
}
}

0 comments on commit b81dd80

Please sign in to comment.