/* 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 #include #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; } }