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