summaryrefslogtreecommitdiff
path: root/tests/test_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_main.c')
-rw-r--r--tests/test_main.c121
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;
}
+