X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libtest%2Fcollection.cc;h=0b2b32492230b3f83c22229291eaeb2fdce1804f;hb=2eb14a59f3626073017de925929dcc7e3e9eb43d;hp=c6fec1ebd8d57250700aa29a30d6e8dc70f17d90;hpb=1be0350e7ae7a566896a9fe52863dcc22433fc8a;p=awesomized%2Flibmemcached diff --git a/libtest/collection.cc b/libtest/collection.cc index c6fec1eb..0b2b3249 100644 --- a/libtest/collection.cc +++ b/libtest/collection.cc @@ -34,11 +34,12 @@ * */ -#include +#include "libtest/yatlcon.h" #include -static test_return_t runner_code(Framework* frame, +// @todo possibly have this code fork off so if it fails nothing goes bad +static test_return_t runner_code(libtest::Framework* frame, test_st* run, libtest::Timer& _timer) { // Runner Code @@ -50,11 +51,14 @@ static test_return_t runner_code(Framework* frame, try { _timer.reset(); - return_code= frame->runner()->run(run->test_fn, frame->creators_ptr()); + 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()) { @@ -84,23 +88,22 @@ Collection::Collection(Framework* frame_arg, _success(0), _skipped(0), _failed(0), - _total(0) + _total(0), + _formatter(frame_arg->name(), _name) { fatal_assert(arg); } test_return_t Collection::exec() { - Out << "Collection: " << _name; - - if (test_success(_frame->runner()->pre(_pre, _frame->creators_ptr()))) + if (test_success(_frame->runner()->setup(_pre, _frame->creators_ptr()))) { for (test_st *run= _tests; run->name; run++) { - long int load_time= 0; - + formatter()->push_testcase(run->name); if (_frame->match(run->name)) { + formatter()->skipped(); continue; } _total++; @@ -114,50 +117,59 @@ test_return_t Collection::exec() { Error << "frame->runner()->flush(creators_ptr)"; _skipped++; + formatter()->skipped(); continue; } } - return_code= runner_code(_frame, run, _timer); + set_alarm(); + + try + { + return_code= runner_code(_frame, run, _timer); + } + catch (...) + { + cancel_alarm(); + + throw; + } + libtest::cancel_alarm(); } - catch (libtest::fatal &e) + catch (const libtest::fatal& e) { - Error << "Fatal exception was thrown: " << e.what(); - return_code= TEST_FAILURE; _failed++; + formatter()->failed(); + stream::make_cerr(e.file(), e.line(), e.func()) << e.what(); throw; } switch (return_code) { case TEST_SUCCESS: - Out << "\tTesting " - << run->name - << "\t\t\t\t\t" - << _timer - << " [ " << test_strerror(return_code) << " ]"; _success++; + formatter()->success(_timer); break; case TEST_FAILURE: _failed++; - Out << "\tTesting " << run->name << "\t\t\t\t\t" << "[ " << test_strerror(return_code) << " ]"; + formatter()->failed(); break; case TEST_SKIPPED: _skipped++; - Out << "\tTesting " << run->name << "\t\t\t\t\t" << "[ " << test_strerror(return_code) << " ]"; + formatter()->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. #endif } - (void) _frame->runner()->post(_post, _frame->creators_ptr()); + (void) _frame->runner()->teardown(_post, _frame->creators_ptr()); } if (_failed == 0 and _skipped == 0 and _success)