diff options
| author | Baptiste Lepilleur <gaiacrtn@free.fr> | 2002-06-12 15:44:17 +0000 |
|---|---|---|
| committer | Baptiste Lepilleur <gaiacrtn@free.fr> | 2002-06-12 15:44:17 +0000 |
| commit | 3702f4f7603f1e49b4d6747c49e795bad712eab7 (patch) | |
| tree | 8988e8f3f0e4b7c64da58f41734bb1eb1acaf211 /include/cppunit | |
| parent | 1fe54971424f393a2bb2566bc14af5e899e98ebb (diff) | |
| download | cppunit-3702f4f7603f1e49b4d6747c49e795bad712eab7.tar.gz | |
Install-unix: added some hints extracted from bug #544684 on how to compile for Solaris/Forte C++ compiler.
install-unix: added some hints extracted from bug #544684 on how to compile
for Solaris/Forte C++ compiler.
* TODO: cleaned-up and added new things.
* include/cppunit/extensions/HelperMacros.h: CPPUNIT_TEST_SUITE now declares
a class named ThisTestFixtureFactory which is a wrapper for the fixture
factory. This removes the need to cast the fixture to the correct type when
using the factory. Updated other macros implementation to use this new
factory. Modified CPPUNIT_TEST_CUSTOM(S) macros to use this new factory
class. Added macro CPPUNIT_TEST_ADD to help create new macros like
CPPUNIT_TEST_xxx.
* examples/cppunittest/HelperMacrosTest.h:
* examples/cppunittest/HelperMacrosTest.cpp: added unit tests for
CPPUNIT_TEST_CUSTOM, CPPUNIT_TEST_CUSTOMS and CPPUNIT_TEST_ADD.
Diffstat (limited to 'include/cppunit')
| -rw-r--r-- | include/cppunit/extensions/HelperMacros.h | 130 |
1 files changed, 99 insertions, 31 deletions
diff --git a/include/cppunit/extensions/HelperMacros.h b/include/cppunit/extensions/HelperMacros.h index 8b5b7c1..bd3510b 100644 --- a/include/cppunit/extensions/HelperMacros.h +++ b/include/cppunit/extensions/HelperMacros.h @@ -111,7 +111,7 @@ namespace CppUnit */ #define CPPUNIT_TEST_SUITE( ATestFixtureType ) \ private: \ - typedef ATestFixtureType __ThisTestFixtureType; \ + typedef ATestFixtureType ThisTestFixtureType; \ class __ThisTestFixtureFactory : public CppUnit::TestFixtureFactory \ { \ virtual CppUnit::TestFixture *makeFixture() \ @@ -125,12 +125,28 @@ namespace CppUnit return testNamer; \ } \ public: \ + class ThisTestFixtureFactory \ + { \ + public: \ + ThisTestFixtureFactory( CppUnit::TestFixtureFactory *factory ) \ + : m_factory( factory ) \ + { \ + } \ + ThisTestFixtureType *makeFixture() const \ + { \ + return (ThisTestFixtureType *)m_factory->makeFixture(); \ + } \ + private: \ + CppUnit::TestFixtureFactory *m_factory; \ + }; \ + \ static void \ __registerTests( CppUnit::TestSuite *suite, \ - CppUnit::TestFixtureFactory *factory, \ + CppUnit::TestFixtureFactory *fixtureFactory, \ const CppUnit::TestNamer &namer ) \ { \ - CppUnit::TestSuiteBuilder<__ThisTestFixtureType> builder( suite, namer ) + const ThisTestFixtureFactory factory( fixtureFactory ); \ + CppUnit::TestSuiteBuilder<ThisTestFixtureType> builder( suite, namer ) /*! \brief Begin test suite (includes parent suite) @@ -167,7 +183,7 @@ namespace CppUnit private: \ typedef ASuperClass __ThisSuperClassType; \ CPPUNIT_TEST_SUITE( ATestFixtureType ); \ - __ThisSuperClassType::__registerTests( suite, factory, namer ) + __ThisSuperClassType::__registerTests( suite, fixtureFactory, namer ) /*! \brief Add a method to the suite. @@ -178,9 +194,57 @@ namespace CppUnit */ #define CPPUNIT_TEST( testMethod ) \ builder.addTestCaller( #testMethod, \ - &__ThisTestFixtureType::testMethod , \ - (__ThisTestFixtureType*)factory->makeFixture() ) + &ThisTestFixtureType::testMethod , \ + factory.makeFixture() ) +/*! \brief Add a test to the suite (for custom test macro). + * + * The specified test will be added to the test suite being declared. This macro + * is intended for \e advanced usage, to extend %CppUnit by creating new macro such + * as CPPUNIT_TEST_EXCEPTION()... + * + * Between macro CPPUNIT_TEST_SUITE() and CPPUNIT_TEST_SUITE_END(), you can assume + * that the following variables can be used: + * \code + * const ThisTestFixtureFactory &factory; + * const CppUnit::TestNamer &namer; + * \endcode + * + * \c factory can be used to create a new instance of the TestFixture type + * specified in CPPUNIT_TEST_SUITE(): + * \code + * factory.makeFixture()\endcode + * + * Below is an example that show how to use this macro to create new macro to add + * test to the fixture suite. The macro below show how you would add a new type + * of test case which fails if the execution last more than a given time limit. + * It relies on an imaginary TimeOutTestCaller class which has an interface similar + * to TestCaller. + * + * \code + * #define CPPUNITEX_TEST_TIMELIMIT( testMethod, timeLimit ) \ + * CPPUNIT_TEST_ADD( (new TimeOutTestCaller<ThisTestFixtureType>( \ + * namer.getTestNameFor( #testMethod ), \ + * &ThisTestFixtureType::testMethod, \ + * factory.makeFixture(), \ + * timeLimit ) ) ) + * + * class PerformanceTest : CppUnit::TestFixture + * { + * public: + * CPPUNIT_TEST_SUITE( PerformanceTest ); + * CPPUNITEX_TEST_TIMELIMIT( testSortReverseOrder, 5.0 ); + * CPPUNIT_TEST_SUITE_END(); + * + * void testSortReverseOrder(); + * }; + * \endcode + * + * \param test Test to add to the suite. Must be a subclass of Test. The test name + * should have been obtained using TestNamer::getTestNameFor(). + */ +#define CPPUNIT_TEST_ADD( test ) \ + builder.addTest( test ) /*! \brief Add a test which fail if the specified exception is not caught. * @@ -205,13 +269,12 @@ namespace CppUnit * \param ExceptionType Type of the exception that must be thrown by the test * method. */ -#define CPPUNIT_TEST_EXCEPTION( testMethod, ExceptionType ) \ - builder.addTest( new CppUnit::TestCaller<__ThisTestFixtureType, \ - ExceptionType>( \ - namer.getTestNameFor( #testMethod ), \ - &__ThisTestFixtureType::testMethod, \ - (__ThisTestFixtureType*)factory->makeFixture() ) ) - +#define CPPUNIT_TEST_EXCEPTION( testMethod, ExceptionType ) \ + CPPUNIT_TEST_ADD( (new CppUnit::TestCaller<ThisTestFixtureType, \ + ExceptionType>( \ + namer.getTestNameFor( #testMethod ), \ + &ThisTestFixtureType::testMethod, \ + factory.makeFixture() ) ) ) /*! \brief Adds a test case which is excepted to fail. * @@ -233,13 +296,17 @@ namespace CppUnit /*! \brief Adds a custom test case. * - * Use this to add a custom test case. The specified method must have the following - * signature: + * Use this to add a test case that is returned by a given method to the fixture + * suite. The specified method must have the following signature: * \code - * static CppUnit::Test *makeCustomTest( CppUnit::TestFixtureFactory *factory, + * static CppUnit::Test *makeCustomTest( const ThisTestFixtureFactory &factory, * const CppUnit::TestNamer &namer ); * \endcode * + * \c ThisTestFixtureFactory is a class declared by CPPUNIT_TEST_SUITE(). It has a method + * \c makeFixture() which returns a pointer on a new fixture of the type passed to + * CPPUNIT_TEST_SUITE(). + * * Here is an example that add a custom test: * * \code @@ -250,12 +317,12 @@ namespace CppUnit * CPPUNIT_TEST_CUSTOM( makeTimeOutTest1 ); * CPPUNIT_TEST_SUITE_END(); * public: - * static CppUnit::Test *makeTimeOutTest1( CppUnit::TestFixtureFactory *factory, + * static CppUnit::Test *makeTimeOutTest1( const ThisTestFixtureFactory &factory, * const CppUnit::TestNamer &namer ) * { * return new TimeOutTestCaller( namer.getTestNameFor( "test1" ), * &MyTest::test1, - * (MyTest*)factory->makeFixture(), + * factory.makeFixture(), * 5.0 ); * } * @@ -271,12 +338,12 @@ namespace CppUnit /*! \brief Adds some custom test cases. * - * Use this to add many custom test cases. The specified method must have the following - * signature: + * Use this to add many custom test cases to the fixture suite. The specified method + * must have the following signature: * \code - * static CppUnit::Test *makeCustomTest( CppUnit::TestSuite *suite, \ - * CppUnit::TestFixtureFactory *factory, - * const CppUnit::TestNamer &namer ); + * static void addCustomTests( CppUnit::TestSuite *suite, + * const ThisTestFixtureFactory &factory, + * const CppUnit::TestNamer &namer ); * \endcode * * Here is an example that add two custom tests: @@ -286,20 +353,20 @@ namespace CppUnit * * class MyTest : public CppUnit::TestFixture { * CPPUNIT_TEST_SUITE( MyTest ); - * CPPUNIT_TEST_CUSTOMs( addTimeOutTests ); + * CPPUNIT_TEST_CUSTOMS( addTimeOutTests ); * CPPUNIT_TEST_SUITE_END(); * public: - * static CppUnit::Test *makeTimeOutTest( CppUnit::TestSuite *suite, \ - * CppUnit::TestFixtureFactory *factory, - * const CppUnit::TestNamer &namer ) + * static void addTimeOutTests( CppUnit::TestSuite *suite, \ + * const ThisTestFixtureFactory &factory, + * const CppUnit::TestNamer &namer ) * { * suite->addTest( new TimeOutTestCaller( namer.getTestNameFor( "test1" ) ), * &MyTest::test1, - * (MyTest*)factory->makeFixture(), + * factory.makeFixture(), * 5.0 ); * suite->addTest( new TimeOutTestCaller( namer.getTestNameFor( "test2" ) ), * &MyTest::test2, - * (MyTest*)factory->makeFixture(), + * factory.makeFixture(), * 5.0 ); * } * @@ -318,6 +385,7 @@ namespace CppUnit #define CPPUNIT_TEST_CUSTOMS( testAdderMethod ) \ testAdderMethod( suite, factory, namer ) + /*! \brief End declaration of the test suite. * * After this macro, member access is set to "private". @@ -331,9 +399,9 @@ namespace CppUnit static CppUnit::TestSuite *suite() \ { \ const CppUnit::TestNamer &namer = __getTestNamer(); \ - CppUnit::TestSuiteBuilder<__ThisTestFixtureType> builder( namer ); \ + CppUnit::TestSuiteBuilder<ThisTestFixtureType> builder( namer ); \ __ThisTestFixtureFactory factory; \ - __ThisTestFixtureType::__registerTests( builder.suite(), &factory, namer ); \ + ThisTestFixtureType::__registerTests( builder.suite(), &factory, namer ); \ return builder.takeSuite(); \ } \ private: /* dummy typedef so that the macro can still end with ';'*/ \ |
