00001 #ifndef UNITTEST_EXECUTE_TEST_H 00002 #define UNITTEST_EXECUTE_TEST_H 00003 00004 #include "TestDetails.h" 00005 #include "MemoryOutStream.h" 00006 #include "AssertException.h" 00007 #include "CurrentTest.h" 00008 00009 #ifdef UNITTEST_POSIX 00010 #include "Posix/SignalTranslator.h" 00011 #endif 00012 00013 namespace UnitTest { 00014 00015 template< typename T > 00016 void ExecuteTest(T& testObject, TestDetails const& details) 00017 { 00018 CurrentTest::Details() = &details; 00019 00020 try 00021 { 00022 #ifdef UNITTEST_POSIX 00023 UNITTEST_THROW_SIGNALS 00024 #endif 00025 testObject.RunImpl(); 00026 } 00027 catch (AssertException const& e) 00028 { 00029 CurrentTest::Results()->OnTestFailure( 00030 TestDetails(details.testName, details.suiteName, e.Filename(), e.LineNumber()), e.what()); 00031 } 00032 catch (std::exception const& e) 00033 { 00034 MemoryOutStream stream; 00035 stream << "Unhandled exception: " << e.what(); 00036 CurrentTest::Results()->OnTestFailure(details, stream.GetText()); 00037 } 00038 catch (...) 00039 { 00040 CurrentTest::Results()->OnTestFailure(details, "Unhandled exception: Crash!"); 00041 } 00042 } 00043 00044 } 00045 00046 #endif