diff options
Diffstat (limited to 'tests/test_main.c')
-rw-r--r-- | tests/test_main.c | 121 |
1 files changed, 65 insertions, 56 deletions
diff --git a/tests/test_main.c b/tests/test_main.c index a3672c70d..576996708 100644 --- a/tests/test_main.c +++ b/tests/test_main.c @@ -23,73 +23,82 @@ * Boston, MA 02110-1301, USA. */ -#include "test_lib.h" #include <string.h> +#include <git2.h> +#include "test_lib.h" +#include "test_helpers.h" + +extern git_testsuite *libgit2_suite_core(void); +extern git_testsuite *libgit2_suite_rawobjects(void); +extern git_testsuite *libgit2_suite_objread(void); +extern git_testsuite *libgit2_suite_objwrite(void); +extern git_testsuite *libgit2_suite_commit(void); +extern git_testsuite *libgit2_suite_revwalk(void); +extern git_testsuite *libgit2_suite_index(void); +extern git_testsuite *libgit2_suite_hashtable(void); +extern git_testsuite *libgit2_suite_tag(void); +extern git_testsuite *libgit2_suite_tree(void); +extern git_testsuite *libgit2_suite_refs(void); + +typedef git_testsuite *(*libgit2_suite)(void); + +static libgit2_suite suite_methods[]= { + libgit2_suite_core, + libgit2_suite_rawobjects, + libgit2_suite_objread, + libgit2_suite_objwrite, + libgit2_suite_commit, + libgit2_suite_revwalk, + libgit2_suite_index, + libgit2_suite_hashtable, + libgit2_suite_tag, + libgit2_suite_tree, + libgit2_suite_refs +}; + +#define GIT_SUITE_COUNT (ARRAY_SIZE(suite_methods)) -/* - * print backtrace when a test fails; - * GCC only - */ -#ifdef BACKTRACE -#include <stdio.h> -#include <execinfo.h> -#include <signal.h> -#include <stdlib.h> -void crash_handler(int sig) +git_testsuite **libgit2_get_suites() { - void *array[10]; - size_t size; + git_testsuite **suites; + unsigned int i; - size = backtrace(array, 10); + suites = git__malloc(GIT_SUITE_COUNT * sizeof(void *)); + if (suites == NULL) + return NULL; - fprintf(stderr, "Error (signal %d)\n", sig); - backtrace_symbols_fd(array, size, 2); - exit(1); -} -#endif + for (i = 0; i < GIT_SUITE_COUNT; ++i) + suites[i] = suite_methods[i](); + return suites; +} +void libgit2_free_suites(git_testsuite **suites) +{ + unsigned int i; -#undef BEGIN_TEST -#define BEGIN_TEST(name) extern void testfunc__##name(void); -#include TEST_TOC + for (i = 0; i < GIT_SUITE_COUNT; ++i) + git_testsuite_free(suites[i]); -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} -}; + free(suites); +} -int main(int argc, char **argv) +int main(int GIT_UNUSED(argc), char *GIT_UNUSED(argv[])) { - struct test_def *t; - -#ifdef BACKTRACE - signal(SIGSEGV, crash_handler); -#endif - - 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; - } + unsigned int i; + git_testsuite **suites; + + GIT_UNUSED_ARG(argc); + GIT_UNUSED_ARG(argv); + + suites = libgit2_get_suites(); + + for (i = 0; i < GIT_SUITE_COUNT; ++i) + git_testsuite_run(suites[i]); + + libgit2_free_suites(suites); + return 0; } + |