G+Smo  25.01.0
Geometry + Simulation Modules
 
Loading...
Searching...
No Matches
TestMacros.h
1#ifndef UNITTEST_TESTMACROS_H
2#define UNITTEST_TESTMACROS_H
3
4#include "Config.h"
5#include "TestSuite.h"
6#include "ExceptionMacros.h"
7#include "ExecuteTest.h"
8#include "AssertException.h"
9#include "TestDetails.h"
10#include "MemoryOutStream.h"
11
12#ifndef UNITTEST_POSIX
13 #define UNITTEST_THROW_SIGNALS_POSIX_ONLY
14#else
15 #include "Posix/SignalTranslator.h"
16#endif
17
18#ifdef TEST
19 #error UnitTest++ redefines TEST
20#endif
21
22#ifdef TEST_EX
23 #error UnitTest++ redefines TEST_EX
24#endif
25
26#ifdef TEST_FIXTURE_EX
27 #error UnitTest++ redefines TEST_FIXTURE_EX
28#endif
29
30#define SUITE(Name) \
31 namespace Suite##Name { \
32 namespace UnitTestSuite { \
33 inline char const* GetSuiteName () { \
34 return #Name ; \
35 } \
36 } \
37 } \
38 namespace Suite##Name
39
40#define TEST_EX(Name, List) \
41 class Test##Name : public UnitTest::Test \
42 { \
43 public: \
44 Test##Name() : Test(#Name, UnitTestSuite::GetSuiteName(), __FILE__, __LINE__) {} \
45 private: \
46 virtual void RunImpl() const; \
47 } test##Name##Instance; \
48 \
49 UnitTest::ListAdder adder##Name (List, &test##Name##Instance); \
50 \
51 void Test##Name::RunImpl() const
52
53
54#define TEST(Name) TEST_EX(Name, UnitTest::Test::GetTestList())
55
56
57#define TEST_FIXTURE_EX(Fixture, Name, List) \
58 class Fixture##Name##Helper : public Fixture \
59 { \
60 public: \
61 explicit Fixture##Name##Helper(UnitTest::TestDetails const& details) : m_details(details) {} \
62 void RunImpl(); \
63 UnitTest::TestDetails const& m_details; \
64 private: \
65 Fixture##Name##Helper(Fixture##Name##Helper const&); \
66 Fixture##Name##Helper& operator =(Fixture##Name##Helper const&); \
67 }; \
68 \
69 class Test##Fixture##Name : public UnitTest::Test \
70 { \
71 public: \
72 Test##Fixture##Name() : Test(#Name, UnitTestSuite::GetSuiteName(), __FILE__, __LINE__) {} \
73 private: \
74 virtual void RunImpl() const; \
75 } test##Fixture##Name##Instance; \
76 \
77 UnitTest::ListAdder adder##Fixture##Name (List, &test##Fixture##Name##Instance); \
78 \
79 void Test##Fixture##Name::RunImpl() const \
80 { \
81 volatile bool ctorOk = false; \
82 UT_TRY \
83 ({ \
84 Fixture##Name##Helper fixtureHelper(m_details); \
85 ctorOk = true; \
86 UnitTest::ExecuteTest(fixtureHelper, m_details, false); \
87 }) \
88 UT_CATCH (UnitTest::AssertException, e, \
89 { \
90 (void)e; \
91 }) \
92 UT_CATCH (std::exception, e, \
93 { \
94 UnitTest::MemoryOutStream stream; \
95 stream << "Unhandled exception: " << e.what(); \
96 UnitTest::CurrentTest::Results()->OnTestFailure(m_details, stream.GetText()); \
97 }) \
98 UT_CATCH_ALL \
99 ({ \
100 if (ctorOk) \
101 { \
102 UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(m_details, __LINE__), \
103 "Unhandled exception while destroying fixture " #Fixture); \
104 } \
105 else \
106 { \
107 UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(m_details, __LINE__), \
108 "Unhandled exception while constructing fixture " #Fixture); \
109 } \
110 }) \
111 } \
112 void Fixture##Name##Helper::RunImpl()
113
114#define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
115
116
117#endif