diff options
Diffstat (limited to 'tests/test_lib.c')
-rwxr-xr-x | tests/test_lib.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/tests/test_lib.c b/tests/test_lib.c index a4c39dfde..9d3cba1a6 100755 --- a/tests/test_lib.c +++ b/tests/test_lib.c @@ -10,12 +10,15 @@ #define DO_ALLOC(TYPE) ((TYPE*) malloc(sizeof(TYPE))) #define GIT_MAX_TEST_CASES 64 +extern git_error *git_errno; + struct git_test { char *name; char *message; char *failed_pos; char *description; char *error_message; + git_error *error_stack; git_testfunc function; unsigned failed:1, ran:1; @@ -36,6 +39,7 @@ static void test_free(git_test *t) free(t->failed_pos); free(t->message); free(t->error_message); + git_error_free(t->error_stack); free(t); } } @@ -84,6 +88,8 @@ static void fail_test(git_test *tc, const char *file, int line, const char *mess tc->failed = 1; tc->message = strdup(message); tc->failed_pos = strdup(buf); + tc->error_stack = GIT_GLOBAL->git_errno; + GIT_GLOBAL->git_errno = NULL; if (last_error) tc->error_message = strdup(last_error); @@ -146,6 +152,14 @@ void git_testsuite_add(git_testsuite *ts, git_testfunc test) ts->list[ts->count++] = create_test(test); } +static void print_trace(git_error *error) +{ + git_error *err; + + for (err = error; err; err = err->child) + printf("\t%s:%u %s\n", err->file, err->line, err->msg); +} + static void print_details(git_testsuite *ts) { int i; @@ -165,6 +179,8 @@ static void print_details(git_testsuite *ts) failCount, tc->description, tc->name, tc->failed_pos, tc->message); if (tc->error_message) printf("\tError: %s\n", tc->error_message); + fprintf(stderr, "\tError stack trace:\n"); + print_trace(tc->error_stack); } } } |