]>
git.proxmox.com Git - libgit2.git/blob - tests/test_lib.c
10 #define DO_ALLOC(TYPE) ((TYPE*) malloc(sizeof(TYPE)))
11 #define GIT_MAX_TEST_CASES 64
20 git_testfunc function
;
21 unsigned failed
:1, ran
:1;
25 struct git_testsuite
{
27 int count
, fail_count
;
28 git_test
*list
[GIT_MAX_TEST_CASES
];
31 static void test_free(git_test
*t
)
38 free(t
->error_message
);
43 static void test_run(git_test
*tc
)
48 if (setjmp(buf
) == 0) {
56 static git_test
*create_test(git_testfunc function
)
58 git_test
*t
= DO_ALLOC(git_test
);
60 memset(t
, 0x0, sizeof(git_test
));
61 t
->function
= function
;
66 void git_test__init(git_test
*t
, const char *name
, const char *description
)
68 t
->name
= strdup(name
);
69 t
->description
= strdup(description
);
73 /*-------------------------------------------------------------------------*
74 * Public assert methods
75 *-------------------------------------------------------------------------*/
77 static void fail_test(git_test
*tc
, const char *file
, int line
, const char *message
)
80 const char *last_error
= git_lasterror();
82 snprintf(buf
, 1024, "%s:%d", file
, line
);
85 tc
->message
= strdup(message
);
86 tc
->failed_pos
= strdup(buf
);
89 tc
->error_message
= strdup(last_error
);
92 longjmp(*(tc
->jump
), 0);
95 void git_test__fail(git_test
*tc
, const char *file
, int line
, const char *message
)
97 fail_test(tc
, file
, line
, message
);
100 void git_test__assert(git_test
*tc
, const char *file
, int line
, const char *message
, int condition
)
103 fail_test(tc
, file
, line
, message
);
106 void git_test__assert_pass(git_test
*tc
, const char *file
, int line
, const char *message
, int ret_value
)
109 fail_test(tc
, file
, line
, message
);
112 /*-------------------------------------------------------------------------*
114 *-------------------------------------------------------------------------*/
116 static void testsuite_init(git_testsuite
*ts
)
120 memset(ts
->list
, 0, sizeof(ts
->list
));
123 git_testsuite
*git_testsuite_new(const char *name
)
125 git_testsuite
*ts
= DO_ALLOC(git_testsuite
);
127 ts
->name
= strdup(name
);
131 static void free_suite(git_testsuite
*ts
)
135 for (n
= 0; n
< GIT_MAX_TEST_CASES
; n
++)
137 test_free(ts
->list
[n
]);
143 void git_testsuite_add(git_testsuite
*ts
, git_testfunc test
)
145 assert(ts
->count
< GIT_MAX_TEST_CASES
);
146 ts
->list
[ts
->count
++] = create_test(test
);
149 static void print_details(git_testsuite
*ts
)
154 if (ts
->fail_count
== 0) {
155 const char *testWord
= ts
->count
== 1 ? "test" : "tests";
156 printf("OK (%d %s)\n", ts
->count
, testWord
);
158 printf("Failed (%d failures):\n", ts
->fail_count
);
160 for (i
= 0 ; i
< ts
->count
; ++i
) {
161 git_test
*tc
= ts
->list
[i
];
164 printf(" %d) \"%s\" [test %s @ %s]\n\t%s\n",
165 failCount
, tc
->description
, tc
->name
, tc
->failed_pos
, tc
->message
);
166 if (tc
->error_message
)
167 printf("\tError: %s\n", tc
->error_message
);
173 int git_testsuite_run(git_testsuite
*ts
)
177 printf("Suite \"%s\": ", ts
->name
);
179 for (i
= 0 ; i
< ts
->count
; ++i
) {
180 git_test
*tc
= ts
->list
[i
];
193 fail_count
= ts
->fail_count
;