@@ -81,7 +81,8 @@ selftest::run_all_tests ()
runner::runner ()
: m_passes (0),
m_failures (0),
- m_start_time (get_run_time ())
+ m_start_time (get_run_time ()),
+ m_logfile (NULL)
{
}
@@ -91,9 +92,16 @@ runner::~runner ()
{
long finish_time = get_run_time ();
long elapsed_time = finish_time - m_start_time;
- fprintf (stderr, "NOTE: %i pass(es); %i failure(s) in %ld.%06ld seconds\n",
- m_passes, m_failures,
- elapsed_time / 1000000, elapsed_time % 1000000);
+ if (m_logfile)
+ fprintf (m_logfile,
+ "NOTE: %i pass(es); %i failure(s) in %ld.%06ld seconds\n",
+ m_passes, m_failures,
+ elapsed_time / 1000000, elapsed_time % 1000000);
+ else
+ fprintf (stderr,
+ "-fself-test: %i pass(es); %i failure(s) in %ld.%06ld seconds\n",
+ m_passes, m_failures,
+ elapsed_time / 1000000, elapsed_time % 1000000);
}
/* Notify the user that a particular test is about to be run. */
@@ -101,7 +109,8 @@ runner::~runner ()
void
runner::begin_test (test *t)
{
- fprintf (stderr, "NOTE: %s: test starting\n", t->get_name ());
+ if (m_logfile)
+ fprintf (m_logfile, "NOTE: %s: test starting\n", t->get_name ());
}
/* Record and report the successful outcome of some aspect of a test. */
@@ -109,7 +118,9 @@ runner::begin_test (test *t)
void
runner::pass (const char *file, int line, test *t, const char *msg)
{
- fprintf (stderr, "%s:%i: PASS: %s: %s\n", file, line, t->get_name (), msg);
+ if (m_logfile)
+ fprintf (m_logfile, "%s:%i: PASS: %s: %s\n",
+ file, line, t->get_name (), msg);
m_passes++;
}
@@ -118,8 +129,11 @@ runner::pass (const char *file, int line, test *t, const char *msg)
void
runner::fail (const char *file, int line, test *t, const char *msg)
{
- fprintf (stderr, "%s:%i: FAIL: %s: %s\n", file, line, t->get_name (), msg);
+ fprintf (m_logfile ? m_logfile : stderr,
+ "%s:%i: FAIL: %s: %s\n",
+ file, line, t->get_name (), msg);
m_failures++;
+ abort ();
}
/* Notify the user that a particular test has finished running. */
@@ -127,7 +141,8 @@ runner::fail (const char *file, int line, test *t, const char *msg)
void
runner::end_test (test *t)
{
- fprintf (stderr, "NOTE: %s: test ending\n", t->get_name ());
+ if (m_logfile)
+ fprintf (m_logfile, "NOTE: %s: test ending\n", t->get_name ());
}
/* Implementation of class ::selftest::registrator. */
@@ -55,6 +55,7 @@ private:
int m_passes;
int m_failures;
long m_start_time;
+ FILE *m_logfile;
};
/* The class ::selftest::test is a base class from which specific