gtsam/CppUnitLite/TestRegistry.cpp

85 lines
1.7 KiB
C++
Raw Normal View History

/* ----------------------------------------------------------------------------
2019-02-11 22:39:48 +08:00
* GTSAM Copyright 2010, Georgia Tech Research Corporation,
* Atlanta, Georgia 30332-0415
* All Rights Reserved
* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
* See LICENSE for the license information
* -------------------------------------------------------------------------- */
2009-08-22 06:23:24 +08:00
#include <exception>
2009-08-22 06:23:24 +08:00
#include "Test.h"
#include "Failure.h"
2009-08-22 06:23:24 +08:00
#include "TestResult.h"
#include "TestRegistry.h"
2019-02-11 22:39:48 +08:00
void TestRegistry::addTest (Test *test)
2009-08-22 06:23:24 +08:00
{
instance ().add (test);
2009-08-22 06:23:24 +08:00
}
2019-02-11 22:39:48 +08:00
int TestRegistry::runAllTests (TestResult& result)
2009-08-22 06:23:24 +08:00
{
return instance ().run (result);
2009-08-22 06:23:24 +08:00
}
2019-02-11 22:39:48 +08:00
TestRegistry& TestRegistry::instance ()
2009-08-22 06:23:24 +08:00
{
static TestRegistry registry;
return registry;
2009-08-22 06:23:24 +08:00
}
2019-02-11 22:39:48 +08:00
void TestRegistry::add (Test *test)
2009-08-22 06:23:24 +08:00
{
if (tests == 0) {
test->setNext(0);
tests = test;
lastTest = test;
return;
}
test->setNext (0);
lastTest->setNext(test);
lastTest = test;
2009-08-22 06:23:24 +08:00
}
2019-02-11 22:39:48 +08:00
int TestRegistry::run (TestResult& result)
2009-08-22 06:23:24 +08:00
{
result.testsStarted ();
for (Test *test = tests; test != 0; test = test->getNext ()) {
if (test->safe()) {
try {
test->run (result);
} catch (std::exception& e) {
// catch standard exceptions and derivatives
result.addFailure(
Failure(test->getName(), test->getFilename(), test->getLineNumber(),
std::string("Exception: ") + std::string(e.what())));
} catch (...) {
// catch all other exceptions
result.addFailure(
Failure(test->getName(), test->getFilename(), test->getLineNumber(),
"ExceptionThrown!"));
}
}
else {
test->run (result);
}
}
result.testsEnded ();
return result.getFailureCount();
2009-08-22 06:23:24 +08:00
}