try
{
_timer.reset();
+ assert(frame);
+ assert(frame->runner());
+ assert(run->test_fn);
return_code= frame->runner()->main(run->test_fn, frame->creators_ptr());
}
// Special case where check for the testing of the exception
// system.
- catch (libtest::fatal &e)
+ catch (const libtest::fatal& e)
{
if (libtest::fatal::is_disabled())
{
}
libtest::cancel_alarm();
}
- catch (libtest::fatal &e)
+ catch (const libtest::fatal& e)
{
- stream::cerr(e.file(), e.line(), e.func()) << e.what();
_failed++;
formatter()->failed();
+ stream::make_cerr err(e.file(), e.line(), e.func());
+ err << e.what();
+ for (auto server : _frame->servers().servers)
+ {
+ auto output = server->output();
+ if (output.first.size())
+ {
+ err << "Server stdout:\n" << output.first << "\n";
+ }
+ if (output.second.size())
+ {
+ err << "Server stderr:\n" << output.second << "\n";
+ }
+ }
throw;
}
case TEST_FAILURE:
_failed++;
formatter()->failed();
+ for (auto server : _frame->servers().servers)
+ {
+ auto output = server->output();
+ if (output.first.size())
+ {
+ Out << "Server stdout:\n" << output.first << "\n";
+ }
+ if (output.second.size())
+ {
+ Out << "Server stderr:\n" << output.second << "\n";
+ }
+ }
break;
case TEST_SKIPPED:
break;
default:
- fatal_message("invalid return code");
+ FATAL("invalid return code");
}
#if 0
@TODO add code here to allow for a collection to define a method to reset to allow tests to continue.