summaryrefslogtreecommitdiff
path: root/tests/test_lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_lib.c')
-rwxr-xr-xtests/test_lib.c16
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);
}
}
}