blob: 9dc658ef31fe62818f418b9d8fe947e30f7cc88b [file] [log] [blame]
/*
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.
*/
#include <stdio.h>
#include <check.h>
#include "list.h"
#include "check_impl.h"
#include "check_print.h"
#include "error.h"
static void srunner_fprint_summary (FILE *file, SRunner *sr, int print_mode);
static void srunner_fprint_results (FILE *file, SRunner *sr, int print_mode);
static int percent_passed (TestStats *t);
static const char *rtype_to_string (int rtype);
void srunner_print (SRunner *sr, int print_mode)
{
srunner_fprint (stdout, sr, print_mode);
}
void srunner_fprint (FILE *file, SRunner *sr, int print_mode)
{
srunner_fprint_summary (file, sr, print_mode);
srunner_fprint_results (file, sr, print_mode);
}
static void srunner_fprint_summary (FILE *file, SRunner *sr, int print_mode)
{
TestStats *ts = sr->stats;
if (print_mode >= CRMINIMAL) {
fprintf (file, "%d%%: Checks: %d, Failures: %d, Errors: %d\n",
percent_passed (ts), ts->n_checked, ts->n_failed,
ts->n_errors);
}
return;
}
static void srunner_fprint_results (FILE *file, SRunner *sr, int print_mode)
{
List *resultlst;
resultlst = sr->resultlst;
for (list_front(resultlst); !list_at_end(resultlst); list_advance(resultlst)) {
TestResult *tr = list_val(resultlst);
tr_fprint (file, tr, print_mode);
}
return;
}
void tr_fprint (FILE *file, TestResult *tr, int print_mode)
{
const char *exact_msg;
exact_msg = (tr->rtype == CRERROR) ? "(after this point) ": "";
if ((print_mode >= CRVERBOSE && tr->rtype == CRPASS) ||
(tr->rtype != CRPASS && print_mode >= CRNORMAL)) {
fprintf (file, "%s:%d:%s:%s:%s: %s%s\n",
tr->file, tr->line,
rtype_to_string(tr->rtype), tr->tcname,
tr->tfname,
exact_msg, tr->msg);
}
}
static int percent_passed (TestStats *t)
{
if (t->n_failed == 0 && t->n_errors == 0)
return 100;
else
return (int) ( (float) (t->n_checked - (t->n_failed + t->n_errors)) /
(float) t->n_checked * 100);
}
static const char *rtype_to_string (int rtype)
{
switch (rtype) {
case CRPASS:
return "P";
break;
case CRFAILURE:
return "F";
break;
case CRERROR:
return "E";
break;
default:
eprintf("Bad argument %d to rtype_to_string", rtype);
return NULL;
}
}