mirror of https://github.com/yasm/yasm.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
3.0 KiB
141 lines
3.0 KiB
/* |
|
Check: a unit test framework for C |
|
Copyright (C) 2001, Arien Malec |
|
|
|
This program is free software; you can redistribute it and/or |
|
modify it under the terms of the GNU General Public License |
|
as published by the Free Software Foundation; either version 2 |
|
of the License, or (at your option) any later version. |
|
|
|
This program is distributed in the hope that it will be useful, |
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
GNU General Public License for more details. |
|
|
|
You should have received a copy of the GNU General Public License |
|
along with this program; if not, write to the Free Software |
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
|
*/ |
|
#ifdef HAVE_CONFIG_H |
|
# include "config.h" |
|
#endif |
|
|
|
#include <stdio.h> |
|
|
|
#ifdef STDC_HEADERS |
|
# include <string.h> |
|
# include <stdlib.h> |
|
#endif |
|
|
|
#include "error.h" |
|
#include "list.h" |
|
#include "check.h" |
|
#include "check_impl.h" |
|
#include "check_msg.h" |
|
|
|
#ifndef USE_FORKWAITMSG |
|
extern int nofork_exit_status; |
|
#endif |
|
|
|
Suite *suite_create (const char *name) |
|
{ |
|
Suite *s; |
|
s = emalloc (sizeof(Suite)); /* freed in suite_free */ |
|
if (name == NULL) |
|
s->name = ""; |
|
else |
|
s->name = name; |
|
s->tclst = list_create(); |
|
return s; |
|
} |
|
|
|
void suite_free (Suite *s) |
|
{ |
|
List *l; |
|
if (s == NULL) |
|
return; |
|
for (l = s->tclst; !list_at_end(l); list_advance (l)) { |
|
tcase_free (list_val(l)); |
|
} |
|
list_free (s->tclst); |
|
free(s); |
|
} |
|
|
|
TCase *tcase_create (const char *name) |
|
{ |
|
TCase *tc = emalloc (sizeof(TCase)); /*freed in tcase_free */ |
|
if (name == NULL) |
|
tc->name = ""; |
|
else |
|
tc->name = name; |
|
tc->tflst = list_create(); |
|
tc->setup = tc->teardown = NULL; |
|
|
|
return tc; |
|
} |
|
|
|
|
|
void tcase_free (TCase *tc) |
|
{ |
|
List *l; |
|
l = tc->tflst; |
|
for (list_front(l); !list_at_end(l); list_advance(l)) { |
|
free (list_val(l)); |
|
} |
|
list_free(tc->tflst); |
|
free(tc); |
|
} |
|
|
|
void suite_add_tcase (Suite *s, TCase *tc) |
|
{ |
|
if (s == NULL || tc == NULL) |
|
return; |
|
list_add_end (s->tclst, tc); |
|
} |
|
|
|
void tcase_add_test_ (TCase *tc, TFun fn, const char *name) |
|
{ |
|
TF * tf; |
|
if (tc == NULL || fn == NULL || name == NULL) |
|
return; |
|
tf = emalloc (sizeof(TF)); /* freed in tcase_free */ |
|
tf->fn = fn; |
|
tf->name = name; |
|
list_add_end (tc->tflst, tf); |
|
} |
|
|
|
void tcase_set_fixture (TCase *tc, SFun setup, SFun teardown) |
|
{ |
|
tc->setup = setup; |
|
tc->teardown = teardown; |
|
} |
|
|
|
|
|
void tcase_fn_start (int msqid, const char *fname, const char *file, int line) |
|
{ |
|
send_last_loc_msg (msqid, file, line); |
|
} |
|
|
|
void mark_point_ (int msqid, char *file, int line) |
|
{ |
|
send_last_loc_msg (msqid, file, line); |
|
} |
|
|
|
int fail_unless_ (int msqid, int result, const char *file, int line, |
|
const char * msg) |
|
{ |
|
if (line > MAXLINE) |
|
eprintf ("Line number %d too large to use", line); |
|
|
|
send_last_loc_msg (msqid, file, line); |
|
if (!result) { |
|
send_failure_msg (msqid, msg); |
|
#ifdef USE_FORKWAITMSG |
|
exit(1); |
|
#else |
|
nofork_exit_status = 1; |
|
return 1; |
|
#endif |
|
} |
|
return 0; |
|
}
|
|
|