/* * Check: a unit test framework for C * Copyright (C) 2001,2002 Arien Malec * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef CHECK_IMPL_H #define CHECK_IMPL_H /* This header should be included by any module that needs to know the implementation details of the check structures Include stdio.h & list.h before this header */ typedef struct TF { TFun fn; int loop_start; int loop_end; const char *name; int signal; unsigned char allowed_exit_value; } TF; struct Suite { const char *name; List *tclst; /* List of test cases */ }; typedef struct Fixture { int ischecked; SFun fun; } Fixture; struct TCase { const char *name; int timeout; List *tflst; /* list of test functions */ List *unch_sflst; List *unch_tflst; List *ch_sflst; List *ch_tflst; }; typedef struct TestStats { int n_checked; int n_failed; int n_errors; } TestStats; struct TestResult { enum test_result rtype; /* Type of result */ enum ck_result_ctx ctx; /* When the result occurred */ char *file; /* File where the test occured */ int line; /* Line number where the test occurred */ int iter; /* The iteration value for looping tests */ const char *tcname; /* Test case that generated the result */ const char *tname; /* Test that generated the result */ char *msg; /* Failure message */ }; TestResult *tr_create(void); void tr_reset(TestResult *tr); enum cl_event { CLINITLOG_SR, CLENDLOG_SR, CLSTART_SR, CLSTART_S, CLEND_SR, CLEND_S, CLSTART_T, /* A test case is about to run */ CLEND_T }; typedef void (*LFun) (SRunner *, FILE*, enum print_output, void *, enum cl_event); typedef struct Log { FILE *lfile; LFun lfun; int close; enum print_output mode; } Log; struct SRunner { List *slst; /* List of Suite objects */ TestStats *stats; /* Run statistics */ List *resultlst; /* List of unit test results */ const char *log_fname; /* name of log file */ const char *xml_fname; /* name of xml output file */ List *loglst; /* list of Log objects */ enum fork_status fstat; /* controls if suites are forked or not NOTE: Don't use this value directly, instead use srunner_fork_status */ }; void set_fork_status(enum fork_status fstat); enum fork_status cur_fork_status (void); #endif /* CHECK_IMPL_H */