CppUnit project page FAQ

HelperMacros.h
Go to the documentation of this file.
1// //////////////////////////////////////////////////////////////////////////
2// Header file HelperMacros.h
3// (c)Copyright 2000, Baptiste Lepilleur.
4// Created: 2001/04/15
5// //////////////////////////////////////////////////////////////////////////
6#ifndef CPPUNIT_EXTENSIONS_HELPERMACROS_H
7#define CPPUNIT_EXTENSIONS_HELPERMACROS_H
8
10#include <cppunit/TestSuite.h>
16#include <memory>
17
18
100#define CPPUNIT_TEST_SUITE( ATestFixtureType ) \
101 public: \
102 typedef ATestFixtureType TestFixtureType; \
103 \
104 private: \
105 static const CPPUNIT_NS::TestNamer &getTestNamer__() \
106 { \
107 static CPPUNIT_TESTNAMER_DECL( testNamer, ATestFixtureType ); \
108 return testNamer; \
109 } \
110 \
111 public: \
112 typedef CPPUNIT_NS::TestSuiteBuilderContext<TestFixtureType> \
113 TestSuiteBuilderContextType; \
114 \
115 static void \
116 addTestsToSuite( CPPUNIT_NS::TestSuiteBuilderContextBase &baseContext ) \
117 { \
118 TestSuiteBuilderContextType context( baseContext )
119
120
151#define CPPUNIT_TEST_SUB_SUITE( ATestFixtureType, ASuperClass ) \
152 public: \
153 typedef ASuperClass ParentTestFixtureType; \
154 private: \
155 CPPUNIT_TEST_SUITE( ATestFixtureType ); \
156 ParentTestFixtureType::addTestsToSuite( baseContext )
157
158
166#define CPPUNIT_TEST_SUITE_END() \
167 } \
168 \
169public: \
170 static CPPUNIT_NS::TestSuite *suite() \
171 { \
172 const CPPUNIT_NS::TestNamer &namer = getTestNamer__(); \
173 std::unique_ptr<CPPUNIT_NS::TestSuite> guard( \
174 new CPPUNIT_NS::TestSuite( namer.getFixtureName() )); \
175 CPPUNIT_NS::ConcretTestFixtureFactory<TestFixtureType> factory; \
176 CPPUNIT_NS::TestSuiteBuilderContextBase context( *guard.get(), \
177 namer, \
178 factory ); \
179 TestFixtureType::addTestsToSuite( context ); \
180 return guard.release(); \
181 } \
182 private: /* dummy typedef so that the macro can still end with ';'*/ \
183 typedef int CppUnitDummyTypedefForSemiColonEnding__
184
238#define CPPUNIT_TEST_SUITE_END_ABSTRACT() \
239 } \
240 private: /* dummy typedef so that the macro can still end with ';'*/ \
241 typedef int CppUnitDummyTypedefForSemiColonEnding__
242
255#define CPPUNIT_TEST_FIXTURE(TestClass, TestName) \
256 class TestName : public TestClass \
257 { \
258 public: \
259 void TestBody(); \
260 CPPUNIT_TEST_SUITE(TestName); \
261 CPPUNIT_TEST(TestBody); \
262 CPPUNIT_TEST_SUITE_END(); \
263 }; \
264 CPPUNIT_TEST_SUITE_REGISTRATION(TestName); \
265 void TestName::TestBody()
266
311#define CPPUNIT_TEST_SUITE_ADD_TEST( test ) \
312 context.addTest( test )
313
320#define CPPUNIT_TEST( testMethod ) \
321 CPPUNIT_TEST_SUITE_ADD_TEST( \
322 ( new CPPUNIT_NS::TestCaller<TestFixtureType>( \
323 context.getTestNameFor( #testMethod), \
324 &TestFixtureType::testMethod, \
325 context.makeFixture() ) ) )
326
327#define CPPUNIT_TEST_PARAMETERIZED( testMethod, ... ) \
328 for (auto& i : __VA_ARGS__) \
329 { \
330 TestFixtureType* fixture = context.makeFixture(); \
331 CPPUNIT_TEST_SUITE_ADD_TEST( \
332 ( new CPPUNIT_NS::TestCaller<TestFixtureType>( \
333 context.getTestNameFor(#testMethod, i), \
334 std::bind(&TestFixtureType::testMethod, fixture, i), \
335 fixture))); \
336 }
337
362#define CPPUNIT_TEST_EXCEPTION( testMethod, ExceptionType ) \
363 CPPUNIT_TEST_SUITE_ADD_TEST( \
364 (new CPPUNIT_NS::ExceptionTestCaseDecorator< ExceptionType >( \
365 new CPPUNIT_NS::TestCaller< TestFixtureType >( \
366 context.getTestNameFor( #testMethod ), \
367 &TestFixtureType::testMethod, \
368 context.makeFixture() ) ) ) )
369
386#define CPPUNIT_TEST_FAIL( testMethod ) \
387 CPPUNIT_TEST_EXCEPTION( testMethod, CPPUNIT_NS::Exception )
388
437#define CPPUNIT_TEST_SUITE_ADD_CUSTOM_TESTS( testAdderMethod ) \
438 testAdderMethod( context )
439
447#define CPPUNIT_TEST_SUITE_PROPERTY( APropertyKey, APropertyValue ) \
448 context.addProperty( std::string(APropertyKey), \
449 std::string(APropertyValue) )
450
472#define CPPUNIT_TEST_SUITE_REGISTRATION( ATestFixtureType ) \
473 static CPPUNIT_NS::AutoRegisterSuite< ATestFixtureType > \
474 CPPUNIT_MAKE_UNIQUE_NAME(autoRegisterRegistry__ )
475
476
514#define CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( ATestFixtureType, suiteName ) \
515 static CPPUNIT_NS::AutoRegisterSuite< ATestFixtureType > \
516 CPPUNIT_MAKE_UNIQUE_NAME(autoRegisterRegistry__ )(suiteName)
517
545#define CPPUNIT_REGISTRY_ADD( which, to ) \
546 static CPPUNIT_NS::AutoRegisterRegistry \
547 CPPUNIT_MAKE_UNIQUE_NAME( autoRegisterRegistry__ )( which, to )
548
558#define CPPUNIT_REGISTRY_ADD_TO_DEFAULT( which ) \
559 static CPPUNIT_NS::AutoRegisterRegistry \
560 CPPUNIT_MAKE_UNIQUE_NAME( autoRegisterRegistry__ )( which )
561
562// Backwards compatibility
563// (Not tested!)
564
565#if CPPUNIT_ENABLE_CU_TEST_MACROS
566
567#define CU_TEST_SUITE(tc) CPPUNIT_TEST_SUITE(tc)
568#define CU_TEST_SUB_SUITE(tc,sc) CPPUNIT_TEST_SUB_SUITE(tc,sc)
569#define CU_TEST(tm) CPPUNIT_TEST(tm)
570#define CU_TEST_SUITE_END() CPPUNIT_TEST_SUITE_END()
571#define CU_TEST_SUITE_REGISTRATION(tc) CPPUNIT_TEST_SUITE_REGISTRATION(tc)
572
573#endif
574
575
576#endif // CPPUNIT_EXTENSIONS_HELPERMACROS_H

Send comments to:
CppUnit Developers