#ifndef UNITTEST_EXECUTE_TEST_H #define UNITTEST_EXECUTE_TEST_H #include "Config.h" #include "ExceptionMacros.h" #include "TestDetails.h" #include "TestResults.h" #include "MemoryOutStream.h" #include "AssertException.h" #include "RequiredCheckException.h" #include "CurrentTest.h" #ifdef UNITTEST_NO_EXCEPTIONS #include "ReportAssertImpl.h" #endif #ifdef UNITTEST_POSIX #include "Posix/SignalTranslator.h" #endif namespace UnitTest { template< typename T > void ExecuteTest(T& testObject, TestDetails const& details, bool isMockTest) { if (isMockTest == false) CurrentTest::Details() = &details; #ifdef UNITTEST_NO_EXCEPTIONS if (UNITTEST_SET_ASSERT_JUMP_TARGET() == 0) { #endif #ifndef UNITTEST_POSIX UNITTEST_IMPL_TRY({ testObject.RunImpl(); }) #else UNITTEST_IMPL_TRY ({ UNITTEST_THROW_SIGNALS_POSIX_ONLY testObject.RunImpl(); }) #endif UNITTEST_IMPL_CATCH(RequiredCheckException, exc, { (void)exc; }) UNITTEST_IMPL_CATCH(AssertException, exc, { (void)exc; }) UNITTEST_IMPL_CATCH(std::exception, exc, { MemoryOutStream stream; stream << "Unhandled exception: " << exc.what(); CurrentTest::Results()->OnTestFailure(details, stream.GetText()); }) UNITTEST_IMPL_CATCH_ALL ({ CurrentTest::Results()->OnTestFailure(details, "Unhandled exception: test crashed"); }) #ifdef UNITTEST_NO_EXCEPTIONS } #endif } } #endif