1132718Skan#ifndef CPPUNIT_EXTENSIONS_TESTDECORATOR_H 2169689Skan#define CPPUNIT_EXTENSIONS_TESTDECORATOR_H 390075Sobrien 490075Sobrien#include <cppunit/Portability.h> 590075Sobrien#include <cppunit/Test.h> 690075Sobrien 790075Sobriennamespace CppUnit { 890075Sobrien 990075Sobrienclass TestResult; 1090075Sobrien 1190075Sobrien 1290075Sobrien/*! \brief Decorator for Tests. 1390075Sobrien * 1490075Sobrien * TestDecorator provides an alternate means to extend functionality 1590075Sobrien * of a test class without subclassing the test. Instead, one can 1690075Sobrien * subclass the decorater and use it to wrap the test class. 1790075Sobrien * 1890075Sobrien * Does not assume ownership of the test it decorates 19169689Skan */ 20169689Skanclass CPPUNIT_API TestDecorator : public Test 2190075Sobrien{ 2290075Sobrienpublic: 2390075Sobrien TestDecorator (Test *test); 2490075Sobrien ~TestDecorator (); 2590075Sobrien 26132718Skan void run (TestResult *result); 27132718Skan int countTestCases () const; 2890075Sobrien std::string getName () const; 2990075Sobrien std::string toString () const; 3090075Sobrien 3190075Sobrienprotected: 3290075Sobrien Test *m_test; 3390075Sobrien 3490075Sobrienprivate: 3590075Sobrien TestDecorator( const TestDecorator &); 36132718Skan void operator =( const TestDecorator & ); 37169689Skan}; 3890075Sobrien 39132718Skan 40132718Skaninline TestDecorator::TestDecorator (Test *test) 41132718Skan{ m_test = test; } 4290075Sobrien 4390075Sobrien 4490075Sobrieninline TestDecorator::~TestDecorator () 45132718Skan{} 4690075Sobrien 4790075Sobrien 4890075Sobrieninline int TestDecorator::countTestCases () const 4990075Sobrien{ return m_test->countTestCases (); } 5090075Sobrien 5190075Sobrien 5290075Sobrieninline void TestDecorator::run (TestResult *result) 5390075Sobrien{ m_test->run (result); } 5490075Sobrien 5590075Sobrien 5690075Sobrieninline std::string TestDecorator::toString () const 5790075Sobrien{ return m_test->toString (); } 5890075Sobrien 5990075Sobrien 6090075Sobrieninline std::string TestDecorator::getName () const 6190075Sobrien{ return m_test->getName(); } 62169689Skan 63169689Skan} // namespace CppUnit 64169689Skan 6590075Sobrien#endif 66132718Skan 67132718Skan