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 CurrentTest::Details() = &details;
00018
00019 try {
00020 #ifdef UNITTEST_POSIX
00021 UNITTEST_THROW_SIGNALS
00022 #endif
00023 testObject.RunImpl();
00024 } catch ( AssertException const& e ) {
00025 CurrentTest::Results()->OnTestFailure (
00026 TestDetails ( details.testName, details.suiteName, e.Filename(), e.LineNumber() ), e.what() );
00027 } catch ( std::exception const& e ) {
00028 MemoryOutStream stream;
00029 stream << "Unhandled exception: " << e.what();
00030 CurrentTest::Results()->OnTestFailure ( details, stream.GetText() );
00031 } catch ( ... ) {
00032 CurrentTest::Results()->OnTestFailure ( details, "Unhandled exception: Crash!" );
00033 }
00034 }
00035
00036 }
00037
00038 #endif